{
  "version": 3,
  "sources": ["../../../src/app/ICreatorToolsData.ts", "../../../src/storage/IFile.ts", "../../../src/app/IProjectData.ts", "../../../src/app/IProjectItemData.ts", "../../../node_modules/ste-core/dist/dispatching/DispatcherBase.js", "../../../node_modules/ste-core/dist/dispatching/DispatchError.js", "../../../node_modules/ste-core/dist/dispatching/DispatcherWrapper.js", "../../../node_modules/ste-core/dist/dispatching/EventListBase.js", "../../../node_modules/ste-core/dist/management/EventManagement.js", "../../../node_modules/ste-core/dist/handling/HandlingBase.js", "../../../node_modules/ste-core/dist/dispatching/PromiseDispatcherBase.js", "../../../node_modules/ste-core/dist/events/PromiseSubscription.js", "../../../node_modules/ste-core/dist/events/Subscription.js", "../../../node_modules/ste-core/dist/dispatching/SubscriptionChangeEventHandler.js", "../../../node_modules/ste-core/dist/index.js", "../../../node_modules/ste-events/dist/EventDispatcher.js", "../../../node_modules/ste-events/dist/EventList.js", "../../../node_modules/ste-events/dist/EventHandlingBase.js", "../../../node_modules/ste-events/dist/NonUniformEventList.js", "../../../node_modules/ste-events/dist/index.js", "../../../src/storage/IFileDifference.ts", "../../../src/storage/IFolderDifference.ts", "../../../node_modules/process-nextick-args/index.js", "../../../node_modules/readable-stream/node_modules/isarray/index.js", "../../../node_modules/readable-stream/lib/internal/streams/stream.js", "../../../node_modules/readable-stream/node_modules/safe-buffer/index.js", "../../../node_modules/core-util-is/lib/util.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/inherits/inherits.js", "../../../node_modules/readable-stream/lib/internal/streams/BufferList.js", "../../../node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/util-deprecate/node.js", "../../../node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/string_decoder/node_modules/safe-buffer/index.js", "../../../node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/readable-stream/readable.js", "../../../node_modules/jszip/lib/support.js", "../../../node_modules/jszip/lib/base64.js", "../../../node_modules/jszip/lib/nodejsUtils.js", "../../../node_modules/immediate/lib/index.js", "../../../node_modules/lie/lib/index.js", "../../../node_modules/jszip/lib/external.js", "../../../node_modules/setimmediate/setImmediate.js", "../../../node_modules/jszip/lib/utils.js", "../../../node_modules/jszip/lib/stream/GenericWorker.js", "../../../node_modules/jszip/lib/utf8.js", "../../../node_modules/jszip/lib/stream/ConvertWorker.js", "../../../node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js", "../../../node_modules/jszip/lib/stream/StreamHelper.js", "../../../node_modules/jszip/lib/defaults.js", "../../../node_modules/jszip/lib/stream/DataWorker.js", "../../../node_modules/jszip/lib/crc32.js", "../../../node_modules/jszip/lib/stream/Crc32Probe.js", "../../../node_modules/jszip/lib/stream/DataLengthProbe.js", "../../../node_modules/jszip/lib/compressedObject.js", "../../../node_modules/jszip/lib/zipObject.js", "../../../node_modules/jszip/node_modules/pako/lib/utils/common.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/trees.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/adler32.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/crc32.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/messages.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/deflate.js", "../../../node_modules/jszip/node_modules/pako/lib/utils/strings.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/zstream.js", "../../../node_modules/jszip/node_modules/pako/lib/deflate.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/inffast.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/inftrees.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/inflate.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/constants.js", "../../../node_modules/jszip/node_modules/pako/lib/zlib/gzheader.js", "../../../node_modules/jszip/node_modules/pako/lib/inflate.js", "../../../node_modules/jszip/node_modules/pako/index.js", "../../../node_modules/jszip/lib/flate.js", "../../../node_modules/jszip/lib/compressions.js", "../../../node_modules/jszip/lib/signature.js", "../../../node_modules/jszip/lib/generate/ZipFileWorker.js", "../../../node_modules/jszip/lib/generate/index.js", "../../../node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js", "../../../node_modules/jszip/lib/object.js", "../../../node_modules/jszip/lib/reader/DataReader.js", "../../../node_modules/jszip/lib/reader/ArrayReader.js", "../../../node_modules/jszip/lib/reader/StringReader.js", "../../../node_modules/jszip/lib/reader/Uint8ArrayReader.js", "../../../node_modules/jszip/lib/reader/NodeBufferReader.js", "../../../node_modules/jszip/lib/reader/readerFor.js", "../../../node_modules/jszip/lib/zipEntry.js", "../../../node_modules/jszip/lib/zipEntries.js", "../../../node_modules/jszip/lib/load.js", "../../../node_modules/jszip/lib/index.js", "../../../src/storage/IStorage.ts", "../../../node_modules/js-md5/src/md5.js", "../../../src/dataform/IField.ts", "../../../src/core/AppServiceProxy.ts", "../../../node_modules/jsonify/lib/parse.js", "../../../node_modules/jsonify/lib/stringify.js", "../../../node_modules/jsonify/index.js", "../../../node_modules/isarray/index.js", "../../../node_modules/object-keys/isArguments.js", "../../../node_modules/object-keys/implementation.js", "../../../node_modules/object-keys/index.js", "../../../node_modules/es-object-atoms/index.js", "../../../node_modules/es-errors/index.js", "../../../node_modules/es-errors/eval.js", "../../../node_modules/es-errors/range.js", "../../../node_modules/es-errors/ref.js", "../../../node_modules/es-errors/syntax.js", "../../../node_modules/es-errors/type.js", "../../../node_modules/es-errors/uri.js", "../../../node_modules/math-intrinsics/abs.js", "../../../node_modules/math-intrinsics/floor.js", "../../../node_modules/math-intrinsics/max.js", "../../../node_modules/math-intrinsics/min.js", "../../../node_modules/math-intrinsics/pow.js", "../../../node_modules/math-intrinsics/round.js", "../../../node_modules/math-intrinsics/isNaN.js", "../../../node_modules/math-intrinsics/sign.js", "../../../node_modules/gopd/gOPD.js", "../../../node_modules/gopd/index.js", "../../../node_modules/es-define-property/index.js", "../../../node_modules/has-symbols/shams.js", "../../../node_modules/has-symbols/index.js", "../../../node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../node_modules/get-proto/Object.getPrototypeOf.js", "../../../node_modules/function-bind/implementation.js", "../../../node_modules/function-bind/index.js", "../../../node_modules/call-bind-apply-helpers/functionCall.js", "../../../node_modules/call-bind-apply-helpers/functionApply.js", "../../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../../node_modules/call-bind-apply-helpers/actualApply.js", "../../../node_modules/call-bind-apply-helpers/index.js", "../../../node_modules/dunder-proto/get.js", "../../../node_modules/get-proto/index.js", "../../../node_modules/hasown/index.js", "../../../node_modules/get-intrinsic/index.js", "../../../node_modules/define-data-property/index.js", "../../../node_modules/has-property-descriptors/index.js", "../../../node_modules/set-function-length/index.js", "../../../node_modules/call-bind-apply-helpers/applyBind.js", "../../../node_modules/call-bind/index.js", "../../../node_modules/call-bound/index.js", "../../../node_modules/json-stable-stringify/index.js", "../../../src/core/Utilities.ts", "../../../node_modules/esprima/dist/esprima.js", "../../../node_modules/array-timsort/src/index.js", "../../../node_modules/comment-json/src/common.js", "../../../node_modules/comment-json/src/array.js", "../../../node_modules/comment-json/src/parse.js", "../../../node_modules/comment-json/src/stringify.js", "../../../node_modules/comment-json/src/index.js", "../../../src/core/JsonUtilities.ts", "../../../src/storage/FileBase.ts", "../../../src/storage/ZipFile.ts", "../../../src/storage/AllFolderFileIterator.ts", "../../../src/storage/FolderBase.ts", "../../../src/storage/ZipFolder.ts", "../../../src/storage/StorageBase.ts", "../../../src/core/SecurityUtilities.ts", "../../../src/storage/ZipStorage.ts", "../../../src/storage/DifferenceSet.ts", "../../../src/storage/File.ts", "../../../src/storage/Folder.ts", "../../../src/storage/Storage.ts", "../../../node_modules/obscenity/dist/util/Char.js", "../../../node_modules/obscenity/dist/censor/BuiltinStrategies.js", "../../../node_modules/obscenity/dist/util/Interval.js", "../../../node_modules/obscenity/dist/matcher/MatchPayload.js", "../../../node_modules/obscenity/dist/censor/TextCensor.js", "../../../node_modules/obscenity/dist/matcher/BlacklistedTerm.js", "../../../node_modules/obscenity/dist/dataset/DataSet.js", "../../../node_modules/obscenity/dist/pattern/Nodes.js", "../../../node_modules/obscenity/dist/pattern/Util.js", "../../../node_modules/obscenity/dist/transformer/TransformerSet.js", "../../../node_modules/obscenity/dist/util/CharacterIterator.js", "../../../node_modules/obscenity/dist/matcher/IntervalCollection.js", "../../../node_modules/obscenity/dist/matcher/regexp/RegExpMatcher.js", "../../../node_modules/obscenity/dist/matcher/Matcher.js", "../../../node_modules/obscenity/dist/pattern/ParserError.js", "../../../node_modules/obscenity/dist/pattern/Parser.js", "../../../node_modules/obscenity/dist/pattern/Pattern.js", "../../../node_modules/obscenity/dist/transformer/Transformers.js", "../../../node_modules/obscenity/dist/transformer/collapse-duplicates/transformer.js", "../../../node_modules/obscenity/dist/transformer/collapse-duplicates/index.js", "../../../node_modules/obscenity/dist/transformer/remap-characters/index.js", "../../../node_modules/obscenity/dist/transformer/resolve-confusables/confusables.js", "../../../node_modules/obscenity/dist/transformer/resolve-confusables/index.js", "../../../node_modules/obscenity/dist/transformer/resolve-leetspeak/dictionary.js", "../../../node_modules/obscenity/dist/transformer/resolve-leetspeak/index.js", "../../../node_modules/obscenity/dist/transformer/to-ascii-lowercase/index.js", "../../../node_modules/obscenity/dist/preset/english.js", "../../../node_modules/obscenity/dist/transformer/skip-non-alphabetic/index.js", "../../../node_modules/obscenity/dist/index.js", "../../../node_modules/obscenity/dist/index.mjs", "../../../src/storage/BasicValidators.ts", "../../../src/storage/StorageUtilities.ts", "../../../src/script/ScriptGen.ts", "../../../src/minecraft/ManagedComponent.ts", "../../../src/minecraft/ManagedComponentGroup.ts", "../../../node_modules/axios/lib/helpers/bind.js", "../../../node_modules/axios/lib/utils.js", "../../../node_modules/axios/lib/core/AxiosError.js", "../../../node_modules/delayed-stream/lib/delayed_stream.js", "../../../node_modules/combined-stream/lib/combined_stream.js", "../../../node_modules/form-data/node_modules/mime-db/db.json", "../../../node_modules/form-data/node_modules/mime-db/index.js", "../../../node_modules/form-data/node_modules/mime-types/index.js", "../../../node_modules/asynckit/lib/defer.js", "../../../node_modules/asynckit/lib/async.js", "../../../node_modules/asynckit/lib/abort.js", "../../../node_modules/asynckit/lib/iterate.js", "../../../node_modules/asynckit/lib/state.js", "../../../node_modules/asynckit/lib/terminator.js", "../../../node_modules/asynckit/parallel.js", "../../../node_modules/asynckit/serialOrdered.js", "../../../node_modules/asynckit/serial.js", "../../../node_modules/asynckit/index.js", "../../../node_modules/has-tostringtag/shams.js", "../../../node_modules/es-set-tostringtag/index.js", "../../../node_modules/form-data/lib/populate.js", "../../../node_modules/form-data/lib/form_data.js", "../../../node_modules/axios/lib/platform/node/classes/FormData.js", "../../../node_modules/axios/lib/helpers/toFormData.js", "../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/axios/lib/defaults/transitional.js", "../../../node_modules/axios/lib/platform/node/classes/URLSearchParams.js", "../../../node_modules/axios/lib/platform/node/index.js", "../../../node_modules/axios/lib/platform/common/utils.js", "../../../node_modules/axios/lib/platform/index.js", "../../../node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../node_modules/axios/lib/helpers/formDataToJSON.js", "../../../node_modules/axios/lib/defaults/index.js", "../../../node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/axios/lib/core/AxiosHeaders.js", "../../../node_modules/axios/lib/core/transformData.js", "../../../node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/axios/lib/cancel/CanceledError.js", "../../../node_modules/axios/lib/core/settle.js", "../../../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/proxy-from-env/index.js", "../../../node_modules/ms/index.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/follow-redirects/debug.js", "../../../node_modules/follow-redirects/index.js", "../../../node_modules/axios/lib/env/data.js", "../../../node_modules/axios/lib/helpers/parseProtocol.js", "../../../node_modules/axios/lib/helpers/fromDataURI.js", "../../../node_modules/axios/lib/helpers/AxiosTransformStream.js", "../../../node_modules/axios/lib/helpers/readBlob.js", "../../../node_modules/axios/lib/helpers/formDataToStream.js", "../../../node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js", "../../../node_modules/axios/lib/helpers/callbackify.js", "../../../node_modules/axios/lib/helpers/shouldBypassProxy.js", "../../../node_modules/axios/lib/helpers/speedometer.js", "../../../node_modules/axios/lib/helpers/throttle.js", "../../../node_modules/axios/lib/helpers/progressEventReducer.js", "../../../node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js", "../../../node_modules/axios/lib/adapters/http.js", "../../../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/axios/lib/helpers/resolveConfig.js", "../../../node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/axios/lib/helpers/composeSignals.js", "../../../node_modules/axios/lib/helpers/trackStream.js", "../../../node_modules/axios/lib/adapters/fetch.js", "../../../node_modules/axios/lib/adapters/adapters.js", "../../../node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/axios/lib/helpers/validator.js", "../../../node_modules/axios/lib/core/Axios.js", "../../../node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/axios/lib/helpers/spread.js", "../../../node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/axios/lib/helpers/HttpStatusCode.js", "../../../node_modules/axios/lib/axios.js", "../../../node_modules/axios/index.js", "../../../src/minecraft/BlockRenderType.ts", "../../../node_modules/exifr/dist/full.umd.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/assert.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/byteStreamReader.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/text.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/validate.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/decode/decoder.js", "../../../node_modules/@lunapaint/tga-codec/out-dist/public/tga.js", "../../../src/core/ImageCodec.ts", "../../../src/minecraft/TextureDefinition.ts", "../../../src/minecraft/ItemTextureCatalogDefinition.ts", "../../../src/minecraft/INbtTag.ts", "../../../src/minecraft/NbtBinaryTag.ts", "../../../src/minecraft/IBlockTypePropertyData.ts", "../../../src/minecraft/BlockProperty.ts", "../../../src/minecraft/components/IntAttributeComponent.ts", "../../../src/minecraft/components/FloatAttributeComponent.ts", "../../../src/minecraft/ComponentProperty.ts", "../../../src/minecraft/ComponentizedBase.ts", "../../../src/minecraft/Block.ts", "../../../src/minecraft/BlockVolumeLine.ts", "../../../src/minecraft/BlockVolumePlane.ts", "../../../src/minecraft/BlockLocation.ts", "../../../src/minecraft/Location.ts", "../../../src/minecraft/Rotation.ts", "../../../src/minecraft/Entity.ts", "../../../src/minecraft/BlockVolume.ts", "../../../src/core/DataUtilities.ts", "../../../src/minecraft/NbtBinary.ts", "../../../src/minecraft/InventorySlot.ts", "../../../src/minecraft/ComponentBase.ts", "../../../src/minecraft/components/EntityInventoryComponent.ts", "../../../src/minecraft/Structure.ts", "../../../src/app/ProjectContent.ts", "../../../src/minecraft/ResourceManifestDefinition.ts", "../../../src/minecraft/BehaviorManifestDefinition.ts", "../../../src/minecraft/SkinManifestDefinition.ts", "../../../src/minecraft/PersonaManifestDefinition.ts", "../../../src/minecraft/DesignManifestDefinition.ts", "../../../src/minecraft/Pack.ts", "../../../src/devproject/NpmPackageDefinition.ts", "../../../src/minecraft/IMolangNode.ts", "../../../src/minecraft/MolangNode.ts", "../../../src/minecraft/Molang.ts", "../../../src/minecraft/ManagedPermutation.ts", "../../../src/minecraft/ModelGeometryDefinition.ts", "../../../node_modules/esprima-next/dist/esprima.js", "../../../src/core/ContentIndex.ts", "../../../src/minecraft/BlocksCatalogDefinition.ts", "../../../src/minecraft/TerrainTextureCatalogDefinition.ts", "../../../src/minecraft/TypeScriptDefinition.ts", "../../../src/minecraft/BlockTypeDefinition.ts", "../../../src/info/IInfoItemData.ts", "../../../src/info/ProjectInfoItem.ts", "../../../src/updates/IUpdateResult.ts", "../../../src/updates/ProjectUpdateResult.ts", "../../../src/devproject/EnvSettings.ts", "../../../src/manager/ScriptModuleManager.ts", "../../../src/devproject/VsCodeTasksDefinition.ts", "../../../src/devproject/VsCodeLaunchDefinition.ts", "../../../src/manager/VsCodeFileManager.ts", "../../../src/minecraft/WorldTemplateManifestDefinition.ts", "../../../src/core/versioning/SemanticVersion.ts", "../../../src/core/versioning/MinecraftVersionRules.ts", "../../../src/manager/MinEngineVersionManager.ts", "../../../src/manager/BaseGameVersionManager.ts", "../../../src/info/PackMetaDataInfoGenerator.ts", "../../../src/info/CooperativeAddOnRequirementsGenerator.ts", "../../../src/minecraft/AnimationResourceDefinition.ts", "../../../src/dataform/DataFormProcessor.ts", "../../../src/minecraft/RenderControllerSetDefinition.ts", "../../../src/minecraft/AnimationBehaviorDefinition.ts", "../../../src/minecraft/AnimationControllerBehaviorDefinition.ts", "../../../src/minecraft/AnimationControllerResourceDefinition.ts", "../../../src/minecraft/BiomeBehaviorDefinition.ts", "../../../src/minecraft/BiomeResourceDefinition.ts", "../../../src/minecraft/EntityTypeResourceDefinition.ts", "../../../src/minecraft/FlipbookTextureCatalogDefinition.ts", "../../../src/minecraft/JigsawProcessorListDefinition.ts", "../../../src/minecraft/JigsawTemplatePoolDefinition.ts", "../../../src/minecraft/JigsawStructureDefinition.ts", "../../../src/minecraft/JigsawStructureSetDefinition.ts", "../../../src/minecraft/MusicDefinitionCatalogDefinition.ts", "../../../src/minecraft/SoundCatalogDefinition.ts", "../../../src/minecraft/TextureSetDefinition.ts", "../../../src/minecraft/MinecraftDefinitions.ts", "../../../src/minecraft/AttachableResourceDefinition.ts", "../../../src/minecraft/ItemTypeDefinition.ts", "../../../src/info/StrictPlatformInfoGenerator.ts", "../../../src/minecraft/Material.ts", "../../../src/info/CooperativeAddOnItemRequirementsGenerator.ts", "../../../src/info/PathLengthFileGenerator.ts", "../../../src/info/ItemCountsInfoGenerator.ts", "../../../src/info/IProjectInfoData.ts", "../../../src/core/Constants.ts", "../../../src/app/Status.ts", "../../../src/info/SummaryInfoGenerator.ts", "../../../src/core/HashUtilities.ts", "../../../src/analytics/TelemetryConstants.ts", "../../../src/analytics/Telemetry.ts", "../../../src/info/InfoGeneratorTopicUtilities.ts", "../../../src/minecraft/ParticleEffectResourceDefinition.ts", "../../../src/minecraft/FogResourceDefinition.ts", "../../../src/minecraft/RecipeBehaviorDefinition.ts", "../../../src/minecraft/SpawnRulesBehaviorDefinition.ts", "../../../src/info/CrossReferenceIndexGenerator.ts", "../../../src/minecraft/FeatureDefinition.ts", "../../../src/info/TypesInfoGenerator.ts", "../../../src/info/ProjectInfoSet.ts", "../../../src/info/ProjectInfoUtilities.ts", "../../../src/info/PackInfoGenerator.ts", "../../../src/info/LineSizeInfoGenerator.ts", "../../../src/dataform/ICondition.ts", "../../../src/dataform/ISummarizerToken.ts", "../../../src/dataform/SummarizerEvaluator.ts", "../../../src/dataform/DataFormUtilities.ts", "../../../src/dataform/FieldUtilities.ts", "../../../src/dataform/DataFormValidator.ts", "../../../src/info/FormSchemaItemInfoGenerator.ts", "../../../src/info/UnknownItemGenerator.ts", "../../../src/info/UnknownFileGenerator.ts", "../../../src/minecraft/WorldLevelDat.ts", "../../../node_modules/pako/dist/pako.esm.mjs", "../../../src/minecraft/Varint.ts", "../../../src/minecraft/LevelKeyValue.ts", "../../../src/minecraft/LevelDbIndex.ts", "../../../src/minecraft/LevelDb.ts", "../../../src/minecraft/BlockPalette.ts", "../../../src/minecraft/blockActors/BlockActor.ts", "../../../src/minecraft/blockActors/GenericBlockActor.ts", "../../../src/minecraft/blockActors/ChestBlockActor.ts", "../../../src/minecraft/blockActors/BedBlockActor.ts", "../../../src/minecraft/blockActors/FrameBlockActor.ts", "../../../src/minecraft/blockActors/NoteBlockActor.ts", "../../../src/minecraft/blockActors/SignBlockActor.ts", "../../../src/minecraft/blockActors/StructureBlockActor.ts", "../../../src/minecraft/blockActors/CauldronBlockActor.ts", "../../../src/minecraft/blockActors/CampfireBlockActor.ts", "../../../src/minecraft/blockActors/BeehiveBlockActor.ts", "../../../src/minecraft/blockActors/CommandBlockActor.ts", "../../../src/minecraft/blockActors/MobSpawnerBlockActor.ts", "../../../src/minecraft/blockActors/HopperBlockActor.ts", "../../../src/minecraft/blockActors/ComparatorBlockActor.ts", "../../../src/minecraft/blockActors/BlockActorFactory.ts", "../../../src/minecraft/ChunkEntity.ts", "../../../src/minecraft/WorldChunk.ts", "../../../src/minecraft/Anchor.ts", "../../../src/minecraft/AnchorSet.ts", "../../../src/minecraft/ActorItem.ts", "../../../src/minecraft/WorldChunkCache.ts", "../../../src/minecraft/MCWorld.ts", "../../../src/info/WorldItemInfoGenerator.ts", "../../../src/info/JsonFileTagsInfoGenerator.ts", "../../../src/app/CommandStructure.ts", "../../../src/app/ICommand.ts", "../../../src/app/toolcommands/IToolCommand.ts", "../../../src/app/toolcommands/IToolCommandContext.ts", "../../../src/app/toolcommands/ToolCommandParser.ts", "../../../src/app/toolcommands/ToolCommandRegistry.ts", "../../../src/app/IGalleryItem.ts", "../../../src/app/toolcommands/AutocompleteProviders.ts", "../../../src/app/toolcommands/commands/HelpCommand.ts", "../../../src/github/GitHubFile.ts", "../../../src/github/GitHubFolder.ts", "../../../src/github/GitHubStorage.ts", "../../../src/storage/HttpFile.ts", "../../../src/storage/HttpFolder.ts", "../../../src/storage/HttpStorage.ts", "../../../src/app/ProjectBuild.ts", "../../../src/app/gallery/GalleryReader.ts", "../../../src/app/ProjectExporter.ts", "../../../src/app/toolcommands/commands/CreateCommand.ts", "../../../src/minecraft/PngEncoder.ts", "../../../src/minecraft/ItemTextureTemplates.ts", "../../../src/minecraft/traits/ContentTraits.ts", "../../../src/minecraft/traits/HumanoidEntityTrait.ts", "../../../src/minecraft/traits/QuadrupedEntityTrait.ts", "../../../src/minecraft/traits/QuadrupedSmallEntityTrait.ts", "../../../src/minecraft/traits/FlyingEntityTrait.ts", "../../../src/minecraft/traits/AquaticEntityTrait.ts", "../../../src/minecraft/traits/ArthropodEntityTrait.ts", "../../../src/minecraft/traits/SlimeEntityTrait.ts", "../../../src/minecraft/traits/HostileEntityTrait.ts", "../../../src/minecraft/traits/PassiveEntityTrait.ts", "../../../src/minecraft/traits/NeutralEntityTrait.ts", "../../../src/minecraft/traits/BossEntityTrait.ts", "../../../src/minecraft/traits/WandersEntityTrait.ts", "../../../src/minecraft/traits/FleesDaylightEntityTrait.ts", "../../../src/minecraft/traits/MeleeAttackerEntityTrait.ts", "../../../src/minecraft/traits/RangedAttackerEntityTrait.ts", "../../../src/minecraft/traits/ExploderEntityTrait.ts", "../../../src/minecraft/traits/TameableEntityTrait.ts", "../../../src/minecraft/traits/RideableEntityTrait.ts", "../../../src/minecraft/traits/BreedableEntityTrait.ts", "../../../src/minecraft/traits/LeasableEntityTrait.ts", "../../../src/minecraft/traits/TraderEntityTrait.ts", "../../../src/minecraft/traits/UndeadEntityTrait.ts", "../../../src/minecraft/traits/BabyVariantEntityTrait.ts", "../../../src/minecraft/traits/TeleporterEntityTrait.ts", "../../../src/minecraft/traits/StoneMaterialBlockTrait.ts", "../../../src/minecraft/traits/WoodMaterialBlockTrait.ts", "../../../src/minecraft/traits/MetalMaterialBlockTrait.ts", "../../../src/minecraft/traits/SoftMaterialBlockTrait.ts", "../../../src/minecraft/traits/DoorBlockTrait.ts", "../../../src/minecraft/traits/TrapdoorBlockTrait.ts", "../../../src/minecraft/traits/ButtonBlockTrait.ts", "../../../src/minecraft/traits/LeverBlockTrait.ts", "../../../src/minecraft/traits/CraftingStationBlockTrait.ts", "../../../src/minecraft/traits/RedstoneProducerBlockTrait.ts", "../../../src/minecraft/traits/RotatableHorizontalBlockTrait.ts", "../../../src/minecraft/traits/RotatableAllBlockTrait.ts", "../../../src/minecraft/traits/SlabBlockTrait.ts", "../../../src/minecraft/traits/StairsBlockTrait.ts", "../../../src/minecraft/traits/FenceBlockTrait.ts", "../../../src/minecraft/traits/LightSourceBlockTrait.ts", "../../../src/minecraft/traits/VariableLightBlockTrait.ts", "../../../src/minecraft/traits/PassableBlockTrait.ts", "../../../src/minecraft/traits/TransparentBlockTrait.ts", "../../../src/minecraft/traits/GravityAffectedBlockTrait.ts", "../../../src/minecraft/traits/CropBlockTrait.ts", "../../../src/minecraft/traits/FlammableBlockTrait.ts", "../../../src/minecraft/traits/ExplosionResistantBlockTrait.ts", "../../../src/minecraft/traits/SlipperyBlockTrait.ts", "../../../src/minecraft/traits/SwordItemTrait.ts", "../../../src/minecraft/traits/PickaxeItemTrait.ts", "../../../src/minecraft/traits/AxeItemTrait.ts", "../../../src/minecraft/traits/ShovelItemTrait.ts", "../../../src/minecraft/traits/HoeItemTrait.ts", "../../../src/minecraft/traits/HelmetItemTrait.ts", "../../../src/minecraft/traits/ChestplateItemTrait.ts", "../../../src/minecraft/traits/LeggingsItemTrait.ts", "../../../src/minecraft/traits/BootsItemTrait.ts", "../../../src/minecraft/traits/FoodItemTrait.ts", "../../../src/minecraft/traits/DrinkItemTrait.ts", "../../../src/minecraft/traits/ThrowableItemTrait.ts", "../../../src/minecraft/traits/StackableItemTrait.ts", "../../../src/minecraft/traits/NonStackableItemTrait.ts", "../../../src/minecraft/traits/FuelItemTrait.ts", "../../../src/minecraft/traits/GlintingItemTrait.ts", "../../../src/minecraft/traits/RepairableItemTrait.ts", "../../../src/minecraft/traits/CooldownItemTrait.ts", "../../../src/minecraft/traits/MusicDiscItemTrait.ts", "../../../src/minecraft/traits/index.ts", "../../../src/minecraft/IMcpModelDesign.ts", "../../../src/minecraft/NoiseGenerationUtilities.ts", "../../../src/minecraft/TextureEffects.ts", "../../../src/minecraft/TexturedRectangleGenerator.ts", "../../../src/minecraft/ModelDesignUtilities.ts", "../../../src/minecraft/ModelDesignTemplates.ts", "../../../src/minecraft/ContentGenerator.ts", "../../../src/minecraft/ContentWriter.ts", "../../../src/app/toolcommands/commands/AddCommand.ts", "../../../src/app/toolcommands/commands/RemoveCommand.ts", "../../../src/app/toolcommands/commands/RenameCommand.ts", "../../../src/app/toolcommands/commands/ScriptCommand.ts", "../../../src/app/toolcommands/commands/OpenSampleCommand.ts", "../../../src/app/toolcommands/commands/ValidateCommand.ts", "../../../src/app/toolcommands/commands/InfoCommand.ts", "../../../src/app/toolcommands/commands/ExportCommand.ts", "../../../src/app/toolcommands/commands/DeployCommand.ts", "../../../src/app/toolcommands/commands/SwitchModeCommand.ts", "../../../src/app/toolcommands/commands/ToggleInspectorCommand.ts", "../../../src/app/toolcommands/commands/ReloadProjectCommand.ts", "../../../src/app/toolcommands/commands/OpenFileCommand.ts", "../../../src/app/toolcommands/commands/FormatDocumentCommand.ts", "../../../src/app/toolcommands/commands/OpenSettingsCommand.ts", "../../../src/app/toolcommands/commands/index.ts", "../../../src/app/toolcommands/index.ts", "../../../src/app/CommandRegistry.ts", "../../../src/minecraft/Dialogue.ts", "../../../src/info/WorldDataInfoGenerator.ts", "../../../src/minecraft/JsonUIResourceDefinition.ts", "../../../src/info/TextureInfoGenerator.ts", "../../../src/info/PackSizeInfoGenerator.ts", "../../../src/info/TextureImageInfoGenerator.ts", "../../../src/manager/FormatVersionManager.ts", "../../../src/info/AnimationResourceInfoGenerator.ts", "../../../src/info/UnlinkedItemInfoGenerator.ts", "../../../src/info/GeometryInfoGenerator.ts", "../../../src/info/TextureReferenceInfoGenerator.ts", "../../../src/info/ValidFileGenerator.ts", "../../../src/manager/BlocksCatalogManager.ts", "../../../src/manager/EntityTypeManager.ts", "../../../src/manager/ItemTypeManager.ts", "../../../src/info/SharingInfoGenerator.ts", "../../../src/info/projectGenerators/CheckVanillaDuplicatesInfoGenerator.ts", "../../../src/info/fileGenerators/CheckNoBOMGenerator.ts", "../../../src/info/MCFunctionInfoGenerator.ts", "../../../src/storage/ImageUtilites.ts", "../../../src/info/projectGenerators/CheckPackIconsGenerator.ts", "../../../src/core/async/AsyncUtilities.ts", "../../../src/info/projectGenerators/CheckWorldIconsGenerator.ts", "../../../node_modules/zod/v3/helpers/util.js", "../../../node_modules/zod/v3/ZodError.js", "../../../node_modules/zod/v3/locales/en.js", "../../../node_modules/zod/v3/errors.js", "../../../node_modules/zod/v3/helpers/parseUtil.js", "../../../node_modules/zod/v3/helpers/typeAliases.js", "../../../node_modules/zod/v3/helpers/errorUtil.js", "../../../node_modules/zod/v3/types.js", "../../../node_modules/zod/v3/external.js", "../../../node_modules/zod/index.js", "../../../src/minecraft/ISoundDefinitionCatalog.ts", "../../../src/info/projectGenerators/SoundDefinitionsInfoGenerator.ts", "../../../src/info/ScriptInfoGenerator.ts", "../../../src/info/projectGenerators/CheckParticleIdentifierGenerator.ts", "../../../src/minecraft/skins/Skin.ts", "../../../src/info/tests/TestDefinition.ts", "../../../node_modules/json-schema/lib/validate.js", "../../../src/jsonschema/SchemaValidation.ts", "../../../src/minecraft/skins/SkinPack.ts", "../../../src/minecraft/textures/ModelSegments.ts", "../../../src/minecraft/textures/TextureUtilities.ts", "../../../src/info/projectGenerators/CheckSkinPackJsonGenerator.ts", "../../../src/info/CommunitySchemaItemInfoGenerator.ts", "../../../src/info/JsonSchemaItemInfoGenerator.ts", "../../../src/info/projectGenerators/data/ForbiddenFiles.ts", "../../../src/info/projectGenerators/CheckForbiddenFiles.ts", "../../../src/info/projectGenerators/CheckProjectIntegrityGenerator.ts", "../../../src/core/ArrayUtilities.ts", "../../../src/info/projectGenerators/CheckBetaFeaturesGenerator.ts", "../../../src/info/projectGenerators/CheckExperimentalFlagInfoGenerator.ts", "../../../src/info/projectGenerators/CheckFeatureDeprecationInfoGenerator.ts", "../../../src/info/projectGenerators/CheckGeometryFormatInfoGenerator.ts", "../../../src/app/localization/LocalizationCatalog.ts", "../../../src/info/projectGenerators/CheckLangFilesGenerator.ts", "../../../src/info/registration/RegistrationData.ts", "../../../src/app/Versioning.ts", "../../../src/core/ObjectUtilities.ts", "../../../src/minecraft/manifests/JsonManifest.ts", "../../../src/minecraft/manifests/Manifest.ts", "../../../src/info/projectGenerators/checkManifest/CheckManifestData.ts", "../../../src/info/projectGenerators/checkManifest/CheckManifestGenerator.ts", "../../../src/info/projectGenerators/CheckResourcePackDependenciesGenerator.ts", "../../../src/info/projectGenerators/CheckWorldPackReferencesGenerator.ts", "../../../src/info/CustomDimensionWorldDataInfoGenerator.ts", "../../../src/info/registration/GeneratorRegistrations.ts", "../../../src/updates/ProjectUpdateRunner.ts", "../../../src/devproject/EslintConfig.ts", "../../../src/devproject/JustConfig.ts", "../../../src/app/ProjectStandard.ts", "../../../src/actions/IActionSetData.ts", "../../../src/actions/ActionError.ts", "../../../src/actions/ActionSetScope.ts", "../../../src/dataform/DataFormFile.ts", "../../../src/actions/Action.ts", "../../../src/actions/BlockBreakAction.ts", "../../../src/actions/GroupAction.ts", "../../../src/actions/IScriptGenerationContext.ts", "../../../src/actions/BlockExplodeAction.ts", "../../../src/actions/BlockSetAction.ts", "../../../src/actions/EntityDieAction.ts", "../../../src/actions/EntitySpawnAction.ts", "../../../src/actions/GeneralAction.ts", "../../../src/actions/IAction.ts", "../../../src/actions/ItemSpawnAction.ts", "../../../src/actions/ParticleSpawnAction.ts", "../../../src/actions/PlayerJoinAction.ts", "../../../src/actions/RandomizeGroupAction.ts", "../../../src/actions/SequenceGroupAction.ts", "../../../src/actions/SoundPlayAction.ts", "../../../src/actions/TestIdleAction.ts", "../../../src/actions/TestSimulatedPlayerMoveAction.ts", "../../../src/actions/TestSimulatedPlayerSpawnAction.ts", "../../../src/actions/TickGroupAction.ts", "../../../src/actions/WorldSendMessageAction.ts", "../../../src/actions/ActionSetCatalog.ts", "../../../src/actions/ActionGroup.ts", "../../../src/actions/ActionSet.ts", "../../../src/script/ActionSetScriptGenerator.ts", "../../../src/worldtest/WorldTestArea.ts", "../../../src/worldtest/WorldTest.ts", "../../../src/script/WorldTestManager.ts", "../../../src/devproject/VsCodeExtensionsDefinition.ts", "../../../src/devproject/VsCodeSettingsDefinition.ts", "../../../src/devproject/PrettierRcConfig.ts", "../../../src/app/ProjectAutogeneration.ts", "../../../src/app/ProjectUtilities.ts", "../../../src/app/ProjectItemTypeInfo.ts", "../../../src/app/project/projectItems/ProjectItemValues.ts", "../../../src/app/ProjectItemUtilities.ts", "../../../src/design/IImageEdits.ts", "../../../src/core/ColorUtilities.ts", "../../../src/design/ImageItem.ts", "../../../src/design/ImageEditsDefinition.ts", "../../../src/app/ProjectItemInference.ts", "../../../src/minecraft/FeatureRuleDefinition.ts", "../../../src/minecraft/LootTableBehaviorDefinition.ts", "../../../src/minecraft/SkinCatalogDefinition.ts", "../../../src/app/RelationsIndex.ts", "../../../src/app/ProjectItemRelations.ts", "../../../src/app/ProjectCreateManager.ts", "../../../src/app/ProjectItemCreateManager.ts", "../../../src/minecraft/AudioDefinition.ts", "../../../src/minecraft/SoundDefinitionCatalogDefinition.ts", "../../../src/minecraft/VanillaGeometryTransforms.ts", "../../../src/minecraft/MolangEvaluator.ts", "../../../src/minecraft/RenderControllerResolver.ts", "../../../src/minecraft/IMolangContext.ts", "../../../src/minecraft/VanillaProjectManager.ts", "../../../src/minecraft/MinecraftUtilities.ts", "../../../src/minecraft/BlockType.ts", "../../../src/minecraft/IBlockBaseTypeData.ts", "../../../src/minecraft/BlockBaseType.ts", "../../../src/devproject/NpmModule.ts", "../../../src/langcore/javascript/ScriptModuleInfo.ts", "../../../src/minecraft/Database.ts", "../../../src/minecraft/EntityTypeDefinition.ts", "../../../src/app/IProjectItemVariant.ts", "../../../src/app/ProjectItemVariant.ts", "../../../src/app/ProjectVariant.ts", "../../../src/app/ProjectItem.ts", "../../../src/minecraft/IWorldSettings.ts", "../../../src/minecraft/Lang.ts", "../../../src/minecraft/LocManager.ts", "../../../src/analytics/TelemetryStub.ts", "../../../src/app/ProjectDeploySync.ts", "../../../src/app/LookupUtilities.ts", "../../../src/app/ProjectLookupUtilities.ts", "../../../src/app/IProjectWorkerManager.ts", "../../../src/app/Project.ts", "../../../node_modules/universal-user-agent/index.js", "../../../node_modules/before-after-hook/lib/register.js", "../../../node_modules/before-after-hook/lib/add.js", "../../../node_modules/before-after-hook/lib/remove.js", "../../../node_modules/before-after-hook/index.js", "../../../node_modules/@octokit/endpoint/dist-bundle/index.js", "../../../node_modules/fast-content-type-parse/index.js", "../../../node_modules/@octokit/request-error/dist-src/index.js", "../../../node_modules/@octokit/request/dist-bundle/index.js", "../../../node_modules/@octokit/graphql/dist-bundle/index.js", "../../../node_modules/@octokit/auth-token/dist-bundle/index.js", "../../../node_modules/@octokit/core/dist-src/version.js", "../../../node_modules/@octokit/core/dist-src/index.js", "../../../node_modules/@octokit/plugin-request-log/dist-src/version.js", "../../../node_modules/@octokit/plugin-request-log/dist-src/index.js", "../../../node_modules/@octokit/plugin-paginate-rest/dist-bundle/index.js", "../../../node_modules/@octokit/src/version.ts", "../../../node_modules/@octokit/src/generated/endpoints.ts", "../../../node_modules/@octokit/src/endpoints-to-methods.ts", "../../../node_modules/@octokit/src/index.ts", "../../../node_modules/@octokit/rest/dist-src/version.js", "../../../node_modules/@octokit/rest/dist-src/index.js", "../../../src/github/GitHubManager.ts", "../../../src/minecraft/CommandArgument.ts", "../../../src/minecraft/Command.ts", "../../../src/app/CommandRunner.ts", "../../../src/app/CreatorToolsAuthentication.ts", "../../../src/app/IMinecraft.ts", "../../../src/minecraft/GameStateManager.ts", "../../../src/app/RemoteMinecraft.ts", "../../../src/clientapp/ProcessHostedProxyMinecraft.ts", "../../../src/clientapp/MinecraftGameProxyMinecraft.ts", "../../../src/app/Package.ts", "../../../src/app/DeploymentStorageMinecraft.ts", "../../../src/electronclient/ElectronFile.ts", "../../../src/electronclient/ElectronFolder.ts", "../../../src/electronclient/ElectronStorage.ts", "../../../src/app/DeploymentTarget.ts", "../../../src/app/CreatorTools.ts", "../../../node_modules/localforage/dist/localforage.js", "../../../src/storage/BrowserFile.ts", "../../../src/storage/BrowserFolder.ts", "../../../src/storage/BrowserStorage.ts", "../../../src/app/CreatorToolsCommands.ts", "../../../src/app/CreatorToolsHost.ts", "../../../src/core/Log.ts", "../../../node_modules/pngjs/lib/chunkstream.js", "../../../node_modules/pngjs/lib/interlace.js", "../../../node_modules/pngjs/lib/paeth-predictor.js", "../../../node_modules/pngjs/lib/filter-parse.js", "../../../node_modules/pngjs/lib/filter-parse-async.js", "../../../node_modules/pngjs/lib/constants.js", "../../../node_modules/pngjs/lib/crc.js", "../../../node_modules/pngjs/lib/parser.js", "../../../node_modules/pngjs/lib/bitmapper.js", "../../../node_modules/pngjs/lib/format-normaliser.js", "../../../node_modules/pngjs/lib/parser-async.js", "../../../node_modules/pngjs/lib/bitpacker.js", "../../../node_modules/pngjs/lib/filter-pack.js", "../../../node_modules/pngjs/lib/packer.js", "../../../node_modules/pngjs/lib/packer-async.js", "../../../node_modules/pngjs/lib/sync-inflate.js", "../../../node_modules/pngjs/lib/sync-reader.js", "../../../node_modules/pngjs/lib/filter-parse-sync.js", "../../../node_modules/pngjs/lib/parser-sync.js", "../../../node_modules/pngjs/lib/packer-sync.js", "../../../node_modules/pngjs/lib/png-sync.js", "../../../node_modules/pngjs/lib/png.js", "../../../src/cli/TaskWorker.ts", "../../../src/cli/ClUtils.ts", "../../../src/local/LocalUtilities.ts", "../../../node_modules/uuid/dist/esm-node/rng.js", "../../../node_modules/uuid/dist/esm-node/stringify.js", "../../../node_modules/uuid/dist/esm-node/native.js", "../../../node_modules/uuid/dist/esm-node/v4.js", "../../../src/local/NodeFile.ts", "../../../src/local/NodeFolder.ts", "../../../src/local/NodeStorage.ts", "../../../src/local/ImageCodecNode.ts", "../../../src/local/LocalEnvironment.ts"],
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport { DeploymentTargetType } from \"./DeploymentTarget\";\r\nimport ICustomTool from \"./ICustomTool\";\r\n\r\nexport enum CreatorToolsEditorViewMode {\r\n  itemsOnLeft = 0,\r\n  itemsOnRight = 1,\r\n  itemsOnLeftAndMinecraftToolbox = 2,\r\n  itemsOnRightAndMinecraftToolbox = 3,\r\n  toolboxFocus = 4,\r\n  mainFocus = 5,\r\n  itemsFocus = 6,\r\n  codeLanding = 7,\r\n}\r\n\r\nexport enum CreatorToolsEditPreference {\r\n  summarized = 0,\r\n  editors = 1,\r\n  raw = 2,\r\n}\r\n\r\nexport enum MinecraftTrack {\r\n  main = 0,\r\n  preview = 1,\r\n  edu = 2,\r\n  eduPreview = 3,\r\n}\r\n\r\nexport enum MinecraftFlavor {\r\n  none = 0,\r\n  remote = 1,\r\n  processHostedProxy = 2,\r\n  minecraftGameProxy = 3,\r\n  deploymentStorage = 4,\r\n}\r\n\r\n// see DedicatedServerCommandHandler to ensure these stay in sync\r\nexport enum DedicatedServerMode {\r\n  auto = 0,\r\n  source = 1,\r\n  direct = 2,\r\n}\r\n\r\nexport enum MinecraftGameConnectionMode {\r\n  localMinecraft = 0,\r\n  localMinecraftPreview = 1,\r\n  remoteMinecraft = 2,\r\n}\r\n\r\nexport enum WindowState {\r\n  regular = 0,\r\n  minimized = 1,\r\n  maximized = 2,\r\n  docked = 3,\r\n}\r\n\r\nexport enum ThemePreference {\r\n  deviceDefault = 0,\r\n  dark = 1,\r\n  light = 2,\r\n}\r\n\r\nexport default interface ICreatorToolsData {\r\n  successfullyConnectedWebSocketToMinecraft: boolean;\r\n  successfullyConnectedToRemoteMinecraft: boolean;\r\n  successfullyStartedMinecraftServer: boolean;\r\n  worldSettings?: IWorldSettings;\r\n  editPreference?: CreatorToolsEditPreference;\r\n  disableFirstRun?: boolean;\r\n  editorWorldSettings?: IWorldSettings;\r\n  autoStartMinecraft: boolean;\r\n  showScreenOnConnect: boolean;\r\n  useEditor?: boolean;\r\n  creator?: string;\r\n  track?: MinecraftTrack;\r\n  formatBeforeSave?: boolean;\r\n  showLivePreview?: boolean;\r\n  itemSidePaneWidth?: number;\r\n  livePreviewWidth?: number;\r\n  toolPaneWidth?: number;\r\n  preferredTextSize?: number;\r\n  preferredSuite?: number;\r\n  defaultDeploymentTarget?: DeploymentTargetType;\r\n  editorViewMode?: CreatorToolsEditorViewMode;\r\n  defaultFunction?: string;\r\n  customTools: ICustomTool[];\r\n  conversionJarPath?: string;\r\n  iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula?: boolean;\r\n  autoStartDedicatedServer?: boolean;\r\n  dedicatedServerMode?: DedicatedServerMode;\r\n  dedicatedServerPath?: string;\r\n  dedicatedServerSlotCount?: number;\r\n  lastActiveMinecraftFlavor?: MinecraftFlavor;\r\n  webSocketMode?: MinecraftGameConnectionMode;\r\n  remoteServerUrl?: string;\r\n  remoteServerPort?: number;\r\n  remoteServerPasscode?: string;\r\n  remoteServerAccessLevel?: RemoteServerAccessLevel;\r\n  windowX?: number;\r\n  windowY?: number;\r\n  collapsedTypes?: number[];\r\n  showMruPane?: boolean;\r\n  mruItemPaths?: string[];\r\n  viewAsFiles?: boolean;\r\n  windowHeight?: number;\r\n  windowWidth?: number;\r\n  windowSlot?: number;\r\n  windowState?: WindowState;\r\n  themePreference?: ThemePreference;\r\n}\r\n\r\nexport enum RemoteServerAccessLevel {\r\n  none = 0,\r\n  displayReadOnly = 1,\r\n  fullReadOnly = 2,\r\n  updateState = 3,\r\n  admin = 4,\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IStorage from \"./IStorage\";\r\nimport IStorageObject from \"./IStorageObject\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport { EncodingType } from \"./StorageUtilities\";\r\nimport { IEvent } from \"ste-events\";\r\n\r\nexport enum FileUpdateType {\r\n  regularEdit = 0,\r\n  versionlessEdit = 1,\r\n  externalChange = 2,\r\n  versionRestoration = 3, // we're shifting to a different version (backwards or forwards); do not modify the prior version list\r\n  versionRestorationRetainCurrent = 4, // we're restoring to a prior version, but add the current content to the prior version list\r\n}\r\n\r\nexport default interface IFile extends IStorageObject {\r\n  modified: Date | null;\r\n  modifiedAtLoad: Date | null;\r\n  latestModified: Date | null;\r\n  content: string | Uint8Array | null;\r\n  lastLoadedOrSaved: Date | null;\r\n  isContentLoaded: boolean;\r\n  needsSave: boolean;\r\n  fileContainerStorage: IStorage | null;\r\n  extendedPath: string;\r\n  readonly coreContentLength: number;\r\n  readonly type: string;\r\n  onFileContentUpdated: IEvent<IFile, IFile>;\r\n  priorVersions: IVersionContent[];\r\n  isInErrorState?: boolean;\r\n  errorStateMessage?: string;\r\n\r\n  /**\r\n   * Cache for comment-json parsed object.\r\n   * When set, this contains the parsed JSON with comment metadata preserved as Symbol properties.\r\n   * Use JsonUtilities to work with this cache to ensure comments are preserved through edits.\r\n   */\r\n  commentJsonCache?: unknown;\r\n\r\n  isBinary: boolean;\r\n  isString: boolean;\r\n  canIgnore: boolean;\r\n\r\n  parentFolder: IFolder;\r\n\r\n  dispose(): void;\r\n  unload(): void;\r\n\r\n  scanForChanges(): Promise<void>;\r\n\r\n  getHash(): Promise<string | undefined>;\r\n  getRelativePathFor(file: IFile): string | undefined;\r\n  deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean>;\r\n  moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n  exists(): Promise<boolean>;\r\n  getRootRelativePath(): string | undefined;\r\n  getFolderRelativePath(toFolder: IFolder): string | undefined;\r\n  loadContent(force?: boolean, forceEncoding?: EncodingType): Promise<Date>;\r\n  setObjectContentIfSemanticallyDifferent(\r\n    value: object | null | undefined,\r\n    updateType?: FileUpdateType,\r\n    sourceId?: string\r\n  ): boolean;\r\n  setContentIfSemanticallyDifferent(\r\n    content: string | Uint8Array,\r\n    updateType?: FileUpdateType,\r\n    sourceId?: string\r\n  ): boolean;\r\n  setContent(content: string | Uint8Array, updateType?: FileUpdateType, sourceId?: string): boolean;\r\n  saveContent(force?: boolean): Promise<Date>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProjectItemData from \"./IProjectItemData\";\r\nimport IGitHubInfo from \"./IGitHubInfo\";\r\nimport ITool from \"./ITool\";\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport IStatus from \"./Status\";\r\nimport { MinecraftTrack } from \"./ICreatorToolsData\";\r\nimport IProjectVariant from \"./IProjectVariant\";\r\n\r\nexport enum ProjectDataType {\r\n  localStorage = 0,\r\n  clientStorage = 1,\r\n}\r\n\r\nexport enum ProjectFocus {\r\n  general = 0,\r\n  gameTests = 1,\r\n  world = 2,\r\n  focusedCodeSnippet = 3,\r\n  editorExtension = 4,\r\n}\r\n\r\nexport enum ProjectScriptLanguage {\r\n  javaScript = 0,\r\n  typeScript = 1,\r\n}\r\n\r\nexport enum ProjectScriptVersion {\r\n  latestStable = 0,\r\n  stable10 = 1,\r\n  latestBeta = 999,\r\n}\r\n\r\nexport enum ProjectEditPreference {\r\n  default = 0,\r\n  summarized = 1,\r\n  editors = 2,\r\n  raw = 3,\r\n}\r\n\r\nexport enum ProjectRole {\r\n  general = 0,\r\n  documentation = 1,\r\n  meta = 2,\r\n  explorer = 3,\r\n}\r\n\r\nexport default interface IProjectData {\r\n  dataType: ProjectDataType;\r\n  storageBasePath: string;\r\n  name: string;\r\n  title: string;\r\n  shortName?: string;\r\n  creator?: string;\r\n  defaultNamespace?: string;\r\n  scriptEntryPoint?: string;\r\n  description: string;\r\n  focus: ProjectFocus;\r\n  role?: ProjectRole;\r\n  projectFolderTitle?: string;\r\n  variants: { [variant: string]: IProjectVariant };\r\n\r\n  track?: MinecraftTrack;\r\n\r\n  editPreference: ProjectEditPreference;\r\n\r\n  gitHubReferences?: IGitHubInfo[];\r\n\r\n  collapsedStoragePaths?: string[];\r\n\r\n  preferredTools?: ITool[];\r\n\r\n  preferredScriptLanguage?: ProjectScriptLanguage;\r\n  scriptVersion?: ProjectScriptVersion;\r\n\r\n  versionMajor?: number;\r\n  versionMinor?: number;\r\n  versionPatch?: number;\r\n  usesCustomWorldSettings?: boolean;\r\n  worldSettings?: IWorldSettings;\r\n  editorWorldSettings?: IWorldSettings;\r\n  autoDeploymentMode?: number;\r\n\r\n  lastMapDeployedDate?: Date;\r\n  lastMapDeployedHash?: string;\r\n  deployWorldId?: string;\r\n\r\n  showHiddenItems?: boolean;\r\n  showFunctions?: boolean;\r\n  showAssets?: boolean;\r\n  showTypes?: boolean;\r\n  showDevFiles?: boolean;\r\n\r\n  gitHubRepoName?: string;\r\n  gitHubOwner?: string;\r\n  gitHubFolder?: string;\r\n  gitHubBranch?: string;\r\n\r\n  originalGalleryId?: string;\r\n  originalSampleId?: string;\r\n  originalFullPath?: string;\r\n  originalFileList?: string[];\r\n  originalGitHubRepoName?: string;\r\n  originalGitHubOwner?: string;\r\n  originalGitHubBranch?: string;\r\n  originalGitHubFolder?: string;\r\n\r\n  defaultBehaviorPackUniqueId: string;\r\n  defaultBehaviorPackVersion?: number[];\r\n  defaultResourcePackUniqueId: string;\r\n  defaultResourcePackVersion?: number[];\r\n  defaultDataUniqueId: string;\r\n  defaultScriptModuleUniqueId: string;\r\n  contentsModified: Date | null;\r\n  created?: Date | null;\r\n  lastOpened?: Date | null;\r\n\r\n  localFolderPath?: string;\r\n  mainDeployFolderPath?: string;\r\n  localFilePath?: string;\r\n  dataStorageRelativePath: string;\r\n  messages?: IStatus[];\r\n\r\n  /**\r\n   * Base64-encoded PNG image for project preview thumbnail.\r\n   * Used in the project list to show a visual preview of the project.\r\n   * If not set, a default placeholder image will be shown.\r\n   */\r\n  previewImageBase64?: string;\r\n\r\n  chatSession?: any;\r\n\r\n  items: IProjectItemData[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IGitHubInfo from \"./IGitHubInfo\";\r\nimport IProjectItemVariant from \"./IProjectItemVariant\";\r\n\r\nexport const MaxItemTypes = 166;\r\n\r\nexport enum ProjectItemCategory {\r\n  assets,\r\n  logic,\r\n  types,\r\n  build,\r\n  documentation,\r\n  meta,\r\n  package,\r\n  unknown,\r\n  mctools,\r\n}\r\n\r\n// these integer numbers are used in the project data file formats, so do not change them. See ProjectItemUtilities/Sort Order for a more logical sort order.\r\nexport enum ProjectItemType {\r\n  unknown = 0,\r\n  testJs = 1,\r\n  js = 2,\r\n  catalogIndexJs = 3,\r\n  structure = 4,\r\n  behaviorPackManifestJson = 5,\r\n  unknownJson = 6,\r\n  MCWorld = 7,\r\n  MCTemplate = 8,\r\n  MCFunction = 9,\r\n  entityTypeBehavior = 10,\r\n  entityTypeBaseJs = 11, // <--- not in use, in favor of just general .js + generated\r\n  actionSet = 12,\r\n  ts = 13,\r\n  resourcePackManifestJson = 14,\r\n  worldTest = 15,\r\n  worldFolder = 16,\r\n  behaviorPackListJson = 17,\r\n  resourcePackListJson = 18,\r\n  animationBehaviorJson = 19,\r\n  animationControllerBehaviorJson = 20,\r\n  blockTypeBehavior = 21,\r\n  blockMaterialsBehaviorJson = 22,\r\n  itemTypeBehavior = 23,\r\n  lootTableBehavior = 24,\r\n  biomesClientCatalogResource = 25, // legacy mega catalog of biome resources (biomes_client)\r\n  blocksCatalogResourceJson = 26,\r\n  soundCatalog = 27,\r\n  animationResourceJson = 28,\r\n  animationControllerResourceJson = 29,\r\n  entityTypeResource = 30,\r\n  fogResourceJson = 31,\r\n  modelGeometryJson = 32,\r\n  particleJson = 33,\r\n  renderControllerJson = 34,\r\n  ninesliceJson = 35,\r\n  uiJson = 36,\r\n  languagesCatalogJson = 37,\r\n  biomeBehavior = 38,\r\n  dialogueBehaviorJson = 39,\r\n  featureRuleBehavior = 40,\r\n  featureBehavior = 41,\r\n  functionEventJson = 42,\r\n  recipeBehavior = 43,\r\n  spawnRuleBehavior = 44,\r\n  tradingBehaviorJson = 45,\r\n  volumeBehaviorJson = 46,\r\n  attachableResourceJson = 47,\r\n  itemTypeLegacyResource = 48, // note this is the 1.10 definition of item resources, more modern items use attachables?\r\n  materialsResourceJson = 49,\r\n  musicDefinitionJson = 50,\r\n  soundDefinitionCatalog = 51,\r\n  blockTypeResourceJsonDoNotUse = 52, // deprecated - Duplicate of blocksCatalogResourceJson\r\n  MCAddon = 53,\r\n  zip = 54,\r\n  MCPack = 55,\r\n  documentedTypeFolder = 56,\r\n  documentedCommandFolder = 57,\r\n  tsconfigJson = 58,\r\n  packageJson = 59,\r\n  packageLockJson = 60,\r\n  docInfoJson = 61,\r\n  scriptTypesJson = 62,\r\n  commandSetDefinitionJson = 63,\r\n  jsconfigJson = 64,\r\n  docfxJson = 65,\r\n  jsdocJson = 66,\r\n  skinPackManifestJson = 67,\r\n  worldTemplateManifestJson = 68,\r\n  buildProcessedJs = 69,\r\n  entityTypeBaseTs = 70, // <--- not in use, in favor of just general .ts + generated\r\n  blockTypeBaseJs = 71, // <--- not in use, in favor of just general .js + generated\r\n  blockTypeBaseTs = 72, // <--- not in use, in favor of just general .ts + generated\r\n  MCProject = 73,\r\n  image = 74,\r\n  vsCodeLaunchJson = 75,\r\n  vsCodeTasksJson = 76,\r\n  vsCodeSettingsJson = 77,\r\n  vsCodeExtensionsJson = 78,\r\n  lang = 79,\r\n  projectSummaryMetadata = 80,\r\n  tickJson = 81,\r\n  cameraBehaviorJson = 82,\r\n  material = 83,\r\n  materialSetJson = 84,\r\n  materialVertex = 85,\r\n  materialFragment = 86,\r\n  materialGeometry = 87, // NOTE: this is a /materials specific .geometry file, and not a .geo.json type file (which is modelGeometryJson)\r\n  lightingJson = 88,\r\n  textureSetJson = 89,\r\n  flipbookTexturesJson = 91,\r\n  itemTextureJson = 92,\r\n  terrainTextureCatalogResourceJson = 93,\r\n  globalVariablesJson = 94,\r\n  dataForm = 95,\r\n  dimensionJson = 96,\r\n  behaviorPackHistoryListJson = 97,\r\n  resourcePackHistoryListJson = 98,\r\n  texture = 99,\r\n  marketingAssetImage = 100,\r\n  storeAssetImage = 101,\r\n  uiTexture = 102,\r\n  packIconImage = 103,\r\n  textureListJson = 104,\r\n  fileListArrayJson = 105,\r\n  vanillaDataJson = 106,\r\n  engineOrderingJson = 107,\r\n  audio = 108,\r\n  behaviorPackFolder = 109,\r\n  resourcePackFolder = 110,\r\n  skinPackFolder = 111,\r\n  contentIndexJson = 112,\r\n  contentReportJson = 113,\r\n  levelDbLdb = 114,\r\n  levelDbLog = 115,\r\n  levelDbCurrent = 116,\r\n  levelDbManifest = 117,\r\n  levelDat = 118,\r\n  justConfigTs = 119,\r\n  esLintConfigMjs = 120,\r\n  env = 121,\r\n  prettierRcJson = 122,\r\n  skinCatalogJson = 123,\r\n  tagsMetadata = 124,\r\n  personaManifestJson = 125,\r\n  personaPackFolder = 126,\r\n  blockCulling = 127,\r\n  craftingItemCatalog = 128,\r\n  mcToolsProjectPreferences = 129,\r\n  educationJson = 130,\r\n  aimAssistPresetJson = 131,\r\n  colorGradingJson = 132,\r\n  atmosphericsJson = 133,\r\n  pbrJson = 134,\r\n  pointLightsJson = 135,\r\n  waterJson = 136,\r\n  shadowsJson = 137,\r\n  contentsJson = 138,\r\n  jigsawStructureSet = 139,\r\n  jigsawStructure = 140,\r\n  jigsawTemplatePool = 141,\r\n  jigsawProcessorList = 142,\r\n  aimAssistCategoryJson = 143,\r\n  behaviorTreeJson = 144,\r\n  spawnGroupJson = 145,\r\n  designPackManifestJson = 146,\r\n  designPackFolder = 147,\r\n  designTexture = 148,\r\n  personaJson = 149,\r\n  sdlLayout = 150,\r\n  lodJson = 151,\r\n  rendererJson = 152,\r\n  loadingMessagesJson = 153,\r\n  splashesJson = 154,\r\n  cameraResourceJson = 155,\r\n  fontMetadataJson = 156,\r\n  emoticonsJson = 157,\r\n  skinPackGeometryJson = 158,\r\n  skinPackTextureBackCompatJson = 159,\r\n  uniformsJson = 160,\r\n  biomeResource = 161, // new style per-biome JSON files\r\n  levelDatOld = 162,\r\n  jsMap = 163,\r\n  markdownDocumentation = 164,\r\n  voxelShapeBehavior = 165,\r\n}\r\n\r\nexport enum ProjectItemStorageType {\r\n  singleFile = 0,\r\n  folder = 1,\r\n}\r\n\r\nexport enum ProjectItemEditPreference {\r\n  projectDefault = 0,\r\n  forceEditor = 1,\r\n  forceRaw = 2,\r\n}\r\n\r\nexport enum ProjectItemErrorStatus {\r\n  none = 0,\r\n  unprocessable = 1,\r\n}\r\n\r\nexport enum ProjectItemCreationType {\r\n  normal = 0,\r\n  generated = 1,\r\n  build = 2,\r\n  dist = 3,\r\n}\r\n\r\nexport default interface IProjectItemData {\r\n  itemType: ProjectItemType;\r\n  projectPath: string | null | undefined;\r\n  storagePath?: string | null | undefined; // legacy name for projectPath, no longer used.\r\n  variants: { [label: string]: IProjectItemVariant };\r\n  tags: string[];\r\n  name: string;\r\n  source?: string;\r\n  isInWorld?: boolean;\r\n  storageType: ProjectItemStorageType | undefined;\r\n  gitHubReference?: IGitHubInfo;\r\n  creationType?: ProjectItemCreationType;\r\n  editPreference?: ProjectItemEditPreference;\r\n  errorMessage?: string;\r\n  errorStatus?: ProjectItemErrorStatus;\r\n  items?: IProjectItemData[];\r\n\r\n  /**\r\n   * Cached thumbnail as data URL (e.g., \"data:image/svg+xml;base64,...\" or \"data:image/png;base64,...\").\r\n   * Used for geometry models and other items that can have visual previews.\r\n   * Generated in background worker and displayed in ProjectItemList.\r\n   */\r\n  cachedThumbnail?: string;\r\n\r\n  /**\r\n   * Timestamp when the thumbnail was last generated.\r\n   * Used to invalidate cache when file content changes.\r\n   */\r\n  thumbnailGeneratedAt?: number;\r\n\r\n  /**\r\n   * Path to another project item whose thumbnail should be used for this item.\r\n   * For example, entity behavior/resource files link to their geometry model's thumbnail.\r\n   * This is set during relations processing based on item relationships.\r\n   */\r\n  thumbnailLink?: string;\r\n}\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DispatcherBase = void 0;\r\nconst __1 = require(\"..\");\r\n/**\r\n * Base class for implementation of the dispatcher. It facilitates the subscribe\r\n * and unsubscribe methods based on generic handlers. The TEventType specifies\r\n * the type of event that should be exposed. Use the asEvent to expose the\r\n * dispatcher as event.\r\n *\r\n * @export\r\n * @abstract\r\n * @class DispatcherBase\r\n * @implements {ISubscribable<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass DispatcherBase {\r\n    constructor() {\r\n        /**\r\n         * The subscriptions.\r\n         *\r\n         * @protected\r\n         *\r\n         * @memberOf DispatcherBase\r\n         */\r\n        this._subscriptions = new Array();\r\n    }\r\n    /**\r\n     * Returns the number of subscriptions.\r\n     *\r\n     * @readonly\r\n     * @type {number}\r\n     * @memberOf DispatcherBase\r\n     */\r\n    get count() {\r\n        return this._subscriptions.length;\r\n    }\r\n    /**\r\n     * Triggered when subscriptions are changed (added or removed).\r\n     *\r\n     * @readonly\r\n     * @type {ISubscribable<SubscriptionChangeEventHandler>}\r\n     * @memberOf DispatcherBase\r\n     */\r\n    get onSubscriptionChange() {\r\n        if (this._onSubscriptionChange == null) {\r\n            this._onSubscriptionChange = new __1.SubscriptionChangeEventDispatcher();\r\n        }\r\n        return this._onSubscriptionChange.asEvent();\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    subscribe(fn) {\r\n        if (fn) {\r\n            this._subscriptions.push(this.createSubscription(fn, false));\r\n            this.triggerSubscriptionChange();\r\n        }\r\n        return () => {\r\n            this.unsubscribe(fn);\r\n        };\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    sub(fn) {\r\n        return this.subscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribe once to the event with the specified name.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    one(fn) {\r\n        if (fn) {\r\n            this._subscriptions.push(this.createSubscription(fn, true));\r\n            this.triggerSubscriptionChange();\r\n        }\r\n        return () => {\r\n            this.unsubscribe(fn);\r\n        };\r\n    }\r\n    /**\r\n     * Checks it the event has a subscription for the specified handler.\r\n     *\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    has(fn) {\r\n        if (!fn)\r\n            return false;\r\n        return this._subscriptions.some((sub) => sub.handler == fn);\r\n    }\r\n    /**\r\n     * Unsubscribes the handler from the dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    unsubscribe(fn) {\r\n        if (!fn)\r\n            return;\r\n        let changes = false;\r\n        for (let i = 0; i < this._subscriptions.length; i++) {\r\n            if (this._subscriptions[i].handler == fn) {\r\n                this._subscriptions.splice(i, 1);\r\n                changes = true;\r\n                break;\r\n            }\r\n        }\r\n        if (changes) {\r\n            this.triggerSubscriptionChange();\r\n        }\r\n    }\r\n    /**\r\n     * Unsubscribes the handler from the dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    unsub(fn) {\r\n        this.unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Generic dispatch will dispatch the handlers with the given arguments.\r\n     *\r\n     * @protected\r\n     * @param {boolean} executeAsync `True` if the even should be executed async.\r\n     * @param {*} scope The scope of the event. The scope becomes the `this` for handler.\r\n     * @param {IArguments} args The arguments for the event.\r\n     * @returns {(IPropagationStatus | null)} The propagation status, or if an `executeAsync` is used `null`.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    _dispatch(executeAsync, scope, args) {\r\n        //execute on a copy because of bug #9\r\n        for (let sub of [...this._subscriptions]) {\r\n            let ev = new __1.EventManagement(() => this.unsub(sub.handler));\r\n            let nargs = Array.prototype.slice.call(args);\r\n            nargs.push(ev);\r\n            let s = sub;\r\n            s.execute(executeAsync, scope, nargs);\r\n            //cleanup subs that are no longer needed\r\n            this.cleanup(sub);\r\n            if (!executeAsync && ev.propagationStopped) {\r\n                return { propagationStopped: true };\r\n            }\r\n        }\r\n        if (executeAsync) {\r\n            return null;\r\n        }\r\n        return { propagationStopped: false };\r\n    }\r\n    /**\r\n     * Creates a subscription.\r\n     *\r\n     * @protected\r\n     * @param {TEventHandler} handler The handler.\r\n     * @param {boolean} isOnce True if the handler should run only one.\r\n     * @returns {ISubscription<TEventHandler>} The subscription.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    createSubscription(handler, isOnce) {\r\n        return new __1.Subscription(handler, isOnce);\r\n    }\r\n    /**\r\n     * Cleans up subs that ran and should run only once.\r\n     *\r\n     * @protected\r\n     * @param {ISubscription<TEventHandler>} sub The subscription.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    cleanup(sub) {\r\n        let changes = false;\r\n        if (sub.isOnce && sub.isExecuted) {\r\n            let i = this._subscriptions.indexOf(sub);\r\n            if (i > -1) {\r\n                this._subscriptions.splice(i, 1);\r\n                changes = true;\r\n            }\r\n        }\r\n        if (changes) {\r\n            this.triggerSubscriptionChange();\r\n        }\r\n    }\r\n    /**\r\n     * Creates an event from the dispatcher. Will return the dispatcher\r\n     * in a wrapper. This will prevent exposure of any dispatcher methods.\r\n     *\r\n     * @returns {ISubscribable<TEventHandler>}\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    asEvent() {\r\n        if (this._wrap == null) {\r\n            this._wrap = new __1.DispatcherWrapper(this);\r\n        }\r\n        return this._wrap;\r\n    }\r\n    /**\r\n     * Clears the subscriptions.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    clear() {\r\n        if (this._subscriptions.length != 0) {\r\n            this._subscriptions.splice(0, this._subscriptions.length);\r\n            this.triggerSubscriptionChange();\r\n        }\r\n    }\r\n    /**\r\n     * Triggers the subscription change event.\r\n     *\r\n     * @private\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    triggerSubscriptionChange() {\r\n        if (this._onSubscriptionChange != null) {\r\n            this._onSubscriptionChange.dispatch(this.count);\r\n        }\r\n    }\r\n}\r\nexports.DispatcherBase = DispatcherBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DispatchError = void 0;\r\n/**\r\n * Indicates an error with dispatching.\r\n *\r\n * @export\r\n * @class DispatchError\r\n * @extends {Error}\r\n */\r\nclass DispatchError extends Error {\r\n    /**\r\n     * Creates an instance of DispatchError.\r\n     * @param {string} message The message.\r\n     *\r\n     * @memberOf DispatchError\r\n     */\r\n    constructor(message) {\r\n        super(message);\r\n    }\r\n}\r\nexports.DispatchError = DispatchError;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DispatcherWrapper = void 0;\r\n/**\r\n * Hides the implementation of the event dispatcher. Will expose methods that\r\n * are relevent to the event.\r\n *\r\n * @export\r\n * @class DispatcherWrapper\r\n * @implements {ISubscribable<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass DispatcherWrapper {\r\n    /**\r\n     * Creates an instance of DispatcherWrapper.\r\n     * @param {ISubscribable<TEventHandler>} dispatcher\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    constructor(dispatcher) {\r\n        this._subscribe = (fn) => dispatcher.subscribe(fn);\r\n        this._unsubscribe = (fn) => dispatcher.unsubscribe(fn);\r\n        this._one = (fn) => dispatcher.one(fn);\r\n        this._has = (fn) => dispatcher.has(fn);\r\n        this._clear = () => dispatcher.clear();\r\n        this._count = () => dispatcher.count;\r\n        this._onSubscriptionChange = () => dispatcher.onSubscriptionChange;\r\n    }\r\n    /**\r\n     * Triggered when subscriptions are changed (added or removed).\r\n     *\r\n     * @readonly\r\n     * @type {ISubscribable<SubscriptionChangeEventHandler>}\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    get onSubscriptionChange() {\r\n        return this._onSubscriptionChange();\r\n    }\r\n    /**\r\n     * Returns the number of subscriptions.\r\n     *\r\n     * @readonly\r\n     * @type {number}\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    get count() {\r\n        return this._count();\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns {() => void} A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    subscribe(fn) {\r\n        return this._subscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribe to the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     * @returns {() => void} A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    sub(fn) {\r\n        return this.subscribe(fn);\r\n    }\r\n    /**\r\n     * Unsubscribe from the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    unsubscribe(fn) {\r\n        this._unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Unsubscribe from the event dispatcher.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    unsub(fn) {\r\n        this.unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribe once to the event with the specified name.\r\n     *\r\n     * @returns {() => void} A function that unsubscribes the event handler from the event.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    one(fn) {\r\n        return this._one(fn);\r\n    }\r\n    /**\r\n     * Checks it the event has a subscription for the specified handler.\r\n     *\r\n     * @param {TEventHandler} fn The event handler that is called when the event is dispatched.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    has(fn) {\r\n        return this._has(fn);\r\n    }\r\n    /**\r\n     * Clears all the subscriptions.\r\n     *\r\n     * @memberOf DispatcherWrapper\r\n     */\r\n    clear() {\r\n        this._clear();\r\n    }\r\n}\r\nexports.DispatcherWrapper = DispatcherWrapper;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventListBase = void 0;\r\n/**\r\n * Base class for event lists classes. Implements the get and remove.\r\n *\r\n * @export\r\n * @abstract\r\n * @class EventListBaset\r\n * @template TEventDispatcher The type of event dispatcher.\r\n */\r\nclass EventListBase {\r\n    constructor() {\r\n        this._events = {};\r\n    }\r\n    /**\r\n     * Gets the dispatcher associated with the name.\r\n     *\r\n     * @param {string} name The name of the event.\r\n     * @returns {TEventDispatcher} The disptacher.\r\n     *\r\n     * @memberOf EventListBase\r\n     */\r\n    get(name) {\r\n        let event = this._events[name];\r\n        if (event) {\r\n            return event;\r\n        }\r\n        event = this.createDispatcher();\r\n        this._events[name] = event;\r\n        return event;\r\n    }\r\n    /**\r\n     * Removes the dispatcher associated with the name.\r\n     *\r\n     * @param {string} name\r\n     *\r\n     * @memberOf EventListBase\r\n     */\r\n    remove(name) {\r\n        delete this._events[name];\r\n    }\r\n}\r\nexports.EventListBase = EventListBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventManagement = void 0;\r\n/**\r\n * Allows the user to interact with the event.\r\n *\r\n * @export\r\n * @class EventManagement\r\n * @implements {IEventManagement}\r\n */\r\nclass EventManagement {\r\n    /**\r\n     * Creates an instance of EventManagement.\r\n     * @param {() => void} unsub An unsubscribe handler.\r\n     *\r\n     * @memberOf EventManagement\r\n     */\r\n    constructor(unsub) {\r\n        this.unsub = unsub;\r\n        this.propagationStopped = false;\r\n    }\r\n    /**\r\n     * Stops the propagation of the event.\r\n     * Cannot be used when async dispatch is done.\r\n     *\r\n     * @memberOf EventManagement\r\n     */\r\n    stopPropagation() {\r\n        this.propagationStopped = true;\r\n    }\r\n}\r\nexports.EventManagement = EventManagement;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.HandlingBase = void 0;\r\n/**\r\n * Base class that implements event handling. With a an\r\n * event list this base class will expose events that can be\r\n * subscribed to. This will give your class generic events.\r\n *\r\n * @export\r\n * @abstract\r\n * @class HandlingBase\r\n * @template TEventHandler The type of event handler.\r\n * @template TDispatcher The type of dispatcher.\r\n * @template TList The type of event list.\r\n */\r\nclass HandlingBase {\r\n    /**\r\n     * Creates an instance of HandlingBase.\r\n     * @param {TList} events The event list. Used for event management.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    constructor(events) {\r\n        this.events = events;\r\n    }\r\n    /**\r\n     * Subscribes once to the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    one(name, fn) {\r\n        this.events.get(name).one(fn);\r\n    }\r\n    /**\r\n     * Checks it the event has a subscription for the specified handler.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    has(name, fn) {\r\n        return this.events.get(name).has(fn);\r\n    }\r\n    /**\r\n     * Subscribes to the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    subscribe(name, fn) {\r\n        this.events.get(name).subscribe(fn);\r\n    }\r\n    /**\r\n     * Subscribes to the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    sub(name, fn) {\r\n        this.subscribe(name, fn);\r\n    }\r\n    /**\r\n     * Unsubscribes from the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    unsubscribe(name, fn) {\r\n        this.events.get(name).unsubscribe(fn);\r\n    }\r\n    /**\r\n     * Unsubscribes from the event with the specified name.\r\n     * @param {string} name The name of the event.\r\n     * @param {TEventHandler} fn The event handler.\r\n     *\r\n     * @memberOf HandlingBase\r\n     */\r\n    unsub(name, fn) {\r\n        this.unsubscribe(name, fn);\r\n    }\r\n}\r\nexports.HandlingBase = HandlingBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PromiseDispatcherBase = void 0;\r\nconst __1 = require(\"..\");\r\n/**\r\n * Dispatcher base for dispatchers that use promises. Each promise\r\n * is awaited before the next is dispatched, unless the event is\r\n * dispatched with the executeAsync flag.\r\n *\r\n * @export\r\n * @abstract\r\n * @class PromiseDispatcherBase\r\n * @extends {DispatcherBase<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass PromiseDispatcherBase extends __1.DispatcherBase {\r\n    /**\r\n     * The normal dispatch cannot be used in this class.\r\n     *\r\n     * @protected\r\n     * @param {boolean} executeAsync `True` if the even should be executed async.\r\n     * @param {*} scope The scope of the event. The scope becomes the `this` for handler.\r\n     * @param {IArguments} args The arguments for the event.\r\n     * @returns {(IPropagationStatus | null)} The propagation status, or if an `executeAsync` is used `null`.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    _dispatch(executeAsync, scope, args) {\r\n        throw new __1.DispatchError(\"_dispatch not supported. Use _dispatchAsPromise.\");\r\n    }\r\n    /**\r\n     * Crates a new subscription.\r\n     *\r\n     * @protected\r\n     * @param {TEventHandler} handler The handler.\r\n     * @param {boolean} isOnce Indicates if the handler should only run once.\r\n     * @returns {ISubscription<TEventHandler>} The subscription.\r\n     *\r\n     * @memberOf PromiseDispatcherBase\r\n     */\r\n    createSubscription(handler, isOnce) {\r\n        return new __1.PromiseSubscription(handler, isOnce);\r\n    }\r\n    /**\r\n     * Generic dispatch will dispatch the handlers with the given arguments.\r\n     *\r\n     * @protected\r\n     * @param {boolean} executeAsync `True` if the even should be executed async.\r\n     * @param {*} scope The scope of the event. The scope becomes the `this` for handler.\r\n     * @param {IArguments} args The arguments for the event.\r\n     * @returns {(IPropagationStatus | null)} The propagation status, or if an `executeAsync` is used `null`.\r\n     *\r\n     * @memberOf DispatcherBase\r\n     */\r\n    async _dispatchAsPromise(executeAsync, scope, args) {\r\n        //execute on a copy because of bug #9\r\n        for (let sub of [...this._subscriptions]) {\r\n            let ev = new __1.EventManagement(() => this.unsub(sub.handler));\r\n            let nargs = Array.prototype.slice.call(args);\r\n            nargs.push(ev);\r\n            let ps = sub;\r\n            await ps.execute(executeAsync, scope, nargs);\r\n            //cleanup subs that are no longer needed\r\n            this.cleanup(sub);\r\n            if (!executeAsync && ev.propagationStopped) {\r\n                return { propagationStopped: true };\r\n            }\r\n        }\r\n        if (executeAsync) {\r\n            return null;\r\n        }\r\n        return { propagationStopped: false };\r\n    }\r\n}\r\nexports.PromiseDispatcherBase = PromiseDispatcherBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PromiseSubscription = void 0;\r\n/**\r\n * Subscription implementation for events with promises.\r\n *\r\n * @export\r\n * @class PromiseSubscription\r\n * @implements {ISubscription<TEventHandler>}\r\n * @template TEventHandler The type of event handler.\r\n */\r\nclass PromiseSubscription {\r\n    /**\r\n     * Creates an instance of PromiseSubscription.\r\n     * @param {TEventHandler} handler The handler for the subscription.\r\n     * @param {boolean} isOnce Indicates if the handler should only be executed once.\r\n     *\r\n     * @memberOf PromiseSubscription\r\n     */\r\n    constructor(handler, isOnce) {\r\n        this.handler = handler;\r\n        this.isOnce = isOnce;\r\n        /**\r\n         * Indicates if the subscription has been executed before.\r\n         *\r\n         * @memberOf PromiseSubscription\r\n         */\r\n        this.isExecuted = false;\r\n    }\r\n    /**\r\n     * Executes the handler.\r\n     *\r\n     * @param {boolean} executeAsync True if the even should be executed async.\r\n     * @param {*} scope The scope the scope of the event.\r\n     * @param {IArguments} args The arguments for the event.\r\n     *\r\n     * @memberOf PromiseSubscription\r\n     */\r\n    async execute(executeAsync, scope, args) {\r\n        if (!this.isOnce || !this.isExecuted) {\r\n            this.isExecuted = true;\r\n            //TODO: do we need to cast to any -- seems yuck\r\n            var fn = this.handler;\r\n            if (executeAsync) {\r\n                setTimeout(() => {\r\n                    fn.apply(scope, args);\r\n                }, 1);\r\n                return;\r\n            }\r\n            let result = fn.apply(scope, args);\r\n            await result;\r\n        }\r\n    }\r\n}\r\nexports.PromiseSubscription = PromiseSubscription;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Subscription = void 0;\r\n/**\r\n * Stores a handler. Manages execution meta data.\r\n * @class Subscription\r\n * @template TEventHandler\r\n */\r\nclass Subscription {\r\n    /**\r\n     * Creates an instance of Subscription.\r\n     *\r\n     * @param {TEventHandler} handler The handler for the subscription.\r\n     * @param {boolean} isOnce Indicates if the handler should only be executed once.\r\n     */\r\n    constructor(handler, isOnce) {\r\n        this.handler = handler;\r\n        this.isOnce = isOnce;\r\n        /**\r\n         * Indicates if the subscription has been executed before.\r\n         */\r\n        this.isExecuted = false;\r\n    }\r\n    /**\r\n     * Executes the handler.\r\n     *\r\n     * @param {boolean} executeAsync True if the even should be executed async.\r\n     * @param {*} scope The scope the scope of the event.\r\n     * @param {IArguments} args The arguments for the event.\r\n     */\r\n    execute(executeAsync, scope, args) {\r\n        if (!this.isOnce || !this.isExecuted) {\r\n            this.isExecuted = true;\r\n            var fn = this.handler;\r\n            if (executeAsync) {\r\n                setTimeout(() => {\r\n                    fn.apply(scope, args);\r\n                }, 1);\r\n            }\r\n            else {\r\n                fn.apply(scope, args);\r\n            }\r\n        }\r\n    }\r\n}\r\nexports.Subscription = Subscription;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SubscriptionChangeEventDispatcher = void 0;\r\nconst __1 = require(\"..\");\r\n/**\r\n * Dispatcher for subscription changes.\r\n *\r\n * @export\r\n * @class SubscriptionChangeEventDispatcher\r\n * @extends {DispatcherBase<SubscriptionChangeEventHandler>}\r\n */\r\nclass SubscriptionChangeEventDispatcher extends __1.DispatcherBase {\r\n    /**\r\n     * Dispatches the event.\r\n     *\r\n     * @param {number} count The currrent number of subscriptions.\r\n     *\r\n     * @memberOf SubscriptionChangeEventDispatcher\r\n     */\r\n    dispatch(count) {\r\n        this._dispatch(false, this, arguments);\r\n    }\r\n}\r\nexports.SubscriptionChangeEventDispatcher = SubscriptionChangeEventDispatcher;\r\n", "\"use strict\";\r\n/*!\r\n * Strongly Typed Events for TypeScript - Core\r\n * https://github.com/KeesCBakker/StronlyTypedEvents/\r\n * http://keestalkstech.com\r\n *\r\n * Copyright Kees C. Bakker / KeesTalksTech\r\n * Released under the MIT license\r\n */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SubscriptionChangeEventDispatcher = exports.HandlingBase = exports.PromiseDispatcherBase = exports.PromiseSubscription = exports.DispatchError = exports.EventManagement = exports.EventListBase = exports.DispatcherWrapper = exports.DispatcherBase = exports.Subscription = void 0;\r\nconst DispatcherBase_1 = require(\"./dispatching/DispatcherBase\");\r\nObject.defineProperty(exports, \"DispatcherBase\", { enumerable: true, get: function () { return DispatcherBase_1.DispatcherBase; } });\r\nconst DispatchError_1 = require(\"./dispatching/DispatchError\");\r\nObject.defineProperty(exports, \"DispatchError\", { enumerable: true, get: function () { return DispatchError_1.DispatchError; } });\r\nconst DispatcherWrapper_1 = require(\"./dispatching/DispatcherWrapper\");\r\nObject.defineProperty(exports, \"DispatcherWrapper\", { enumerable: true, get: function () { return DispatcherWrapper_1.DispatcherWrapper; } });\r\nconst EventListBase_1 = require(\"./dispatching/EventListBase\");\r\nObject.defineProperty(exports, \"EventListBase\", { enumerable: true, get: function () { return EventListBase_1.EventListBase; } });\r\nconst EventManagement_1 = require(\"./management/EventManagement\");\r\nObject.defineProperty(exports, \"EventManagement\", { enumerable: true, get: function () { return EventManagement_1.EventManagement; } });\r\nconst HandlingBase_1 = require(\"./handling/HandlingBase\");\r\nObject.defineProperty(exports, \"HandlingBase\", { enumerable: true, get: function () { return HandlingBase_1.HandlingBase; } });\r\nconst PromiseDispatcherBase_1 = require(\"./dispatching/PromiseDispatcherBase\");\r\nObject.defineProperty(exports, \"PromiseDispatcherBase\", { enumerable: true, get: function () { return PromiseDispatcherBase_1.PromiseDispatcherBase; } });\r\nconst PromiseSubscription_1 = require(\"./events/PromiseSubscription\");\r\nObject.defineProperty(exports, \"PromiseSubscription\", { enumerable: true, get: function () { return PromiseSubscription_1.PromiseSubscription; } });\r\nconst Subscription_1 = require(\"./events/Subscription\");\r\nObject.defineProperty(exports, \"Subscription\", { enumerable: true, get: function () { return Subscription_1.Subscription; } });\r\nconst SubscriptionChangeEventHandler_1 = require(\"./dispatching/SubscriptionChangeEventHandler\");\r\nObject.defineProperty(exports, \"SubscriptionChangeEventDispatcher\", { enumerable: true, get: function () { return SubscriptionChangeEventHandler_1.SubscriptionChangeEventDispatcher; } });\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventDispatcher = void 0;\r\nconst ste_core_1 = require(\"ste-core\");\r\n/**\r\n * Dispatcher implementation for events. Can be used to subscribe, unsubscribe\r\n * or dispatch events. Use the ToEvent() method to expose the event.\r\n *\r\n * @export\r\n * @class EventDispatcher\r\n * @extends {DispatcherBase<IEventHandler<TSender, TArgs>>}\r\n * @implements {IEvent<TSender, TArgs>}\r\n * @template TSender\r\n * @template TArgs\r\n */\r\nclass EventDispatcher extends ste_core_1.DispatcherBase {\r\n    /**\r\n     * Creates an instance of EventDispatcher.\r\n     *\r\n     * @memberOf EventDispatcher\r\n     */\r\n    constructor() {\r\n        super();\r\n    }\r\n    /**\r\n     * Dispatches the event.\r\n     *\r\n     * @param {TSender} sender The sender object.\r\n     * @param {TArgs} args The arguments object.\r\n     * @returns {IPropagationStatus} The event status.\r\n     *\r\n     * @memberOf EventDispatcher\r\n     */\r\n    dispatch(sender, args) {\r\n        const result = this._dispatch(false, this, arguments);\r\n        if (result == null) {\r\n            throw new ste_core_1.DispatchError(\"Got `null` back from dispatch.\");\r\n        }\r\n        return result;\r\n    }\r\n    /**\r\n     * Dispatches the events thread.\r\n     * @param sender The sender.\r\n     * @param args The arguments object.\r\n     */\r\n    dispatchAsync(sender, args) {\r\n        this._dispatch(true, this, arguments);\r\n    }\r\n    /**\r\n     * Creates an event from the dispatcher. Will return the dispatcher\r\n     * in a wrapper. This will prevent exposure of any dispatcher methods.\r\n     *\r\n     * @returns {IEvent<TSender, TArgs>} The event.\r\n     *\r\n     * @memberOf EventDispatcher\r\n     */\r\n    asEvent() {\r\n        return super.asEvent();\r\n    }\r\n}\r\nexports.EventDispatcher = EventDispatcher;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventList = void 0;\r\nconst ste_core_1 = require(\"ste-core\");\r\nconst EventDispatcher_1 = require(\"./EventDispatcher\");\r\n/**\r\n * Storage class for multiple events that are accessible by name.\r\n * Events dispatchers are automatically created.\r\n */\r\nclass EventList extends ste_core_1.EventListBase {\r\n    /**\r\n     * Creates a new EventList instance.\r\n     */\r\n    constructor() {\r\n        super();\r\n    }\r\n    /**\r\n     * Creates a new dispatcher instance.\r\n     */\r\n    createDispatcher() {\r\n        return new EventDispatcher_1.EventDispatcher();\r\n    }\r\n}\r\nexports.EventList = EventList;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EventHandlingBase = void 0;\r\nconst ste_core_1 = require(\"ste-core\");\r\nconst EventList_1 = require(\"./EventList\");\r\n/**\r\n * Extends objects with signal event handling capabilities.\r\n */\r\nclass EventHandlingBase extends ste_core_1.HandlingBase {\r\n    constructor() {\r\n        super(new EventList_1.EventList());\r\n    }\r\n}\r\nexports.EventHandlingBase = EventHandlingBase;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.NonUniformEventList = void 0;\r\nconst EventDispatcher_1 = require(\"./EventDispatcher\");\r\n/**\r\n * Similar to EventList, but instead of TArgs, a map of event names ang argument types is provided with TArgsMap.\r\n */\r\nclass NonUniformEventList {\r\n    constructor() {\r\n        this._events = {};\r\n    }\r\n    /**\r\n     * Gets the dispatcher associated with the name.\r\n     * @param name The name of the event.\r\n     */\r\n    get(name) {\r\n        if (this._events[name]) {\r\n            // @TODO avoid typecasting. Not sure why TS thinks this._events[name] could still be undefined.\r\n            return this._events[name];\r\n        }\r\n        const event = this.createDispatcher();\r\n        this._events[name] = event;\r\n        return event;\r\n    }\r\n    /**\r\n     * Removes the dispatcher associated with the name.\r\n     * @param name The name of the event.\r\n     */\r\n    remove(name) {\r\n        delete this._events[name];\r\n    }\r\n    /**\r\n     * Creates a new dispatcher instance.\r\n     */\r\n    createDispatcher() {\r\n        return new EventDispatcher_1.EventDispatcher();\r\n    }\r\n}\r\nexports.NonUniformEventList = NonUniformEventList;\r\n", "\"use strict\";\r\n/*!\r\n * Strongly Typed Events for TypeScript - Core\r\n * https://github.com/KeesCBakker/StronlyTypedEvents/\r\n * http://keestalkstech.com\r\n *\r\n * Copyright Kees C. Bakker / KeesTalksTech\r\n * Released under the MIT license\r\n */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.NonUniformEventList = exports.EventList = exports.EventHandlingBase = exports.EventDispatcher = void 0;\r\nconst EventDispatcher_1 = require(\"./EventDispatcher\");\r\nObject.defineProperty(exports, \"EventDispatcher\", { enumerable: true, get: function () { return EventDispatcher_1.EventDispatcher; } });\r\nconst EventHandlingBase_1 = require(\"./EventHandlingBase\");\r\nObject.defineProperty(exports, \"EventHandlingBase\", { enumerable: true, get: function () { return EventHandlingBase_1.EventHandlingBase; } });\r\nconst EventList_1 = require(\"./EventList\");\r\nObject.defineProperty(exports, \"EventList\", { enumerable: true, get: function () { return EventList_1.EventList; } });\r\nconst NonUniformEventList_1 = require(\"./NonUniformEventList\");\r\nObject.defineProperty(exports, \"NonUniformEventList\", { enumerable: true, get: function () { return NonUniformEventList_1.NonUniformEventList; } });\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"./IFile\";\r\n\r\nexport enum FileDifferenceType {\r\n  none = 0,\r\n  contentsDifferent = 1,\r\n  fileAdded = 2,\r\n  fileDeleted = 3,\r\n}\r\n\r\nexport default interface IFileDifference {\r\n  type: FileDifferenceType;\r\n  original?: IFile;\r\n  updated?: IFile;\r\n  path: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\n\r\nexport enum FolderDifferenceType {\r\n  none = 0,\r\n  fileContentsDifferent = 1,\r\n  fileListDifferent = 2,\r\n  fileListAndContentsDifferent = 3,\r\n  folderAdded = 4,\r\n  folderAddedAndFileContentsDifferent = 5,\r\n  folderAddedAndFileListDifferent = 6,\r\n  folderAddedAndFileListAndContentsDifferent = 7,\r\n  folderDeleted = 8,\r\n  folderDeletedAndFileContentsDifferent = 9,\r\n  folderDeletedAndFileListDifferent = 10,\r\n  folderDeletedAndFileListAndContentsDifferent = 11,\r\n  folderListDifferent = 12,\r\n  folderListDifferentAndFileContentsDifferent = 13,\r\n  folderListDifferentAndFileListDifferent = 14,\r\n  folderListDifferentAndFileListAndContentsDifferent = 15,\r\n}\r\n\r\nexport default interface IFolderDifference {\r\n  type: FolderDifferenceType;\r\n  original?: IFolder;\r\n  updated?: IFolder;\r\n  path: string;\r\n}\r\n", "'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "module.exports = require('stream');\n", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n", "'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}", "'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};", "\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n  exports = module.exports = Stream.Readable;\n  exports.Readable = Stream.Readable;\n  exports.Writable = Stream.Writable;\n  exports.Duplex = Stream.Duplex;\n  exports.Transform = Stream.Transform;\n  exports.PassThrough = Stream.PassThrough;\n  exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n", "\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n", "\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n", "'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\nif (process.browser) {\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n} else {\n  scheduleDrain = function () {\n    process.nextTick(nextTick);\n  };\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n", "'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n/* istanbul ignore else */\nif (!process.browser) {\n  // in which we actually take advantage of JS scoping\n  var UNHANDLED = ['UNHANDLED'];\n}\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    this.handled = UNHANDLED;\n  }\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype.finally = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype.catch = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (this.handled === UNHANDLED) {\n      this.handled = null;\n    }\n  }\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (self.handled === UNHANDLED) {\n      immediate(function () {\n        if (self.handled === UNHANDLED) {\n          process.emit('unhandledRejection', error, self);\n        }\n      });\n    }\n  }\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n", "\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n", "(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6\u20138\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", "\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n", "\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n    // the name of the worker\n    this.name = name || \"default\";\n    // an object containing metadata about the workers chain\n    this.streamInfo = {};\n    // an error which happened when the worker was paused\n    this.generatedError = null;\n    // an object containing metadata to be merged by this worker into the general metadata\n    this.extraStreamInfo = {};\n    // true if the stream is paused (and should not do anything), false otherwise\n    this.isPaused = true;\n    // true if the stream is finished (and should not do anything), false otherwise\n    this.isFinished = false;\n    // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n    this.isLocked = false;\n    // the event listeners\n    this._listeners = {\n        \"data\":[],\n        \"end\":[],\n        \"error\":[]\n    };\n    // the previous worker, if any\n    this.previous = null;\n}\n\nGenericWorker.prototype = {\n    /**\n     * Push a chunk to the next workers.\n     * @param {Object} chunk the chunk to push\n     */\n    push : function (chunk) {\n        this.emit(\"data\", chunk);\n    },\n    /**\n     * End the stream.\n     * @return {Boolean} true if this call ended the worker, false otherwise.\n     */\n    end : function () {\n        if (this.isFinished) {\n            return false;\n        }\n\n        this.flush();\n        try {\n            this.emit(\"end\");\n            this.cleanUp();\n            this.isFinished = true;\n        } catch (e) {\n            this.emit(\"error\", e);\n        }\n        return true;\n    },\n    /**\n     * End the stream with an error.\n     * @param {Error} e the error which caused the premature end.\n     * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n     */\n    error : function (e) {\n        if (this.isFinished) {\n            return false;\n        }\n\n        if(this.isPaused) {\n            this.generatedError = e;\n        } else {\n            this.isFinished = true;\n\n            this.emit(\"error\", e);\n\n            // in the workers chain exploded in the middle of the chain,\n            // the error event will go downward but we also need to notify\n            // workers upward that there has been an error.\n            if(this.previous) {\n                this.previous.error(e);\n            }\n\n            this.cleanUp();\n        }\n        return true;\n    },\n    /**\n     * Add a callback on an event.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Function} listener the function to call when the event is triggered\n     * @return {GenericWorker} the current object for chainability\n     */\n    on : function (name, listener) {\n        this._listeners[name].push(listener);\n        return this;\n    },\n    /**\n     * Clean any references when a worker is ending.\n     */\n    cleanUp : function () {\n        this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n        this._listeners = [];\n    },\n    /**\n     * Trigger an event. This will call registered callback with the provided arg.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Object} arg the argument to call the callback with.\n     */\n    emit : function (name, arg) {\n        if (this._listeners[name]) {\n            for(var i = 0; i < this._listeners[name].length; i++) {\n                this._listeners[name][i].call(this, arg);\n            }\n        }\n    },\n    /**\n     * Chain a worker with an other.\n     * @param {Worker} next the worker receiving events from the current one.\n     * @return {worker} the next worker for chainability\n     */\n    pipe : function (next) {\n        return next.registerPrevious(this);\n    },\n    /**\n     * Same as `pipe` in the other direction.\n     * Using an API with `pipe(next)` is very easy.\n     * Implementing the API with the point of view of the next one registering\n     * a source is easier, see the ZipFileWorker.\n     * @param {Worker} previous the previous worker, sending events to this one\n     * @return {Worker} the current worker for chainability\n     */\n    registerPrevious : function (previous) {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n\n        // sharing the streamInfo...\n        this.streamInfo = previous.streamInfo;\n        // ... and adding our own bits\n        this.mergeStreamInfo();\n        this.previous =  previous;\n        var self = this;\n        previous.on(\"data\", function (chunk) {\n            self.processChunk(chunk);\n        });\n        previous.on(\"end\", function () {\n            self.end();\n        });\n        previous.on(\"error\", function (e) {\n            self.error(e);\n        });\n        return this;\n    },\n    /**\n     * Pause the stream so it doesn't send events anymore.\n     * @return {Boolean} true if this call paused the worker, false otherwise.\n     */\n    pause : function () {\n        if(this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = true;\n\n        if(this.previous) {\n            this.previous.pause();\n        }\n        return true;\n    },\n    /**\n     * Resume a paused stream.\n     * @return {Boolean} true if this call resumed the worker, false otherwise.\n     */\n    resume : function () {\n        if(!this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = false;\n\n        // if true, the worker tried to resume but failed\n        var withError = false;\n        if(this.generatedError) {\n            this.error(this.generatedError);\n            withError = true;\n        }\n        if(this.previous) {\n            this.previous.resume();\n        }\n\n        return !withError;\n    },\n    /**\n     * Flush any remaining bytes as the stream is ending.\n     */\n    flush : function () {},\n    /**\n     * Process a chunk. This is usually the method overridden.\n     * @param {Object} chunk the chunk to process.\n     */\n    processChunk : function(chunk) {\n        this.push(chunk);\n    },\n    /**\n     * Add a key/value to be added in the workers chain streamInfo once activated.\n     * @param {String} key the key to use\n     * @param {Object} value the associated value\n     * @return {Worker} the current worker for chainability\n     */\n    withStreamInfo : function (key, value) {\n        this.extraStreamInfo[key] = value;\n        this.mergeStreamInfo();\n        return this;\n    },\n    /**\n     * Merge this worker's streamInfo into the chain's streamInfo.\n     */\n    mergeStreamInfo : function () {\n        for(var key in this.extraStreamInfo) {\n            if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n                continue;\n            }\n            this.streamInfo[key] = this.extraStreamInfo[key];\n        }\n    },\n\n    /**\n     * Lock the stream to prevent further updates on the workers chain.\n     * After calling this method, all calls to pipe will fail.\n     */\n    lock: function () {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n        this.isLocked = true;\n        if (this.previous) {\n            this.previous.lock();\n        }\n    },\n\n    /**\n     *\n     * Pretty print the workers chain.\n     */\n    toString : function () {\n        var me = \"Worker \" + this.name;\n        if (this.previous) {\n            return this.previous + \" -> \" + me;\n        } else {\n            return me;\n        }\n    }\n};\n\nmodule.exports = GenericWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n    _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodejsUtils.newBufferFrom(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n    GenericWorker.call(this, \"utf-8 decode\");\n    // the last bytes if a chunk didn't end with a complete codepoint.\n    this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n    var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n    // 1st step, re-use what's left of the previous chunk\n    if (this.leftOver && this.leftOver.length) {\n        if(support.uint8array) {\n            var previousData = data;\n            data = new Uint8Array(previousData.length + this.leftOver.length);\n            data.set(this.leftOver, 0);\n            data.set(previousData, this.leftOver.length);\n        } else {\n            data = this.leftOver.concat(data);\n        }\n        this.leftOver = null;\n    }\n\n    var nextBoundary = utf8border(data);\n    var usableData = data;\n    if (nextBoundary !== data.length) {\n        if (support.uint8array) {\n            usableData = data.subarray(0, nextBoundary);\n            this.leftOver = data.subarray(nextBoundary, data.length);\n        } else {\n            usableData = data.slice(0, nextBoundary);\n            this.leftOver = data.slice(nextBoundary, data.length);\n        }\n    }\n\n    this.push({\n        data : exports.utf8decode(usableData),\n        meta : chunk.meta\n    });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n    if(this.leftOver && this.leftOver.length) {\n        this.push({\n            data : exports.utf8decode(this.leftOver),\n            meta : {}\n        });\n        this.leftOver = null;\n    }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n    GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : exports.utf8encode(chunk.data),\n        meta : chunk.meta\n    });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n    GenericWorker.call(this, \"ConvertWorker to \" + destType);\n    this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : utils.transformTo(this.destType, chunk.data),\n        meta : chunk.meta\n    });\n};\nmodule.exports = ConvertWorker;\n", "\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n    Readable.call(this, options);\n    this._helper = helper;\n\n    var self = this;\n    helper.on(\"data\", function (data, meta) {\n        if (!self.push(data)) {\n            self._helper.pause();\n        }\n        if(updateCb) {\n            updateCb(meta);\n        }\n    })\n        .on(\"error\", function(e) {\n            self.emit(\"error\", e);\n        })\n        .on(\"end\", function () {\n            self.push(null);\n        });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n    this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n    try {\n        NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n    } catch(e) {\n        // ignore\n    }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n    switch(type) {\n    case \"blob\" :\n        return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n    case \"base64\" :\n        return base64.encode(content);\n    default :\n        return utils.transformTo(type, content);\n    }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n    var i, index = 0, res = null, totalLength = 0;\n    for(i = 0; i < dataArray.length; i++) {\n        totalLength += dataArray[i].length;\n    }\n    switch(type) {\n    case \"string\":\n        return dataArray.join(\"\");\n    case \"array\":\n        return Array.prototype.concat.apply([], dataArray);\n    case \"uint8array\":\n        res = new Uint8Array(totalLength);\n        for(i = 0; i < dataArray.length; i++) {\n            res.set(dataArray[i], index);\n            index += dataArray[i].length;\n        }\n        return res;\n    case \"nodebuffer\":\n        return Buffer.concat(dataArray);\n    default:\n        throw new Error(\"concat : unsupported type '\"  + type + \"'\");\n    }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n    return new external.Promise(function (resolve, reject){\n        var dataArray = [];\n        var chunkType = helper._internalType,\n            resultType = helper._outputType,\n            mimeType = helper._mimeType;\n        helper\n            .on(\"data\", function (data, meta) {\n                dataArray.push(data);\n                if(updateCallback) {\n                    updateCallback(meta);\n                }\n            })\n            .on(\"error\", function(err) {\n                dataArray = [];\n                reject(err);\n            })\n            .on(\"end\", function (){\n                try {\n                    var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n                    resolve(result);\n                } catch (e) {\n                    reject(e);\n                }\n                dataArray = [];\n            })\n            .resume();\n    });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n    var internalType = outputType;\n    switch(outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n        internalType = \"uint8array\";\n        break;\n    case \"base64\":\n        internalType = \"string\";\n        break;\n    }\n\n    try {\n        // the type used internally\n        this._internalType = internalType;\n        // the type used to output results\n        this._outputType = outputType;\n        // the mime type\n        this._mimeType = mimeType;\n        utils.checkSupport(internalType);\n        this._worker = worker.pipe(new ConvertWorker(internalType));\n        // the last workers can be rewired without issues but we need to\n        // prevent any updates on previous workers.\n        worker.lock();\n    } catch(e) {\n        this._worker = new GenericWorker(\"error\");\n        this._worker.error(e);\n    }\n}\n\nStreamHelper.prototype = {\n    /**\n     * Listen a StreamHelper, accumulate its content and concatenate it into a\n     * complete block.\n     * @param {Function} updateCb the update callback.\n     * @return Promise the promise for the accumulation.\n     */\n    accumulate : function (updateCb) {\n        return accumulate(this, updateCb);\n    },\n    /**\n     * Add a listener on an event triggered on a stream.\n     * @param {String} evt the name of the event\n     * @param {Function} fn the listener\n     * @return {StreamHelper} the current helper.\n     */\n    on : function (evt, fn) {\n        var self = this;\n\n        if(evt === \"data\") {\n            this._worker.on(evt, function (chunk) {\n                fn.call(self, chunk.data, chunk.meta);\n            });\n        } else {\n            this._worker.on(evt, function () {\n                utils.delay(fn, arguments, self);\n            });\n        }\n        return this;\n    },\n    /**\n     * Resume the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    resume : function () {\n        utils.delay(this._worker.resume, [], this._worker);\n        return this;\n    },\n    /**\n     * Pause the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    pause : function () {\n        this._worker.pause();\n        return this;\n    },\n    /**\n     * Return a nodejs stream for this helper.\n     * @param {Function} updateCb the update callback.\n     * @return {NodejsStreamOutputAdapter} the nodejs stream.\n     */\n    toNodejsStream : function (updateCb) {\n        utils.checkSupport(\"nodestream\");\n        if (this._outputType !== \"nodebuffer\") {\n            // an object stream containing blob/arraybuffer/uint8array/string\n            // is strange and I don't know if it would be useful.\n            // I you find this comment and have a good usecase, please open a\n            // bug report !\n            throw new Error(this._outputType + \" is not supported by this method\");\n        }\n\n        return new NodejsStreamOutputAdapter(this, {\n            objectMode : this._outputType !== \"nodebuffer\"\n        }, updateCb);\n    }\n};\n\n\nmodule.exports = StreamHelper;\n", "\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n    GenericWorker.call(this, \"DataWorker\");\n    var self = this;\n    this.dataIsReady = false;\n    this.index = 0;\n    this.max = 0;\n    this.data = null;\n    this.type = \"\";\n\n    this._tickScheduled = false;\n\n    dataP.then(function (data) {\n        self.dataIsReady = true;\n        self.data = data;\n        self.max = data && data.length || 0;\n        self.type = utils.getTypeOf(data);\n        if(!self.isPaused) {\n            self._tickAndRepeat();\n        }\n    }, function (e) {\n        self.error(e);\n    });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this._tickScheduled && this.dataIsReady) {\n        this._tickScheduled = true;\n        utils.delay(this._tickAndRepeat, [], this);\n    }\n    return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n    this._tickScheduled = false;\n    if(this.isPaused || this.isFinished) {\n        return;\n    }\n    this._tick();\n    if(!this.isFinished) {\n        utils.delay(this._tickAndRepeat, [], this);\n        this._tickScheduled = true;\n    }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n    if(this.isPaused || this.isFinished) {\n        return false;\n    }\n\n    var size = DEFAULT_BLOCK_SIZE;\n    var data = null, nextIndex = Math.min(this.max, this.index + size);\n    if (this.index >= this.max) {\n        // EOF\n        return this.end();\n    } else {\n        switch(this.type) {\n        case \"string\":\n            data = this.data.substring(this.index, nextIndex);\n            break;\n        case \"uint8array\":\n            data = this.data.subarray(this.index, nextIndex);\n            break;\n        case \"array\":\n        case \"nodebuffer\":\n            data = this.data.slice(this.index, nextIndex);\n            break;\n        }\n        this.index = nextIndex;\n        return this.push({\n            data : data,\n            meta : {\n                percent : this.max ? this.index / this.max * 100 : 0\n            }\n        });\n    }\n};\n\nmodule.exports = DataWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n    var c, table = [];\n\n    for(var n =0; n < 256; n++){\n        c = n;\n        for(var k =0; k < 8; k++){\n            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n        }\n        table[n] = c;\n    }\n\n    return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n    if (typeof input === \"undefined\" || !input.length) {\n        return 0;\n    }\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n\n    if(isArray) {\n        return crc32(crc|0, input, input.length, 0);\n    } else {\n        return crc32str(crc|0, input, input.length, 0);\n    }\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n    GenericWorker.call(this, \"Crc32Probe\");\n    this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n    this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n    this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n    GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n    this.propName = propName;\n    this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n    if(chunk) {\n        var length = this.streamInfo[this.propName] || 0;\n        this.streamInfo[this.propName] = length + chunk.data.length;\n    }\n    GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n", "\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n    this.compressedSize = compressedSize;\n    this.uncompressedSize = uncompressedSize;\n    this.crc32 = crc32;\n    this.compression = compression;\n    this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Create a worker to get the uncompressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getContentWorker: function () {\n        var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n            .pipe(this.compression.uncompressWorker())\n            .pipe(new DataLengthProbe(\"data_length\"));\n\n        var that = this;\n        worker.on(\"end\", function () {\n            if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n                throw new Error(\"Bug : uncompressed data size mismatch\");\n            }\n        });\n        return worker;\n    },\n    /**\n     * Create a worker to get the compressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getCompressedWorker: function () {\n        return new DataWorker(external.Promise.resolve(this.compressedContent))\n            .withStreamInfo(\"compressedSize\", this.compressedSize)\n            .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n            .withStreamInfo(\"crc32\", this.crc32)\n            .withStreamInfo(\"compression\", this.compression)\n        ;\n    }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n    return uncompressedWorker\n        .pipe(new Crc32Probe())\n        .pipe(new DataLengthProbe(\"uncompressedSize\"))\n        .pipe(compression.compressWorker(compressionOptions))\n        .pipe(new DataLengthProbe(\"compressedSize\"))\n        .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n", "\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this._dataBinary = options.binary;\n    // keep only the compression\n    this.options = {\n        compression : options.compression,\n        compressionOptions : options.compressionOptions\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Create an internal stream for the content of this object.\n     * @param {String} type the type of each chunk.\n     * @return StreamHelper the stream.\n     */\n    internalStream: function (type) {\n        var result = null, outputType = \"string\";\n        try {\n            if (!type) {\n                throw new Error(\"No output type specified.\");\n            }\n            outputType = type.toLowerCase();\n            var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n            if (outputType === \"binarystring\" || outputType === \"text\") {\n                outputType = \"string\";\n            }\n            result = this._decompressWorker();\n\n            var isUnicodeString = !this._dataBinary;\n\n            if (isUnicodeString && !askUnicodeString) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            if (!isUnicodeString && askUnicodeString) {\n                result = result.pipe(new utf8.Utf8DecodeWorker());\n            }\n        } catch (e) {\n            result = new GenericWorker(\"error\");\n            result.error(e);\n        }\n\n        return new StreamHelper(result, outputType, \"\");\n    },\n\n    /**\n     * Prepare the content in the asked type.\n     * @param {String} type the type of the result.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Promise the promise of the result.\n     */\n    async: function (type, onUpdate) {\n        return this.internalStream(type).accumulate(onUpdate);\n    },\n\n    /**\n     * Prepare the content as a nodejs stream.\n     * @param {String} type the type of each chunk.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Stream the stream.\n     */\n    nodeStream: function (type, onUpdate) {\n        return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n    },\n\n    /**\n     * Return a worker for the compressed content.\n     * @private\n     * @param {Object} compression the compression object to use.\n     * @param {Object} compressionOptions the options to use when compressing.\n     * @return Worker the worker.\n     */\n    _compressWorker: function (compression, compressionOptions) {\n        if (\n            this._data instanceof CompressedObject &&\n            this._data.compression.magic === compression.magic\n        ) {\n            return this._data.getCompressedWorker();\n        } else {\n            var result = this._decompressWorker();\n            if(!this._dataBinary) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n        }\n    },\n    /**\n     * Return a worker for the decompressed content.\n     * @private\n     * @return Worker the worker.\n     */\n    _decompressWorker : function () {\n        if (this._data instanceof CompressedObject) {\n            return this._data.getContentWorker();\n        } else if (this._data instanceof GenericWorker) {\n            return this._data;\n        } else {\n            return new DataWorker(this._data);\n        }\n    }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n    ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n", "'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n", "'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n", "'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n", "// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n", "'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n", "'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n", "// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n", "\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n    GenericWorker.call(this, \"FlateWorker/\" + action);\n\n    this._pako = null;\n    this._pakoAction = action;\n    this._pakoOptions = options;\n    // the `meta` object from the last chunk received\n    // this allow this worker to pass around metadata\n    this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n    this.meta = chunk.meta;\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n    GenericWorker.prototype.flush.call(this);\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n    this._pako = new pako[this._pakoAction]({\n        raw: true,\n        level: this._pakoOptions.level || -1 // default compression\n    });\n    var self = this;\n    this._pako.onData = function(data) {\n        self.push({\n            data : data,\n            meta : self.meta\n        });\n    };\n};\n\nexports.compressWorker = function (compressionOptions) {\n    return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n    return new FlateWorker(\"Inflate\", {});\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compressWorker : function () {\n        return new GenericWorker(\"STORE compression\");\n    },\n    uncompressWorker : function () {\n        return new GenericWorker(\"STORE decompression\");\n    }\n};\nexports.DEFLATE = require(\"./flate\");\n", "\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\", i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n    // the dir flag is already set for compatibility\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n    var file = streamInfo[\"file\"],\n        compression = streamInfo[\"compression\"],\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment,\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir = file.dir,\n        date = file.date;\n\n\n    var dataInfo = {\n        crc32 : 0,\n        compressedSize : 0,\n        uncompressedSize : 0\n    };\n\n    // if the content is streamed, the sizes/crc32 are only available AFTER\n    // the end of the stream.\n    if (!streamedContent || streamingEnded) {\n        dataInfo.crc32 = streamInfo[\"crc32\"];\n        dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n        dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n    }\n\n    var bitflag = 0;\n    if (streamedContent) {\n        // Bit 3: the sizes/crc32 are set to zero in the local header.\n        // The correct values are put in the data descriptor immediately\n        // following the compressed data.\n        bitflag |= 0x0008;\n    }\n    if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n        // Bit 11: Language encoding flag (EFS).\n        bitflag |= 0x0800;\n    }\n\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getUTCHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getUTCMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getUTCSeconds() / 2;\n\n    dosDate = date.getUTCFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getUTCMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getUTCDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    header += decToHex(bitflag, 2);\n    // compression method\n    header += compression.magic;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(dataInfo.crc32, 4);\n    // compressed size\n    header += decToHex(dataInfo.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(dataInfo.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n        // version made by (00: DOS)\n        decToHex(versionMadeBy, 2) +\n        // file header (common to file and central directory)\n        header +\n        // file comment length\n        decToHex(encodedComment.length, 2) +\n        // disk number start\n        \"\\x00\\x00\" +\n        // internal file attributes TODO\n        \"\\x00\\x00\" +\n        // external file attributes\n        decToHex(extFileAttr, 4) +\n        // relative offset of local header\n        decToHex(offset, 4) +\n        // file name\n        encodedFileName +\n        // extra field\n        extraFields +\n        // file comment\n        encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord\n    };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n    var dirEnd = \"\";\n    var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n    // end of central dir signature\n    dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(entriesCount, 2) +\n        // total number of entries in the central directory\n        decToHex(entriesCount, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n    return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n    var descriptor = \"\";\n    descriptor = signature.DATA_DESCRIPTOR +\n        // crc-32                          4 bytes\n        decToHex(streamInfo[\"crc32\"], 4) +\n        // compressed size                 4 bytes\n        decToHex(streamInfo[\"compressedSize\"], 4) +\n        // uncompressed size               4 bytes\n        decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n    return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n    GenericWorker.call(this, \"ZipFileWorker\");\n    // The number of bytes written so far. This doesn't count accumulated chunks.\n    this.bytesWritten = 0;\n    // The comment of the zip file\n    this.zipComment = comment;\n    // The platform \"generating\" the zip file.\n    this.zipPlatform = platform;\n    // the function to encode file names and comments.\n    this.encodeFileName = encodeFileName;\n    // Should we stream the content of the files ?\n    this.streamFiles = streamFiles;\n    // If `streamFiles` is false, we will need to accumulate the content of the\n    // files to calculate sizes / crc32 (and write them *before* the content).\n    // This boolean indicates if we are accumulating chunks (it will change a lot\n    // during the lifetime of this worker).\n    this.accumulate = false;\n    // The buffer receiving chunks when accumulating content.\n    this.contentBuffer = [];\n    // The list of generated directory records.\n    this.dirRecords = [];\n    // The offset (in bytes) from the beginning of the zip file for the current source.\n    this.currentSourceOffset = 0;\n    // The total number of entries in this zip file.\n    this.entriesCount = 0;\n    // the name of the file currently being added, null when handling the end of the zip file.\n    // Used for the emitted metadata.\n    this.currentFile = null;\n\n\n\n    this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n    var currentFilePercent = chunk.meta.percent || 0;\n    var entriesCount = this.entriesCount;\n    var remainingFiles = this._sources.length;\n\n    if(this.accumulate) {\n        this.contentBuffer.push(chunk);\n    } else {\n        this.bytesWritten += chunk.data.length;\n\n        GenericWorker.prototype.push.call(this, {\n            data : chunk.data,\n            meta : {\n                currentFile : this.currentFile,\n                percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n            }\n        });\n    }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n    this.currentSourceOffset = this.bytesWritten;\n    this.currentFile = streamInfo[\"file\"].name;\n\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n    // don't stream folders (because they don't have any content)\n    if(streamedContent) {\n        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n    } else {\n        // we need to wait for the whole file before pushing anything\n        this.accumulate = true;\n    }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n    this.accumulate = false;\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n    var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n    this.dirRecords.push(record.dirRecord);\n    if(streamedContent) {\n        // after the streamed file, we put data descriptors\n        this.push({\n            data : generateDataDescriptors(streamInfo),\n            meta : {percent:100}\n        });\n    } else {\n        // the content wasn't streamed, we need to push everything now\n        // first the file record, then the content\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n        while(this.contentBuffer.length) {\n            this.push(this.contentBuffer.shift());\n        }\n    }\n    this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n    var localDirLength = this.bytesWritten;\n    for(var i = 0; i < this.dirRecords.length; i++) {\n        this.push({\n            data : this.dirRecords[i],\n            meta : {percent:100}\n        });\n    }\n    var centralDirLength = this.bytesWritten - localDirLength;\n\n    var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n    this.push({\n        data : dirEnd,\n        meta : {percent:100}\n    });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n    this.previous = this._sources.shift();\n    this.openedSource(this.previous.streamInfo);\n    if (this.isPaused) {\n        this.previous.pause();\n    } else {\n        this.previous.resume();\n    }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n    this._sources.push(previous);\n    var self = this;\n\n    previous.on(\"data\", function (chunk) {\n        self.processChunk(chunk);\n    });\n    previous.on(\"end\", function () {\n        self.closedSource(self.previous.streamInfo);\n        if(self._sources.length) {\n            self.prepareNextSource();\n        } else {\n            self.end();\n        }\n    });\n    previous.on(\"error\", function (e) {\n        self.error(e);\n    });\n    return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this.previous && this._sources.length) {\n        this.prepareNextSource();\n        return true;\n    }\n    if (!this.previous && !this._sources.length && !this.generatedError) {\n        this.end();\n        return true;\n    }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n    var sources = this._sources;\n    if(!GenericWorker.prototype.error.call(this, e)) {\n        return false;\n    }\n    for(var i = 0; i < sources.length; i++) {\n        try {\n            sources[i].error(e);\n        } catch(e) {\n            // the `error` exploded, nothing to do\n        }\n    }\n    return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n    GenericWorker.prototype.lock.call(this);\n    var sources = this._sources;\n    for(var i = 0; i < sources.length; i++) {\n        sources[i].lock();\n    }\n};\n\nmodule.exports = ZipFileWorker;\n", "\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n    var compressionName = fileCompression || zipCompression;\n    var compression = compressions[compressionName];\n    if (!compression) {\n        throw new Error(compressionName + \" is not a valid compression method !\");\n    }\n    return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n    var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n    var entriesCount = 0;\n    try {\n\n        zip.forEach(function (relativePath, file) {\n            entriesCount++;\n            var compression = getCompression(file.options.compression, options.compression);\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n            var dir = file.dir, date = file.date;\n\n            file._compressWorker(compression, compressionOptions)\n                .withStreamInfo(\"file\", {\n                    name : relativePath,\n                    dir : dir,\n                    date : date,\n                    comment : file.comment || \"\",\n                    unixPermissions : file.unixPermissions,\n                    dosPermissions : file.dosPermissions\n                })\n                .pipe(zipFileWorker);\n        });\n        zipFileWorker.entriesCount = entriesCount;\n    } catch (e) {\n        zipFileWorker.error(e);\n    }\n\n    return zipFileWorker;\n};\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n    GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n    this._upstreamEnded = false;\n    this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n    var self = this;\n    this._stream = stream;\n    stream.pause();\n    stream\n        .on(\"data\", function (chunk) {\n            self.push({\n                data: chunk,\n                meta : {\n                    percent : 0\n                }\n            });\n        })\n        .on(\"error\", function (e) {\n            if(self.isPaused) {\n                this.generatedError = e;\n            } else {\n                self.error(e);\n            }\n        })\n        .on(\"end\", function () {\n            if(self.isPaused) {\n                self._upstreamEnded = true;\n            } else {\n                self.end();\n            }\n        });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n    if(!GenericWorker.prototype.pause.call(this)) {\n        return false;\n    }\n    this._stream.pause();\n    return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if(this._upstreamEnded) {\n        this.end();\n    } else {\n        this._stream.resume();\n    }\n\n    return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n", "\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n\n    /*\n     * Correct options.\n     */\n\n    var o = utils.extend(originalOptions || {}, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) {\n        o.compression = o.compression.toUpperCase();\n    }\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n    if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n        o.binary = !isUnicodeString;\n    }\n\n\n    var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n    if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n        o.base64 = false;\n        o.binary = true;\n        data = \"\";\n        o.compression = \"STORE\";\n        dataType = \"string\";\n    }\n\n    /*\n     * Convert content to fit.\n     */\n\n    var zipObjectContent = null;\n    if (data instanceof CompressedObject || data instanceof GenericWorker) {\n        zipObjectContent = data;\n    } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        zipObjectContent = new NodejsStreamInputAdapter(name, data);\n    } else {\n        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n    }\n\n    var object = new ZipObject(name, zipObjectContent, o);\n    this.files[name] = object;\n    /*\n    TODO: we can't throw an exception because we have async promises\n    (we can have a promise of a Date() for example) but returning a\n    promise is useless because file(name, data) returns the JSZip\n    object for chaining. Should we break that to allow the user\n    to catch the error ?\n\n    return external.Promise.resolve(zipObjectContent)\n    .then(function () {\n        return object;\n    });\n    */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) === \"/\") {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf(\"/\");\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) !== \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * @see loadAsync\n     */\n    load: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n\n    /**\n     * Call a callback function for each entry at this folder level.\n     * @param {Function} cb the callback function:\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     */\n    forEach: function(cb) {\n        var filename, relativePath, file;\n        // ignore warning about unwanted properties because this.files is a null prototype object\n        /* eslint-disable-next-line guard-for-in */\n        for (filename in this.files) {\n            file = this.files[filename];\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n                cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n            }\n        }\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [];\n        this.forEach(function (relativePath, entry) {\n            if (search(relativePath, entry)) { // the file matches the function\n                result.push(entry);\n            }\n\n        });\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                var obj = this.files[this.root + name];\n                if (obj && !obj.dir) {\n                    return obj;\n                } else {\n                    return null;\n                }\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) !== \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n     */\n    generate: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n    /**\n     * Generate the complete zip file as an internal stream.\n     * @param {Object} options the options to generate the zip file :\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {StreamHelper} the streamed zip file.\n     */\n    generateInternalStream: function(options) {\n        var worker, opts = {};\n        try {\n            opts = utils.extend(options || {}, {\n                streamFiles: false,\n                compression: \"STORE\",\n                compressionOptions : null,\n                type: \"\",\n                platform: \"DOS\",\n                comment: null,\n                mimeType: \"application/zip\",\n                encodeFileName: utf8.utf8encode\n            });\n\n            opts.type = opts.type.toLowerCase();\n            opts.compression = opts.compression.toUpperCase();\n\n            // \"binarystring\" is preferred but the internals use \"string\".\n            if(opts.type === \"binarystring\") {\n                opts.type = \"string\";\n            }\n\n            if (!opts.type) {\n                throw new Error(\"No output type specified.\");\n            }\n\n            utils.checkSupport(opts.type);\n\n            // accept nodejs `process.platform`\n            if(\n                opts.platform === \"darwin\" ||\n                opts.platform === \"freebsd\" ||\n                opts.platform === \"linux\" ||\n                opts.platform === \"sunos\"\n            ) {\n                opts.platform = \"UNIX\";\n            }\n            if (opts.platform === \"win32\") {\n                opts.platform = \"DOS\";\n            }\n\n            var comment = opts.comment || this.comment || \"\";\n            worker = generate.generateWorker(this, opts, comment);\n        } catch (e) {\n            worker = new GenericWorker(\"error\");\n            worker.error(e);\n        }\n        return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateAsync: function(options, onUpdate) {\n        return this.generateInternalStream(options).accumulate(onUpdate);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateNodeStream: function(options, onUpdate) {\n        options = options || {};\n        if (!options.type) {\n            options.type = \"nodebuffer\";\n        }\n        return this.generateInternalStream(options).toNodejsStream(onUpdate);\n    }\n};\nmodule.exports = out;\n", "\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n    this.data = data; // type : see implementation\n    this.length = data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specified index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function() {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function() {\n        // see implementations\n    },\n    /**\n     * Find the last occurrence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurrence, -1 if not found.\n     */\n    lastIndexOfSignature: function() {\n        // see implementations\n    },\n    /**\n     * Read the signature (4 bytes) at the current position and compare it with sig.\n     * @param {string} sig the expected signature\n     * @return {boolean} true if the signature matches, false otherwise.\n     */\n    readAndCheckSignature: function() {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(Date.UTC(\n            ((dostime >> 25) & 0x7f) + 1980, // year\n            ((dostime >> 21) & 0x0f) - 1, // month\n            (dostime >> 16) & 0x1f, // day\n            (dostime >> 11) & 0x1f, // hour\n            (dostime >> 5) & 0x3f, // minute\n            (dostime & 0x1f) << 1)); // second\n    }\n};\nmodule.exports = DataReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n    DataReader.call(this, data);\n    for(var i = 0; i < this.data.length; i++) {\n        data[i] = data[i] & 0xFF;\n    }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3),\n        data = this.readData(4);\n    return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n    DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n    var data = this.readData(4);\n    return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n", "\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n    ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n", "\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n    Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = NodeBufferReader;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n    var type = utils.getTypeOf(data);\n    utils.checkSupport(type);\n    if (type === \"string\" && !support.uint8array) {\n        return new StringReader(data);\n    }\n    if (type === \"nodebuffer\") {\n        return new NodeBufferReader(data);\n    }\n    if (support.uint8array) {\n        return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n    }\n    return new ArrayReader(utils.transformTo(\"array\", data));\n};\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n    this.options = options;\n    this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n    /**\n     * say if the file is encrypted.\n     * @return {boolean} true if the file is encrypted, false otherwise.\n     */\n    isEncrypted: function() {\n        // bit 1 is set\n        return (this.bitFlag & 0x0001) === 0x0001;\n    },\n    /**\n     * say if the file has utf-8 filename/comment.\n     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n     */\n    useUTF8: function() {\n        // bit 11 is set\n        return (this.bitFlag & 0x0800) === 0x0800;\n    },\n    /**\n     * Read the local part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readLocalPart: function(reader) {\n        var compression, localExtraFieldsLength;\n\n        // we already know everything from the central dir !\n        // If the central dir data are false, we are doomed.\n        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n        // The less data we get here, the more reliable this should be.\n        // Let's skip the whole header and dash to the data !\n        reader.skip(22);\n        // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n        // Strangely, the filename here is OK.\n        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n        // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n        // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n        // the internet.\n        //\n        // I think I see the logic here : the central directory is used to display\n        // content and the local directory is used to extract the files. Mixing / and \\\n        // may be used to display \\ to windows users and use / when extracting the files.\n        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n        this.fileNameLength = reader.readInt(2);\n        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n        // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n        this.fileName = reader.readData(this.fileNameLength);\n        reader.skip(localExtraFieldsLength);\n\n        if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n            throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n        }\n\n        compression = findCompression(this.compressionMethod);\n        if (compression === null) { // no compression found\n            throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n        }\n        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n    },\n\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readCentralPart: function(reader) {\n        this.versionMadeBy = reader.readInt(2);\n        reader.skip(2);\n        // this.versionNeeded = reader.readInt(2);\n        this.bitFlag = reader.readInt(2);\n        this.compressionMethod = reader.readString(2);\n        this.date = reader.readDate();\n        this.crc32 = reader.readInt(4);\n        this.compressedSize = reader.readInt(4);\n        this.uncompressedSize = reader.readInt(4);\n        var fileNameLength = reader.readInt(2);\n        this.extraFieldsLength = reader.readInt(2);\n        this.fileCommentLength = reader.readInt(2);\n        this.diskNumberStart = reader.readInt(2);\n        this.internalFileAttributes = reader.readInt(2);\n        this.externalFileAttributes = reader.readInt(4);\n        this.localHeaderOffset = reader.readInt(4);\n\n        if (this.isEncrypted()) {\n            throw new Error(\"Encrypted zip are not supported\");\n        }\n\n        // will be read in the local part, see the comments there\n        reader.skip(fileNameLength);\n        this.readExtraFields(reader);\n        this.parseZIP64ExtraField(reader);\n        this.fileComment = reader.readData(this.fileCommentLength);\n    },\n\n    /**\n     * Parse the external file attributes and get the unix/dos permissions.\n     */\n    processAttributes: function () {\n        this.unixPermissions = null;\n        this.dosPermissions = null;\n        var madeBy = this.versionMadeBy >> 8;\n\n        // Check if we have the DOS directory flag set.\n        // We look for it in the DOS and UNIX permissions\n        // but some unknown platform could set it as a compatibility flag.\n        this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n        if(madeBy === MADE_BY_DOS) {\n            // first 6 bits (0 to 5)\n            this.dosPermissions = this.externalFileAttributes & 0x3F;\n        }\n\n        if(madeBy === MADE_BY_UNIX) {\n            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n        }\n\n        // fail safe : if the name ends with a / it probably means a folder\n        if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n            this.dir = true;\n        }\n    },\n\n    /**\n     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n     * @param {DataReader} reader the reader to use.\n     */\n    parseZIP64ExtraField: function() {\n        if (!this.extraFields[0x0001]) {\n            return;\n        }\n\n        // should be something, preparing the extra reader\n        var extraReader = readerFor(this.extraFields[0x0001].value);\n\n        // I really hope that these 64bits integer can fit in 32 bits integer, because js\n        // won't let us have more.\n        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n            this.uncompressedSize = extraReader.readInt(8);\n        }\n        if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n            this.compressedSize = extraReader.readInt(8);\n        }\n        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n            this.localHeaderOffset = extraReader.readInt(8);\n        }\n        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n            this.diskNumberStart = extraReader.readInt(4);\n        }\n    },\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readExtraFields: function(reader) {\n        var end = reader.index + this.extraFieldsLength,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n\n        if (!this.extraFields) {\n            this.extraFields = {};\n        }\n\n        while (reader.index + 4 < end) {\n            extraFieldId = reader.readInt(2);\n            extraFieldLength = reader.readInt(2);\n            extraFieldValue = reader.readData(extraFieldLength);\n\n            this.extraFields[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n\n        reader.setIndex(end);\n    },\n    /**\n     * Apply an UTF8 transformation if needed.\n     */\n    handleUTF8: function() {\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        if (this.useUTF8()) {\n            this.fileNameStr = utf8.utf8decode(this.fileName);\n            this.fileCommentStr = utf8.utf8decode(this.fileComment);\n        } else {\n            var upath = this.findExtraFieldUnicodePath();\n            if (upath !== null) {\n                this.fileNameStr = upath;\n            } else {\n                // ASCII text or unsupported code page\n                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);\n                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n            }\n\n            var ucomment = this.findExtraFieldUnicodeComment();\n            if (ucomment !== null) {\n                this.fileCommentStr = ucomment;\n            } else {\n                // ASCII text or unsupported code page\n                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);\n                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n            }\n        }\n    },\n\n    /**\n     * Find the unicode path declared in the extra field, if any.\n     * @return {String} the unicode path, null otherwise.\n     */\n    findExtraFieldUnicodePath: function() {\n        var upathField = this.extraFields[0x7075];\n        if (upathField) {\n            var extraReader = readerFor(upathField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the filename changed, this field is out of date.\n            if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n        }\n        return null;\n    },\n\n    /**\n     * Find the unicode comment declared in the extra field, if any.\n     * @return {String} the unicode comment, null otherwise.\n     */\n    findExtraFieldUnicodeComment: function() {\n        var ucommentField = this.extraFields[0x6375];\n        if (ucommentField) {\n            var extraReader = readerFor(ucommentField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the comment changed, this field is out of date.\n            if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n        }\n        return null;\n    }\n};\nmodule.exports = ZipEntry;\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n//  class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n    this.files = [];\n    this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n    /**\n     * Check that the reader is on the specified signature.\n     * @param {string} expectedSignature the expected signature.\n     * @throws {Error} if it is an other signature.\n     */\n    checkSignature: function(expectedSignature) {\n        if (!this.reader.readAndCheckSignature(expectedSignature)) {\n            this.reader.index -= 4;\n            var signature = this.reader.readString(4);\n            throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n        }\n    },\n    /**\n     * Check if the given signature is at the given index.\n     * @param {number} askedIndex the index to check.\n     * @param {string} expectedSignature the signature to expect.\n     * @return {boolean} true if the signature is here, false otherwise.\n     */\n    isSignature: function(askedIndex, expectedSignature) {\n        var currentIndex = this.reader.index;\n        this.reader.setIndex(askedIndex);\n        var signature = this.reader.readString(4);\n        var result = signature === expectedSignature;\n        this.reader.setIndex(currentIndex);\n        return result;\n    },\n    /**\n     * Read the end of the central directory.\n     */\n    readBlockEndOfCentral: function() {\n        this.diskNumber = this.reader.readInt(2);\n        this.diskWithCentralDirStart = this.reader.readInt(2);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n        this.centralDirRecords = this.reader.readInt(2);\n        this.centralDirSize = this.reader.readInt(4);\n        this.centralDirOffset = this.reader.readInt(4);\n\n        this.zipCommentLength = this.reader.readInt(2);\n        // warning : the encoding depends of the system locale\n        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n        // On a windows machine, this field is encoded with the localized windows code page.\n        var zipComment = this.reader.readData(this.zipCommentLength);\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        // To get consistent behavior with the generation part, we will assume that\n        // this is utf8 encoded unless specified otherwise.\n        var decodeContent = utils.transformTo(decodeParamType, zipComment);\n        this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n    },\n    /**\n     * Read the end of the Zip 64 central directory.\n     * Not merged with the method readEndOfCentral :\n     * The end of central can coexist with its Zip64 brother,\n     * I don't want to read the wrong number of bytes !\n     */\n    readBlockZip64EndOfCentral: function() {\n        this.zip64EndOfCentralSize = this.reader.readInt(8);\n        this.reader.skip(4);\n        // this.versionMadeBy = this.reader.readString(2);\n        // this.versionNeeded = this.reader.readInt(2);\n        this.diskNumber = this.reader.readInt(4);\n        this.diskWithCentralDirStart = this.reader.readInt(4);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n        this.centralDirRecords = this.reader.readInt(8);\n        this.centralDirSize = this.reader.readInt(8);\n        this.centralDirOffset = this.reader.readInt(8);\n\n        this.zip64ExtensibleData = {};\n        var extraDataSize = this.zip64EndOfCentralSize - 44,\n            index = 0,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n        while (index < extraDataSize) {\n            extraFieldId = this.reader.readInt(2);\n            extraFieldLength = this.reader.readInt(4);\n            extraFieldValue = this.reader.readData(extraFieldLength);\n            this.zip64ExtensibleData[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n    },\n    /**\n     * Read the end of the Zip 64 central directory locator.\n     */\n    readBlockZip64EndOfCentralLocator: function() {\n        this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n        this.disksCount = this.reader.readInt(4);\n        if (this.disksCount > 1) {\n            throw new Error(\"Multi-volumes zip are not supported\");\n        }\n    },\n    /**\n     * Read the local files, based on the offset read in the central part.\n     */\n    readLocalFiles: function() {\n        var i, file;\n        for (i = 0; i < this.files.length; i++) {\n            file = this.files[i];\n            this.reader.setIndex(file.localHeaderOffset);\n            this.checkSignature(sig.LOCAL_FILE_HEADER);\n            file.readLocalPart(this.reader);\n            file.handleUTF8();\n            file.processAttributes();\n        }\n    },\n    /**\n     * Read the central directory.\n     */\n    readCentralDir: function() {\n        var file;\n\n        this.reader.setIndex(this.centralDirOffset);\n        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n            file = new ZipEntry({\n                zip64: this.zip64\n            }, this.loadOptions);\n            file.readCentralPart(this.reader);\n            this.files.push(file);\n        }\n\n        if (this.centralDirRecords !== this.files.length) {\n            if (this.centralDirRecords !== 0 && this.files.length === 0) {\n                // We expected some records but couldn't find ANY.\n                // This is really suspicious, as if something went wrong.\n                throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n            } else {\n                // We found some records but not all.\n                // Something is wrong but we got something for the user: no error here.\n                // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n            }\n        }\n    },\n    /**\n     * Read the end of central directory.\n     */\n    readEndOfCentral: function() {\n        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n        if (offset < 0) {\n            // Check if the content is a truncated zip or complete garbage.\n            // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n            // extractible zip for example) but it can give a good hint.\n            // If an ajax request was used without responseType, we will also\n            // get unreadable data.\n            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n            if (isGarbage) {\n                throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n                                \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n            } else {\n                throw new Error(\"Corrupted zip: can't find end of central directory\");\n            }\n\n        }\n        this.reader.setIndex(offset);\n        var endOfCentralDirOffset = offset;\n        this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n        this.readBlockEndOfCentral();\n\n\n        /* extract from the zip spec :\n            4)  If one of the fields in the end of central directory\n                record is too small to hold required data, the field\n                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n                ZIP64 format record should be created.\n            5)  The end of central directory record and the\n                Zip64 end of central directory locator record must\n                reside on the same disk when splitting or spanning\n                an archive.\n         */\n        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n            this.zip64 = true;\n\n            /*\n            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n            all numbers as 64-bit double precision IEEE 754 floating point numbers.\n            So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n            */\n\n            // should look for a zip64 EOCD locator\n            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            if (offset < 0) {\n                throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n            }\n            this.reader.setIndex(offset);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            this.readBlockZip64EndOfCentralLocator();\n\n            // now the zip64 EOCD record\n            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n                // console.warn(\"ZIP64 end of central directory not where expected.\");\n                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n                if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n                    throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n                }\n            }\n            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n            this.readBlockZip64EndOfCentral();\n        }\n\n        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n        if (this.zip64) {\n            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n        }\n\n        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n        if (extraBytes > 0) {\n            // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n                // The offsets seem wrong, but we have something at the specified offset.\n                // So\u2026 we keep it.\n            } else {\n                // the offset is wrong, update the \"zero\" of the reader\n                // this happens if data has been prepended (crx files for example)\n                this.reader.zero = extraBytes;\n            }\n        } else if (extraBytes < 0) {\n            throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n        }\n    },\n    prepareReader: function(data) {\n        this.reader = readerFor(data);\n    },\n    /**\n     * Read a zip file and create ZipEntries.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n     */\n    load: function(data) {\n        this.prepareReader(data);\n        this.readEndOfCentral();\n        this.readCentralDir();\n        this.readLocalFiles();\n    }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n    return new external.Promise(function (resolve, reject) {\n        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n        worker.on(\"error\", function (e) {\n            reject(e);\n        })\n            .on(\"end\", function () {\n                if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n                    reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n                } else {\n                    resolve();\n                }\n            })\n            .resume();\n    });\n}\n\nmodule.exports = function (data, options) {\n    var zip = this;\n    options = utils.extend(options || {}, {\n        base64: false,\n        checkCRC32: false,\n        optimizedBinaryString: false,\n        createFolders: false,\n        decodeFileName: utf8.utf8decode\n    });\n\n    if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n    }\n\n    return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n        .then(function (data) {\n            var zipEntries = new ZipEntries(options);\n            zipEntries.load(data);\n            return zipEntries;\n        }).then(function checkCRC32(zipEntries) {\n            var promises = [external.Promise.resolve(zipEntries)];\n            var files = zipEntries.files;\n            if (options.checkCRC32) {\n                for (var i = 0; i < files.length; i++) {\n                    promises.push(checkEntryCRC32(files[i]));\n                }\n            }\n            return external.Promise.all(promises);\n        }).then(function addFiles(results) {\n            var zipEntries = results.shift();\n            var files = zipEntries.files;\n            for (var i = 0; i < files.length; i++) {\n                var input = files[i];\n\n                var unsafeName = input.fileNameStr;\n                var safeName = utils.resolve(input.fileNameStr);\n\n                zip.file(safeName, input.decompressed, {\n                    binary: true,\n                    optimizedBinaryString: true,\n                    date: input.date,\n                    dir: input.dir,\n                    comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n                    unixPermissions: input.unixPermissions,\n                    dosPermissions: input.dosPermissions,\n                    createFolders: options.createFolders\n                });\n                if (!input.dir) {\n                    zip.file(safeName).unsafeOriginalName = unsafeName;\n                }\n            }\n            if (zipEntries.zipComment.length) {\n                zip.comment = zipEntries.zipComment;\n            }\n\n            return zip;\n        });\n};\n", "\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n    // if this constructor is used without `new`, it adds `new` before itself:\n    if(!(this instanceof JSZip)) {\n        return new JSZip();\n    }\n\n    if(arguments.length) {\n        throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n    }\n\n    // object containing the files :\n    // {\n    //   \"folder/\" : {...},\n    //   \"folder/data.txt\" : {...}\n    // }\n    // NOTE: we use a null prototype because we do not\n    // want filenames like \"toString\" coming from a zip file\n    // to overwrite methods and attributes in a normal Object.\n    this.files = Object.create(null);\n\n    this.comment = null;\n\n    // Where we are in the hierarchy\n    this.root = \"\";\n    this.clone = function() {\n        var newObj = new JSZip();\n        for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n                newObj[i] = this[i];\n            }\n        }\n        return newObj;\n    };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n    return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * IStorage.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This file defines the core storage abstraction interface used throughout MCTools.\r\n * IStorage represents a virtual file system that can be backed by:\r\n * - Local file system (NodeStorage)\r\n * - HTTP/HTTPS endpoints (HttpStorage)\r\n * - ZIP files (ZipStorage)\r\n * - Browser local storage (BrowserStorage)\r\n * - VS Code file system (VsFsStorage)\r\n * - Virtual/composite folders (VirtualFolderStorage)\r\n *\r\n * EVENTS (used for real-time synchronization):\r\n * --------------------------------------------\r\n * - onFileAdded: Fired when a new file is detected\r\n * - onFileRemoved: Fired when a file is deleted\r\n * - onFileContentsUpdated: Fired when file content changes\r\n * - onFolderMoved: Fired when a folder is renamed/moved\r\n * - onFolderAdded: Fired when a new folder is created (added for watcher support)\r\n * - onFolderRemoved: Fired when a folder is deleted (added for watcher support)\r\n *\r\n * These events enable the real-time sync pipeline:\r\n *   NodeStorage -> HttpServer (WebSocket) -> HttpStorage -> MCWorld -> WorldView\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IStorageWatcher.ts: Watcher interface extensions\r\n * - StorageBase.ts: Base implementation with event dispatchers\r\n * - NodeStorage.ts: File system watcher implementation\r\n * - HttpStorage.ts: WebSocket notification receiver\r\n */\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport { IEvent } from \"ste-events\";\r\nimport IVersionContent from \"./IVersionContent\";\r\n\r\nexport enum StorageErrorStatus {\r\n  none = 0,\r\n  unprocessable = 1,\r\n  notPresent = 2,\r\n}\r\n\r\nexport interface IFolderMove {\r\n  previousStoragePath?: string;\r\n  newStoragePath: string;\r\n  folder: IFolder;\r\n}\r\n\r\nexport interface IFileUpdateEvent {\r\n  file: IFile;\r\n  updateType: FileUpdateType;\r\n  sourceId?: string;\r\n  priorVersion?: IVersionContent;\r\n}\r\n\r\nexport default interface IStorage {\r\n  rootFolder: IFolder;\r\n  storagePath: string | undefined;\r\n\r\n  containerFile?: IFile;\r\n\r\n  getUsesPollingBasedUpdating(): boolean;\r\n\r\n  readonly folderDelimiter: string;\r\n\r\n  priorVersions: IVersionContent[];\r\n  currentVersionId?: string;\r\n\r\n  onFileAdded: IEvent<IStorage, IFile>;\r\n  onFileRemoved: IEvent<IStorage, string>;\r\n  onFileContentsUpdated: IEvent<IStorage, IFileUpdateEvent>;\r\n  onFolderMoved: IEvent<IStorage, IFolderMove>;\r\n  /** Event fired when a folder is added (for watcher support) */\r\n  onFolderAdded: IEvent<IStorage, IFolder>;\r\n  /** Event fired when a folder is removed (for watcher support) */\r\n  onFolderRemoved: IEvent<IStorage, string>;\r\n\r\n  errorStatus?: StorageErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  channelId?: string;\r\n\r\n  isContentUpdated: boolean;\r\n  readOnly: boolean;\r\n\r\n  available?: boolean;\r\n  getAvailable(): Promise<boolean>;\r\n\r\n  resetContentUpdated(): void;\r\n\r\n  incrementalScanForChanges(): Promise<void>;\r\n\r\n  scanForChanges(): Promise<void>;\r\n\r\n  addVersion(versionContent: IVersionContent, updateType: FileUpdateType): void;\r\n  trimAfterVersion(versionId: string): void;\r\n  setToVersion(versionId: string): void;\r\n\r\n  notifyFileContentsUpdated(fileEvent: IFileUpdateEvent): void;\r\n\r\n  joinPath(pathA: string, pathB: string): string;\r\n  ensureFolderFromStorageRelativePath(path: string): Promise<IFolder>;\r\n}\r\n", "/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.8.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2023\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var INPUT_ERROR = 'input is invalid type';\n  var FINALIZE_ERROR = 'finalize already called';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  var isArray = Array.isArray;\n  if (root.JS_MD5_NO_NODE_JS || !isArray) {\n    isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  var isView = ArrayBuffer.isView;\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {\n    isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  // [message: string, isString: bool]\n  var formatMessage = function (message) {\n    var type = typeof message;\n    if (type === 'string') {\n      return [message, true];\n    }\n    if (type !== 'object' || message === null) {\n      throw new Error(INPUT_ERROR);\n    }\n    if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n      return [new Uint8Array(message), false];\n    }\n    if (!isArray(message) && !isView(message)) {\n      throw new Error(INPUT_ERROR);\n    }\n    return [message, false];\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = require('crypto')\n    var Buffer = require('buffer').Buffer;\n    var bufferFrom;\n    if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {\n      bufferFrom = Buffer.from;\n    } else {\n      bufferFrom = function (message) {\n        return new Buffer(message);\n      };\n    }\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw new Error(INPUT_ERROR);\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (isArray(message) || isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(bufferFrom(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * @namespace md5.hmac\n   */\n  /**\n   * @method hex\n   * @memberof md5.hmac\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');\n   */\n\n  /**\n   * @method digest\n   * @memberof md5.hmac\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5.hmac\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5.hmac\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5.hmac\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5.hmac\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');\n   */\n  var createHmacOutputMethod = function (outputType) {\n    return function (key, message) {\n      return new HmacMd5(key, true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5.hmac\n   * @description Create HmacMd5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @returns {HmacMd5} HmacMd5 object.\n   * @example\n   * var hash = md5.hmac.create('key');\n   */\n  /**\n   * @method update\n   * @memberof md5.hmac\n   * @description Create and update HmacMd5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} key key\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {HmacMd5} HmacMd5 object.\n   * @example\n   * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.hmac.create('key');\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createHmacMethod = function () {\n    var method = createHmacOutputMethod('hex');\n    method.create = function (key) {\n      return new HmacMd5(key);\n    };\n    method.update = function (key, message) {\n      return method.create(key).update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createHmacOutputMethod(type);\n    }\n    return method;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      throw new Error(FINALIZE_ERROR);\n    }\n\n    var result = formatMessage(message);\n    message = result[0];\n    var isString = result[1];\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (isString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >>> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >>> 12);\n              buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >>> 18);\n              buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >>> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >>> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +\n      HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +\n      HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +\n      HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +\n      HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +\n      HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +\n      HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +\n      HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +\n      HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +\n      HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +\n      HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +\n      HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >>> 8) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 24) & 0xFF,\n      h1 & 0xFF, (h1 >>> 8) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 24) & 0xFF,\n      h2 & 0xFF, (h2 >>> 8) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 24) & 0xFF,\n      h3 & 0xFF, (h3 >>> 8) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  /**\n   * HmacMd5 class\n   * @class HmacMd5\n   * @extends Md5\n   * @description This is internal class.\n   * @see {@link md5.hmac.create}\n   */\n  function HmacMd5(key, sharedMemory) {\n    var i, result = formatMessage(key);\n    key = result[0];\n    if (result[1]) {\n      var bytes = [], length = key.length, index = 0, code;\n      for (i = 0; i < length; ++i) {\n        code = key.charCodeAt(i);\n        if (code < 0x80) {\n          bytes[index++] = code;\n        } else if (code < 0x800) {\n          bytes[index++] = (0xc0 | (code >>> 6));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        } else if (code < 0xd800 || code >= 0xe000) {\n          bytes[index++] = (0xe0 | (code >>> 12));\n          bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        } else {\n          code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n          bytes[index++] = (0xf0 | (code >>> 18));\n          bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));\n          bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));\n          bytes[index++] = (0x80 | (code & 0x3f));\n        }\n      }\n      key = bytes;\n    }\n\n    if (key.length > 64) {\n      key = (new Md5(true)).update(key).array();\n    }\n\n    var oKeyPad = [], iKeyPad = [];\n    for (i = 0; i < 64; ++i) {\n      var b = key[i] || 0;\n      oKeyPad[i] = 0x5c ^ b;\n      iKeyPad[i] = 0x36 ^ b;\n    }\n\n    Md5.call(this, sharedMemory);\n\n    this.update(iKeyPad);\n    this.oKeyPad = oKeyPad;\n    this.inner = true;\n    this.sharedMemory = sharedMemory;\n  }\n  HmacMd5.prototype = new Md5();\n\n  HmacMd5.prototype.finalize = function () {\n    Md5.prototype.finalize.call(this);\n    if (this.inner) {\n      this.inner = false;\n      var innerHash = this.array();\n      Md5.call(this, this.sharedMemory);\n      this.update(this.oKeyPad);\n      this.update(innerHash);\n      Md5.prototype.finalize.call(this);\n    }\n  };\n\n  var exports = createMethod();\n  exports.md5 = exports;\n  exports.md5.hmac = createHmacMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('\u4E2D\u6587'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ISimpleReference from \"./ISimpleReference\";\r\nimport ICondition from \"./ICondition\";\r\nimport IFormDefinition, { IFormSample } from \"./IFormDefinition\";\r\n\r\nexport enum FieldExperienceType {\r\n  text = \"text\",\r\n  dropdown = \"dropdown\",\r\n  slider = \"slider\",\r\n}\r\n\r\nexport enum FieldVisualExperience {\r\n  normal = \"normal\",\r\n  deemphasized = \"deemphasized\",\r\n}\r\n\r\nexport enum FieldDataType {\r\n  /**\r\n   * Represents a 32-bit integer value.\r\n   */\r\n  int = \"int\",\r\n  /**\r\n   * Represents a boolean value (true or false).\r\n   */\r\n  boolean = \"boolean\",\r\n  /**\r\n   * Represents a string value.\r\n   */\r\n  string = \"string\",\r\n  /**\r\n   * Represents a floating-point number.\r\n   */\r\n  float = \"float\",\r\n  /**\r\n   * Represents a string that can take on a limited set of values, often used for enumerations.\r\n   */\r\n  stringEnum = \"stringEnum\",\r\n  /**\r\n   * Represents an integer that can take on a limited set of values, often used for enumerations.\r\n   */\r\n  intEnum = \"intEnum\",\r\n  /**\r\n   * Represents a boolean value that can be represented as an integer (0 or 1).\r\n   * This is often used for compatibility with systems that expect boolean values as integers.\r\n   */\r\n  intBoolean = \"intBoolean\",\r\n  /**\r\n   * Represents a numeric value (integer or floating-point).\r\n   */\r\n  number = \"number\",\r\n  /**\r\n   * Represents a string-based value that is chosen from a typically data-driven set of options (a lookup).\r\n   */\r\n  stringLookup = \"stringLookup\",\r\n\r\n  /**\r\n   * Represents an integer-based value that is chosen from a typically data-driven set of options (a lookup).\r\n   */\r\n  intValueLookup = \"intValueLookup\",\r\n\r\n  /**\r\n   * Represents a long integer value, which is typically a 64-bit integer.\r\n   * This is used for larger numeric values that exceed the range of standard integers.\r\n   */\r\n  long = \"long\",\r\n\r\n  /**\r\n   * Represents a point in 3D space, with x, y, and z coordinates.\r\n   */\r\n  point3 = \"point3\",\r\n  /**\r\n   * Represents a point in 3D space, with integer x, y, and z coordinates.\r\n   */\r\n  intPoint3 = \"intPoint3\",\r\n  /**\r\n   * Represents a long-form string, which is typically used for very long text entries.\r\n   * This is often used in contexts where the string may exceed standard length limits.\r\n   */\r\n  longFormString = \"longFormString\",\r\n  /**\r\n   * Represents a collection of objects where each object is identified by a unique string key.\r\n   * For example, { \"foo\": {x: 1, z: 3}, \"bar\": {x:10, y: 4} }\r\n   */\r\n  keyedObjectCollection = \"keyedObjectCollection\",\r\n  /**\r\n   * Represents an array of objects, where each object can have multiple properties.\r\n   * For example, [ { x: 1, id: \"alpha\", z: 3}, { x: 1, id: \"bravo\", z: 3} ]\r\n   */\r\n  objectArray = \"objectArray\",\r\n  /**\r\n   * Represents a generic object that can have any structure.\r\n   */\r\n  object = \"object\",\r\n  /**\r\n   * Represents an array of strings, which is often used for lists of text values.\r\n   */\r\n  stringArray = \"stringArray\",\r\n  /**\r\n   * Represents a range of integers. This can either be represented as a pair of integers on an object with min and max properties, or as a two element array, or as a single integer if the range is collapsed.\r\n   * For example, { \"min\": 0, \"max\": 100 } or [0, 100] or 50.\r\n   */\r\n  intRange = \"intRange\",\r\n  /**\r\n   * Represents a range of floating-point numbers. This can either be represented as a pair of floats on an object with min and max properties, or as a two element array, or as a single float if the range is collapsed.\r\n   * For example, { \"min\": 0.4, \"max\": 99.6 } or [0.4, 99.6] or 48.8.\r\n   */\r\n  floatRange = \"floatRange\",\r\n  /**\r\n   * Represents a filter that is specific to Minecraft, which can be used to filter entities or blocks based on certain criteria.\r\n   * This is fundamentally an object, e.g.,\r\n   * \"filters\": {\r\n   *   \"test\": \"in_lava\", \"subject\": \"self\"\r\n   *  }\r\n   */\r\n  minecraftFilter = \"minecraftFilter\",\r\n  /**\r\n   * Represents a range of floating-point numbers that represent a percentage chance, and the numbers should range between 0.0 and 1.0. This can either be represented as a pair of floats on an object with min and max properties, or as a two element array, or as a single float if the range is collapsed.\r\n   * For example, { \"min\": 0.04, \"max\": 0.996 } or [0.04, 0.996] or 0.488.\r\n   */\r\n  percentRange = \"percentRange\",\r\n\r\n  /**\r\n   * Represents a single Minecraft event trigger, which can be used to specify the identifier and context for an action that should fire.\r\n   */\r\n  minecraftEventTrigger = \"minecraftEventTrigger\",\r\n  /**\r\n   * Represents an array of long-form string that can contain multiple lines of text, often used for detailed descriptions or notes.\r\n   */\r\n  longFormStringArray = \"longFormStringArray\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is also a string.\r\n   * For example, { \"foo\": \"blah\", \"barg\" : \"borg\" }\r\n   */\r\n  keyedStringCollection = \"keyedStringCollection\",\r\n  /**\r\n   * Represents a version, which can either be a semantic version string (e.g., \"1.2.3\") or a simple version number or an array of three numbers, for major, minor, and patch version.\r\n   */\r\n  version = \"version\",\r\n  /**\r\n   * Represents a universally unique identifier (UUID), which is a 128-bit number used to uniquely identify information in computer systems.\r\n   * This is typically represented as a string in the format \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\".\r\n   */\r\n  uuid = \"uuid\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is a boolean.\r\n   * For example, { \"foo\": true, \"blah\": false }\r\n   */\r\n  keyedBooleanCollection = \"keyedBooleanCollection\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is an array of strings.\r\n   * For example, { \"foo\": [\"blah\", \"alpha\"], \"barg\" : [\"borg\"] }\r\n   */\r\n  keyedStringArrayCollection = \"keyedStringArrayCollection\",\r\n  /**\r\n   * Represents an array of keyed string collections, where each element is a collection of key-value pairs.\r\n   * For example, [ { \"blah\": \"alpha\", \"blaz\": \"blay\" }, {\"barg\": \"borg\"} ]\r\n   */\r\n  arrayOfKeyedStringCollection = \"arrayOfKeyedStringCollection\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is by itself a keyed string collection of an array of strings.\r\n   * For example, { \"alpha\":  { \"foo\": [\"blah\", \"alpha\"], \"barg\" : [\"borg\"] } }\r\n   */\r\n  keyedKeyedStringArrayCollection = \"keyedKeyedStringArrayCollection\",\r\n  /**\r\n   * Represents a collection of key-value pairs where each key is a string and the value is a number.\r\n   * For example, { \"foo\": 17, \"blah\": 43 }\r\n   */\r\n  keyedNumberCollection = \"keyedNumberCollection\",\r\n  /**\r\n   * Represents an array of numbers.\r\n   */\r\n  numberArray = \"numberArray\",\r\n  /**\r\n   * Represents a checkbox list that is represented as an array of strings.\r\n   */\r\n  checkboxListAsStringArray = \"checkboxListAsStringArray\",\r\n  /**\r\n   * Represents a Molang expression in string form, which is a Minecraft-specific language used for data-driven content.\r\n   */\r\n  molang = \"molang\",\r\n  /**\r\n   * Represents an array of Molang expressions (an array of strings), which can be used to define multiple data-driven behaviors or properties in Minecraft.\r\n   */\r\n  molangArray = \"molangArray\",\r\n  /**\r\n   * Represents a point in 2D space, with x and y coordinates.\r\n   * This is often used for 2D graphical representations or spatial calculations.\r\n   */\r\n  point2 = \"point2\",\r\n  /**\r\n   * Represents a localizable string, which is a string that is a token that is a refence to a localized string in a resource file. Or it can be a string literal (unlocalized)\r\n   */\r\n  localizableString = \"localizableString\",\r\n  /**\r\n   * Represents a keyed collection of numbers, where each key is a string and the value is an array of numbers.\r\n   * For example, { \"foo\": [255, 0.0, 2555], \"barg\" : [128, 0, 0] }\r\n   */\r\n  keyedNumberArrayCollection = \"keyedNumberArrayCollection\",\r\n  /**\r\n   * Represents a reference to a Minecraft event, which can be used to specify the identifier and context for an action that should fire.\r\n   */\r\n  minecraftEventReference = \"minecraftEventReference\",\r\n  /**\r\n   * Represents a location in 3D space, with x, y, and z coordinates but that is intended to be a location in a Minecraft world.\r\n   */\r\n  location = \"location\",\r\n  /**\r\n   * Represents a location in 3D space, with x, y, and z coordinates but that is intended to be a location offset adjustment in a Minecraft world.\r\n   */\r\n  locationOffset = \"locationOffset\",\r\n  /**\r\n   * Represents an array of Minecraft event triggers, which can be used to specify multiple identifiers and contexts for actions that should fire.\r\n   */\r\n  minecraftEventTriggerArray = \"minecraftEventTriggerArray\",\r\n  /**\r\n   * Represents a two dimensional string array, i.e.., string[][], e.g., [ [\"a\", \"b\"], [\"c\", \"d\"] ]\r\n   */\r\n  twoDStringArray = \"twoDStringArray\",\r\n  /**\r\n   * Represents an array where each item can be either a string or an object.\r\n   * This is commonly used for animation references like [\"animation.walk\", { \"animation.jump\": \"query.is_jumping\" }]\r\n   * Each item in the array can be a simple string reference OR an object with conditional properties.\r\n   */\r\n  stringOrObjectArray = \"stringOrObjectArray\",\r\n  /**\r\n   * Represents an array of tuples where each tuple is [string, number].\r\n   * This is used for weighted lists like generate_for_climates: [[\"medium\", 1], [\"cold\", 2]]\r\n   */\r\n  stringNumberTupleArray = \"stringNumberTupleArray\",\r\n  /**\r\n   * Represents a single item that can be either a string or an object (not an array).\r\n   * Used when a field accepts \"animation_name\" OR { \"animation_name\": \"condition\" }\r\n   */\r\n  stringOrObject = \"stringOrObject\",\r\n  /**\r\n   * Represents a two dimensional array where each inner array contains Molang values (string OR number).\r\n   * This is used for gradient colors like: [[1.0, 0.5, 0.5, 1.0], [\"variable.color\", 0.5, 0.5, 1.0]]\r\n   * Schema: Array<Array<string | number>>\r\n   */\r\n  twoDMolangArray = \"twoDMolangArray\",\r\n}\r\n\r\n/**\r\n * Describes the way field values should be converted to a more human-readable format.\r\n */\r\nexport enum FieldValueHumanify {\r\n  none = \"none\",\r\n  general = \"general\",\r\n  minecraft = \"minecraft\",\r\n}\r\n\r\n/**\r\n * Describes the type of message for validator topic fields.\r\n * This aligns with InfoItemType but is simplified for form field definitions.\r\n */\r\nexport enum FieldMessageType {\r\n  /**\r\n   * Informational message - neutral status or aggregated data.\r\n   */\r\n  info = \"info\",\r\n  /**\r\n   * Warning message - potential issue that should be reviewed.\r\n   */\r\n  warning = \"warning\",\r\n  /**\r\n   * Error message - a definite problem that should be fixed.\r\n   */\r\n  error = \"error\",\r\n  /**\r\n   * Recommendation message - a suggestion for improvement.\r\n   */\r\n  recommendation = \"recommendation\",\r\n}\r\n\r\nexport default interface IField {\r\n  /**\r\n   * Unique identifier for the field.\r\n   */\r\n  id: string;\r\n  /**\r\n   * Optional alternate identifier for the field.\r\n   */\r\n  altId?: string;\r\n  /*\r\n   * Optional group identifier for the field.\r\n   */\r\n  groupId?: string;\r\n  /**\r\n   * Optional human-readable title for the field.\r\n   * If the title is functionally equivalent to its Id, the title can be omitted.\r\n   */\r\n  title?: string;\r\n  /**\r\n   * Optional human-readable description for the field.\r\n   * If the description is functionally equivalent to its title, the description can be omitted.\r\n   */\r\n  description?: string;\r\n\r\n  /**\r\n   * For command form fields, the type of command parameter this field represents\r\n   * (e.g., \"SELECTION\", \"POSITION\", \"BLOCKPOS\", \"SET\", \"INT\", \"BOOLEAN\").\r\n   * Used by the command documentation generator to map fields to parameter types.\r\n   */\r\n  commandType?: string;\r\n\r\n  /**\r\n   * Optional human-readable guidance on how to use or fix issues related to this field.\r\n   * For validation rules, this contains tips for how to resolve validation errors or warnings.\r\n   */\r\n  howToUse?: string;\r\n\r\n  /**\r\n   * Optional human-readable description of technical details of the field - for example, any notes\r\n   * on how the field is persisted in JSON, or other technical details.\r\n   * In practice, this is not shown in tools but is shown in technical documentation.\r\n   */\r\n  technicalDescription?: string;\r\n\r\n  /**\r\n   * Optional hint for diagnostic providers to locate this issue in a document.\r\n   * Contains a JSON token or pattern to search for when highlighting this issue.\r\n   * Examples: \"format_version\", \"identifier\", \"minecraft:entity\"\r\n   */\r\n  suggestedLineToken?: string;\r\n\r\n  /**\r\n   * If true, the diagnostic provider should also search for the ProjectInfoItem.data\r\n   * value on the same line as suggestedLineToken. This helps pinpoint the exact line\r\n   * when the data contains a specific value like a version string or identifier.\r\n   */\r\n  suggestedLineShouldHaveData?: boolean;\r\n\r\n  /**\r\n   * Any additional English descriptions about notes for this data of this field definition.\r\n   * .note vs. .note2 vs. .note3 are expected to be different \"topics\" for notes.\r\n   */\r\n  note?: string;\r\n  /**\r\n   * Any additional English descriptions about notes for this data of this field definition.\r\n   * .note vs. .note2 vs. .note3 are expected to be different \"topics\" for notes.\r\n   */\r\n  note2?: string;\r\n  /**\r\n   * Any additional English descriptions about notes for this data of this field definition.\r\n   * .note vs. .note2 vs. .note3 are expected to be different \"topics\" for notes.\r\n   */\r\n  note3?: string;\r\n  /**\r\n   * Whether this field should be defined if it's functionally empty (e.g., an empty string or a 0 item array).\r\n   */\r\n  retainIfEmptyOrDefault?: boolean;\r\n\r\n  /**\r\n   * If this field references an object (e.g., has a dataType of 16 - object or 15 - object Array), this describes the structure of that object.\r\n   */\r\n  subForm?: IFormDefinition;\r\n\r\n  /**\r\n   * Used in override files to request merging of generated subForm content into the override's subForm.\r\n   * When set to true, the generated subForm fields will be merged into the override's existing subForm.\r\n   * Use this when you want to keep your override's subForm fields AND add generated fields.\r\n   * Contrast with having just subForm without mergeSubForm, which replaces the generated subForm entirely.\r\n   */\r\n  mergeSubForm?: boolean;\r\n\r\n  /*\r\n   * If this field references an object (e.g., has a dataType of 16 - object or 15 - object Array), this is an the identifier of that sub-form.\r\n   * This is typically a \"<folder>/<file>\", which maps to folder/file.form.json relative to the form directory root.\r\n   */\r\n  subFormId?: string;\r\n\r\n  /*\r\n   * In certain contexts, allowedKeys provides a list of keys that are allowed in the keyedObjectCollection or keyedStringCollection.\r\n   */\r\n  allowedKeys?: string[];\r\n\r\n  /**\r\n   * Optional version that this field was introduced in the respective object's data structure.\r\n   */\r\n  versionIntroduced?: string;\r\n\r\n  /**\r\n   * Optional version that this field was deprecated and no longer supported, maintained, or recommended in the respective object's data structure.\r\n   */\r\n  versionDeprecated?: string;\r\n\r\n  /** Describes an override set of subFields for the sub form. This should only be supplied in rare cases. */\r\n  subFields?: { [keyName: string]: IField };\r\n  /**\r\n   * If this field references an array of objects, this is the key that maps the array to its corresponding sub-field.\r\n   */\r\n  objectArrayToSubFieldKey?: string;\r\n  /**\r\n   * If this field references an array of objects, this is the key that maps the array to its corresponding title field.\r\n   */\r\n  objectArrayTitleFieldKey?: string;\r\n  /**\r\n   * If this field references an array of objects, this is the key that maps the array length to its sub field length.\r\n   */\r\n  matchObjectArrayLengthToSubFieldLength?: boolean;\r\n  /**\r\n   * If this field references an array of objects, this specifies that objects in the array should map to its corresponding sub-field.\r\n   */\r\n  matchObjectArrayToSubFieldKey?: boolean;\r\n  /**\r\n   * For array types, this specifies that the sub-field should be an array of objects of a fixed length.\r\n   */\r\n  fixedLength?: number;\r\n  /**\r\n   * Description of the field that is used for human-readable purposes.\r\n   * This is typically used to provide a more user-friendly description of the key of this field.\r\n   */\r\n  keyDescription?: string;\r\n  /**\r\n   * Context-specfic identifier for data set to use for lookups for the field.\r\n   */\r\n  lookupId?: string;\r\n  /**\r\n   * If the field is a string related, the minimum length of the string.\r\n   */\r\n  minLength?: number;\r\n  /**\r\n   * If the field is a string related, the maximum length of the string.\r\n   */\r\n  maxLength?: number;\r\n  /**\r\n   * Prototype example of the data structure for new items that are created\r\n   */\r\n  newItemPrototype?: any;\r\n  /**\r\n   * Human-readable name for the field, which is used in the UI to display the field.\r\n   */\r\n  noun?: string;\r\n  /**\r\n   * When sorting this field amongst other fields, this is the priority of the field.\r\n   * Lower numbers are sorted first, and higher numbers are sorted last.\r\n   * If two numbers are tied, then fields are alphabetically sorted by their id.\r\n   */\r\n  priority?: number;\r\n  /**\r\n   * If this field is an array or keyed set, whether new items can be created or existing items can be deleted.\r\n   */\r\n  allowCreateDelete?: boolean;\r\n  /**\r\n   * Whether to display this field as read only.\r\n   */\r\n  readOnly?: boolean;\r\n  /**\r\n   * When displaying the field in a user interface, whether to display the title for the field.\r\n   */\r\n  displayTitle?: boolean;\r\n  /**\r\n   * Whether to force the field to be treated as a string, even if it appears to be another type.\r\n   */\r\n  forceString?: boolean;\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies the minimum value that the field can take.\r\n   */\r\n  minValue?: number;\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies the maximum value that the field can take.\r\n   */\r\n  maxValue?: number;\r\n  /**\r\n   * If the field is a range, this describes the standard step between numbers in the range.\r\n   * This is typically used for sliders or other input methods that allow users to select a value within a range.\r\n   * For example, a step of 5 between 0 and 100 would allow values like 0, 5, 10, ..., 100.\r\n   */\r\n  step?: number;\r\n  /**\r\n   * A placeholder for internal content build processes to signify that this field should NOT be merged in via automatic processes and should not really exist\r\n   * in the final schema.\r\n   */\r\n  isRemoved?: boolean;\r\n\r\n  /**\r\n   * Specifies whether values of this field should be transformed via an algorithm to be more human-readable and \"friendly\".\r\n   */\r\n  humanifyValues?: FieldValueHumanify;\r\n\r\n  /**\r\n   * Specifies whether the samples for this field should be hidden in the target source (UI or documentation).\r\n   * This is typically used for fields whether the samples are not interesting. Eg., \"priority\": 2 as an sample of a priority field.\r\n   */\r\n  hideSamples?: boolean;\r\n\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies a soft, recommended minimum value that the field can take.\r\n   */\r\n  suggestedMinValue?: number;\r\n\r\n  /**\r\n   * If the field is a number, float, or integer, this specifies a soft, recommended maximum value that the field can take.\r\n   */\r\n  suggestedMaxValue?: number;\r\n\r\n  /**\r\n   * References another sibling field by ID whose current value should be used as this field's effective maximum.\r\n   * For example, a \"value\" field with maxValueField: \"max\" will be clamped to the current value of the \"max\" field.\r\n   */\r\n  maxValueField?: string;\r\n\r\n  /**\r\n   * References another sibling field by ID whose current value should be used as this field's effective minimum.\r\n   */\r\n  minValueField?: string;\r\n\r\n  /**\r\n   * A set of context dependent tag strings that can be used to filter or categorize the field.\r\n   */\r\n  tags?: string[];\r\n  /**\r\n   * Specifies whether this field is required to have a value.\r\n   */\r\n  isRequired?: boolean;\r\n  /**\r\n   * Specifies whether this field is deprecated and should not be used in new code.\r\n   */\r\n  isDeprecated?: boolean;\r\n  /**\r\n   * Specifies whether this field is internal and not intended for public use.\r\n   */\r\n  isInternal?: boolean;\r\n  /*\r\n   * Specifies a set of conditions that can be expressed to validate whehter examples of data are correctly formed.\r\n   */\r\n  validity?: ICondition[];\r\n  /*\r\n   * Specifies a set of conditions that can be expressed to validate whehter this field should show, or not.\r\n   */\r\n  visibility?: ICondition[];\r\n  /**\r\n   * Specifies what the default value of this field should be if it's not specified in the data.\r\n   */\r\n  defaultValue?: string | number | boolean | number[] | string[] | object | object[] | null;\r\n  /**\r\n   * Specifies whether visual presentations of this data should have any additional indents\r\n   */\r\n  additionalIndent?: number;\r\n  /**\r\n   * Specifies the visual experience for the field.\r\n   */\r\n  visualExperience?: FieldVisualExperience;\r\n  /**\r\n   * Specifies a particular visual experiene for the field.\r\n   */\r\n  experienceType?: FieldExperienceType;\r\n  /**\r\n   * Specifies the data type of the field, which determines how the data is interpreted and validated.\r\n   */\r\n  dataType: FieldDataType;\r\n  /**\r\n   * Specifies a list of alternate representation for data for this field. For example, a field that is a string can have an alternate representation as a number, and would have an alternate field for it.\r\n   */\r\n  alternates?: IField[];\r\n  /**\r\n   * Specifies whether the data for this field must match the set of defined choices or lookup values.\r\n   */\r\n  mustMatchChoices?: boolean;\r\n  /**\r\n   * Specifies a fixed list of choices for this field.\r\n   */\r\n  choices?: ISimpleReference[];\r\n  /**\r\n   * Specifies a simple list of enum values for stringEnum or intEnum fields.\r\n   * This is a shorthand alternative to choices when you don't need labels/descriptions.\r\n   * If both enumValues and choices are provided, choices takes precedence.\r\n   */\r\n  enumValues?: (string | number)[];\r\n  /**\r\n   * Specifies the data type for additional properties in a keyed collection.\r\n   * When set, this generates additionalProperties schema based on the specified FieldDataType.\r\n   * For example, additionalPropertiesOf: FieldDataType.molangArray would generate\r\n   * additionalProperties with the Molang array schema.\r\n   */\r\n  additionalPropertiesOf?: FieldDataType;\r\n  /**\r\n   * Specifies a set of specific samples of data values for this field.\r\n   */\r\n  samples?: { [path: string]: IFormSample[] };\r\n  /**\r\n   * Specifies a UX variant for how this field should be rendered.\r\n   * This allows different visual experiences for the same data type.\r\n   *\r\n   * Supported variants by data type:\r\n   * - minecraftFilter (dataType 20):\r\n   *   - \"biome\": Simplified biome tag selector with categorized checkboxes\r\n   *\r\n   * The variant editor should auto-detect if existing data is too complex for the\r\n   * simplified view and fall back to the standard editor. A toggle allows users\r\n   * to switch between simplified and advanced modes.\r\n   */\r\n  uxVariant?: string;\r\n  /**\r\n   * Specifies matched values that reference project updaters. Used in mctoolsval forms\r\n   * to associate topic IDs with their corresponding updaters.\r\n   */\r\n  matchedValues?: { [key: string]: string };\r\n  /**\r\n   * For validator topic fields, specifies the type of message (info, warning, error, recommendation).\r\n   * This helps categorize the severity or nature of validation results.\r\n   */\r\n  messageType?: FieldMessageType;\r\n  /**\r\n   * Per-field summarizer for generating human-readable descriptions of this field's value.\r\n   * Used by JSON editor value decorations to show contextual information inline.\r\n   *\r\n   * This allows fields to define how their values should be visualized and summarized,\r\n   * enabling features like:\r\n   * - Health bars for health values\r\n   * - Color swatches for color values\r\n   * - Speed comparisons for movement values\r\n   * - Probability bars for chance values\r\n   *\r\n   * @example\r\n   * // For a health value field\r\n   * \"valueSummarizer\": {\r\n   *   \"type\": \"healthBar\",\r\n   *   \"maxReference\": 100,\r\n   *   \"unit\": \"HP\"\r\n   * }\r\n   *\r\n   * @example\r\n   * // For a movement speed field\r\n   * \"valueSummarizer\": {\r\n   *   \"type\": \"comparison\",\r\n   *   \"references\": [\r\n   *     { \"value\": 0.1, \"label\": \"a Turtle\" },\r\n   *     { \"value\": 0.25, \"label\": \"a Player\" },\r\n   *     { \"value\": 0.3, \"label\": \"a Spider\" }\r\n   *   ]\r\n   * }\r\n   */\r\n  valueSummarizer?: IFieldValueSummarizer;\r\n\r\n  /**\r\n   * Specifies an action to offer on values of this field, such as navigating to a project resource.\r\n   * When set, the data form renderer will add a clickable action button next to each value.\r\n   *\r\n   * Supported actions:\r\n   * - \"openProjectItem\": Treat the value as a resource path and navigate to the matching project item.\r\n   */\r\n  valueAction?: string;\r\n}\r\n\r\n/**\r\n * Defines how a field value should be summarized for visual display in the JSON editor.\r\n */\r\nexport interface IFieldValueSummarizer {\r\n  /**\r\n   * The type of visualization to use.\r\n   */\r\n  type: FieldValueSummarizerType;\r\n\r\n  /**\r\n   * The unit to display after values (e.g., \"HP\", \"blocks/sec\", \"%\").\r\n   */\r\n  unit?: string;\r\n\r\n  /**\r\n   * For bar visualizations, the maximum value for scaling.\r\n   */\r\n  maxReference?: number;\r\n\r\n  /**\r\n   * For comparison-based summarization, reference values to compare against.\r\n   */\r\n  references?: IFieldValueReference[];\r\n\r\n  /**\r\n   * Icon to display (emoji or icon name).\r\n   */\r\n  icon?: string;\r\n\r\n  /**\r\n   * Format string for the value (e.g., \"{value}x\" for scale, \"{value}%\" for percentages).\r\n   */\r\n  format?: string;\r\n\r\n  /**\r\n   * For color values, whether to show a color swatch.\r\n   */\r\n  showColorSwatch?: boolean;\r\n\r\n  /**\r\n   * Custom thresholds for qualitative descriptions.\r\n   */\r\n  thresholds?: IFieldValueThreshold[];\r\n}\r\n\r\n/**\r\n * The type of value summarizer visualization.\r\n */\r\nexport enum FieldValueSummarizerType {\r\n  /**\r\n   * Simple text display with optional unit.\r\n   */\r\n  text = \"text\",\r\n\r\n  /**\r\n   * Health bar visualization (hearts or bar).\r\n   */\r\n  healthBar = \"healthBar\",\r\n\r\n  /**\r\n   * Probability bar visualization (0-100% or 0-1).\r\n   */\r\n  probabilityBar = \"probabilityBar\",\r\n\r\n  /**\r\n   * Scale indicator showing percentage of normal size.\r\n   */\r\n  scale = \"scale\",\r\n\r\n  /**\r\n   * Time visualization (ticks converted to seconds).\r\n   */\r\n  time = \"time\",\r\n\r\n  /**\r\n   * Distance visualization with block unit.\r\n   */\r\n  distance = \"distance\",\r\n\r\n  /**\r\n   * Color swatch for color values.\r\n   */\r\n  color = \"color\",\r\n\r\n  /**\r\n   * Comparison against known reference values.\r\n   */\r\n  comparison = \"comparison\",\r\n\r\n  /**\r\n   * Qualitative description based on thresholds.\r\n   */\r\n  qualitative = \"qualitative\",\r\n}\r\n\r\n/**\r\n * A reference value for comparison-based summarization.\r\n */\r\nexport interface IFieldValueReference {\r\n  /**\r\n   * The reference value.\r\n   */\r\n  value: number;\r\n\r\n  /**\r\n   * Human-readable label for this reference (e.g., \"a Player\", \"an Iron Golem\").\r\n   */\r\n  label: string;\r\n\r\n  /**\r\n   * Optional icon for this reference.\r\n   */\r\n  icon?: string;\r\n}\r\n\r\n/**\r\n * A threshold for qualitative descriptions.\r\n */\r\nexport interface IFieldValueThreshold {\r\n  /**\r\n   * Values at or below this threshold get this description.\r\n   */\r\n  maxValue: number;\r\n\r\n  /**\r\n   * The qualitative description (e.g., \"very low\", \"moderate\", \"extremely high\").\r\n   */\r\n  description: string;\r\n\r\n  /**\r\n   * Optional sentiment for styling.\r\n   */\r\n  sentiment?: \"positive\" | \"negative\" | \"neutral\" | \"warning\";\r\n\r\n  /**\r\n   * Optional icon for this threshold level.\r\n   */\r\n  icon?: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IAppServiceChannel from \"./IAppServiceChannel\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport Log, { LogItem } from \"./../core/Log\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\n\r\nexport enum AppServiceProxyCommands {\r\n  fsExists = \"fsExists\",\r\n  fsFolderExists = \"fsFolderExists\",\r\n  fsRenameFolder = \"fsRenameFolder\",\r\n  fsDeleteFolder = \"fsDeleteFolder\",\r\n  fsRootStorageExists = \"fsRootStorageExists\",\r\n  fsMkdir = \"fsMkdir\",\r\n  fsReadUtf8File = \"fsReadUtf8File\",\r\n  fsReadFile = \"fsReadFile\",\r\n  fsWriteUtf8File = \"fsWriteUtf8File\",\r\n  fsWriteFile = \"fsWriteFile\",\r\n  fsReaddir = \"fsReaddir\",\r\n  fsStat = \"fsStat\",\r\n  getDirname = \"getDirname\",\r\n  getDedicatedServerStatus = \"getDedicatedServerStatus\",\r\n  getDedicatedServerProjectDeployDir = \"getDedicatedServerProjectDir\",\r\n  getDedicatedServerWorldDeployDir = \"getDedicatedServerWorldDir\",\r\n  getMinecraftGameProjectDeployDir = \"getMinecraftGameProjectDeployDir\",\r\n  getMinecraftGameWorldDeployDir = \"getMinecraftGameWorldDeployDir\",\r\n  getIsDev = \"getIsDev\",\r\n  openFolder = \"openFolder\",\r\n  shellOpenPath = \"shellOpenPath\",\r\n  shellOpenFolderInExplorer = \"shellOpenFolderInExplorer\",\r\n  webSocketCommand = \"webSocketCommand\",\r\n  dedicatedServerCommand = \"dedicatedServerCommand\",\r\n  startWebSocketServer = \"startWebSocketServer\",\r\n  stopWebSocketServer = \"stopWebSocketServer\",\r\n  startDedicatedServer = \"startDedicatedServer\",\r\n  stopDedicatedServer = \"stopDedicatedServer\",\r\n  debugPause = \"debugPause\",\r\n  debugResume = \"debugResume\",\r\n  debugStartProfiler = \"debugStartProfiler\",\r\n  debugStopProfiler = \"debugStopProfiler\",\r\n  shellRecycleItem = \"shellRecycleItem\",\r\n  reloadMct = \"reloadMct\",\r\n  getContentSources = \"getContentSources\",\r\n  minecraftShell = \"minecraftShell\",\r\n  windowClose = \"windowClose\",\r\n  windowRestore = \"windowRestore\",\r\n  windowMove = \"windowMove\",\r\n  logToConsole = \"logToConsole\",\r\n  windowMinimize = \"windowMinimize\",\r\n  windowMaximize = \"windowMaximize\",\r\n  windowUpdate = \"windowUpdate\",\r\n  windowLeftSide = \"windowLeftSide\",\r\n  windowRightSide = \"windowRightSide\",\r\n  getWindowState = \"getWindowState\",\r\n  getPlatform = \"getPlatform\",\r\n  appGetPath = \"appGetPath\",\r\n  updateIAgree = \"updateIAgree\",\r\n  convertFile = \"convertFile\",\r\n}\r\n\r\nexport default class AppServiceProxy {\r\n  static _api: IAppServiceChannel | undefined;\r\n  static _pendingStringPromiseResolvers: ((value: string | PromiseLike<string> | undefined) => void)[] = [];\r\n  static _pendingArrayBufferPromiseResolvers: ((value: ArrayBuffer | PromiseLike<ArrayBuffer> | undefined) => void)[] =\r\n    [];\r\n  static _pendingStringPromiseRejecters: ((reason?: any) => void)[] = [];\r\n  static _pendingArrayPromiseRejecters: ((reason?: any) => void)[] = [];\r\n\r\n  private static _onMessage = new EventDispatcher<string, string>();\r\n\r\n  public static get onMessage() {\r\n    return AppServiceProxy._onMessage.asEvent();\r\n  }\r\n\r\n  static get hasAppService() {\r\n    return AppServiceProxy._api !== undefined;\r\n  }\r\n\r\n  static get hasAppServiceOrDebug() {\r\n    return AppServiceProxy._api !== undefined || Utilities.isDebug;\r\n  }\r\n\r\n  static get hasAppServiceOrSim() {\r\n    return AppServiceProxy._api !== undefined || Utilities.isAppSim;\r\n  }\r\n\r\n  static init() {\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\") {\r\n      // @ts-ignore\r\n      AppServiceProxy._api = (window as any).api;\r\n\r\n      if (\r\n        AppServiceProxy._api &&\r\n        CreatorToolsHost.hostType !== HostType.vsCodeMainWeb &&\r\n        CreatorToolsHost.hostType !== HostType.vsCodeWebWeb\r\n      ) {\r\n        CreatorToolsHost.hostType = HostType.electronWeb;\r\n        CreatorToolsHost.fullLocalStorage = true;\r\n      }\r\n    }\r\n\r\n    if (AppServiceProxy._api !== undefined) {\r\n      AppServiceProxy._api.receive(\"appsvc\", AppServiceProxy._handleNewMessage);\r\n      Log.onItemAdded.subscribe(AppServiceProxy._handleLog);\r\n    }\r\n  }\r\n\r\n  static _handleLog(log: Log, item: LogItem) {\r\n    AppServiceProxy.logToConsole(item.message + \" \" + Log.getStack().replace(\"Error\\n\", \"\"));\r\n  }\r\n\r\n  static async logToConsole(message: string) {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.logToConsole, message);\r\n  }\r\n\r\n  static send(commandName: AppServiceProxyCommands | string, data: any) {\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        return;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    if (commandName === AppServiceProxyCommands.fsWriteFile) {\r\n      let content = data.content;\r\n\r\n      if (content instanceof Uint8Array) {\r\n        content = Utilities.uint8ArrayToBase64(content);\r\n      } else if (data instanceof ArrayBuffer) {\r\n        content = Utilities.arrayBufferToBase64(content);\r\n      } else if (\r\n        data instanceof Uint16Array ||\r\n        data instanceof Uint32Array ||\r\n        data instanceof Uint8ClampedArray ||\r\n        data instanceof BigUint64Array\r\n      ) {\r\n        Log.fail(\"Unsupported binary type encountered.\" + data);\r\n      }\r\n\r\n      data.content = content;\r\n    }\r\n\r\n    let result: any = undefined;\r\n\r\n    try {\r\n      result = AppServiceProxy._api.send(\"appweb\", commandName as string, data);\r\n    } catch (e) {\r\n      let dataStr = data;\r\n\r\n      if (typeof data === \"object\") {\r\n        dataStr = JSON.stringify(data);\r\n      }\r\n\r\n      throw new Error(\"Error running command \" + commandName + \", data: \" + dataStr + \", error: \" + e);\r\n    }\r\n\r\n    if (commandName === AppServiceProxyCommands.fsReadFile) {\r\n      if (result === undefined || result.length === 0) {\r\n        return undefined;\r\n      }\r\n\r\n      return Utilities.base64ToArrayBuffer(result);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static sendAsyncBinary(commandName: AppServiceProxyCommands | string, data: any): Promise<ArrayBuffer | undefined> {\r\n    const promise = new Promise<ArrayBuffer | undefined>(AppServiceProxy._arrayBufferPromiseHandler);\r\n\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        return promise;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    const position = AppServiceProxy._pendingArrayBufferPromiseResolvers.length - 1;\r\n\r\n    const commandStr = \"bsync\" + (commandName as string) + \"|\" + position;\r\n\r\n    // Log.verbose(\"Sending async command '\" + commandStr + \"' + data: \" + data);\r\n\r\n    AppServiceProxy._api.send(\"appweb\", commandStr, data);\r\n\r\n    return promise;\r\n  }\r\n\r\n  static sendBinaryAsync(commandName: AppServiceProxyCommands | string, data: any): Promise<string | undefined> {\r\n    const promise = new Promise<string | undefined>(AppServiceProxy._stringPromiseHandler);\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        return promise;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    let content = data.content;\r\n\r\n    if (content instanceof Uint8Array) {\r\n      content = Utilities.uint8ArrayToBase64(content);\r\n    } else if (data instanceof ArrayBuffer) {\r\n      content = Utilities.arrayBufferToBase64(content);\r\n    } else if (\r\n      data instanceof Uint16Array ||\r\n      data instanceof Uint32Array ||\r\n      data instanceof Uint8ClampedArray ||\r\n      data instanceof BigUint64Array\r\n    ) {\r\n      Log.fail(\"Unsupported binary type encountered.\" + data);\r\n    }\r\n\r\n    data.content = content;\r\n\r\n    const position = AppServiceProxy._pendingStringPromiseResolvers.length - 1;\r\n\r\n    const commandStr = \"async\" + (commandName as string) + \"|\" + position;\r\n\r\n    // Log.verbose(\"Sending async command '\" + commandStr + \"' + data: \" + data);\r\n\r\n    AppServiceProxy._api.send(\"appweb\", commandStr, data);\r\n\r\n    return promise;\r\n  }\r\n\r\n  static sendAsync(\r\n    commandName: AppServiceProxyCommands | string,\r\n    data: any,\r\n    ignoreInSim?: boolean\r\n  ): Promise<string | undefined> {\r\n    const promise = new Promise<string | undefined>(AppServiceProxy._stringPromiseHandler);\r\n\r\n    if (AppServiceProxy._api === undefined) {\r\n      if (Utilities.isAppSim) {\r\n        if (!ignoreInSim) {\r\n          Log.debugAlert(\"Command: \" + commandName + \" Data: \" + data);\r\n        }\r\n        return promise;\r\n      }\r\n\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    const position = AppServiceProxy._pendingStringPromiseResolvers.length - 1;\r\n\r\n    const commandStr = \"async\" + (commandName as string) + \"|\" + position;\r\n\r\n    // Do not uncomment this as it'll cause a loop.\r\n    // Log.verbose(\"Sending async command '\" + commandStr + \"' + data: \" + data);\r\n\r\n    AppServiceProxy._api.send(\"appweb\", commandStr, data);\r\n\r\n    return promise;\r\n  }\r\n\r\n  static sendHost(serviceName: string, commandName: AppServiceProxyCommands | string, data: any) {\r\n    if (AppServiceProxy._api === undefined) {\r\n      throw new Error(\"Not an Electron API\");\r\n    }\r\n\r\n    if (typeof data === \"object\") {\r\n      data = JSON.stringify(data);\r\n    } else if (typeof data !== \"string\") {\r\n      data = data.toString();\r\n    }\r\n\r\n    AppServiceProxy._api.send(serviceName, commandName, data);\r\n  }\r\n\r\n  static openLinkExternal(url: string) {\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        (window as any).open(url, \"_blank\");\r\n      }\r\n    } catch (e) {}\r\n  }\r\n\r\n  private static _arrayBufferPromiseHandler(\r\n    resolve: (value: ArrayBuffer | PromiseLike<ArrayBuffer> | undefined) => void,\r\n    reject: (reason?: any) => void\r\n  ) {\r\n    const position = AppServiceProxy._pendingArrayBufferPromiseResolvers.length;\r\n\r\n    AppServiceProxy._pendingArrayBufferPromiseResolvers[position] = resolve;\r\n    AppServiceProxy._pendingStringPromiseRejecters[position] = reject;\r\n  }\r\n\r\n  private static _stringPromiseHandler(\r\n    resolve: (value: string | PromiseLike<string> | undefined) => void,\r\n    reject: (reason?: any) => void\r\n  ) {\r\n    const position = AppServiceProxy._pendingStringPromiseResolvers.length;\r\n\r\n    AppServiceProxy._pendingStringPromiseResolvers[position] = resolve;\r\n    AppServiceProxy._pendingStringPromiseRejecters[position] = reject;\r\n  }\r\n\r\n  private static _handleNewMessage(args: string) {\r\n    if (args !== null && args.length > 0) {\r\n      if (args.startsWith(\"async\")) {\r\n        const argSplit = Utilities.splitUntil(args, \"|\", 2);\r\n\r\n        if (argSplit.length > 2) {\r\n          const index = parseInt(argSplit[1]);\r\n\r\n          if (index >= 0) {\r\n            const promiseResolver = AppServiceProxy._pendingStringPromiseResolvers[index];\r\n\r\n            // NOTE: Since logging goes from browser to client and then async is complete,\r\n            // DO NOT log inside of here or otherwise you may cause a loop.\r\n\r\n            let val: string | undefined = argSplit[2];\r\n\r\n            if (val === \"<undefined>\") {\r\n              val = undefined;\r\n            }\r\n\r\n            promiseResolver(val);\r\n          }\r\n        }\r\n      } else if (args.startsWith(\"bsync\")) {\r\n        const argSplit = Utilities.splitUntil(args, \"|\", 2);\r\n\r\n        if (argSplit.length > 2) {\r\n          const index = parseInt(argSplit[1]);\r\n\r\n          if (index >= 0) {\r\n            const promiseResolver = AppServiceProxy._pendingArrayBufferPromiseResolvers[index];\r\n\r\n            // NOTE: Since logging goes from browser to client and then async is complete,\r\n            // DO NOT log inside of here or otherwise you may cause a loop.\r\n            let val: ArrayBuffer | undefined = undefined;\r\n\r\n            if (argSplit[2] !== \"<undefined>\") {\r\n              val = Utilities.base64ToArrayBuffer(argSplit[2]);\r\n            }\r\n\r\n            promiseResolver(val);\r\n          }\r\n        }\r\n      } else {\r\n        const firstPipe = args.indexOf(\"|\");\r\n\r\n        if (firstPipe >= 0) {\r\n          AppServiceProxy._onMessage.dispatch(args.substring(0, firstPipe), args.substring(firstPipe + 1, args.length));\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "'use strict';\n\nvar at; // The index of the current character\nvar ch; // The current character\nvar escapee = {\n\t'\"': '\"',\n\t'\\\\': '\\\\',\n\t'/': '/',\n\tb: '\\b',\n\tf: '\\f',\n\tn: '\\n',\n\tr: '\\r',\n\tt: '\\t'\n};\nvar text;\n\n// Call error when something is wrong.\nfunction error(m) {\n\tthrow {\n\t\tname: 'SyntaxError',\n\t\tmessage: m,\n\t\tat: at,\n\t\ttext: text\n\t};\n}\n\nfunction next(c) {\n\t// If a c parameter is provided, verify that it matches the current character.\n\tif (c && c !== ch) {\n\t\terror(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n\t}\n\n\t// Get the next character. When there are no more characters, return the empty string.\n\n\tch = text.charAt(at);\n\tat += 1;\n\treturn ch;\n}\n\nfunction number() {\n\t// Parse a number value.\n\tvar num;\n\tvar str = '';\n\n\tif (ch === '-') {\n\t\tstr = '-';\n\t\tnext('-');\n\t}\n\twhile (ch >= '0' && ch <= '9') {\n\t\tstr += ch;\n\t\tnext();\n\t}\n\tif (ch === '.') {\n\t\tstr += '.';\n\t\twhile (next() && ch >= '0' && ch <= '9') {\n\t\t\tstr += ch;\n\t\t}\n\t}\n\tif (ch === 'e' || ch === 'E') {\n\t\tstr += ch;\n\t\tnext();\n\t\tif (ch === '-' || ch === '+') {\n\t\t\tstr += ch;\n\t\t\tnext();\n\t\t}\n\t\twhile (ch >= '0' && ch <= '9') {\n\t\t\tstr += ch;\n\t\t\tnext();\n\t\t}\n\t}\n\tnum = Number(str);\n\tif (!isFinite(num)) {\n\t\terror('Bad number');\n\t}\n\treturn num;\n}\n\nfunction string() {\n\t// Parse a string value.\n\tvar hex;\n\tvar i;\n\tvar str = '';\n\tvar uffff;\n\n\t// When parsing for string values, we must look for \" and \\ characters.\n\tif (ch === '\"') {\n\t\twhile (next()) {\n\t\t\tif (ch === '\"') {\n\t\t\t\tnext();\n\t\t\t\treturn str;\n\t\t\t} else if (ch === '\\\\') {\n\t\t\t\tnext();\n\t\t\t\tif (ch === 'u') {\n\t\t\t\t\tuffff = 0;\n\t\t\t\t\tfor (i = 0; i < 4; i += 1) {\n\t\t\t\t\t\thex = parseInt(next(), 16);\n\t\t\t\t\t\tif (!isFinite(hex)) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tuffff = (uffff * 16) + hex;\n\t\t\t\t\t}\n\t\t\t\t\tstr += String.fromCharCode(uffff);\n\t\t\t\t} else if (typeof escapee[ch] === 'string') {\n\t\t\t\t\tstr += escapee[ch];\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\t}\n\terror('Bad string');\n}\n\n// Skip whitespace.\nfunction white() {\n\twhile (ch && ch <= ' ') {\n\t\tnext();\n\t}\n}\n\n// true, false, or null.\nfunction word() {\n\tswitch (ch) {\n\t\tcase 't':\n\t\t\tnext('t');\n\t\t\tnext('r');\n\t\t\tnext('u');\n\t\t\tnext('e');\n\t\t\treturn true;\n\t\tcase 'f':\n\t\t\tnext('f');\n\t\t\tnext('a');\n\t\t\tnext('l');\n\t\t\tnext('s');\n\t\t\tnext('e');\n\t\t\treturn false;\n\t\tcase 'n':\n\t\t\tnext('n');\n\t\t\tnext('u');\n\t\t\tnext('l');\n\t\t\tnext('l');\n\t\t\treturn null;\n\t\tdefault:\n\t\t\terror(\"Unexpected '\" + ch + \"'\");\n\t}\n}\n\n// Parse an array value.\nfunction array() {\n\tvar arr = [];\n\n\tif (ch === '[') {\n\t\tnext('[');\n\t\twhite();\n\t\tif (ch === ']') {\n\t\t\tnext(']');\n\t\t\treturn arr; // empty array\n\t\t}\n\t\twhile (ch) {\n\t\t\tarr.push(value()); // eslint-disable-line no-use-before-define\n\t\t\twhite();\n\t\t\tif (ch === ']') {\n\t\t\t\tnext(']');\n\t\t\t\treturn arr;\n\t\t\t}\n\t\t\tnext(',');\n\t\t\twhite();\n\t\t}\n\t}\n\terror('Bad array');\n}\n\n// Parse an object value.\nfunction object() {\n\tvar key;\n\tvar obj = {};\n\n\tif (ch === '{') {\n\t\tnext('{');\n\t\twhite();\n\t\tif (ch === '}') {\n\t\t\tnext('}');\n\t\t\treturn obj; // empty object\n\t\t}\n\t\twhile (ch) {\n\t\t\tkey = string();\n\t\t\twhite();\n\t\t\tnext(':');\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t\t\t\terror('Duplicate key \"' + key + '\"');\n\t\t\t}\n\t\t\tobj[key] = value(); // eslint-disable-line no-use-before-define\n\t\t\twhite();\n\t\t\tif (ch === '}') {\n\t\t\t\tnext('}');\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tnext(',');\n\t\t\twhite();\n\t\t}\n\t}\n\terror('Bad object');\n}\n\n// Parse a JSON value. It could be an object, an array, a string, a number, or a word.\nfunction value() {\n\twhite();\n\tswitch (ch) {\n\t\tcase '{':\n\t\t\treturn object();\n\t\tcase '[':\n\t\t\treturn array();\n\t\tcase '\"':\n\t\t\treturn string();\n\t\tcase '-':\n\t\t\treturn number();\n\t\tdefault:\n\t\t\treturn ch >= '0' && ch <= '9' ? number() : word();\n\t}\n}\n\n// Return the json_parse function. It will have access to all of the above functions and variables.\nmodule.exports = function (source, reviver) {\n\tvar result;\n\n\ttext = source;\n\tat = 0;\n\tch = ' ';\n\tresult = value();\n\twhite();\n\tif (ch) {\n\t\terror('Syntax error');\n\t}\n\n\t// If there is a reviver function, we recursively walk the new structure,\n\t// passing each name/value pair to the reviver function for possible\n\t// transformation, starting with a temporary root object that holds the result\n\t// in an empty key. If there is not a reviver function, we simply return the\n\t// result.\n\n\treturn typeof reviver === 'function' ? (function walk(holder, key) {\n\t\tvar k;\n\t\tvar v;\n\t\tvar val = holder[key];\n\t\tif (val && typeof val === 'object') {\n\t\t\tfor (k in value) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(val, k)) {\n\t\t\t\t\tv = walk(val, k);\n\t\t\t\t\tif (typeof v === 'undefined') {\n\t\t\t\t\t\tdelete val[k];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tval[k] = v;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn reviver.call(holder, key, val);\n\t}({ '': result }, '')) : result;\n};\n", "'use strict';\n\nvar escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nvar gap;\nvar indent;\nvar meta = { // table of character substitutions\n\t'\\b': '\\\\b',\n\t'\\t': '\\\\t',\n\t'\\n': '\\\\n',\n\t'\\f': '\\\\f',\n\t'\\r': '\\\\r',\n\t'\"': '\\\\\"',\n\t'\\\\': '\\\\\\\\'\n};\nvar rep;\n\nfunction quote(string) {\n\t// If the string contains no control characters, no quote characters, and no\n\t// backslash characters, then we can safely slap some quotes around it.\n\t// Otherwise we must also replace the offending characters with safe escape sequences.\n\n\tescapable.lastIndex = 0;\n\treturn escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n\t\tvar c = meta[a];\n\t\treturn typeof c === 'string' ? c\n\t\t\t: '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n\t}) + '\"' : '\"' + string + '\"';\n}\n\nfunction str(key, holder) {\n\t// Produce a string from holder[key].\n\tvar i; // The loop counter.\n\tvar k; // The member key.\n\tvar v; // The member value.\n\tvar length;\n\tvar mind = gap;\n\tvar partial;\n\tvar value = holder[key];\n\n\t// If the value has a toJSON method, call it to obtain a replacement value.\n\tif (value && typeof value === 'object' && typeof value.toJSON === 'function') {\n\t\tvalue = value.toJSON(key);\n\t}\n\n\t// If we were called with a replacer function, then call the replacer to obtain a replacement value.\n\tif (typeof rep === 'function') {\n\t\tvalue = rep.call(holder, key, value);\n\t}\n\n\t// What happens next depends on the value's type.\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\treturn quote(value);\n\n\t\tcase 'number':\n\t\t\t// JSON numbers must be finite. Encode non-finite numbers as null.\n\t\t\treturn isFinite(value) ? String(value) : 'null';\n\n\t\tcase 'boolean':\n\t\tcase 'null':\n\t\t\t// If the value is a boolean or null, convert it to a string. Note:\n\t\t\t// typeof null does not produce 'null'. The case is included here in\n\t\t\t// the remote chance that this gets fixed someday.\n\t\t\treturn String(value);\n\n\t\tcase 'object':\n\t\t\tif (!value) {\n\t\t\t\treturn 'null';\n\t\t\t}\n\t\t\tgap += indent;\n\t\t\tpartial = [];\n\n\t\t\t// Array.isArray\n\t\t\tif (Object.prototype.toString.apply(value) === '[object Array]') {\n\t\t\t\tlength = value.length;\n\t\t\t\tfor (i = 0; i < length; i += 1) {\n\t\t\t\t\tpartial[i] = str(i, value) || 'null';\n\t\t\t\t}\n\n\t\t\t\t// Join all of the elements together, separated with commas, and wrap them in brackets.\n\t\t\t\tv = partial.length === 0 ? '[]' : gap\n\t\t\t\t\t? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\n\t\t\t\t\t: '[' + partial.join(',') + ']';\n\t\t\t\tgap = mind;\n\t\t\t\treturn v;\n\t\t\t}\n\n\t\t\t// If the replacer is an array, use it to select the members to be stringified.\n\t\t\tif (rep && typeof rep === 'object') {\n\t\t\t\tlength = rep.length;\n\t\t\t\tfor (i = 0; i < length; i += 1) {\n\t\t\t\t\tk = rep[i];\n\t\t\t\t\tif (typeof k === 'string') {\n\t\t\t\t\t\tv = str(k, value);\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tpartial.push(quote(k) + (gap ? ': ' : ':') + v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, iterate through all of the keys in the object.\n\t\t\t\tfor (k in value) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(value, k)) {\n\t\t\t\t\t\tv = str(k, value);\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tpartial.push(quote(k) + (gap ? ': ' : ':') + v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Join all of the member texts together, separated with commas, and wrap them in braces.\n\n\t\t\tv = partial.length === 0 ? '{}' : gap\n\t\t\t\t? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\n\t\t\t\t: '{' + partial.join(',') + '}';\n\t\t\tgap = mind;\n\t\t\treturn v;\n\t\tdefault:\n\t}\n}\n\nmodule.exports = function (value, replacer, space) {\n\tvar i;\n\tgap = '';\n\tindent = '';\n\n\t// If the space parameter is a number, make an indent string containing that many spaces.\n\tif (typeof space === 'number') {\n\t\tfor (i = 0; i < space; i += 1) {\n\t\t\tindent += ' ';\n\t\t}\n\t} else if (typeof space === 'string') {\n\t\t// If the space parameter is a string, it will be used as the indent string.\n\t\tindent = space;\n\t}\n\n\t// If there is a replacer, it must be a function or an array. Otherwise, throw an error.\n\trep = replacer;\n\tif (\n\t\treplacer\n\t\t&& typeof replacer !== 'function'\n\t\t&& (typeof replacer !== 'object' || typeof replacer.length !== 'number')\n\t) {\n\t\tthrow new Error('JSON.stringify');\n\t}\n\n\t// Make a fake root object containing our value under the key of ''.\n\t// Return the result of stringifying the value.\n\treturn str('', { '': value });\n};\n", "'use strict';\n\nexports.parse = require('./lib/parse');\nexports.stringify = require('./lib/stringify');\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n", "'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n", "'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n", "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n", "'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + (adjustedLength > 0 ? adjustedLength : 0),\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\n/** @type {typeof JSON.stringify} */\nvar jsonStringify = (typeof JSON !== 'undefined' ? JSON : require('jsonify')).stringify;\n\nvar isArray = require('isarray');\nvar objectKeys = require('object-keys');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\n\nvar $join = callBound('Array.prototype.join');\nvar $indexOf = callBound('Array.prototype.indexOf');\nvar $splice = callBound('Array.prototype.splice');\nvar $sort = callBound('Array.prototype.sort');\n\n/** @type {(n: number, char: string) => string} */\nvar strRepeat = function repeat(n, char) {\n\tvar str = '';\n\tfor (var i = 0; i < n; i += 1) {\n\t\tstr += char;\n\t}\n\treturn str;\n};\n\n/** @type {(parent: import('.').Node, key: import('.').Key, value: unknown) => unknown} */\nvar defaultReplacer = function (_parent, _key, value) { return value; };\n\n/** @type {import('.')} */\nmodule.exports = function stableStringify(obj) {\n\t/** @type {Parameters<import('.')>[1]} */\n\tvar opts = arguments.length > 1 ? arguments[1] : void undefined;\n\tvar space = (opts && opts.space) || '';\n\tif (typeof space === 'number') { space = strRepeat(space, ' '); }\n\tvar cycles = !!opts && typeof opts.cycles === 'boolean' && opts.cycles;\n\t/** @type {undefined | typeof defaultReplacer} */\n\tvar replacer = opts && opts.replacer ? callBind(opts.replacer) : defaultReplacer;\n\tif (opts && typeof opts.collapseEmpty !== 'undefined' && typeof opts.collapseEmpty !== 'boolean') {\n\t\tthrow new TypeError('`collapseEmpty` must be a boolean, if provided');\n\t}\n\tvar collapseEmpty = !!opts && opts.collapseEmpty;\n\n\tvar cmpOpt = typeof opts === 'function' ? opts : opts && opts.cmp;\n\t/** @type {undefined | (<T extends import('.').NonArrayNode>(node: T) => (a: Exclude<keyof T, symbol | number>, b: Exclude<keyof T, symbol | number>) => number)} */\n\tvar cmp = cmpOpt && function (node) {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar get = /** @type {NonNullable<typeof cmpOpt>} */ (cmpOpt).length > 2\n\t\t\t&& /** @type {import('.').Getter['get']} */ function get(k) { return node[k]; };\n\t\treturn function (a, b) {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\treturn /** @type {NonNullable<typeof cmpOpt>} */ (cmpOpt)(\n\t\t\t\t{ key: a, value: node[a] },\n\t\t\t\t{ key: b, value: node[b] },\n\t\t\t\t// @ts-expect-error TS doesn't understand the optimization used here\n\t\t\t\tget ? /** @type {import('.').Getter} */ { __proto__: null, get: get } : void undefined\n\t\t\t);\n\t\t};\n\t};\n\n\t/** @type {import('.').Node[]} */\n\tvar seen = [];\n\treturn (/** @type {(parent: import('.').Node, key: string | number, node: unknown, level: number) => string | undefined} */\n\t\tfunction stringify(parent, key, node, level) {\n\t\t\tvar indent = space ? '\\n' + strRepeat(level, space) : '';\n\t\t\tvar colonSeparator = space ? ': ' : ':';\n\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tif (node && /** @type {{ toJSON?: unknown }} */ (node).toJSON && typeof /** @type {{ toJSON?: unknown }} */ (node).toJSON === 'function') {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tnode = /** @type {{ toJSON: Function }} */ (node).toJSON();\n\t\t\t}\n\n\t\t\tnode = replacer(parent, key, node);\n\t\t\tif (node === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof node !== 'object' || node === null) {\n\t\t\t\treturn jsonStringify(node);\n\t\t\t}\n\n\t\t\t/** @type {(out: string[], brackets: '[]' | '{}') => string} */\n\t\t\tvar groupOutput = function (out, brackets) {\n\t\t\t\treturn collapseEmpty && out.length === 0\n\t\t\t\t\t? brackets\n\t\t\t\t\t: (brackets === '[]' ? '[' : '{') + $join(out, ',') + indent + (brackets === '[]' ? ']' : '}');\n\t\t\t};\n\n\t\t\tif (isArray(node)) {\n\t\t\t\tvar out = [];\n\t\t\t\tfor (var i = 0; i < node.length; i++) {\n\t\t\t\t\tvar item = stringify(node, i, node[i], level + 1) || jsonStringify(null);\n\t\t\t\t\tout[out.length] = indent + space + item;\n\t\t\t\t}\n\t\t\t\treturn groupOutput(out, '[]');\n\t\t\t}\n\n\t\t\tif ($indexOf(seen, node) !== -1) {\n\t\t\t\tif (cycles) { return jsonStringify('__cycle__'); }\n\t\t\t\tthrow new TypeError('Converting circular structure to JSON');\n\t\t\t} else {\n\t\t\t\tseen[seen.length] = /** @type {import('.').NonArrayNode} */ (node);\n\t\t\t}\n\n\t\t\t/** @type {import('.').Key[]} */\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tvar keys = $sort(objectKeys(node), cmp && cmp(/** @type {import('.').NonArrayNode} */ (node)));\n\t\t\tvar out = [];\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tvar value = stringify(/** @type {import('.').Node} */ (node), key, /** @type {import('.').NonArrayNode} */ (node)[key], level + 1);\n\n\t\t\t\tif (!value) { continue; }\n\n\t\t\t\tvar keyValue = jsonStringify(key)\n\t\t\t\t\t+ colonSeparator\n\t\t\t\t\t+ value;\n\n\t\t\t\tout[out.length] = indent + space + keyValue;\n\t\t\t}\n\t\t\t$splice(seen, $indexOf(seen, node), 1);\n\t\t\treturn groupOutput(out, '{}');\n\t\t}({ '': obj }, '', obj, 0)\n\t);\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\nimport { FieldValueHumanify } from \"../dataform/IField\";\r\nimport AppServiceProxy from \"./AppServiceProxy\";\r\nimport { IErrorable } from \"./IErrorable\";\r\nimport Log from \"./Log\";\r\nimport * as stableStringify from \"json-stable-stringify\";\r\n\r\n// json-stable-stringify may be exported either as a function (CommonJS) or as a default property\r\n// (ES module interop). Create an alias that resolves to the callable function in either case.\r\nconst stableStringifyFunc: (obj: any, options?: any) => string | undefined =\r\n  (stableStringify as any).default ?? (stableStringify as any);\r\n\r\nconst singleComment = Symbol(\"singleComment\");\r\nconst multiComment = Symbol(\"multiComment\");\r\n\r\nconst javascriptStringTranslations: Map<string, string> = new Map<string, string>();\r\n\r\nexport const ObjectKeyAvoidTermList = new Set([\r\n  \"__proto__\",\r\n  \"prototype\",\r\n  \"[[Prototype]]\",\r\n  \"this\",\r\n  \"delete\",\r\n  \"constructor\",\r\n  \"hasOwnProperty\",\r\n  \"isPrototypeOf\",\r\n  \"__defineGetter__\",\r\n  \"__defineSetter__\",\r\n  \"__lookupGetter__\",\r\n  \"__lookupSetter__\",\r\n]);\r\n\r\nexport default class Utilities {\r\n  static _isDebug?: boolean;\r\n  static _isAppSim?: boolean;\r\n  static defaultEncoding = \"UTF-8\";\r\n  static replacementChar = 0xfffd;\r\n\r\n  // note that if the stringToSplit is well formed, it should return untilCount+1 items items in the string[]\r\n  static splitUntil(stringToSplit: string, splitChar: string, untilCount: number): string[] {\r\n    const results: string[] = [];\r\n\r\n    let lastPipe = 0;\r\n    let index = 0;\r\n    let curPipe = stringToSplit.indexOf(splitChar);\r\n\r\n    while (curPipe > 0 && index < untilCount) {\r\n      results.push(stringToSplit.substring(lastPipe, curPipe));\r\n      index++;\r\n      lastPipe = curPipe + 1;\r\n      curPipe = stringToSplit.indexOf(splitChar, lastPipe);\r\n    }\r\n\r\n    results.push(stringToSplit.substring(lastPipe, stringToSplit.length));\r\n\r\n    return results;\r\n  }\r\n\r\n  static parseJson(jsonString: string): object | undefined {\r\n    let obj: object | undefined;\r\n\r\n    try {\r\n      obj = JSON.parse(jsonString);\r\n    } catch (e) {\r\n      return undefined;\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  static isScientificFloat(value: number) {\r\n    // Ensure it's a number (not NaN, not Infinity)\r\n    if (typeof value !== \"number\" || !isFinite(value)) {\r\n      return false;\r\n    }\r\n\r\n    // Convert to string in default format\r\n    const str = value.toString();\r\n\r\n    // Match scientific notation pattern: e.g., 1.23e4, -5E-3\r\n    return /^[+-]?\\d+(\\.\\d+)?e[+-]?\\d+$/i.test(str);\r\n  }\r\n\r\n  static isUsableAsObjectKey(term: string) {\r\n    if (term === undefined || term === null) {\r\n      return false;\r\n    }\r\n\r\n    return !ObjectKeyAvoidTermList.has(term);\r\n  }\r\n\r\n  /**\r\n   * Returns true if the string looks like a Minecraft localization key\r\n   * (e.g., \"pack.name\", \"pack.description\", \"skinpack.mypack.name\").\r\n   * These are dotted identifiers with no spaces, used as lookup keys\r\n   * in .lang files rather than as user-visible display names.\r\n   */\r\n  static isLikelyLocalizationKey(name: string): boolean {\r\n    if (!name || name.indexOf(\" \") >= 0) {\r\n      return false;\r\n    }\r\n\r\n    // Must contain at least one dot (e.g., \"pack.name\")\r\n    // and consist only of word-like characters and dots\r\n    return /^[\\w][\\w.]*\\.[\\w][\\w.]*$/.test(name);\r\n  }\r\n\r\n  static async sleep(ms: number) {\r\n    return new Promise((resolve) => {\r\n      setTimeout(resolve, ms);\r\n    });\r\n  }\r\n\r\n  static get isPreview(): boolean {\r\n    return true;\r\n  }\r\n\r\n  static get isAppSim(): boolean {\r\n    if (Utilities._isAppSim === undefined) {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        const query = window.location.search.toLowerCase();\r\n\r\n        if (query.indexOf(\"appsim=true\") >= 0) {\r\n          Utilities._isAppSim = true;\r\n        } else {\r\n          Utilities._isAppSim = false;\r\n        }\r\n      } else {\r\n        Utilities._isAppSim = false;\r\n      }\r\n    }\r\n\r\n    return Utilities._isAppSim;\r\n  }\r\n\r\n  static get isDebug(): boolean {\r\n    if (Utilities._isDebug === undefined) {\r\n      if (AppServiceProxy.hasAppService) {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          // @ts-ignore\r\n          if (window.location.href.indexOf(\"localhost\") >= 0) {\r\n            Utilities._isDebug = true;\r\n          }\r\n        }\r\n\r\n        if (!Utilities._isDebug) {\r\n          Utilities._isDebug = false;\r\n        }\r\n        // @ts-ignore\r\n      } else if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        const query = window.location.search.toLowerCase();\r\n\r\n        if (query.indexOf(\"debug=true\") >= 0) {\r\n          Utilities._isDebug = true;\r\n        } else {\r\n          Utilities._isDebug = false;\r\n        }\r\n      } else {\r\n        Utilities._isDebug = false;\r\n      }\r\n    }\r\n\r\n    return Utilities._isDebug;\r\n  }\r\n\r\n  static selectJsonObject(jsonO: object, select: string, ensureObjects?: boolean): object | undefined {\r\n    const selectors = select.split(\"/\");\r\n\r\n    for (const selector of selectors) {\r\n      if (selector.length > 0) {\r\n        jsonO = (jsonO as any)[selector];\r\n\r\n        if (!jsonO && !ensureObjects) {\r\n          return undefined;\r\n        }\r\n        if (!jsonO && ensureObjects) {\r\n          (jsonO as any)[selector] = {};\r\n          jsonO = (jsonO as any)[selector];\r\n        }\r\n      }\r\n    }\r\n\r\n    return jsonO;\r\n  }\r\n\r\n  static removeItemInArray(objToRemove: any, stringArr: any[]) {\r\n    const nextArray: any[] = [];\r\n\r\n    for (const candStr of stringArr) {\r\n      if (candStr !== objToRemove) {\r\n        nextArray.push(candStr);\r\n      }\r\n    }\r\n\r\n    return nextArray;\r\n  }\r\n\r\n  static isArrayNonNegative(arr: number[]) {\r\n    for (const val of arr) {\r\n      if (val < 0) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static arrayHasNegativeAndIsNumeric(arr: any[]) {\r\n    let foundNegative = false;\r\n    for (const val of arr) {\r\n      if (typeof val !== \"number\") {\r\n        return false;\r\n      } else if (val < 0) {\r\n        foundNegative = true;\r\n      }\r\n    }\r\n\r\n    return foundNegative;\r\n  }\r\n\r\n  static encodeObjectWithSequentialRunLengthEncodeUsingNegative(obj: { [key: string]: any }) {\r\n    for (const key in obj) {\r\n      const val: any = obj[key];\r\n      if (val !== undefined) {\r\n        if (typeof val === \"object\" && !Array.isArray(val)) {\r\n          this.encodeObjectWithSequentialRunLengthEncodeUsingNegative(val);\r\n        } else if (Array.isArray(val)) {\r\n          let isNumericArray = true;\r\n          for (const arrVal of val) {\r\n            if (typeof arrVal !== \"number\") {\r\n              isNumericArray = false;\r\n              break;\r\n            }\r\n          }\r\n\r\n          if (isNumericArray) {\r\n            obj[key] = this.encodeSequentialRunLengthUsingNegative(val);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static decodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n    if (this.isArrayNonNegative(arr)) {\r\n      return arr;\r\n    }\r\n\r\n    const newArr: number[] = [];\r\n\r\n    newArr.push(arr[0]);\r\n\r\n    for (let i = 1; i < arr.length; i++) {\r\n      if (arr[i] < 0) {\r\n        let startVal = arr[i - 1];\r\n\r\n        for (let j = 0; j < Math.abs(arr[i]); j++) {\r\n          startVal++;\r\n\r\n          newArr.push(startVal);\r\n        }\r\n      } else {\r\n        newArr.push(arr[i]);\r\n      }\r\n    }\r\n    return newArr;\r\n  }\r\n\r\n  /* Convert a numeric array from:\r\n     [1, 2, 3, 7, 9, 10, 15, 16, 17, 18]\r\n     to a \"sequential run length encode\", where negative numbers are used to indicate a \"run\"\r\n     so the above becomes \r\n     [1, -2, 7, 9, -1, 15, -3]\r\n  */\r\n  static encodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n    if (!this.isArrayNonNegative(arr)) {\r\n      return arr;\r\n    }\r\n\r\n    arr.sort();\r\n\r\n    const newArr: number[] = [];\r\n\r\n    newArr.push(arr[0]);\r\n\r\n    let streak = -1;\r\n\r\n    for (let i = 1; i < arr.length; i++) {\r\n      if (arr[i] === arr[i - 1] + 1) {\r\n        if (streak < 1) {\r\n          streak = 1;\r\n        } else {\r\n          streak++;\r\n        }\r\n      } else {\r\n        if (streak >= 1) {\r\n          newArr.push(-streak);\r\n          streak = -1;\r\n        }\r\n\r\n        newArr.push(arr[i]);\r\n      }\r\n    }\r\n\r\n    if (streak >= 1) {\r\n      newArr.push(-streak);\r\n      streak = -1;\r\n    }\r\n\r\n    return newArr;\r\n  }\r\n\r\n  static trimEllipsis(text: string, length: number) {\r\n    if (text.length > length) {\r\n      text = text.substring(0, length - 1) + \"\u2026\";\r\n    }\r\n\r\n    return text;\r\n  }\r\n\r\n  static makeHashFileSafe(hash: string) {\r\n    hash = hash.replace(/\\//gi, \"-S\");\r\n    hash = hash.replace(/\\+/gi, \"-P\");\r\n    hash = hash.replace(/\\\\/gi, \"-B\");\r\n    hash = hash.replace(/=/gi, \"-E\");\r\n    hash = hash.replace(/,/gi, \"-C\");\r\n\r\n    return hash;\r\n  }\r\n\r\n  static getSimpleNumeric(num: number | undefined) {\r\n    if (num === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    if (num < 1000) {\r\n      return num.toString();\r\n    }\r\n\r\n    if (num < 1000) {\r\n      return Math.floor(num / 100) / 10 + \"k\";\r\n    }\r\n\r\n    if (num > 1000000) {\r\n      return Math.floor(num / 100000) / 10 + \"m\";\r\n    }\r\n\r\n    return Math.floor(num / 1000) + \"k\";\r\n  }\r\n\r\n  static humanifyJsName(name: string | boolean | number) {\r\n    if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n      return name.toString();\r\n    }\r\n\r\n    if (name.toLowerCase().indexOf(\"apis used\") >= 0) {\r\n      return name;\r\n    }\r\n\r\n    if (name.startsWith(\"apisUsed\")) {\r\n      name = \"APIs Used\" + name.substring(8);\r\n\r\n      return name;\r\n    }\r\n\r\n    let retVal = \"\";\r\n\r\n    for (let i = 0; i < name.length; i++) {\r\n      if (i === 0) {\r\n        retVal += name[i].toUpperCase();\r\n      } else {\r\n        if (\r\n          name[i] >= \"A\" &&\r\n          name[i] <= \"Z\" &&\r\n          (i === name.length - 1 ||\r\n            i === 0 ||\r\n            ((name[i + 1] < \"A\" || name[i + 1] > \"Z\") && (name[i - 1] < \"A\" || name[i - 1] > \"Z\")))\r\n        ) {\r\n          retVal += \" \";\r\n        }\r\n\r\n        retVal += name[i];\r\n      }\r\n    }\r\n\r\n    retVal = retVal.replace(/_/gi, \" \");\r\n\r\n    retVal = retVal.replace(\"Java Script\", \"JavaScript\");\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static getTitleFromEnum(categoryEnum: { [name: number]: string }, topicId: number) {\r\n    if (categoryEnum[topicId]) {\r\n      return Utilities.humanifyJsName(categoryEnum[topicId]);\r\n    }\r\n\r\n    return \"General\";\r\n  }\r\n\r\n  static humanifyObject(sampVal: any) {\r\n    if (typeof sampVal === \"object\") {\r\n      sampVal = JSON.stringify(sampVal, null, 2);\r\n    } else {\r\n      sampVal = sampVal.toString();\r\n    }\r\n\r\n    sampVal = sampVal.trim();\r\n\r\n    if (sampVal.startsWith(\"[\") && sampVal.endsWith(\"]\")) {\r\n      sampVal = sampVal.substring(1, sampVal.length - 1);\r\n      sampVal = sampVal.replace(/\"/gi, \"\");\r\n    }\r\n\r\n    if (sampVal.startsWith(\"{\") && sampVal.endsWith(\"}\")) {\r\n      sampVal = sampVal.substring(1, sampVal.length - 1);\r\n    }\r\n\r\n    return sampVal;\r\n  }\r\n\r\n  static ensureLooksLikeSentence(name: string) {\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n        name = name[0].toUpperCase() + name.substring(1, name.length);\r\n      }\r\n    }\r\n\r\n    if (!name.endsWith(\".\")) {\r\n      name = name + \".\";\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static dehumanify(val: string | boolean | number, humanify?: FieldValueHumanify) {\r\n    if (!humanify) {\r\n      return val;\r\n    }\r\n\r\n    return Utilities.dehumanifyMinecraftName(val);\r\n  }\r\n\r\n  static humanify(val: string | boolean | number | number[] | string[] | object, humanify?: FieldValueHumanify) {\r\n    if (humanify === FieldValueHumanify.none || val === undefined) {\r\n      return val;\r\n    }\r\n\r\n    if (humanify === FieldValueHumanify.general) {\r\n      return Utilities.humanifyObject(val);\r\n    }\r\n\r\n    if (Array.isArray(val)) {\r\n      let simpleStr = \"\";\r\n\r\n      for (let i = 0; i < val.length; i++) {\r\n        const data = (val as any)[i];\r\n\r\n        if (data !== undefined) {\r\n          // if the object looks complicated, just stringify it\r\n          if (typeof data === \"object\") {\r\n            return JSON.stringify(val);\r\n          }\r\n\r\n          if (simpleStr.length > 0) {\r\n            simpleStr += \", \";\r\n          }\r\n\r\n          simpleStr += String(i + 1) + \": \" + data.toString();\r\n        }\r\n      }\r\n\r\n      return simpleStr;\r\n    } else if (typeof val === \"object\") {\r\n      let simpleStr = \"\";\r\n      for (const key in val as any) {\r\n        const data = (val as any)[key];\r\n\r\n        if (data !== undefined) {\r\n          // if the object looks complicated, just stringify it\r\n          if (typeof data === \"object\") {\r\n            return JSON.stringify(val);\r\n          }\r\n\r\n          if (simpleStr.length > 0) {\r\n            simpleStr += \", \";\r\n          }\r\n          simpleStr += key + \": \" + data.toString();\r\n        }\r\n      }\r\n\r\n      return simpleStr;\r\n    }\r\n\r\n    if (Array.isArray(val)) {\r\n      return val;\r\n    }\r\n\r\n    return Utilities.humanifyMinecraftName(val);\r\n  }\r\n\r\n  static ensureFirstCharIsUpperCase(name: string) {\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n        name = name[0].toUpperCase() + name.substring(1, name.length);\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  static ensureFirstCharIsLowerCase(name: string) {\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"A\" && name[0] <= \"Z\") {\r\n        name = name[0].toLowerCase() + name.substring(1, name.length);\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  static humanifyString(val: string, humanify?: FieldValueHumanify) {\r\n    if (!humanify || val === undefined) {\r\n      return val;\r\n    }\r\n\r\n    if (humanify === FieldValueHumanify.general) {\r\n      return Utilities.humanifyObject(val).toString();\r\n    }\r\n\r\n    return Utilities.humanifyMinecraftName(val) as string;\r\n  }\r\n\r\n  static getHumanifiedObjectNameNoSpaces(name: string | boolean | number) {\r\n    name = Utilities.getHumanifiedObjectName(name);\r\n    name = name.replace(/ /gi, \"\");\r\n\r\n    return name;\r\n  }\r\n\r\n  static getHumanifiedObjectName(name: string | boolean | number) {\r\n    if (typeof name !== \"string\") {\r\n      name = name.toString();\r\n    }\r\n\r\n    let firstColon = name.indexOf(\":\");\r\n\r\n    if (firstColon >= 0) {\r\n      name = name.substring(firstColon + 1);\r\n    }\r\n\r\n    name = Utilities.humanifyMinecraftName(name);\r\n\r\n    return name;\r\n  }\r\n\r\n  static replaceAllCaseInsensitive(str: string, find: string, replace: string) {\r\n    find = find.toLowerCase();\r\n    let strLower = str.toLowerCase();\r\n\r\n    let start = strLower.indexOf(find);\r\n\r\n    while (start >= 0) {\r\n      str = str.substring(0, start) + replace + str.substring(start + find.length);\r\n      strLower = str.toLowerCase();\r\n      start = strLower.indexOf(find, start + replace.length);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static addCommasToNumber(num: number): string {\r\n    if (typeof num !== \"number\" || isNaN(num)) {\r\n      return num.toString();\r\n    }\r\n\r\n    // Handle negative numbers\r\n    const isNegative = num < 0;\r\n    const absoluteNum = Math.abs(num);\r\n\r\n    // Split into integer and decimal parts\r\n    const parts = absoluteNum.toString().split(\".\");\r\n    const integerPart = parts[0];\r\n    const decimalPart = parts[1];\r\n\r\n    // Add commas to integer part\r\n    const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n\r\n    // Reconstruct the number\r\n    let result = formattedInteger;\r\n    if (decimalPart) {\r\n      result += \".\" + decimalPart;\r\n    }\r\n\r\n    return isNegative ? \"-\" + result : result;\r\n  }\r\n\r\n  static sanitizeJavascriptName(name: string) {\r\n    name = name.trim();\r\n\r\n    name = name.replace(/</gi, \"LessThan\");\r\n    name = name.replace(/>/gi, \"GreaterThan\");\r\n    name = name.replace(/=/gi, \"Equals\");\r\n    name = name.replace(/!/gi, \"Not\");\r\n    name = name.replace(/\\+/gi, \"Plus\");\r\n    name = name.replace(/[,\\-\\.' \\[\\]\\(\\)\\{\\}<>\\*\\\"\\?\\\\\\|#]/gi, \"\");\r\n\r\n    if (name.length > 0 && name[0] >= \"0\" && name[0] <= \"9\") {\r\n      name = \"_\" + name;\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static wrapJavascriptNameIfNeeded(name: string, capitalizeFirst?: boolean) {\r\n    let trimName = name.trim();\r\n\r\n    trimName = trimName.replace(/[\\+]/gi, \"\");\r\n\r\n    if (trimName.startsWith('\"') && trimName.endsWith('\"')) {\r\n      return trimName;\r\n    }\r\n\r\n    let needsWrap = false;\r\n\r\n    trimName = this.sanitizeJavascriptName(trimName);\r\n\r\n    for (let i = 0; i < trimName.length; i++) {\r\n      if (\r\n        trimName[i] === \" \" ||\r\n        trimName[i] === \":\" ||\r\n        trimName[i] === \",\" ||\r\n        trimName[i] === \"(\" ||\r\n        trimName[i] === \")\" ||\r\n        trimName[i] === \".\" ||\r\n        trimName[i] === \"*\" ||\r\n        trimName[i] === '\"' ||\r\n        trimName[i] === \"'\" ||\r\n        trimName[i] === \"-\" ||\r\n        trimName[i] === \"#\" ||\r\n        trimName[i] === \"[\" ||\r\n        trimName[i] === \"]\"\r\n      ) {\r\n        needsWrap = true;\r\n      }\r\n    }\r\n\r\n    if (needsWrap) {\r\n      trimName = '\"' + trimName + '\"';\r\n    }\r\n\r\n    return trimName;\r\n  }\r\n\r\n  static javascriptifyName(name: string, capitalizeFirst?: boolean) {\r\n    let trimName = name.trim();\r\n\r\n    // Preserve single-character names if they are valid identifiers or special tokens like \"#\" (mcfunction comments)\r\n    if (trimName.length === 1 && /[a-zA-Z0-9_$#]/.test(trimName)) {\r\n      return trimName;\r\n    }\r\n\r\n    let retVal = \"\";\r\n    let capitalizeNext = capitalizeFirst === true;\r\n\r\n    for (let i = 0; i < trimName.length; i++) {\r\n      if (\r\n        trimName[i] === \" \" ||\r\n        trimName[i] === \"_\" ||\r\n        trimName[i] === \":\" ||\r\n        trimName[i] === \",\" ||\r\n        trimName[i] === \"(\" ||\r\n        trimName[i] === \")\" ||\r\n        trimName[i] === \".\" ||\r\n        trimName[i] === '\"' ||\r\n        trimName[i] === \"'\" ||\r\n        trimName[i] === \"+\" ||\r\n        trimName[i] === \"-\" ||\r\n        trimName[i] === \"#\" ||\r\n        trimName[i] === \"[\" ||\r\n        trimName[i] === \"]\"\r\n      ) {\r\n        capitalizeNext = true;\r\n      } else {\r\n        if (capitalizeNext) {\r\n          retVal += trimName[i].toUpperCase();\r\n\r\n          capitalizeNext = false;\r\n        } else {\r\n          retVal += trimName[i];\r\n        }\r\n      }\r\n    }\r\n\r\n    retVal = this.sanitizeJavascriptName(retVal);\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static humanifyMinecraftNameRemoveNamespaces(name: string) {\r\n    const firstPeriod = name.indexOf(\".\");\r\n\r\n    if (firstPeriod >= 0) {\r\n      name = name.substring(firstPeriod + 1);\r\n    }\r\n\r\n    const firstColon = name.indexOf(\":\");\r\n    if (firstColon >= 0) {\r\n      name = name.substring(firstColon + 1);\r\n    }\r\n\r\n    name = Utilities.humanifyMinecraftName(name);\r\n\r\n    return name;\r\n  }\r\n\r\n  static consistentStringifyTrimmed(value: any): string {\r\n    const retVal = stableStringifyFunc(value);\r\n\r\n    if (retVal === undefined || retVal === null) {\r\n      return \"\";\r\n    }\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static consistentStringify(value: any): string {\r\n    const retVal = stableStringifyFunc(value, {\r\n      space: 2,\r\n    });\r\n\r\n    if (retVal === undefined || retVal === null) {\r\n      return \"\";\r\n    }\r\n\r\n    return retVal;\r\n  }\r\n\r\n  static humanifyMinecraftName(name: string | boolean | number | undefined | null, doNotReverse?: boolean) {\r\n    if (name === undefined || name === null) {\r\n      return \"\";\r\n    }\r\n\r\n    if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n      return name.toString();\r\n    }\r\n\r\n    if (name.endsWith(\".behavior\")) {\r\n      name = name.substring(0, name.length - 9);\r\n    } else if (name.endsWith(\".geo\")) {\r\n      name = name.substring(0, name.length - 4);\r\n    } else if (name.endsWith(\".entity\")) {\r\n      name = name.substring(0, name.length - 7);\r\n    }\r\n\r\n    name = name.replace(\"breeds_with.\", \"\");\r\n    name = name.replace(\"interactions.\", \"\");\r\n    name = name.replace(\"name_actions.\", \"\");\r\n    name = name.replace(\"tempt.\", \"\");\r\n    name = name.replace(\"triggers.\", \"\");\r\n    name = name.replace(\"math.\", \"\");\r\n    name = name.replace(\"query.\", \"\");\r\n    name = name.replace(\" on_\", \" \");\r\n\r\n    let parenStart = name.indexOf(\" (\");\r\n\r\n    let parenEnd = name.indexOf(\")\");\r\n\r\n    if (parenStart > 0 && parenEnd > parenStart) {\r\n      name = name.substring(0, parenStart) + name.substring(parenEnd + 1);\r\n    }\r\n\r\n    name = name.replace(/`/gi, \"\");\r\n\r\n    if (name.startsWith(\"on_\")) {\r\n      name = name.substring(3, name.length);\r\n    }\r\n\r\n    const colon = name.indexOf(\":\");\r\n\r\n    if (colon >= 0 && name.substring(0, colon) === \"minecraft\") {\r\n      name = name.substring(colon + 1);\r\n    }\r\n\r\n    const leftBracket = name.indexOf(\"[\");\r\n    const rightBracket = name.indexOf(\"]\");\r\n\r\n    if (leftBracket >= 0 && rightBracket > leftBracket) {\r\n      name = name.substring(0, leftBracket) + name.substring(rightBracket + 1);\r\n    }\r\n\r\n    if (name.endsWith(\".\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    name = name.replace(/[_]/gi, \" \");\r\n\r\n    if (name.endsWith(\"_bit\")) {\r\n      name = name.substring(0, name.length - 4);\r\n    }\r\n\r\n    name = name.replace(/::/gi, \" \");\r\n    name = name.replace(/:/gi, \" \");\r\n\r\n    name = name.replace(\"SharedTypes \", \"\");\r\n\r\n    if (name.startsWith(\"Struct \") || name.startsWith(\"struct \")) {\r\n      name = name.substring(7);\r\n    }\r\n\r\n    if ((name.startsWith(\"Enum \") || name.startsWith(\"enum \")) && name.indexOf(\"num_property\") < 0) {\r\n      name = name.substring(5);\r\n    }\r\n\r\n    const lastPeriod = name.indexOf(\".\");\r\n\r\n    if (doNotReverse) {\r\n      if (lastPeriod >= 4) {\r\n        name = name.substring(0, lastPeriod) + \": \" + name.substring(lastPeriod + 1);\r\n      }\r\n    } else {\r\n      if (lastPeriod >= 4) {\r\n        name = name.substring(lastPeriod + 1) + \" \" + name.substring(0, lastPeriod);\r\n      }\r\n    }\r\n\r\n    /*\r\n    if (name.length > 1) {\r\n      if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n        name = name[0].toUpperCase() + name.substring(1, name.length);\r\n      }\r\n    }*/\r\n\r\n    let lastCharWasSpace = false;\r\n\r\n    for (let i = 0; i < name.length; i++) {\r\n      if (name[i] === \" \") {\r\n        lastCharWasSpace = true;\r\n      } else {\r\n        if (\r\n          (lastCharWasSpace || i === 0) &&\r\n          name[i] >= \"a\" &&\r\n          name[i] <= \"z\" &&\r\n          (i === name.length - 1 || (name[i + 1] >= \"a\" && name[i] <= \"z\"))\r\n        ) {\r\n          name = name.substring(0, i) + name[i].toUpperCase() + name.substring(i + 1);\r\n        }\r\n        lastCharWasSpace = false;\r\n      }\r\n    }\r\n\r\n    name = name.trim();\r\n\r\n    return name;\r\n  }\r\n\r\n  static lowerCaseStartOfString(name: string) {\r\n    if (name.length <= 0) {\r\n      return name;\r\n    }\r\n\r\n    if (name.length <= 1) {\r\n      return name.toLowerCase();\r\n    }\r\n\r\n    if (name.startsWith(\"APIs\")) {\r\n      return \"apis\" + name.substring(4);\r\n    }\r\n\r\n    if (name.startsWith(\"PNGJPG\")) {\r\n      return \"pngjpg\" + name.substring(6);\r\n    }\r\n\r\n    if (name.startsWith(\"TGA\")) {\r\n      return \"tga\" + name.substring(3);\r\n    }\r\n\r\n    if (name.charAt(1) < \"A\" || name.charAt(1) > \"Z\") {\r\n      return name.charAt(0).toLowerCase() + name.substring(1);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static convertToJsonKey(name: string) {\r\n    if (!name) {\r\n      return name;\r\n    }\r\n\r\n    const cache = javascriptStringTranslations.get(name);\r\n\r\n    if (cache) {\r\n      return cache;\r\n    }\r\n\r\n    let val = Utilities.lowerCaseStartOfString(Utilities.javascriptifyName(name, false));\r\n\r\n    javascriptStringTranslations.set(name, val);\r\n\r\n    return val;\r\n  }\r\n\r\n  static dehumanifyMinecraftName(name: string | boolean | number) {\r\n    if (!name || typeof name === \"boolean\" || typeof name === \"number\") {\r\n      return name;\r\n    }\r\n\r\n    // if this is already a technical name, return;\r\n    if (name.indexOf(\":\") >= 0) {\r\n      return name;\r\n    }\r\n\r\n    name = name.toLowerCase();\r\n\r\n    name = name.replace(/ /gi, \"_\");\r\n    name = \"minecraft:\" + name;\r\n\r\n    return name;\r\n  }\r\n\r\n  static stringFormat(templateString: string, ...vals: any[]) {\r\n    var args = arguments;\r\n    return arguments[0].replace(/{(\\d+)}/g, function (content: any, interior: string) {\r\n      try {\r\n        const num = parseInt(interior);\r\n\r\n        if (!isNaN(num)) {\r\n          return args[num + 1] !== undefined ? args[num + 1] : content;\r\n        }\r\n      } catch (e) {}\r\n\r\n      return content;\r\n    });\r\n  }\r\n\r\n  static convertToHexString(byteArray: number[]) {\r\n    return Array.from(byteArray, function (byte) {\r\n      return (\"0\" + (byte & 0xff).toString(16)).slice(-2);\r\n    }).join(\"\");\r\n  }\r\n\r\n  static countSignificantLines(content: string) {\r\n    if (content.length <= 0) {\r\n      return 0;\r\n    }\r\n    let lineCount = 1;\r\n    let curStart = 0;\r\n    let nextNewline = content.indexOf(\"\\n\");\r\n\r\n    while (nextNewline >= curStart) {\r\n      let curContent = content.substring(curStart, nextNewline).trim();\r\n\r\n      if (curContent.length > 1) {\r\n        lineCount++;\r\n      }\r\n      curStart = nextNewline + 1;\r\n      nextNewline = content.indexOf(\"\\n\", curStart);\r\n    }\r\n\r\n    return lineCount;\r\n  }\r\n\r\n  static stripLinesContaining(content: string, lineContains: string) {\r\n    let i = content.indexOf(lineContains);\r\n\r\n    while (i >= 0) {\r\n      let prevNewLine = content.lastIndexOf(\"\\n\", i);\r\n      if (prevNewLine < 0) {\r\n        prevNewLine = 0;\r\n      }\r\n\r\n      let nextNewLine = content.indexOf(\"\\n\", i);\r\n\r\n      if (nextNewLine < 0) {\r\n        nextNewLine = content.length;\r\n      }\r\n\r\n      content = content.substring(0, prevNewLine) + content.substring(nextNewLine + 1, content.length);\r\n\r\n      i = content.indexOf(lineContains, prevNewLine);\r\n    }\r\n\r\n    return content;\r\n  }\r\n\r\n  static stripWithoutWhitespace = () => \"\";\r\n  static stripWithWhitespace = (str: string, start: number | undefined, end: number | undefined) =>\r\n    str.slice(start, end).replace(/\\S/g, \" \");\r\n\r\n  static replaceJsonValue(jsonContent: string, attributeName: string, newValue: string) {\r\n    let nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":');\r\n\r\n    while (nextAttribute >= 0) {\r\n      const subsequentOpenQuote = jsonContent.indexOf('\"', nextAttribute + attributeName.length + 3);\r\n\r\n      if (\r\n        subsequentOpenQuote > nextAttribute + attributeName.length + 2 &&\r\n        subsequentOpenQuote < nextAttribute + attributeName.length + 7\r\n      ) {\r\n        const subsequentEndQuote = jsonContent.indexOf('\"', subsequentOpenQuote + 1);\r\n\r\n        if (subsequentEndQuote > subsequentOpenQuote) {\r\n          jsonContent =\r\n            jsonContent.substring(0, subsequentOpenQuote + 1) + newValue + jsonContent.substring(subsequentEndQuote);\r\n        }\r\n      }\r\n\r\n      nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":', nextAttribute + attributeName.length + 2);\r\n    }\r\n\r\n    return jsonContent;\r\n  }\r\n\r\n  public static makeJsonVersionAgnostic(jsonContent: string) {\r\n    jsonContent = Utilities.replaceJsonValue(jsonContent, \"generatorVersion\", \"TESTSUB\");\r\n    jsonContent = Utilities.replaceJsonValue(jsonContent, \"uuid\", \"TESTSUB\");\r\n\r\n    return jsonContent;\r\n  }\r\n\r\n  static isEscaped(jsonString: string, quotePosition: number) {\r\n    let index = quotePosition - 1;\r\n    let backslashCount = 0;\r\n\r\n    while (jsonString[index] === \"\\\\\") {\r\n      index -= 1;\r\n      backslashCount += 1;\r\n    }\r\n\r\n    return Boolean(backslashCount % 2);\r\n  }\r\n\r\n  static staticCompare(a: string, b: string) {\r\n    return a < b ? -1 : a > b ? 1 : 0;\r\n  }\r\n\r\n  static fixJsonContent(jsonString: string, { whitespace = true, trailingCommas = false } = {}) {\r\n    if (typeof jsonString !== \"string\") {\r\n      throw new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\r\n    }\r\n\r\n    jsonString = jsonString.trim();\r\n\r\n    const strip = whitespace ? Utilities.stripWithWhitespace : Utilities.stripWithoutWhitespace;\r\n\r\n    let isInsideString = false;\r\n    let isInsideComment: boolean | symbol = false;\r\n    let offset = 0;\r\n    let buffer = \"\";\r\n    let result = \"\";\r\n    let commaIndex = -1;\r\n\r\n    for (let index = 0; index < jsonString.length; index++) {\r\n      const currentCharacter = jsonString[index];\r\n      const nextCharacter = jsonString[index + 1];\r\n\r\n      if (!isInsideComment && currentCharacter === '\"') {\r\n        // Enter or exit string\r\n        const escaped = Utilities.isEscaped(jsonString, index);\r\n        if (!escaped) {\r\n          isInsideString = !isInsideString;\r\n        }\r\n      }\r\n\r\n      if (isInsideString) {\r\n        // fix control characters inside of strings, if they exist\r\n        if (currentCharacter === \"\\r\" || currentCharacter === \"\\n\" || currentCharacter === \"\\t\") {\r\n          jsonString = jsonString.substring(0, index) + \" \" + jsonString.substring(index + 1);\r\n        }\r\n        continue;\r\n      }\r\n\r\n      if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\r\n        // Enter single-line comment\r\n        buffer += jsonString.slice(offset, index);\r\n        offset = index;\r\n        isInsideComment = singleComment;\r\n        index++;\r\n      } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === \"\\r\\n\") {\r\n        // Exit single-line comment via \\r\\n\r\n        index++;\r\n        isInsideComment = false;\r\n        buffer += strip(jsonString, offset, index);\r\n        offset = index;\r\n        continue;\r\n      } else if (isInsideComment === singleComment && currentCharacter === \"\\n\") {\r\n        // Exit single-line comment via \\n\r\n        isInsideComment = false;\r\n        buffer += strip(jsonString, offset, index);\r\n        offset = index;\r\n      } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\r\n        // Enter multiline comment\r\n        buffer += jsonString.slice(offset, index);\r\n        offset = index;\r\n        isInsideComment = multiComment;\r\n        index++;\r\n        continue;\r\n      } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\r\n        // Exit multiline comment\r\n        index++;\r\n        isInsideComment = false;\r\n        buffer += strip(jsonString, offset, index + 1);\r\n        offset = index + 1;\r\n        continue;\r\n      } else if (trailingCommas && !isInsideComment) {\r\n        if (commaIndex !== -1) {\r\n          if (currentCharacter === \"}\" || currentCharacter === \"]\") {\r\n            // Strip trailing comma\r\n            buffer += jsonString.slice(offset, index);\r\n            result += strip(buffer, 0, 1) + buffer.slice(1);\r\n            buffer = \"\";\r\n            offset = index;\r\n            commaIndex = -1;\r\n          } else if (\r\n            currentCharacter !== \" \" &&\r\n            currentCharacter !== \"\\t\" &&\r\n            currentCharacter !== \"\\r\" &&\r\n            currentCharacter !== \"\\n\"\r\n          ) {\r\n            // Hit non-whitespace following a comma; comma is not trailing\r\n            buffer += jsonString.slice(offset, index);\r\n            offset = index;\r\n            commaIndex = -1;\r\n          }\r\n        } else if (currentCharacter === \",\") {\r\n          // Flush buffer prior to this point, and save new comma index\r\n          result += buffer + jsonString.slice(offset, index);\r\n          buffer = \"\";\r\n          offset = index;\r\n          commaIndex = index;\r\n        }\r\n      }\r\n    }\r\n\r\n    let results =\r\n      result +\r\n      buffer +\r\n      (isInsideComment ? strip(jsonString.slice(offset), undefined, undefined) : jsonString.slice(offset));\r\n\r\n    results = results.replace(/,(\\s*)]/g, \"]\"); // [\"a\", \"b\", ] => [\"a\", \"b\"]\r\n    results = results.replace(/,(\\s*)}/g, \"}\"); // { \"foo\": \"bar\", } => { \"foo\": \"bar\"}\r\n\r\n    return results;\r\n  }\r\n\r\n  /**\r\n   * Fixes JSON content for use with comment-json parser.\r\n   * Unlike fixJsonContent(), this function:\r\n   * - PRESERVES comments (// and /* *\\/)\r\n   * - Fixes trailing commas\r\n   * - Fixes control characters inside strings\r\n   *\r\n   * Use this when you want to parse JSON with comment-json while still\r\n   * handling common JSON issues like trailing commas.\r\n   *\r\n   * @param jsonString The JSON string to fix\r\n   * @returns Fixed JSON string with comments preserved\r\n   */\r\n  static fixJsonContentForCommentJson(jsonString: string): string {\r\n    if (typeof jsonString !== \"string\") {\r\n      throw new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\r\n    }\r\n\r\n    jsonString = jsonString.trim();\r\n\r\n    let isInsideString = false;\r\n    let isInsideComment: boolean | symbol = false;\r\n\r\n    // First pass: fix control characters inside strings\r\n    for (let index = 0; index < jsonString.length; index++) {\r\n      const currentCharacter = jsonString[index];\r\n      const nextCharacter = jsonString[index + 1];\r\n\r\n      if (!isInsideComment && currentCharacter === '\"') {\r\n        const escaped = Utilities.isEscaped(jsonString, index);\r\n        if (!escaped) {\r\n          isInsideString = !isInsideString;\r\n        }\r\n      }\r\n\r\n      if (isInsideString) {\r\n        // fix control characters inside of strings, if they exist\r\n        if (currentCharacter === \"\\r\" || currentCharacter === \"\\n\" || currentCharacter === \"\\t\") {\r\n          jsonString = jsonString.substring(0, index) + \" \" + jsonString.substring(index + 1);\r\n        }\r\n        continue;\r\n      }\r\n\r\n      // Track comment state so we don't break comment content\r\n      if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\r\n        isInsideComment = singleComment;\r\n        index++;\r\n      } else if (\r\n        isInsideComment === singleComment &&\r\n        (currentCharacter === \"\\n\" || currentCharacter + nextCharacter === \"\\r\\n\")\r\n      ) {\r\n        isInsideComment = false;\r\n      } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\r\n        isInsideComment = multiComment;\r\n        index++;\r\n      } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\r\n        isInsideComment = false;\r\n        index++;\r\n      }\r\n    }\r\n\r\n    // Second pass: remove trailing commas (comment-json handles comments, but not trailing commas)\r\n    // Use simple patterns without nested quantifiers to avoid exponential backtracking\r\n    // First handle simple cases without comments between comma and bracket\r\n    jsonString = jsonString.replace(/,(\\s*)]/g, \"$1]\");\r\n    jsonString = jsonString.replace(/,(\\s*)}/g, \"$1}\");\r\n\r\n    // Handle cases with single-line comments between comma and bracket\r\n    // Use a non-capturing group with a single quantifier to avoid nested quantifier backtracking\r\n    // Match: comma, then any mix of whitespace/comments, then closing bracket\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\/[^\\n]*\\n[\\t\\n ]*)*])/g, \"\");\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\/[^\\n]*\\n[\\t\\n ]*)*})/g, \"\");\r\n\r\n    // Handle cases with block comments between comma and bracket\r\n    // Use lookahead with a block comment pattern that does not allow `*/` inside the body\r\n    // Pattern `(?:[^*]|\\*(?!\\/))*` matches any char except `*`, or `*` not followed by `/`\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/[\\t\\n ]*)*])/g, \"\");\r\n    jsonString = jsonString.replace(/,(?=[\\t\\n ]*(?:\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/[\\t\\n ]*)*})/g, \"\");\r\n\r\n    return jsonString;\r\n  }\r\n\r\n  static setIsDebug(boolVal: boolean) {\r\n    Utilities._isDebug = boolVal;\r\n  }\r\n\r\n  static getBaseUrl(url: string) {\r\n    if (url.length < 8) {\r\n      return url;\r\n    }\r\n\r\n    const slashIndex = url.indexOf(\"/\", 9);\r\n\r\n    if (slashIndex < 0) {\r\n      return url;\r\n    }\r\n\r\n    return url.substring(0, slashIndex);\r\n  }\r\n\r\n  static getDateStr(date: Date) {\r\n    let dateStr = Utilities.frontPadToLength(date.getFullYear(), 4, \"0\");\r\n\r\n    dateStr += Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getHours(), 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n    dateStr += Utilities.frontPadToLength(date.getSeconds(), 2, \"0\");\r\n\r\n    return dateStr;\r\n  }\r\n\r\n  static getDateFromStr(dateStr: string) {\r\n    if (!Utilities.isNumeric(dateStr) || dateStr.length !== 14) {\r\n      throw new Error(\"Improperly formatted date string: \" + dateStr);\r\n    }\r\n\r\n    const year = parseInt(dateStr.substring(0, 4)),\r\n      month = parseInt(dateStr.substring(4, 6)),\r\n      day = parseInt(dateStr.substring(6, 8)),\r\n      hours = parseInt(dateStr.substring(8, 10)),\r\n      minutes = parseInt(dateStr.substring(10, 12)),\r\n      seconds = parseInt(dateStr.substring(12, 14));\r\n\r\n    Log.assert(year >= 2022, \"Invalid year: \" + dateStr);\r\n    Log.assert(month >= 1 && month <= 12, \"Invalid month: \" + dateStr);\r\n    Log.assert(day >= 0 && day <= 31, \"Invalid day: \" + dateStr);\r\n    Log.assert(hours >= 0 && hours <= 23, \"Invalid hours: \" + dateStr);\r\n    Log.assert(minutes >= 0 && minutes <= 59, \"Invalid minutes: \" + dateStr);\r\n    Log.assert(seconds >= 0 && seconds <= 59, \"Invalid seconds: \" + dateStr);\r\n\r\n    return new Date(year, month - 1, day, hours, minutes, seconds);\r\n  }\r\n\r\n  static monthNames: string[] = [\r\n    \"January\",\r\n    \"February\",\r\n    \"March\",\r\n    \"April\",\r\n    \"May\",\r\n    \"June\",\r\n    \"July\",\r\n    \"August\",\r\n    \"September\",\r\n    \"October\",\r\n    \"November\",\r\n    \"December\",\r\n  ];\r\n\r\n  static monthShortNames: string[] = [\r\n    \"Jan\",\r\n    \"Feb\",\r\n    \"Mar\",\r\n    \"Apr\",\r\n    \"May\",\r\n    \"Jun\",\r\n    \"Jul\",\r\n    \"Aug\",\r\n    \"Sep\",\r\n    \"Oct\",\r\n    \"Nov\",\r\n    \"Dec\",\r\n  ];\r\n\r\n  static lengthOfDictionary(d: any) {\r\n    let c = 0;\r\n\r\n    for (const i in d) {\r\n      if (i) {\r\n        ++c;\r\n      }\r\n    }\r\n\r\n    return c;\r\n  }\r\n\r\n  static makeSafeForJson(content: string) {\r\n    content = content.replace(/\\\\/g, \"/\");\r\n    content = content.replace(/\"/gi, \"'\"); // this isn't the full way to do it, but for now...\r\n\r\n    return content;\r\n  }\r\n\r\n  static isAlphaNumeric(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if (\r\n        !(\r\n          (charCode >= \"0\" && charCode <= \"9\") ||\r\n          (charCode >= \"a\" && charCode <= \"z\") ||\r\n          (charCode >= \"A\" && charCode <= \"Z\")\r\n        )\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static getJsonObject(contents: string): any | undefined {\r\n    let jsonObject = undefined;\r\n\r\n    contents = Utilities.fixJsonContent(contents);\r\n\r\n    try {\r\n      jsonObject = JSON.parse(contents);\r\n    } catch (e: any) {\r\n      Log.fail(\"Could not parse JSON: \" + e.message);\r\n    }\r\n\r\n    return jsonObject;\r\n  }\r\n\r\n  static appendErrors(source: IErrorable, add: IErrorable, context?: string) {\r\n    if (!add.isInErrorState) {\r\n      return;\r\n    }\r\n\r\n    source.isInErrorState = true;\r\n\r\n    if (add.errorMessages) {\r\n      if (source.errorMessages === undefined) {\r\n        source.errorMessages = [];\r\n      }\r\n\r\n      for (const err of add.errorMessages) {\r\n        let newContext = undefined;\r\n\r\n        if (context) {\r\n          newContext = err.context ? context + \": \" + err.context : context;\r\n        } else {\r\n          newContext = err.context;\r\n        }\r\n\r\n        source.errorMessages.push({\r\n          message: err.message,\r\n          context: newContext,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  static isNumeric(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && (i > 0 || charCode !== \"-\")) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static isNumericIsh(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if (\r\n        (charCode < \"0\" || charCode > \"9\") &&\r\n        charCode !== \"e\" &&\r\n        charCode !== \"+\" &&\r\n        charCode !== \",\" &&\r\n        charCode !== \".\" &&\r\n        charCode !== \"-\"\r\n      ) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static removeQuotes(candidate: string) {\r\n    candidate = candidate.trim();\r\n\r\n    if (candidate.startsWith('\"')) {\r\n      candidate = candidate.substring(1);\r\n    } else if (candidate.startsWith('\"')) {\r\n      candidate = candidate.substring(0, candidate.length - 1);\r\n    }\r\n\r\n    return candidate;\r\n  }\r\n\r\n  static normalizeVersionString(candidate: string) {\r\n    candidate = candidate.replace(/v/gi, \"\").trim();\r\n\r\n    candidate = candidate.trim();\r\n\r\n    if (candidate.startsWith(\".\")) {\r\n      candidate = \"0\" + candidate;\r\n    }\r\n\r\n    if (candidate.endsWith(\".\")) {\r\n      candidate = candidate.substring(0, candidate.length - 1);\r\n    }\r\n\r\n    return candidate;\r\n  }\r\n\r\n  static isVersionString(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && charCode !== \"v\") {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static isAlpha(candidate: string) {\r\n    for (let i = 0; i < candidate.length; i++) {\r\n      const charCode = candidate[i];\r\n\r\n      if (!((charCode >= \"a\" && charCode <= \"z\") || (charCode >= \"A\" && charCode <= \"Z\"))) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static shallowCloneArray(source: any[]) {\r\n    const newArr: any[] = new Array(source.length);\r\n\r\n    for (let i = 0; i < source.length; i++) {\r\n      newArr[i] = source[i];\r\n    }\r\n\r\n    return newArr;\r\n  }\r\n\r\n  static uint8ArrayToBase64(bytes: Uint8Array) {\r\n    let binary = \"\";\r\n\r\n    const len = bytes.byteLength;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      binary += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    if (\r\n      CreatorToolsHost.isWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeMainWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeWebService\r\n    ) {\r\n      return btoa(binary);\r\n    }\r\n\r\n    // See arrayBufferToBase64 below \u2014 `Buffer.from(string)` defaults to\r\n    // UTF-8 and will corrupt any byte >= 0x80. Pass the Uint8Array directly.\r\n    return Buffer.from(bytes).toString(\"base64\");\r\n  }\r\n\r\n  static arrayBufferToBase64(buffer: ArrayBuffer) {\r\n    let binary = \"\";\r\n    const bytes = new Uint8Array(buffer);\r\n\r\n    const len = bytes.byteLength;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      binary += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    if (\r\n      CreatorToolsHost.isWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeMainWeb ||\r\n      CreatorToolsHost.hostType === HostType.vsCodeWebService\r\n    ) {\r\n      return btoa(binary);\r\n    }\r\n\r\n    // IMPORTANT: `Buffer.from(str)` defaults to UTF-8, which corrupts any\r\n    // byte >= 0x80 (turning it into a 0xC3 0xXX two-byte sequence). We've\r\n    // built `binary` via `String.fromCharCode(byte)` so each char already\r\n    // holds a single byte value 0..255 \u2014 pass the Uint8Array directly to\r\n    // avoid the UTF-8 round-trip.\r\n    return Buffer.from(bytes).toString(\"base64\");\r\n  }\r\n\r\n  static base64ToArrayBuffer(base64buffer: string) {\r\n    const start = base64buffer.indexOf(\";base64,\");\r\n\r\n    if (start > 0 && start < 50) {\r\n      base64buffer = base64buffer.substring(start + 8);\r\n    }\r\n\r\n    const binary = atob(base64buffer);\r\n\r\n    const arrayBuffer = new ArrayBuffer(binary.length);\r\n    const bytes = new Uint8Array(arrayBuffer);\r\n\r\n    const len = binary.length;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      bytes[i] = binary.charCodeAt(i);\r\n    }\r\n\r\n    return arrayBuffer;\r\n  }\r\n\r\n  static base64ToUint8Array(base64buffer: string) {\r\n    const start = base64buffer.indexOf(\";base64,\");\r\n\r\n    if (start > 0 && start < 50) {\r\n      base64buffer = base64buffer.substring(start + 8);\r\n    }\r\n\r\n    const binary = atob(base64buffer);\r\n\r\n    const arrayBuffer = new ArrayBuffer(binary.length);\r\n    const bytes = new Uint8Array(arrayBuffer);\r\n\r\n    const len = binary.length;\r\n\r\n    for (var i = 0; i < len; i++) {\r\n      bytes[i] = binary.charCodeAt(i);\r\n    }\r\n\r\n    return bytes;\r\n  }\r\n\r\n  // UTF8 related string functions adapted from StrangelyTyped/StringView.\r\n  static _utf8ReadChar = function (\r\n    charStruct: { bytesRead: number; charVal: number },\r\n    buf: DataView,\r\n    readPos: number,\r\n    maxBytes: number\r\n  ) {\r\n    const firstByte = buf.getUint8(readPos);\r\n\r\n    charStruct.bytesRead = 1;\r\n    charStruct.charVal = 0;\r\n\r\n    if (firstByte & 0x80) {\r\n      var numBytes = 0;\r\n      var aByte = firstByte;\r\n\r\n      while (aByte & 0x80) {\r\n        numBytes++;\r\n        aByte <<= 1;\r\n      }\r\n      if (numBytes === 1) {\r\n        charStruct.charVal = Utilities.replacementChar;\r\n        return;\r\n      }\r\n      if (numBytes > maxBytes) {\r\n        charStruct.charVal = Utilities.replacementChar;\r\n        return;\r\n      }\r\n\r\n      //2 bytes means 3 bits reserved for UTF8 byte encoding, 5 bytes remaining for codepoint, and so on\r\n      charStruct.charVal = firstByte & (0xff >> (numBytes + 1));\r\n\r\n      for (var i = 1; i < numBytes; i++) {\r\n        aByte = buf.getUint8(readPos + i);\r\n\r\n        //0xC0 should isolate the continuation flag which should be 0x80\r\n        if ((aByte & 0xc0) !== 0x80) {\r\n          // Use Log.verbose instead of console.error - this is expected when parsing binary\r\n          // data that contains non-UTF8 byte sequences (common in NBT files, LevelDB, etc.)\r\n          Log.verbose(\r\n            \"UTF-8 read - attempted to read \" + numBytes + \" byte character, found non-continuation at byte \" + i\r\n          );\r\n          charStruct.charVal = Utilities.replacementChar;\r\n\r\n          charStruct.bytesRead = 1;\r\n          return;\r\n        }\r\n\r\n        charStruct.charVal <<= 6;\r\n        charStruct.charVal |= aByte & 0x3f;\r\n\r\n        if (i === 1) {\r\n          const rshift = 8 - (numBytes + 1) - 1;\r\n          if (charStruct.charVal >> rshift === 0) {\r\n            charStruct.charVal = Utilities.replacementChar;\r\n            charStruct.bytesRead = 1;\r\n            return;\r\n          }\r\n        }\r\n        charStruct.bytesRead++;\r\n      }\r\n\r\n      if (charStruct.charVal > 0x10ffff) {\r\n        // Use Log.verbose instead of console.error - recoverable issue\r\n        Log.verbose(\"UTF-8 read - found illegally high code point \" + charStruct.charVal);\r\n        charStruct.charVal = Utilities.replacementChar;\r\n        charStruct.bytesRead = 1;\r\n        return;\r\n      }\r\n    } else {\r\n      charStruct.charVal = firstByte;\r\n    }\r\n  };\r\n\r\n  static canonicalizeId(id: string) {\r\n    return id.toLowerCase();\r\n  }\r\n\r\n  static readStringUTF8(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n    const nullTerm = typeof bytesToRead === \"undefined\";\r\n    var readPos = byteOffset || 0;\r\n\r\n    if (!nullTerm && readPos + bytesToRead > buf.byteLength) {\r\n      throw new Error(\"Attempted to read \" + (readPos + bytesToRead - buf.byteLength) + \" bytes past end of buffer\");\r\n    }\r\n\r\n    var str = \"\";\r\n\r\n    const charStruct: { bytesRead: number; charVal: number } = { bytesRead: 0, charVal: 0 };\r\n\r\n    while (readPos < buf.byteLength && (nullTerm || bytesToRead > readPos - byteOffset)) {\r\n      Utilities._utf8ReadChar(\r\n        charStruct,\r\n        buf,\r\n        readPos,\r\n        nullTerm ? buf.byteLength - (readPos + byteOffset) : bytesToRead - (readPos - byteOffset)\r\n      );\r\n      readPos += charStruct.bytesRead;\r\n\r\n      if (nullTerm && !charStruct.charVal) {\r\n        break;\r\n      }\r\n      str += String.fromCharCode(charStruct.charVal);\r\n    }\r\n    return {\r\n      str: str,\r\n      byteLength: readPos - byteOffset,\r\n    };\r\n  }\r\n\r\n  static readStringASCII(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n    var str = \"\";\r\n    var byteLength = 0;\r\n    byteOffset = byteOffset || 0;\r\n    var nullTerm = false;\r\n\r\n    if (typeof bytesToRead === \"undefined\") {\r\n      nullTerm = true;\r\n      bytesToRead = buf.byteLength - buf.byteOffset;\r\n    }\r\n\r\n    var charCode;\r\n\r\n    for (var i = 0; i < bytesToRead; i++) {\r\n      charCode = buf.getUint8(i + byteOffset);\r\n      if (charCode === 0 && nullTerm) {\r\n        break;\r\n      }\r\n\r\n      str += String.fromCharCode(charCode);\r\n      byteLength++;\r\n    }\r\n\r\n    return {\r\n      str: str,\r\n      byteLength: byteLength + (nullTerm ? 1 : 0),\r\n    };\r\n  }\r\n\r\n  static readStringASCIIBuffer(buf: Uint8Array, byteOffset: number, bytesToRead: number) {\r\n    var str = \"\";\r\n\r\n    byteOffset = byteOffset || 0;\r\n\r\n    var nullTerm = false;\r\n\r\n    if (typeof bytesToRead === \"undefined\") {\r\n      nullTerm = true;\r\n      bytesToRead = buf.byteLength - buf.byteOffset;\r\n    }\r\n\r\n    var charCode;\r\n\r\n    for (var i = 0; i < bytesToRead; i++) {\r\n      charCode = buf[i + byteOffset];\r\n      if (charCode === 0 && nullTerm) {\r\n        break;\r\n      }\r\n\r\n      str += String.fromCharCode(charCode);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static _createUtf8Char(charCode: number, arr: number[]) {\r\n    if (charCode < 0x80) {\r\n      arr.push(charCode);\r\n    } else {\r\n      const limits = [0x7f, 0x07ff, 0xffff, 0x1fffff];\r\n      let i = 0;\r\n\r\n      while (true) {\r\n        i++;\r\n\r\n        if (i === limits.length) {\r\n          Utilities._createUtf8Char(Utilities.replacementChar, arr);\r\n\r\n          return;\r\n        }\r\n\r\n        if (charCode <= limits[i]) {\r\n          i += 1;\r\n\r\n          var aByte = 0;\r\n          var j;\r\n\r\n          for (j = 0; j < i; j++) {\r\n            aByte <<= 1;\r\n            aByte |= 1;\r\n          }\r\n\r\n          aByte <<= 8 - i;\r\n\r\n          aByte |= charCode >> (6 * (i - 1));\r\n          arr.push(aByte);\r\n\r\n          for (j = 1; j < i; j++) {\r\n            aByte = 0x80;\r\n\r\n            aByte |= (charCode >> (6 * (i - (j + 1)))) & 0xbf;\r\n            arr.push(aByte);\r\n          }\r\n\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static convertStringToBytes(str: string, encoding: string) {\r\n    if (encoding === \"UTF-8\") {\r\n      const arr: number[] = [];\r\n\r\n      for (let i = 0; i < str.length; i++) {\r\n        Utilities._createUtf8Char(str.charCodeAt(i), arr);\r\n      }\r\n\r\n      return arr;\r\n    } else if (encoding === \"ASCII\") {\r\n      const arr = [];\r\n\r\n      for (let i = 0; i < str.length; i++) {\r\n        let chr = str.charCodeAt(i);\r\n\r\n        if (chr > 255) {\r\n          chr = \"?\".charCodeAt(0);\r\n        }\r\n\r\n        arr.push(chr);\r\n      }\r\n\r\n      return arr;\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  static ensureNotStartsWithSlash(pathSegment: string) {\r\n    while (pathSegment.startsWith(\"/\")) {\r\n      pathSegment = pathSegment.substring(1);\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureStartsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"/\")) {\r\n      pathSegment = \"/\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureEndsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"/\")) {\r\n      pathSegment += \"/\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureNotEndsWithSlash(pathSegment: string) {\r\n    while (pathSegment.length > 0 && pathSegment.endsWith(\"/\")) {\r\n      pathSegment = pathSegment.substring(0, pathSegment.length - 1);\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureStartsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"\\\\\")) {\r\n      pathSegment = \"\\\\\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static ensureEndsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"\\\\\")) {\r\n      pathSegment += \"\\\\\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  static replaceAll(content: string, fromToken: string, toToken: string) {\r\n    let nextIndex = content.indexOf(fromToken);\r\n\r\n    while (nextIndex >= 0) {\r\n      content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n      nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n    }\r\n\r\n    return content;\r\n  }\r\n\r\n  static replaceAllExceptInLines(content: string, fromToken: string, toToken: string, exceptInLinesWith: string[]) {\r\n    let nextIndex = content.indexOf(fromToken);\r\n\r\n    while (nextIndex >= 0) {\r\n      let doReplace = true;\r\n\r\n      let previousNewLine = content.lastIndexOf(\"\\n\", nextIndex);\r\n      if (previousNewLine >= 0) {\r\n        const previousPreviousNewLine = content.lastIndexOf(\"\\n\", previousNewLine - 1);\r\n\r\n        if (previousPreviousNewLine >= 0) {\r\n          previousNewLine = previousPreviousNewLine;\r\n        }\r\n\r\n        const lineSegment = content.substring(previousNewLine, nextIndex);\r\n        for (const exceptIn of exceptInLinesWith) {\r\n          if (lineSegment.indexOf(exceptIn) > 0) {\r\n            doReplace = false;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (doReplace) {\r\n        content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n        nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n      } else {\r\n        nextIndex = content.indexOf(fromToken, nextIndex + 1);\r\n      }\r\n    }\r\n\r\n    return content;\r\n  }\r\n  static createRandomId(length: number) {\r\n    let id = \"\";\r\n\r\n    for (let i = 0; i < length; i++) {\r\n      const main = Math.random() * 6;\r\n\r\n      if (main < 1) {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 10) + 48);\r\n      } else if (main < 4) {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 26) + 65);\r\n      } else {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 26) + 97);\r\n      }\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  static createRandomLowerId(length: number) {\r\n    let id = \"\";\r\n\r\n    for (let i = 0; i < length; i++) {\r\n      const main = Math.random() * 4;\r\n\r\n      if (main < 1) {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 10) + 48);\r\n      } else {\r\n        id += String.fromCharCode(Math.floor(Math.random() * 26) + 97);\r\n      }\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  static canonicalizeUuid(uuidString: string) {\r\n    return uuidString.trim().toLowerCase();\r\n  }\r\n\r\n  static isValidUuid(uuidString: string) {\r\n    return uuidString.length === 36;\r\n  }\r\n\r\n  static uuidEqual(uuidStringA: string, uuidStringB: string) {\r\n    return Utilities.canonicalizeId(uuidStringA) === Utilities.canonicalizeId(uuidStringB);\r\n  }\r\n\r\n  static createUuid() {\r\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n      let val = CreatorToolsHost.generateCryptoRandomNumber(16);\r\n\r\n      const r = val | 0,\r\n        v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n\r\n      return v.toString(16);\r\n    });\r\n  }\r\n\r\n  static uint8ArraysAreEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n    if (arrayA.length !== arrayB.length) {\r\n      return false;\r\n    }\r\n\r\n    for (let i = 0; i < arrayA.length; i++) {\r\n      if (arrayA[i] !== arrayB[i]) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static throwIfUint8ArraysNotEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n    if (arrayA.length !== arrayB.length) {\r\n      throw new Error(\"Arrays are of mismatched length.\");\r\n    }\r\n\r\n    for (let i = 0; i < arrayA.length; i++) {\r\n      if (arrayA[i] !== arrayB[i]) {\r\n        throw new Error(\"Mismatch at position \" + i + \" value A: \" + arrayA[i] + \" value B:\" + arrayB[i]);\r\n      }\r\n    }\r\n  }\r\n\r\n  static getString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n    if (encoding === \"UTF8\" || encoding === undefined) {\r\n      const result = Utilities.readStringUTF8(view, byteOffset, byteLength);\r\n      Log.assert(result.byteLength === byteLength, \"UTGS\");\r\n      return result.str;\r\n    } else if (encoding === \"ASCII\") {\r\n      const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n      return result.str;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getSimpleString(str: string) {\r\n    str = str.trim();\r\n    str = str.replace(/ /gi, \"\");\r\n    str = str.replace(/=/gi, \"\");\r\n    str = str.replace(/\\?/gi, \"\");\r\n\r\n    return str;\r\n  }\r\n\r\n  static getAsciiString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n    const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n    return result.str;\r\n  }\r\n\r\n  static getAsciiStringFromBytes(bytes: number[]) {\r\n    let str = \"\";\r\n    for (let i = 0; i < bytes.length; i++) {\r\n      str += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static getAsciiStringFromUint8Array(bytes: Uint8Array) {\r\n    let str = \"\";\r\n\r\n    for (let i = 0; i < bytes.length; i++) {\r\n      str += String.fromCharCode(bytes[i]);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  static writeString(view: DataView, byteOffset: number, value: string, encoding: string) {\r\n    const arr = Utilities.convertStringToBytes(value, encoding);\r\n\r\n    if (arr === undefined) {\r\n      return byteOffset;\r\n    }\r\n\r\n    let i = 0;\r\n\r\n    for (i = 0; i < arr.length && byteOffset + i < view.byteLength; i++) {\r\n      view.setUint8(byteOffset + i, arr[i]);\r\n    }\r\n\r\n    return byteOffset + i;\r\n  }\r\n\r\n  static frontPadToLength(val: string | number, length: number, pad: string): string {\r\n    val = val + \"\";\r\n\r\n    while (val.length < length) {\r\n      val = pad + val;\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  static getShortYear(year: number) {\r\n    let short = year + \"\"; // cast to string\r\n\r\n    if (short.length === 4) {\r\n      short = short.substring(2, 4);\r\n    }\r\n\r\n    return short;\r\n  }\r\n\r\n  static getFriendlySummaryHoursMinutesSeconds(date: Date | null) {\r\n    if (!date) {\r\n      return \"\";\r\n    }\r\n\r\n    return Utilities.getFriendlySummaryHoursMinutes(date) + \":\" + Utilities.frontPadToLength(date.getSeconds(), 2, \"0\");\r\n  }\r\n\r\n  static getFriendlySummaryHoursMinutes(date: Date | null) {\r\n    if (!date) {\r\n      return \"\";\r\n    }\r\n\r\n    let hours = date.getHours() % 12;\r\n\r\n    if (hours === 0) {\r\n      hours = 12;\r\n    }\r\n\r\n    return Utilities.frontPadToLength(hours, 2, \"0\") + \":\" + Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n  }\r\n\r\n  static getFriendlySummary(date: Date) {\r\n    if (date === undefined || !(date instanceof Date)) {\r\n      Log.fail(\"Empty/wrong-typed date passed in.\");\r\n    }\r\n\r\n    let returnValue = this.monthShortNames[date.getMonth()] + \" \" + Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n\r\n    const now = new Date();\r\n\r\n    if (date.getFullYear() !== now.getFullYear()) {\r\n      returnValue += \" \" + this.getShortYear(date.getFullYear());\r\n    } else {\r\n      returnValue += \" \" + this.getFriendlySummaryHoursMinutes(date);\r\n    }\r\n\r\n    return returnValue;\r\n  }\r\n\r\n  static getFriendlySummarySeconds(date: Date) {\r\n    if (date === undefined || !(date instanceof Date)) {\r\n      Log.fail(\"Empty/wrong-typed date passed in.\");\r\n    }\r\n\r\n    return (\r\n      this.monthShortNames[date.getMonth()] +\r\n      \" \" +\r\n      Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n      \" \" +\r\n      this.getShortYear(date.getFullYear()) +\r\n      \" \" +\r\n      Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n      Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n      \".\" +\r\n      Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n    );\r\n  }\r\n\r\n  static getFileFriendlySummarySeconds(date: Date) {\r\n    if (date === undefined || !(date instanceof Date)) {\r\n      Log.fail(\"Empty/wrong-typed date passed in.\");\r\n    }\r\n\r\n    return (\r\n      Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\") +\r\n      \"-\" +\r\n      Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n      \"-\" +\r\n      Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n      Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n      Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n    );\r\n  }\r\n\r\n  static getDateSummary(date: Date) {\r\n    return (\r\n      date.getMonth() +\r\n      1 +\r\n      \".\" +\r\n      date.getDate() +\r\n      \".\" +\r\n      (date.getFullYear() - 2000) +\r\n      \".\" +\r\n      date.getHours() +\r\n      \".\" +\r\n      date.getMinutes() +\r\n      \".\" +\r\n      date.getSeconds()\r\n    );\r\n  }\r\n\r\n  static countChar(source: string, find: string) {\r\n    let count = 0;\r\n\r\n    let index = source.indexOf(find);\r\n\r\n    while (index >= 0) {\r\n      count++;\r\n\r\n      index = source.indexOf(find, index + find.length);\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  static isString(obj: any) {\r\n    return typeof obj == \"string\";\r\n  }\r\n\r\n  static isNullOrUndefined<T>(object: T | undefined | null): object is T {\r\n    return (object as T) === undefined || (object as T) === null;\r\n  }\r\n}\r\n", "(function webpackUniversalModuleDefinition(root, factory) {\n/* istanbul ignore next */\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n/* istanbul ignore next */\n\telse if(typeof exports === 'object')\n\t\texports[\"esprima\"] = factory();\n\telse\n\t\troot[\"esprima\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/* istanbul ignore if */\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t/*\n\t  Copyright JS Foundation and other contributors, https://js.foundation/\n\n\t  Redistribution and use in source and binary forms, with or without\n\t  modification, are permitted provided that the following conditions are met:\n\n\t    * Redistributions of source code must retain the above copyright\n\t      notice, this list of conditions and the following disclaimer.\n\t    * Redistributions in binary form must reproduce the above copyright\n\t      notice, this list of conditions and the following disclaimer in the\n\t      documentation and/or other materials provided with the distribution.\n\n\t  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\t  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n\t  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\t  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\t  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n\t  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar comment_handler_1 = __webpack_require__(1);\n\tvar jsx_parser_1 = __webpack_require__(3);\n\tvar parser_1 = __webpack_require__(8);\n\tvar tokenizer_1 = __webpack_require__(15);\n\tfunction parse(code, options, delegate) {\n\t    var commentHandler = null;\n\t    var proxyDelegate = function (node, metadata) {\n\t        if (delegate) {\n\t            delegate(node, metadata);\n\t        }\n\t        if (commentHandler) {\n\t            commentHandler.visit(node, metadata);\n\t        }\n\t    };\n\t    var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;\n\t    var collectComment = false;\n\t    if (options) {\n\t        collectComment = (typeof options.comment === 'boolean' && options.comment);\n\t        var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);\n\t        if (collectComment || attachComment) {\n\t            commentHandler = new comment_handler_1.CommentHandler();\n\t            commentHandler.attach = attachComment;\n\t            options.comment = true;\n\t            parserDelegate = proxyDelegate;\n\t        }\n\t    }\n\t    var isModule = false;\n\t    if (options && typeof options.sourceType === 'string') {\n\t        isModule = (options.sourceType === 'module');\n\t    }\n\t    var parser;\n\t    if (options && typeof options.jsx === 'boolean' && options.jsx) {\n\t        parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);\n\t    }\n\t    else {\n\t        parser = new parser_1.Parser(code, options, parserDelegate);\n\t    }\n\t    var program = isModule ? parser.parseModule() : parser.parseScript();\n\t    var ast = program;\n\t    if (collectComment && commentHandler) {\n\t        ast.comments = commentHandler.comments;\n\t    }\n\t    if (parser.config.tokens) {\n\t        ast.tokens = parser.tokens;\n\t    }\n\t    if (parser.config.tolerant) {\n\t        ast.errors = parser.errorHandler.errors;\n\t    }\n\t    return ast;\n\t}\n\texports.parse = parse;\n\tfunction parseModule(code, options, delegate) {\n\t    var parsingOptions = options || {};\n\t    parsingOptions.sourceType = 'module';\n\t    return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseModule = parseModule;\n\tfunction parseScript(code, options, delegate) {\n\t    var parsingOptions = options || {};\n\t    parsingOptions.sourceType = 'script';\n\t    return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseScript = parseScript;\n\tfunction tokenize(code, options, delegate) {\n\t    var tokenizer = new tokenizer_1.Tokenizer(code, options);\n\t    var tokens;\n\t    tokens = [];\n\t    try {\n\t        while (true) {\n\t            var token = tokenizer.getNextToken();\n\t            if (!token) {\n\t                break;\n\t            }\n\t            if (delegate) {\n\t                token = delegate(token);\n\t            }\n\t            tokens.push(token);\n\t        }\n\t    }\n\t    catch (e) {\n\t        tokenizer.errorHandler.tolerate(e);\n\t    }\n\t    if (tokenizer.errorHandler.tolerant) {\n\t        tokens.errors = tokenizer.errors();\n\t    }\n\t    return tokens;\n\t}\n\texports.tokenize = tokenize;\n\tvar syntax_1 = __webpack_require__(2);\n\texports.Syntax = syntax_1.Syntax;\n\t// Sync with *.json manifests.\n\texports.version = '4.0.1';\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\tvar CommentHandler = (function () {\n\t    function CommentHandler() {\n\t        this.attach = false;\n\t        this.comments = [];\n\t        this.stack = [];\n\t        this.leading = [];\n\t        this.trailing = [];\n\t    }\n\t    CommentHandler.prototype.insertInnerComments = function (node, metadata) {\n\t        //  innnerComments for properties empty block\n\t        //  `function a() {/** comments **\\/}`\n\t        if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {\n\t            var innerComments = [];\n\t            for (var i = this.leading.length - 1; i >= 0; --i) {\n\t                var entry = this.leading[i];\n\t                if (metadata.end.offset >= entry.start) {\n\t                    innerComments.unshift(entry.comment);\n\t                    this.leading.splice(i, 1);\n\t                    this.trailing.splice(i, 1);\n\t                }\n\t            }\n\t            if (innerComments.length) {\n\t                node.innerComments = innerComments;\n\t            }\n\t        }\n\t    };\n\t    CommentHandler.prototype.findTrailingComments = function (metadata) {\n\t        var trailingComments = [];\n\t        if (this.trailing.length > 0) {\n\t            for (var i = this.trailing.length - 1; i >= 0; --i) {\n\t                var entry_1 = this.trailing[i];\n\t                if (entry_1.start >= metadata.end.offset) {\n\t                    trailingComments.unshift(entry_1.comment);\n\t                }\n\t            }\n\t            this.trailing.length = 0;\n\t            return trailingComments;\n\t        }\n\t        var entry = this.stack[this.stack.length - 1];\n\t        if (entry && entry.node.trailingComments) {\n\t            var firstComment = entry.node.trailingComments[0];\n\t            if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n\t                trailingComments = entry.node.trailingComments;\n\t                delete entry.node.trailingComments;\n\t            }\n\t        }\n\t        return trailingComments;\n\t    };\n\t    CommentHandler.prototype.findLeadingComments = function (metadata) {\n\t        var leadingComments = [];\n\t        var target;\n\t        while (this.stack.length > 0) {\n\t            var entry = this.stack[this.stack.length - 1];\n\t            if (entry && entry.start >= metadata.start.offset) {\n\t                target = entry.node;\n\t                this.stack.pop();\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        if (target) {\n\t            var count = target.leadingComments ? target.leadingComments.length : 0;\n\t            for (var i = count - 1; i >= 0; --i) {\n\t                var comment = target.leadingComments[i];\n\t                if (comment.range[1] <= metadata.start.offset) {\n\t                    leadingComments.unshift(comment);\n\t                    target.leadingComments.splice(i, 1);\n\t                }\n\t            }\n\t            if (target.leadingComments && target.leadingComments.length === 0) {\n\t                delete target.leadingComments;\n\t            }\n\t            return leadingComments;\n\t        }\n\t        for (var i = this.leading.length - 1; i >= 0; --i) {\n\t            var entry = this.leading[i];\n\t            if (entry.start <= metadata.start.offset) {\n\t                leadingComments.unshift(entry.comment);\n\t                this.leading.splice(i, 1);\n\t            }\n\t        }\n\t        return leadingComments;\n\t    };\n\t    CommentHandler.prototype.visitNode = function (node, metadata) {\n\t        if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {\n\t            return;\n\t        }\n\t        this.insertInnerComments(node, metadata);\n\t        var trailingComments = this.findTrailingComments(metadata);\n\t        var leadingComments = this.findLeadingComments(metadata);\n\t        if (leadingComments.length > 0) {\n\t            node.leadingComments = leadingComments;\n\t        }\n\t        if (trailingComments.length > 0) {\n\t            node.trailingComments = trailingComments;\n\t        }\n\t        this.stack.push({\n\t            node: node,\n\t            start: metadata.start.offset\n\t        });\n\t    };\n\t    CommentHandler.prototype.visitComment = function (node, metadata) {\n\t        var type = (node.type[0] === 'L') ? 'Line' : 'Block';\n\t        var comment = {\n\t            type: type,\n\t            value: node.value\n\t        };\n\t        if (node.range) {\n\t            comment.range = node.range;\n\t        }\n\t        if (node.loc) {\n\t            comment.loc = node.loc;\n\t        }\n\t        this.comments.push(comment);\n\t        if (this.attach) {\n\t            var entry = {\n\t                comment: {\n\t                    type: type,\n\t                    value: node.value,\n\t                    range: [metadata.start.offset, metadata.end.offset]\n\t                },\n\t                start: metadata.start.offset\n\t            };\n\t            if (node.loc) {\n\t                entry.comment.loc = node.loc;\n\t            }\n\t            node.type = type;\n\t            this.leading.push(entry);\n\t            this.trailing.push(entry);\n\t        }\n\t    };\n\t    CommentHandler.prototype.visit = function (node, metadata) {\n\t        if (node.type === 'LineComment') {\n\t            this.visitComment(node, metadata);\n\t        }\n\t        else if (node.type === 'BlockComment') {\n\t            this.visitComment(node, metadata);\n\t        }\n\t        else if (this.attach) {\n\t            this.visitNode(node, metadata);\n\t        }\n\t    };\n\t    return CommentHandler;\n\t}());\n\texports.CommentHandler = CommentHandler;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.Syntax = {\n\t    AssignmentExpression: 'AssignmentExpression',\n\t    AssignmentPattern: 'AssignmentPattern',\n\t    ArrayExpression: 'ArrayExpression',\n\t    ArrayPattern: 'ArrayPattern',\n\t    ArrowFunctionExpression: 'ArrowFunctionExpression',\n\t    AwaitExpression: 'AwaitExpression',\n\t    BlockStatement: 'BlockStatement',\n\t    BinaryExpression: 'BinaryExpression',\n\t    BreakStatement: 'BreakStatement',\n\t    CallExpression: 'CallExpression',\n\t    CatchClause: 'CatchClause',\n\t    ClassBody: 'ClassBody',\n\t    ClassDeclaration: 'ClassDeclaration',\n\t    ClassExpression: 'ClassExpression',\n\t    ConditionalExpression: 'ConditionalExpression',\n\t    ContinueStatement: 'ContinueStatement',\n\t    DoWhileStatement: 'DoWhileStatement',\n\t    DebuggerStatement: 'DebuggerStatement',\n\t    EmptyStatement: 'EmptyStatement',\n\t    ExportAllDeclaration: 'ExportAllDeclaration',\n\t    ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n\t    ExportNamedDeclaration: 'ExportNamedDeclaration',\n\t    ExportSpecifier: 'ExportSpecifier',\n\t    ExpressionStatement: 'ExpressionStatement',\n\t    ForStatement: 'ForStatement',\n\t    ForOfStatement: 'ForOfStatement',\n\t    ForInStatement: 'ForInStatement',\n\t    FunctionDeclaration: 'FunctionDeclaration',\n\t    FunctionExpression: 'FunctionExpression',\n\t    Identifier: 'Identifier',\n\t    IfStatement: 'IfStatement',\n\t    ImportDeclaration: 'ImportDeclaration',\n\t    ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n\t    ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n\t    ImportSpecifier: 'ImportSpecifier',\n\t    Literal: 'Literal',\n\t    LabeledStatement: 'LabeledStatement',\n\t    LogicalExpression: 'LogicalExpression',\n\t    MemberExpression: 'MemberExpression',\n\t    MetaProperty: 'MetaProperty',\n\t    MethodDefinition: 'MethodDefinition',\n\t    NewExpression: 'NewExpression',\n\t    ObjectExpression: 'ObjectExpression',\n\t    ObjectPattern: 'ObjectPattern',\n\t    Program: 'Program',\n\t    Property: 'Property',\n\t    RestElement: 'RestElement',\n\t    ReturnStatement: 'ReturnStatement',\n\t    SequenceExpression: 'SequenceExpression',\n\t    SpreadElement: 'SpreadElement',\n\t    Super: 'Super',\n\t    SwitchCase: 'SwitchCase',\n\t    SwitchStatement: 'SwitchStatement',\n\t    TaggedTemplateExpression: 'TaggedTemplateExpression',\n\t    TemplateElement: 'TemplateElement',\n\t    TemplateLiteral: 'TemplateLiteral',\n\t    ThisExpression: 'ThisExpression',\n\t    ThrowStatement: 'ThrowStatement',\n\t    TryStatement: 'TryStatement',\n\t    UnaryExpression: 'UnaryExpression',\n\t    UpdateExpression: 'UpdateExpression',\n\t    VariableDeclaration: 'VariableDeclaration',\n\t    VariableDeclarator: 'VariableDeclarator',\n\t    WhileStatement: 'WhileStatement',\n\t    WithStatement: 'WithStatement',\n\t    YieldExpression: 'YieldExpression'\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n/* istanbul ignore next */\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar character_1 = __webpack_require__(4);\n\tvar JSXNode = __webpack_require__(5);\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\tvar Node = __webpack_require__(7);\n\tvar parser_1 = __webpack_require__(8);\n\tvar token_1 = __webpack_require__(13);\n\tvar xhtml_entities_1 = __webpack_require__(14);\n\ttoken_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';\n\ttoken_1.TokenName[101 /* Text */] = 'JSXText';\n\t// Fully qualified element name, e.g. <svg:path> returns \"svg:path\"\n\tfunction getQualifiedElementName(elementName) {\n\t    var qualifiedName;\n\t    switch (elementName.type) {\n\t        case jsx_syntax_1.JSXSyntax.JSXIdentifier:\n\t            var id = elementName;\n\t            qualifiedName = id.name;\n\t            break;\n\t        case jsx_syntax_1.JSXSyntax.JSXNamespacedName:\n\t            var ns = elementName;\n\t            qualifiedName = getQualifiedElementName(ns.namespace) + ':' +\n\t                getQualifiedElementName(ns.name);\n\t            break;\n\t        case jsx_syntax_1.JSXSyntax.JSXMemberExpression:\n\t            var expr = elementName;\n\t            qualifiedName = getQualifiedElementName(expr.object) + '.' +\n\t                getQualifiedElementName(expr.property);\n\t            break;\n\t        /* istanbul ignore next */\n\t        default:\n\t            break;\n\t    }\n\t    return qualifiedName;\n\t}\n\tvar JSXParser = (function (_super) {\n\t    __extends(JSXParser, _super);\n\t    function JSXParser(code, options, delegate) {\n\t        return _super.call(this, code, options, delegate) || this;\n\t    }\n\t    JSXParser.prototype.parsePrimaryExpression = function () {\n\t        return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);\n\t    };\n\t    JSXParser.prototype.startJSX = function () {\n\t        // Unwind the scanner before the lookahead token.\n\t        this.scanner.index = this.startMarker.index;\n\t        this.scanner.lineNumber = this.startMarker.line;\n\t        this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n\t    };\n\t    JSXParser.prototype.finishJSX = function () {\n\t        // Prime the next lookahead.\n\t        this.nextToken();\n\t    };\n\t    JSXParser.prototype.reenterJSX = function () {\n\t        this.startJSX();\n\t        this.expectJSX('}');\n\t        // Pop the closing '}' added from the lookahead.\n\t        if (this.config.tokens) {\n\t            this.tokens.pop();\n\t        }\n\t    };\n\t    JSXParser.prototype.createJSXNode = function () {\n\t        this.collectComments();\n\t        return {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    };\n\t    JSXParser.prototype.createJSXChildNode = function () {\n\t        return {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    };\n\t    JSXParser.prototype.scanXHTMLEntity = function (quote) {\n\t        var result = '&';\n\t        var valid = true;\n\t        var terminated = false;\n\t        var numeric = false;\n\t        var hex = false;\n\t        while (!this.scanner.eof() && valid && !terminated) {\n\t            var ch = this.scanner.source[this.scanner.index];\n\t            if (ch === quote) {\n\t                break;\n\t            }\n\t            terminated = (ch === ';');\n\t            result += ch;\n\t            ++this.scanner.index;\n\t            if (!terminated) {\n\t                switch (result.length) {\n\t                    case 2:\n\t                        // e.g. '&#123;'\n\t                        numeric = (ch === '#');\n\t                        break;\n\t                    case 3:\n\t                        if (numeric) {\n\t                            // e.g. '&#x41;'\n\t                            hex = (ch === 'x');\n\t                            valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));\n\t                            numeric = numeric && !hex;\n\t                        }\n\t                        break;\n\t                    default:\n\t                        valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));\n\t                        valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));\n\t                        break;\n\t                }\n\t            }\n\t        }\n\t        if (valid && terminated && result.length > 2) {\n\t            // e.g. '&#x41;' becomes just '#x41'\n\t            var str = result.substr(1, result.length - 2);\n\t            if (numeric && str.length > 1) {\n\t                result = String.fromCharCode(parseInt(str.substr(1), 10));\n\t            }\n\t            else if (hex && str.length > 2) {\n\t                result = String.fromCharCode(parseInt('0' + str.substr(1), 16));\n\t            }\n\t            else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {\n\t                result = xhtml_entities_1.XHTMLEntities[str];\n\t            }\n\t        }\n\t        return result;\n\t    };\n\t    // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n\t    JSXParser.prototype.lexJSX = function () {\n\t        var cp = this.scanner.source.charCodeAt(this.scanner.index);\n\t        // < > / : = { }\n\t        if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n\t            var value = this.scanner.source[this.scanner.index++];\n\t            return {\n\t                type: 7 /* Punctuator */,\n\t                value: value,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: this.scanner.index - 1,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // \" '\n\t        if (cp === 34 || cp === 39) {\n\t            var start = this.scanner.index;\n\t            var quote = this.scanner.source[this.scanner.index++];\n\t            var str = '';\n\t            while (!this.scanner.eof()) {\n\t                var ch = this.scanner.source[this.scanner.index++];\n\t                if (ch === quote) {\n\t                    break;\n\t                }\n\t                else if (ch === '&') {\n\t                    str += this.scanXHTMLEntity(quote);\n\t                }\n\t                else {\n\t                    str += ch;\n\t                }\n\t            }\n\t            return {\n\t                type: 8 /* StringLiteral */,\n\t                value: str,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // ... or .\n\t        if (cp === 46) {\n\t            var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n\t            var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n\t            var value = (n1 === 46 && n2 === 46) ? '...' : '.';\n\t            var start = this.scanner.index;\n\t            this.scanner.index += value.length;\n\t            return {\n\t                type: 7 /* Punctuator */,\n\t                value: value,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // `\n\t        if (cp === 96) {\n\t            // Only placeholder, since it will be rescanned as a real assignment expression.\n\t            return {\n\t                type: 10 /* Template */,\n\t                value: '',\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: this.scanner.index,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // Identifer can not contain backslash (char code 92).\n\t        if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {\n\t            var start = this.scanner.index;\n\t            ++this.scanner.index;\n\t            while (!this.scanner.eof()) {\n\t                var ch = this.scanner.source.charCodeAt(this.scanner.index);\n\t                if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {\n\t                    ++this.scanner.index;\n\t                }\n\t                else if (ch === 45) {\n\t                    // Hyphen (char code 45) can be part of an identifier.\n\t                    ++this.scanner.index;\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            var id = this.scanner.source.slice(start, this.scanner.index);\n\t            return {\n\t                type: 100 /* Identifier */,\n\t                value: id,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        return this.scanner.lex();\n\t    };\n\t    JSXParser.prototype.nextJSXToken = function () {\n\t        this.collectComments();\n\t        this.startMarker.index = this.scanner.index;\n\t        this.startMarker.line = this.scanner.lineNumber;\n\t        this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var token = this.lexJSX();\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        if (this.config.tokens) {\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        return token;\n\t    };\n\t    JSXParser.prototype.nextJSXText = function () {\n\t        this.startMarker.index = this.scanner.index;\n\t        this.startMarker.line = this.scanner.lineNumber;\n\t        this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var start = this.scanner.index;\n\t        var text = '';\n\t        while (!this.scanner.eof()) {\n\t            var ch = this.scanner.source[this.scanner.index];\n\t            if (ch === '{' || ch === '<') {\n\t                break;\n\t            }\n\t            ++this.scanner.index;\n\t            text += ch;\n\t            if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                ++this.scanner.lineNumber;\n\t                if (ch === '\\r' && this.scanner.source[this.scanner.index] === '\\n') {\n\t                    ++this.scanner.index;\n\t                }\n\t                this.scanner.lineStart = this.scanner.index;\n\t            }\n\t        }\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var token = {\n\t            type: 101 /* Text */,\n\t            value: text,\n\t            lineNumber: this.scanner.lineNumber,\n\t            lineStart: this.scanner.lineStart,\n\t            start: start,\n\t            end: this.scanner.index\n\t        };\n\t        if ((text.length > 0) && this.config.tokens) {\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        return token;\n\t    };\n\t    JSXParser.prototype.peekJSXToken = function () {\n\t        var state = this.scanner.saveState();\n\t        this.scanner.scanComments();\n\t        var next = this.lexJSX();\n\t        this.scanner.restoreState(state);\n\t        return next;\n\t    };\n\t    // Expect the next JSX token to match the specified punctuator.\n\t    // If not, an exception will be thrown.\n\t    JSXParser.prototype.expectJSX = function (value) {\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Return true if the next JSX token matches the specified punctuator.\n\t    JSXParser.prototype.matchJSX = function (value) {\n\t        var next = this.peekJSXToken();\n\t        return next.type === 7 /* Punctuator */ && next.value === value;\n\t    };\n\t    JSXParser.prototype.parseJSXIdentifier = function () {\n\t        var node = this.createJSXNode();\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 100 /* Identifier */) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXIdentifier(token.value));\n\t    };\n\t    JSXParser.prototype.parseJSXElementName = function () {\n\t        var node = this.createJSXNode();\n\t        var elementName = this.parseJSXIdentifier();\n\t        if (this.matchJSX(':')) {\n\t            var namespace = elementName;\n\t            this.expectJSX(':');\n\t            var name_1 = this.parseJSXIdentifier();\n\t            elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));\n\t        }\n\t        else if (this.matchJSX('.')) {\n\t            while (this.matchJSX('.')) {\n\t                var object = elementName;\n\t                this.expectJSX('.');\n\t                var property = this.parseJSXIdentifier();\n\t                elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));\n\t            }\n\t        }\n\t        return elementName;\n\t    };\n\t    JSXParser.prototype.parseJSXAttributeName = function () {\n\t        var node = this.createJSXNode();\n\t        var attributeName;\n\t        var identifier = this.parseJSXIdentifier();\n\t        if (this.matchJSX(':')) {\n\t            var namespace = identifier;\n\t            this.expectJSX(':');\n\t            var name_2 = this.parseJSXIdentifier();\n\t            attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));\n\t        }\n\t        else {\n\t            attributeName = identifier;\n\t        }\n\t        return attributeName;\n\t    };\n\t    JSXParser.prototype.parseJSXStringLiteralAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 8 /* StringLiteral */) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        var raw = this.getTokenRaw(token);\n\t        return this.finalize(node, new Node.Literal(token.value, raw));\n\t    };\n\t    JSXParser.prototype.parseJSXExpressionAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        this.finishJSX();\n\t        if (this.match('}')) {\n\t            this.tolerateError('JSX attributes must only be assigned a non-empty expression');\n\t        }\n\t        var expression = this.parseAssignmentExpression();\n\t        this.reenterJSX();\n\t        return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t    };\n\t    JSXParser.prototype.parseJSXAttributeValue = function () {\n\t        return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :\n\t            this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n\t    };\n\t    JSXParser.prototype.parseJSXNameValueAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        var name = this.parseJSXAttributeName();\n\t        var value = null;\n\t        if (this.matchJSX('=')) {\n\t            this.expectJSX('=');\n\t            value = this.parseJSXAttributeValue();\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXAttribute(name, value));\n\t    };\n\t    JSXParser.prototype.parseJSXSpreadAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        this.expectJSX('...');\n\t        this.finishJSX();\n\t        var argument = this.parseAssignmentExpression();\n\t        this.reenterJSX();\n\t        return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));\n\t    };\n\t    JSXParser.prototype.parseJSXAttributes = function () {\n\t        var attributes = [];\n\t        while (!this.matchJSX('/') && !this.matchJSX('>')) {\n\t            var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :\n\t                this.parseJSXNameValueAttribute();\n\t            attributes.push(attribute);\n\t        }\n\t        return attributes;\n\t    };\n\t    JSXParser.prototype.parseJSXOpeningElement = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('<');\n\t        var name = this.parseJSXElementName();\n\t        var attributes = this.parseJSXAttributes();\n\t        var selfClosing = this.matchJSX('/');\n\t        if (selfClosing) {\n\t            this.expectJSX('/');\n\t        }\n\t        this.expectJSX('>');\n\t        return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t    };\n\t    JSXParser.prototype.parseJSXBoundaryElement = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('<');\n\t        if (this.matchJSX('/')) {\n\t            this.expectJSX('/');\n\t            var name_3 = this.parseJSXElementName();\n\t            this.expectJSX('>');\n\t            return this.finalize(node, new JSXNode.JSXClosingElement(name_3));\n\t        }\n\t        var name = this.parseJSXElementName();\n\t        var attributes = this.parseJSXAttributes();\n\t        var selfClosing = this.matchJSX('/');\n\t        if (selfClosing) {\n\t            this.expectJSX('/');\n\t        }\n\t        this.expectJSX('>');\n\t        return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t    };\n\t    JSXParser.prototype.parseJSXEmptyExpression = function () {\n\t        var node = this.createJSXChildNode();\n\t        this.collectComments();\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        return this.finalize(node, new JSXNode.JSXEmptyExpression());\n\t    };\n\t    JSXParser.prototype.parseJSXExpressionContainer = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        var expression;\n\t        if (this.matchJSX('}')) {\n\t            expression = this.parseJSXEmptyExpression();\n\t            this.expectJSX('}');\n\t        }\n\t        else {\n\t            this.finishJSX();\n\t            expression = this.parseAssignmentExpression();\n\t            this.reenterJSX();\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t    };\n\t    JSXParser.prototype.parseJSXChildren = function () {\n\t        var children = [];\n\t        while (!this.scanner.eof()) {\n\t            var node = this.createJSXChildNode();\n\t            var token = this.nextJSXText();\n\t            if (token.start < token.end) {\n\t                var raw = this.getTokenRaw(token);\n\t                var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));\n\t                children.push(child);\n\t            }\n\t            if (this.scanner.source[this.scanner.index] === '{') {\n\t                var container = this.parseJSXExpressionContainer();\n\t                children.push(container);\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return children;\n\t    };\n\t    JSXParser.prototype.parseComplexJSXElement = function (el) {\n\t        var stack = [];\n\t        while (!this.scanner.eof()) {\n\t            el.children = el.children.concat(this.parseJSXChildren());\n\t            var node = this.createJSXChildNode();\n\t            var element = this.parseJSXBoundaryElement();\n\t            if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {\n\t                var opening = element;\n\t                if (opening.selfClosing) {\n\t                    var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));\n\t                    el.children.push(child);\n\t                }\n\t                else {\n\t                    stack.push(el);\n\t                    el = { node: node, opening: opening, closing: null, children: [] };\n\t                }\n\t            }\n\t            if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {\n\t                el.closing = element;\n\t                var open_1 = getQualifiedElementName(el.opening.name);\n\t                var close_1 = getQualifiedElementName(el.closing.name);\n\t                if (open_1 !== close_1) {\n\t                    this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);\n\t                }\n\t                if (stack.length > 0) {\n\t                    var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));\n\t                    el = stack[stack.length - 1];\n\t                    el.children.push(child);\n\t                    stack.pop();\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        return el;\n\t    };\n\t    JSXParser.prototype.parseJSXElement = function () {\n\t        var node = this.createJSXNode();\n\t        var opening = this.parseJSXOpeningElement();\n\t        var children = [];\n\t        var closing = null;\n\t        if (!opening.selfClosing) {\n\t            var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });\n\t            children = el.children;\n\t            closing = el.closing;\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));\n\t    };\n\t    JSXParser.prototype.parseJSXRoot = function () {\n\t        // Pop the opening '<' added from the lookahead.\n\t        if (this.config.tokens) {\n\t            this.tokens.pop();\n\t        }\n\t        this.startJSX();\n\t        var element = this.parseJSXElement();\n\t        this.finishJSX();\n\t        return element;\n\t    };\n\t    JSXParser.prototype.isStartOfExpression = function () {\n\t        return _super.prototype.isStartOfExpression.call(this) || this.match('<');\n\t    };\n\t    return JSXParser;\n\t}(parser_1.Parser));\n\texports.JSXParser = JSXParser;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// See also tools/generate-unicode-regex.js.\n\tvar Regex = {\n\t    // Unicode v8.0.0 NonAsciiIdentifierStart:\n\t    NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n\t    // Unicode v8.0.0 NonAsciiIdentifierPart:\n\t    NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n\t};\n\texports.Character = {\n\t    /* tslint:disable:no-bitwise */\n\t    fromCodePoint: function (cp) {\n\t        return (cp < 0x10000) ? String.fromCharCode(cp) :\n\t            String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n\t                String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-white-space\n\t    isWhiteSpace: function (cp) {\n\t        return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||\n\t            (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-line-terminators\n\t    isLineTerminator: function (cp) {\n\t        return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t    isIdentifierStart: function (cp) {\n\t        return (cp === 0x24) || (cp === 0x5F) ||\n\t            (cp >= 0x41 && cp <= 0x5A) ||\n\t            (cp >= 0x61 && cp <= 0x7A) ||\n\t            (cp === 0x5C) ||\n\t            ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));\n\t    },\n\t    isIdentifierPart: function (cp) {\n\t        return (cp === 0x24) || (cp === 0x5F) ||\n\t            (cp >= 0x41 && cp <= 0x5A) ||\n\t            (cp >= 0x61 && cp <= 0x7A) ||\n\t            (cp >= 0x30 && cp <= 0x39) ||\n\t            (cp === 0x5C) ||\n\t            ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t    isDecimalDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x39); // 0..9\n\t    },\n\t    isHexDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x39) ||\n\t            (cp >= 0x41 && cp <= 0x46) ||\n\t            (cp >= 0x61 && cp <= 0x66); // a..f\n\t    },\n\t    isOctalDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x37); // 0..7\n\t    }\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\t/* tslint:disable:max-classes-per-file */\n\tvar JSXClosingElement = (function () {\n\t    function JSXClosingElement(name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;\n\t        this.name = name;\n\t    }\n\t    return JSXClosingElement;\n\t}());\n\texports.JSXClosingElement = JSXClosingElement;\n\tvar JSXElement = (function () {\n\t    function JSXElement(openingElement, children, closingElement) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXElement;\n\t        this.openingElement = openingElement;\n\t        this.children = children;\n\t        this.closingElement = closingElement;\n\t    }\n\t    return JSXElement;\n\t}());\n\texports.JSXElement = JSXElement;\n\tvar JSXEmptyExpression = (function () {\n\t    function JSXEmptyExpression() {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;\n\t    }\n\t    return JSXEmptyExpression;\n\t}());\n\texports.JSXEmptyExpression = JSXEmptyExpression;\n\tvar JSXExpressionContainer = (function () {\n\t    function JSXExpressionContainer(expression) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;\n\t        this.expression = expression;\n\t    }\n\t    return JSXExpressionContainer;\n\t}());\n\texports.JSXExpressionContainer = JSXExpressionContainer;\n\tvar JSXIdentifier = (function () {\n\t    function JSXIdentifier(name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;\n\t        this.name = name;\n\t    }\n\t    return JSXIdentifier;\n\t}());\n\texports.JSXIdentifier = JSXIdentifier;\n\tvar JSXMemberExpression = (function () {\n\t    function JSXMemberExpression(object, property) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return JSXMemberExpression;\n\t}());\n\texports.JSXMemberExpression = JSXMemberExpression;\n\tvar JSXAttribute = (function () {\n\t    function JSXAttribute(name, value) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;\n\t        this.name = name;\n\t        this.value = value;\n\t    }\n\t    return JSXAttribute;\n\t}());\n\texports.JSXAttribute = JSXAttribute;\n\tvar JSXNamespacedName = (function () {\n\t    function JSXNamespacedName(namespace, name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;\n\t        this.namespace = namespace;\n\t        this.name = name;\n\t    }\n\t    return JSXNamespacedName;\n\t}());\n\texports.JSXNamespacedName = JSXNamespacedName;\n\tvar JSXOpeningElement = (function () {\n\t    function JSXOpeningElement(name, selfClosing, attributes) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;\n\t        this.name = name;\n\t        this.selfClosing = selfClosing;\n\t        this.attributes = attributes;\n\t    }\n\t    return JSXOpeningElement;\n\t}());\n\texports.JSXOpeningElement = JSXOpeningElement;\n\tvar JSXSpreadAttribute = (function () {\n\t    function JSXSpreadAttribute(argument) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;\n\t        this.argument = argument;\n\t    }\n\t    return JSXSpreadAttribute;\n\t}());\n\texports.JSXSpreadAttribute = JSXSpreadAttribute;\n\tvar JSXText = (function () {\n\t    function JSXText(value, raw) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXText;\n\t        this.value = value;\n\t        this.raw = raw;\n\t    }\n\t    return JSXText;\n\t}());\n\texports.JSXText = JSXText;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.JSXSyntax = {\n\t    JSXAttribute: 'JSXAttribute',\n\t    JSXClosingElement: 'JSXClosingElement',\n\t    JSXElement: 'JSXElement',\n\t    JSXEmptyExpression: 'JSXEmptyExpression',\n\t    JSXExpressionContainer: 'JSXExpressionContainer',\n\t    JSXIdentifier: 'JSXIdentifier',\n\t    JSXMemberExpression: 'JSXMemberExpression',\n\t    JSXNamespacedName: 'JSXNamespacedName',\n\t    JSXOpeningElement: 'JSXOpeningElement',\n\t    JSXSpreadAttribute: 'JSXSpreadAttribute',\n\t    JSXText: 'JSXText'\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\t/* tslint:disable:max-classes-per-file */\n\tvar ArrayExpression = (function () {\n\t    function ArrayExpression(elements) {\n\t        this.type = syntax_1.Syntax.ArrayExpression;\n\t        this.elements = elements;\n\t    }\n\t    return ArrayExpression;\n\t}());\n\texports.ArrayExpression = ArrayExpression;\n\tvar ArrayPattern = (function () {\n\t    function ArrayPattern(elements) {\n\t        this.type = syntax_1.Syntax.ArrayPattern;\n\t        this.elements = elements;\n\t    }\n\t    return ArrayPattern;\n\t}());\n\texports.ArrayPattern = ArrayPattern;\n\tvar ArrowFunctionExpression = (function () {\n\t    function ArrowFunctionExpression(params, body, expression) {\n\t        this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t        this.id = null;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = expression;\n\t        this.async = false;\n\t    }\n\t    return ArrowFunctionExpression;\n\t}());\n\texports.ArrowFunctionExpression = ArrowFunctionExpression;\n\tvar AssignmentExpression = (function () {\n\t    function AssignmentExpression(operator, left, right) {\n\t        this.type = syntax_1.Syntax.AssignmentExpression;\n\t        this.operator = operator;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return AssignmentExpression;\n\t}());\n\texports.AssignmentExpression = AssignmentExpression;\n\tvar AssignmentPattern = (function () {\n\t    function AssignmentPattern(left, right) {\n\t        this.type = syntax_1.Syntax.AssignmentPattern;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return AssignmentPattern;\n\t}());\n\texports.AssignmentPattern = AssignmentPattern;\n\tvar AsyncArrowFunctionExpression = (function () {\n\t    function AsyncArrowFunctionExpression(params, body, expression) {\n\t        this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t        this.id = null;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = expression;\n\t        this.async = true;\n\t    }\n\t    return AsyncArrowFunctionExpression;\n\t}());\n\texports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;\n\tvar AsyncFunctionDeclaration = (function () {\n\t    function AsyncFunctionDeclaration(id, params, body) {\n\t        this.type = syntax_1.Syntax.FunctionDeclaration;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = false;\n\t        this.async = true;\n\t    }\n\t    return AsyncFunctionDeclaration;\n\t}());\n\texports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;\n\tvar AsyncFunctionExpression = (function () {\n\t    function AsyncFunctionExpression(id, params, body) {\n\t        this.type = syntax_1.Syntax.FunctionExpression;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = false;\n\t        this.async = true;\n\t    }\n\t    return AsyncFunctionExpression;\n\t}());\n\texports.AsyncFunctionExpression = AsyncFunctionExpression;\n\tvar AwaitExpression = (function () {\n\t    function AwaitExpression(argument) {\n\t        this.type = syntax_1.Syntax.AwaitExpression;\n\t        this.argument = argument;\n\t    }\n\t    return AwaitExpression;\n\t}());\n\texports.AwaitExpression = AwaitExpression;\n\tvar BinaryExpression = (function () {\n\t    function BinaryExpression(operator, left, right) {\n\t        var logical = (operator === '||' || operator === '&&');\n\t        this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;\n\t        this.operator = operator;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return BinaryExpression;\n\t}());\n\texports.BinaryExpression = BinaryExpression;\n\tvar BlockStatement = (function () {\n\t    function BlockStatement(body) {\n\t        this.type = syntax_1.Syntax.BlockStatement;\n\t        this.body = body;\n\t    }\n\t    return BlockStatement;\n\t}());\n\texports.BlockStatement = BlockStatement;\n\tvar BreakStatement = (function () {\n\t    function BreakStatement(label) {\n\t        this.type = syntax_1.Syntax.BreakStatement;\n\t        this.label = label;\n\t    }\n\t    return BreakStatement;\n\t}());\n\texports.BreakStatement = BreakStatement;\n\tvar CallExpression = (function () {\n\t    function CallExpression(callee, args) {\n\t        this.type = syntax_1.Syntax.CallExpression;\n\t        this.callee = callee;\n\t        this.arguments = args;\n\t    }\n\t    return CallExpression;\n\t}());\n\texports.CallExpression = CallExpression;\n\tvar CatchClause = (function () {\n\t    function CatchClause(param, body) {\n\t        this.type = syntax_1.Syntax.CatchClause;\n\t        this.param = param;\n\t        this.body = body;\n\t    }\n\t    return CatchClause;\n\t}());\n\texports.CatchClause = CatchClause;\n\tvar ClassBody = (function () {\n\t    function ClassBody(body) {\n\t        this.type = syntax_1.Syntax.ClassBody;\n\t        this.body = body;\n\t    }\n\t    return ClassBody;\n\t}());\n\texports.ClassBody = ClassBody;\n\tvar ClassDeclaration = (function () {\n\t    function ClassDeclaration(id, superClass, body) {\n\t        this.type = syntax_1.Syntax.ClassDeclaration;\n\t        this.id = id;\n\t        this.superClass = superClass;\n\t        this.body = body;\n\t    }\n\t    return ClassDeclaration;\n\t}());\n\texports.ClassDeclaration = ClassDeclaration;\n\tvar ClassExpression = (function () {\n\t    function ClassExpression(id, superClass, body) {\n\t        this.type = syntax_1.Syntax.ClassExpression;\n\t        this.id = id;\n\t        this.superClass = superClass;\n\t        this.body = body;\n\t    }\n\t    return ClassExpression;\n\t}());\n\texports.ClassExpression = ClassExpression;\n\tvar ComputedMemberExpression = (function () {\n\t    function ComputedMemberExpression(object, property) {\n\t        this.type = syntax_1.Syntax.MemberExpression;\n\t        this.computed = true;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return ComputedMemberExpression;\n\t}());\n\texports.ComputedMemberExpression = ComputedMemberExpression;\n\tvar ConditionalExpression = (function () {\n\t    function ConditionalExpression(test, consequent, alternate) {\n\t        this.type = syntax_1.Syntax.ConditionalExpression;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t        this.alternate = alternate;\n\t    }\n\t    return ConditionalExpression;\n\t}());\n\texports.ConditionalExpression = ConditionalExpression;\n\tvar ContinueStatement = (function () {\n\t    function ContinueStatement(label) {\n\t        this.type = syntax_1.Syntax.ContinueStatement;\n\t        this.label = label;\n\t    }\n\t    return ContinueStatement;\n\t}());\n\texports.ContinueStatement = ContinueStatement;\n\tvar DebuggerStatement = (function () {\n\t    function DebuggerStatement() {\n\t        this.type = syntax_1.Syntax.DebuggerStatement;\n\t    }\n\t    return DebuggerStatement;\n\t}());\n\texports.DebuggerStatement = DebuggerStatement;\n\tvar Directive = (function () {\n\t    function Directive(expression, directive) {\n\t        this.type = syntax_1.Syntax.ExpressionStatement;\n\t        this.expression = expression;\n\t        this.directive = directive;\n\t    }\n\t    return Directive;\n\t}());\n\texports.Directive = Directive;\n\tvar DoWhileStatement = (function () {\n\t    function DoWhileStatement(body, test) {\n\t        this.type = syntax_1.Syntax.DoWhileStatement;\n\t        this.body = body;\n\t        this.test = test;\n\t    }\n\t    return DoWhileStatement;\n\t}());\n\texports.DoWhileStatement = DoWhileStatement;\n\tvar EmptyStatement = (function () {\n\t    function EmptyStatement() {\n\t        this.type = syntax_1.Syntax.EmptyStatement;\n\t    }\n\t    return EmptyStatement;\n\t}());\n\texports.EmptyStatement = EmptyStatement;\n\tvar ExportAllDeclaration = (function () {\n\t    function ExportAllDeclaration(source) {\n\t        this.type = syntax_1.Syntax.ExportAllDeclaration;\n\t        this.source = source;\n\t    }\n\t    return ExportAllDeclaration;\n\t}());\n\texports.ExportAllDeclaration = ExportAllDeclaration;\n\tvar ExportDefaultDeclaration = (function () {\n\t    function ExportDefaultDeclaration(declaration) {\n\t        this.type = syntax_1.Syntax.ExportDefaultDeclaration;\n\t        this.declaration = declaration;\n\t    }\n\t    return ExportDefaultDeclaration;\n\t}());\n\texports.ExportDefaultDeclaration = ExportDefaultDeclaration;\n\tvar ExportNamedDeclaration = (function () {\n\t    function ExportNamedDeclaration(declaration, specifiers, source) {\n\t        this.type = syntax_1.Syntax.ExportNamedDeclaration;\n\t        this.declaration = declaration;\n\t        this.specifiers = specifiers;\n\t        this.source = source;\n\t    }\n\t    return ExportNamedDeclaration;\n\t}());\n\texports.ExportNamedDeclaration = ExportNamedDeclaration;\n\tvar ExportSpecifier = (function () {\n\t    function ExportSpecifier(local, exported) {\n\t        this.type = syntax_1.Syntax.ExportSpecifier;\n\t        this.exported = exported;\n\t        this.local = local;\n\t    }\n\t    return ExportSpecifier;\n\t}());\n\texports.ExportSpecifier = ExportSpecifier;\n\tvar ExpressionStatement = (function () {\n\t    function ExpressionStatement(expression) {\n\t        this.type = syntax_1.Syntax.ExpressionStatement;\n\t        this.expression = expression;\n\t    }\n\t    return ExpressionStatement;\n\t}());\n\texports.ExpressionStatement = ExpressionStatement;\n\tvar ForInStatement = (function () {\n\t    function ForInStatement(left, right, body) {\n\t        this.type = syntax_1.Syntax.ForInStatement;\n\t        this.left = left;\n\t        this.right = right;\n\t        this.body = body;\n\t        this.each = false;\n\t    }\n\t    return ForInStatement;\n\t}());\n\texports.ForInStatement = ForInStatement;\n\tvar ForOfStatement = (function () {\n\t    function ForOfStatement(left, right, body) {\n\t        this.type = syntax_1.Syntax.ForOfStatement;\n\t        this.left = left;\n\t        this.right = right;\n\t        this.body = body;\n\t    }\n\t    return ForOfStatement;\n\t}());\n\texports.ForOfStatement = ForOfStatement;\n\tvar ForStatement = (function () {\n\t    function ForStatement(init, test, update, body) {\n\t        this.type = syntax_1.Syntax.ForStatement;\n\t        this.init = init;\n\t        this.test = test;\n\t        this.update = update;\n\t        this.body = body;\n\t    }\n\t    return ForStatement;\n\t}());\n\texports.ForStatement = ForStatement;\n\tvar FunctionDeclaration = (function () {\n\t    function FunctionDeclaration(id, params, body, generator) {\n\t        this.type = syntax_1.Syntax.FunctionDeclaration;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = generator;\n\t        this.expression = false;\n\t        this.async = false;\n\t    }\n\t    return FunctionDeclaration;\n\t}());\n\texports.FunctionDeclaration = FunctionDeclaration;\n\tvar FunctionExpression = (function () {\n\t    function FunctionExpression(id, params, body, generator) {\n\t        this.type = syntax_1.Syntax.FunctionExpression;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = generator;\n\t        this.expression = false;\n\t        this.async = false;\n\t    }\n\t    return FunctionExpression;\n\t}());\n\texports.FunctionExpression = FunctionExpression;\n\tvar Identifier = (function () {\n\t    function Identifier(name) {\n\t        this.type = syntax_1.Syntax.Identifier;\n\t        this.name = name;\n\t    }\n\t    return Identifier;\n\t}());\n\texports.Identifier = Identifier;\n\tvar IfStatement = (function () {\n\t    function IfStatement(test, consequent, alternate) {\n\t        this.type = syntax_1.Syntax.IfStatement;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t        this.alternate = alternate;\n\t    }\n\t    return IfStatement;\n\t}());\n\texports.IfStatement = IfStatement;\n\tvar ImportDeclaration = (function () {\n\t    function ImportDeclaration(specifiers, source) {\n\t        this.type = syntax_1.Syntax.ImportDeclaration;\n\t        this.specifiers = specifiers;\n\t        this.source = source;\n\t    }\n\t    return ImportDeclaration;\n\t}());\n\texports.ImportDeclaration = ImportDeclaration;\n\tvar ImportDefaultSpecifier = (function () {\n\t    function ImportDefaultSpecifier(local) {\n\t        this.type = syntax_1.Syntax.ImportDefaultSpecifier;\n\t        this.local = local;\n\t    }\n\t    return ImportDefaultSpecifier;\n\t}());\n\texports.ImportDefaultSpecifier = ImportDefaultSpecifier;\n\tvar ImportNamespaceSpecifier = (function () {\n\t    function ImportNamespaceSpecifier(local) {\n\t        this.type = syntax_1.Syntax.ImportNamespaceSpecifier;\n\t        this.local = local;\n\t    }\n\t    return ImportNamespaceSpecifier;\n\t}());\n\texports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\tvar ImportSpecifier = (function () {\n\t    function ImportSpecifier(local, imported) {\n\t        this.type = syntax_1.Syntax.ImportSpecifier;\n\t        this.local = local;\n\t        this.imported = imported;\n\t    }\n\t    return ImportSpecifier;\n\t}());\n\texports.ImportSpecifier = ImportSpecifier;\n\tvar LabeledStatement = (function () {\n\t    function LabeledStatement(label, body) {\n\t        this.type = syntax_1.Syntax.LabeledStatement;\n\t        this.label = label;\n\t        this.body = body;\n\t    }\n\t    return LabeledStatement;\n\t}());\n\texports.LabeledStatement = LabeledStatement;\n\tvar Literal = (function () {\n\t    function Literal(value, raw) {\n\t        this.type = syntax_1.Syntax.Literal;\n\t        this.value = value;\n\t        this.raw = raw;\n\t    }\n\t    return Literal;\n\t}());\n\texports.Literal = Literal;\n\tvar MetaProperty = (function () {\n\t    function MetaProperty(meta, property) {\n\t        this.type = syntax_1.Syntax.MetaProperty;\n\t        this.meta = meta;\n\t        this.property = property;\n\t    }\n\t    return MetaProperty;\n\t}());\n\texports.MetaProperty = MetaProperty;\n\tvar MethodDefinition = (function () {\n\t    function MethodDefinition(key, computed, value, kind, isStatic) {\n\t        this.type = syntax_1.Syntax.MethodDefinition;\n\t        this.key = key;\n\t        this.computed = computed;\n\t        this.value = value;\n\t        this.kind = kind;\n\t        this.static = isStatic;\n\t    }\n\t    return MethodDefinition;\n\t}());\n\texports.MethodDefinition = MethodDefinition;\n\tvar Module = (function () {\n\t    function Module(body) {\n\t        this.type = syntax_1.Syntax.Program;\n\t        this.body = body;\n\t        this.sourceType = 'module';\n\t    }\n\t    return Module;\n\t}());\n\texports.Module = Module;\n\tvar NewExpression = (function () {\n\t    function NewExpression(callee, args) {\n\t        this.type = syntax_1.Syntax.NewExpression;\n\t        this.callee = callee;\n\t        this.arguments = args;\n\t    }\n\t    return NewExpression;\n\t}());\n\texports.NewExpression = NewExpression;\n\tvar ObjectExpression = (function () {\n\t    function ObjectExpression(properties) {\n\t        this.type = syntax_1.Syntax.ObjectExpression;\n\t        this.properties = properties;\n\t    }\n\t    return ObjectExpression;\n\t}());\n\texports.ObjectExpression = ObjectExpression;\n\tvar ObjectPattern = (function () {\n\t    function ObjectPattern(properties) {\n\t        this.type = syntax_1.Syntax.ObjectPattern;\n\t        this.properties = properties;\n\t    }\n\t    return ObjectPattern;\n\t}());\n\texports.ObjectPattern = ObjectPattern;\n\tvar Property = (function () {\n\t    function Property(kind, key, computed, value, method, shorthand) {\n\t        this.type = syntax_1.Syntax.Property;\n\t        this.key = key;\n\t        this.computed = computed;\n\t        this.value = value;\n\t        this.kind = kind;\n\t        this.method = method;\n\t        this.shorthand = shorthand;\n\t    }\n\t    return Property;\n\t}());\n\texports.Property = Property;\n\tvar RegexLiteral = (function () {\n\t    function RegexLiteral(value, raw, pattern, flags) {\n\t        this.type = syntax_1.Syntax.Literal;\n\t        this.value = value;\n\t        this.raw = raw;\n\t        this.regex = { pattern: pattern, flags: flags };\n\t    }\n\t    return RegexLiteral;\n\t}());\n\texports.RegexLiteral = RegexLiteral;\n\tvar RestElement = (function () {\n\t    function RestElement(argument) {\n\t        this.type = syntax_1.Syntax.RestElement;\n\t        this.argument = argument;\n\t    }\n\t    return RestElement;\n\t}());\n\texports.RestElement = RestElement;\n\tvar ReturnStatement = (function () {\n\t    function ReturnStatement(argument) {\n\t        this.type = syntax_1.Syntax.ReturnStatement;\n\t        this.argument = argument;\n\t    }\n\t    return ReturnStatement;\n\t}());\n\texports.ReturnStatement = ReturnStatement;\n\tvar Script = (function () {\n\t    function Script(body) {\n\t        this.type = syntax_1.Syntax.Program;\n\t        this.body = body;\n\t        this.sourceType = 'script';\n\t    }\n\t    return Script;\n\t}());\n\texports.Script = Script;\n\tvar SequenceExpression = (function () {\n\t    function SequenceExpression(expressions) {\n\t        this.type = syntax_1.Syntax.SequenceExpression;\n\t        this.expressions = expressions;\n\t    }\n\t    return SequenceExpression;\n\t}());\n\texports.SequenceExpression = SequenceExpression;\n\tvar SpreadElement = (function () {\n\t    function SpreadElement(argument) {\n\t        this.type = syntax_1.Syntax.SpreadElement;\n\t        this.argument = argument;\n\t    }\n\t    return SpreadElement;\n\t}());\n\texports.SpreadElement = SpreadElement;\n\tvar StaticMemberExpression = (function () {\n\t    function StaticMemberExpression(object, property) {\n\t        this.type = syntax_1.Syntax.MemberExpression;\n\t        this.computed = false;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return StaticMemberExpression;\n\t}());\n\texports.StaticMemberExpression = StaticMemberExpression;\n\tvar Super = (function () {\n\t    function Super() {\n\t        this.type = syntax_1.Syntax.Super;\n\t    }\n\t    return Super;\n\t}());\n\texports.Super = Super;\n\tvar SwitchCase = (function () {\n\t    function SwitchCase(test, consequent) {\n\t        this.type = syntax_1.Syntax.SwitchCase;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t    }\n\t    return SwitchCase;\n\t}());\n\texports.SwitchCase = SwitchCase;\n\tvar SwitchStatement = (function () {\n\t    function SwitchStatement(discriminant, cases) {\n\t        this.type = syntax_1.Syntax.SwitchStatement;\n\t        this.discriminant = discriminant;\n\t        this.cases = cases;\n\t    }\n\t    return SwitchStatement;\n\t}());\n\texports.SwitchStatement = SwitchStatement;\n\tvar TaggedTemplateExpression = (function () {\n\t    function TaggedTemplateExpression(tag, quasi) {\n\t        this.type = syntax_1.Syntax.TaggedTemplateExpression;\n\t        this.tag = tag;\n\t        this.quasi = quasi;\n\t    }\n\t    return TaggedTemplateExpression;\n\t}());\n\texports.TaggedTemplateExpression = TaggedTemplateExpression;\n\tvar TemplateElement = (function () {\n\t    function TemplateElement(value, tail) {\n\t        this.type = syntax_1.Syntax.TemplateElement;\n\t        this.value = value;\n\t        this.tail = tail;\n\t    }\n\t    return TemplateElement;\n\t}());\n\texports.TemplateElement = TemplateElement;\n\tvar TemplateLiteral = (function () {\n\t    function TemplateLiteral(quasis, expressions) {\n\t        this.type = syntax_1.Syntax.TemplateLiteral;\n\t        this.quasis = quasis;\n\t        this.expressions = expressions;\n\t    }\n\t    return TemplateLiteral;\n\t}());\n\texports.TemplateLiteral = TemplateLiteral;\n\tvar ThisExpression = (function () {\n\t    function ThisExpression() {\n\t        this.type = syntax_1.Syntax.ThisExpression;\n\t    }\n\t    return ThisExpression;\n\t}());\n\texports.ThisExpression = ThisExpression;\n\tvar ThrowStatement = (function () {\n\t    function ThrowStatement(argument) {\n\t        this.type = syntax_1.Syntax.ThrowStatement;\n\t        this.argument = argument;\n\t    }\n\t    return ThrowStatement;\n\t}());\n\texports.ThrowStatement = ThrowStatement;\n\tvar TryStatement = (function () {\n\t    function TryStatement(block, handler, finalizer) {\n\t        this.type = syntax_1.Syntax.TryStatement;\n\t        this.block = block;\n\t        this.handler = handler;\n\t        this.finalizer = finalizer;\n\t    }\n\t    return TryStatement;\n\t}());\n\texports.TryStatement = TryStatement;\n\tvar UnaryExpression = (function () {\n\t    function UnaryExpression(operator, argument) {\n\t        this.type = syntax_1.Syntax.UnaryExpression;\n\t        this.operator = operator;\n\t        this.argument = argument;\n\t        this.prefix = true;\n\t    }\n\t    return UnaryExpression;\n\t}());\n\texports.UnaryExpression = UnaryExpression;\n\tvar UpdateExpression = (function () {\n\t    function UpdateExpression(operator, argument, prefix) {\n\t        this.type = syntax_1.Syntax.UpdateExpression;\n\t        this.operator = operator;\n\t        this.argument = argument;\n\t        this.prefix = prefix;\n\t    }\n\t    return UpdateExpression;\n\t}());\n\texports.UpdateExpression = UpdateExpression;\n\tvar VariableDeclaration = (function () {\n\t    function VariableDeclaration(declarations, kind) {\n\t        this.type = syntax_1.Syntax.VariableDeclaration;\n\t        this.declarations = declarations;\n\t        this.kind = kind;\n\t    }\n\t    return VariableDeclaration;\n\t}());\n\texports.VariableDeclaration = VariableDeclaration;\n\tvar VariableDeclarator = (function () {\n\t    function VariableDeclarator(id, init) {\n\t        this.type = syntax_1.Syntax.VariableDeclarator;\n\t        this.id = id;\n\t        this.init = init;\n\t    }\n\t    return VariableDeclarator;\n\t}());\n\texports.VariableDeclarator = VariableDeclarator;\n\tvar WhileStatement = (function () {\n\t    function WhileStatement(test, body) {\n\t        this.type = syntax_1.Syntax.WhileStatement;\n\t        this.test = test;\n\t        this.body = body;\n\t    }\n\t    return WhileStatement;\n\t}());\n\texports.WhileStatement = WhileStatement;\n\tvar WithStatement = (function () {\n\t    function WithStatement(object, body) {\n\t        this.type = syntax_1.Syntax.WithStatement;\n\t        this.object = object;\n\t        this.body = body;\n\t    }\n\t    return WithStatement;\n\t}());\n\texports.WithStatement = WithStatement;\n\tvar YieldExpression = (function () {\n\t    function YieldExpression(argument, delegate) {\n\t        this.type = syntax_1.Syntax.YieldExpression;\n\t        this.argument = argument;\n\t        this.delegate = delegate;\n\t    }\n\t    return YieldExpression;\n\t}());\n\texports.YieldExpression = YieldExpression;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar messages_1 = __webpack_require__(11);\n\tvar Node = __webpack_require__(7);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar syntax_1 = __webpack_require__(2);\n\tvar token_1 = __webpack_require__(13);\n\tvar ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';\n\tvar Parser = (function () {\n\t    function Parser(code, options, delegate) {\n\t        if (options === void 0) { options = {}; }\n\t        this.config = {\n\t            range: (typeof options.range === 'boolean') && options.range,\n\t            loc: (typeof options.loc === 'boolean') && options.loc,\n\t            source: null,\n\t            tokens: (typeof options.tokens === 'boolean') && options.tokens,\n\t            comment: (typeof options.comment === 'boolean') && options.comment,\n\t            tolerant: (typeof options.tolerant === 'boolean') && options.tolerant\n\t        };\n\t        if (this.config.loc && options.source && options.source !== null) {\n\t            this.config.source = String(options.source);\n\t        }\n\t        this.delegate = delegate;\n\t        this.errorHandler = new error_handler_1.ErrorHandler();\n\t        this.errorHandler.tolerant = this.config.tolerant;\n\t        this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t        this.scanner.trackComment = this.config.comment;\n\t        this.operatorPrecedence = {\n\t            ')': 0,\n\t            ';': 0,\n\t            ',': 0,\n\t            '=': 0,\n\t            ']': 0,\n\t            '||': 1,\n\t            '&&': 2,\n\t            '|': 3,\n\t            '^': 4,\n\t            '&': 5,\n\t            '==': 6,\n\t            '!=': 6,\n\t            '===': 6,\n\t            '!==': 6,\n\t            '<': 7,\n\t            '>': 7,\n\t            '<=': 7,\n\t            '>=': 7,\n\t            '<<': 8,\n\t            '>>': 8,\n\t            '>>>': 8,\n\t            '+': 9,\n\t            '-': 9,\n\t            '*': 11,\n\t            '/': 11,\n\t            '%': 11\n\t        };\n\t        this.lookahead = {\n\t            type: 2 /* EOF */,\n\t            value: '',\n\t            lineNumber: this.scanner.lineNumber,\n\t            lineStart: 0,\n\t            start: 0,\n\t            end: 0\n\t        };\n\t        this.hasLineTerminator = false;\n\t        this.context = {\n\t            isModule: false,\n\t            await: false,\n\t            allowIn: true,\n\t            allowStrictDirective: true,\n\t            allowYield: true,\n\t            firstCoverInitializedNameError: null,\n\t            isAssignmentTarget: false,\n\t            isBindingElement: false,\n\t            inFunctionBody: false,\n\t            inIteration: false,\n\t            inSwitch: false,\n\t            labelSet: {},\n\t            strict: false\n\t        };\n\t        this.tokens = [];\n\t        this.startMarker = {\n\t            index: 0,\n\t            line: this.scanner.lineNumber,\n\t            column: 0\n\t        };\n\t        this.lastMarker = {\n\t            index: 0,\n\t            line: this.scanner.lineNumber,\n\t            column: 0\n\t        };\n\t        this.nextToken();\n\t        this.lastMarker = {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    }\n\t    Parser.prototype.throwError = function (messageFormat) {\n\t        var values = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            values[_i - 1] = arguments[_i];\n\t        }\n\t        var args = Array.prototype.slice.call(arguments, 1);\n\t        var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t            assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t            return args[idx];\n\t        });\n\t        var index = this.lastMarker.index;\n\t        var line = this.lastMarker.line;\n\t        var column = this.lastMarker.column + 1;\n\t        throw this.errorHandler.createError(index, line, column, msg);\n\t    };\n\t    Parser.prototype.tolerateError = function (messageFormat) {\n\t        var values = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            values[_i - 1] = arguments[_i];\n\t        }\n\t        var args = Array.prototype.slice.call(arguments, 1);\n\t        var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t            assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t            return args[idx];\n\t        });\n\t        var index = this.lastMarker.index;\n\t        var line = this.scanner.lineNumber;\n\t        var column = this.lastMarker.column + 1;\n\t        this.errorHandler.tolerateError(index, line, column, msg);\n\t    };\n\t    // Throw an exception because of the token.\n\t    Parser.prototype.unexpectedTokenError = function (token, message) {\n\t        var msg = message || messages_1.Messages.UnexpectedToken;\n\t        var value;\n\t        if (token) {\n\t            if (!message) {\n\t                msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :\n\t                    (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :\n\t                        (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :\n\t                            (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :\n\t                                (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :\n\t                                    messages_1.Messages.UnexpectedToken;\n\t                if (token.type === 4 /* Keyword */) {\n\t                    if (this.scanner.isFutureReservedWord(token.value)) {\n\t                        msg = messages_1.Messages.UnexpectedReserved;\n\t                    }\n\t                    else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n\t                        msg = messages_1.Messages.StrictReservedWord;\n\t                    }\n\t                }\n\t            }\n\t            value = token.value;\n\t        }\n\t        else {\n\t            value = 'ILLEGAL';\n\t        }\n\t        msg = msg.replace('%0', value);\n\t        if (token && typeof token.lineNumber === 'number') {\n\t            var index = token.start;\n\t            var line = token.lineNumber;\n\t            var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n\t            var column = token.start - lastMarkerLineStart + 1;\n\t            return this.errorHandler.createError(index, line, column, msg);\n\t        }\n\t        else {\n\t            var index = this.lastMarker.index;\n\t            var line = this.lastMarker.line;\n\t            var column = this.lastMarker.column + 1;\n\t            return this.errorHandler.createError(index, line, column, msg);\n\t        }\n\t    };\n\t    Parser.prototype.throwUnexpectedToken = function (token, message) {\n\t        throw this.unexpectedTokenError(token, message);\n\t    };\n\t    Parser.prototype.tolerateUnexpectedToken = function (token, message) {\n\t        this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n\t    };\n\t    Parser.prototype.collectComments = function () {\n\t        if (!this.config.comment) {\n\t            this.scanner.scanComments();\n\t        }\n\t        else {\n\t            var comments = this.scanner.scanComments();\n\t            if (comments.length > 0 && this.delegate) {\n\t                for (var i = 0; i < comments.length; ++i) {\n\t                    var e = comments[i];\n\t                    var node = void 0;\n\t                    node = {\n\t                        type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t                        value: this.scanner.source.slice(e.slice[0], e.slice[1])\n\t                    };\n\t                    if (this.config.range) {\n\t                        node.range = e.range;\n\t                    }\n\t                    if (this.config.loc) {\n\t                        node.loc = e.loc;\n\t                    }\n\t                    var metadata = {\n\t                        start: {\n\t                            line: e.loc.start.line,\n\t                            column: e.loc.start.column,\n\t                            offset: e.range[0]\n\t                        },\n\t                        end: {\n\t                            line: e.loc.end.line,\n\t                            column: e.loc.end.column,\n\t                            offset: e.range[1]\n\t                        }\n\t                    };\n\t                    this.delegate(node, metadata);\n\t                }\n\t            }\n\t        }\n\t    };\n\t    // From internal representation to an external structure\n\t    Parser.prototype.getTokenRaw = function (token) {\n\t        return this.scanner.source.slice(token.start, token.end);\n\t    };\n\t    Parser.prototype.convertToken = function (token) {\n\t        var t = {\n\t            type: token_1.TokenName[token.type],\n\t            value: this.getTokenRaw(token)\n\t        };\n\t        if (this.config.range) {\n\t            t.range = [token.start, token.end];\n\t        }\n\t        if (this.config.loc) {\n\t            t.loc = {\n\t                start: {\n\t                    line: this.startMarker.line,\n\t                    column: this.startMarker.column\n\t                },\n\t                end: {\n\t                    line: this.scanner.lineNumber,\n\t                    column: this.scanner.index - this.scanner.lineStart\n\t                }\n\t            };\n\t        }\n\t        if (token.type === 9 /* RegularExpression */) {\n\t            var pattern = token.pattern;\n\t            var flags = token.flags;\n\t            t.regex = { pattern: pattern, flags: flags };\n\t        }\n\t        return t;\n\t    };\n\t    Parser.prototype.nextToken = function () {\n\t        var token = this.lookahead;\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        this.collectComments();\n\t        if (this.scanner.index !== this.startMarker.index) {\n\t            this.startMarker.index = this.scanner.index;\n\t            this.startMarker.line = this.scanner.lineNumber;\n\t            this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        }\n\t        var next = this.scanner.lex();\n\t        this.hasLineTerminator = (token.lineNumber !== next.lineNumber);\n\t        if (next && this.context.strict && next.type === 3 /* Identifier */) {\n\t            if (this.scanner.isStrictModeReservedWord(next.value)) {\n\t                next.type = 4 /* Keyword */;\n\t            }\n\t        }\n\t        this.lookahead = next;\n\t        if (this.config.tokens && next.type !== 2 /* EOF */) {\n\t            this.tokens.push(this.convertToken(next));\n\t        }\n\t        return token;\n\t    };\n\t    Parser.prototype.nextRegexToken = function () {\n\t        this.collectComments();\n\t        var token = this.scanner.scanRegExp();\n\t        if (this.config.tokens) {\n\t            // Pop the previous token, '/' or '/='\n\t            // This is added from the lookahead token.\n\t            this.tokens.pop();\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        // Prime the next lookahead.\n\t        this.lookahead = token;\n\t        this.nextToken();\n\t        return token;\n\t    };\n\t    Parser.prototype.createNode = function () {\n\t        return {\n\t            index: this.startMarker.index,\n\t            line: this.startMarker.line,\n\t            column: this.startMarker.column\n\t        };\n\t    };\n\t    Parser.prototype.startNode = function (token, lastLineStart) {\n\t        if (lastLineStart === void 0) { lastLineStart = 0; }\n\t        var column = token.start - token.lineStart;\n\t        var line = token.lineNumber;\n\t        if (column < 0) {\n\t            column += lastLineStart;\n\t            line--;\n\t        }\n\t        return {\n\t            index: token.start,\n\t            line: line,\n\t            column: column\n\t        };\n\t    };\n\t    Parser.prototype.finalize = function (marker, node) {\n\t        if (this.config.range) {\n\t            node.range = [marker.index, this.lastMarker.index];\n\t        }\n\t        if (this.config.loc) {\n\t            node.loc = {\n\t                start: {\n\t                    line: marker.line,\n\t                    column: marker.column,\n\t                },\n\t                end: {\n\t                    line: this.lastMarker.line,\n\t                    column: this.lastMarker.column\n\t                }\n\t            };\n\t            if (this.config.source) {\n\t                node.loc.source = this.config.source;\n\t            }\n\t        }\n\t        if (this.delegate) {\n\t            var metadata = {\n\t                start: {\n\t                    line: marker.line,\n\t                    column: marker.column,\n\t                    offset: marker.index\n\t                },\n\t                end: {\n\t                    line: this.lastMarker.line,\n\t                    column: this.lastMarker.column,\n\t                    offset: this.lastMarker.index\n\t                }\n\t            };\n\t            this.delegate(node, metadata);\n\t        }\n\t        return node;\n\t    };\n\t    // Expect the next token to match the specified punctuator.\n\t    // If not, an exception will be thrown.\n\t    Parser.prototype.expect = function (value) {\n\t        var token = this.nextToken();\n\t        if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n\t    Parser.prototype.expectCommaSeparator = function () {\n\t        if (this.config.tolerant) {\n\t            var token = this.lookahead;\n\t            if (token.type === 7 /* Punctuator */ && token.value === ',') {\n\t                this.nextToken();\n\t            }\n\t            else if (token.type === 7 /* Punctuator */ && token.value === ';') {\n\t                this.nextToken();\n\t                this.tolerateUnexpectedToken(token);\n\t            }\n\t            else {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);\n\t            }\n\t        }\n\t        else {\n\t            this.expect(',');\n\t        }\n\t    };\n\t    // Expect the next token to match the specified keyword.\n\t    // If not, an exception will be thrown.\n\t    Parser.prototype.expectKeyword = function (keyword) {\n\t        var token = this.nextToken();\n\t        if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Return true if the next token matches the specified punctuator.\n\t    Parser.prototype.match = function (value) {\n\t        return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n\t    };\n\t    // Return true if the next token matches the specified keyword\n\t    Parser.prototype.matchKeyword = function (keyword) {\n\t        return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n\t    };\n\t    // Return true if the next token matches the specified contextual keyword\n\t    // (where an identifier is sometimes a keyword depending on the context)\n\t    Parser.prototype.matchContextualKeyword = function (keyword) {\n\t        return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n\t    };\n\t    // Return true if the next token is an assignment operator\n\t    Parser.prototype.matchAssign = function () {\n\t        if (this.lookahead.type !== 7 /* Punctuator */) {\n\t            return false;\n\t        }\n\t        var op = this.lookahead.value;\n\t        return op === '=' ||\n\t            op === '*=' ||\n\t            op === '**=' ||\n\t            op === '/=' ||\n\t            op === '%=' ||\n\t            op === '+=' ||\n\t            op === '-=' ||\n\t            op === '<<=' ||\n\t            op === '>>=' ||\n\t            op === '>>>=' ||\n\t            op === '&=' ||\n\t            op === '^=' ||\n\t            op === '|=';\n\t    };\n\t    // Cover grammar support.\n\t    //\n\t    // When an assignment expression position starts with an left parenthesis, the determination of the type\n\t    // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n\t    // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n\t    //\n\t    // There are three productions that can be parsed in a parentheses pair that needs to be determined\n\t    // after the outermost pair is closed. They are:\n\t    //\n\t    //   1. AssignmentExpression\n\t    //   2. BindingElements\n\t    //   3. AssignmentTargets\n\t    //\n\t    // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n\t    // binding element or assignment target.\n\t    //\n\t    // The three productions have the relationship:\n\t    //\n\t    //   BindingElements \u2286 AssignmentTargets \u2286 AssignmentExpression\n\t    //\n\t    // with a single exception that CoverInitializedName when used directly in an Expression, generates\n\t    // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n\t    // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n\t    //\n\t    // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n\t    // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n\t    // the CoverInitializedName check is conducted.\n\t    //\n\t    // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n\t    // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n\t    // pattern. The CoverInitializedName check is deferred.\n\t    Parser.prototype.isolateCoverGrammar = function (parseFunction) {\n\t        var previousIsBindingElement = this.context.isBindingElement;\n\t        var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t        var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t        this.context.isBindingElement = true;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.firstCoverInitializedNameError = null;\n\t        var result = parseFunction.call(this);\n\t        if (this.context.firstCoverInitializedNameError !== null) {\n\t            this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n\t        }\n\t        this.context.isBindingElement = previousIsBindingElement;\n\t        this.context.isAssignmentTarget = previousIsAssignmentTarget;\n\t        this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n\t        return result;\n\t    };\n\t    Parser.prototype.inheritCoverGrammar = function (parseFunction) {\n\t        var previousIsBindingElement = this.context.isBindingElement;\n\t        var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t        var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t        this.context.isBindingElement = true;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.firstCoverInitializedNameError = null;\n\t        var result = parseFunction.call(this);\n\t        this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n\t        this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n\t        this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n\t        return result;\n\t    };\n\t    Parser.prototype.consumeSemicolon = function () {\n\t        if (this.match(';')) {\n\t            this.nextToken();\n\t        }\n\t        else if (!this.hasLineTerminator) {\n\t            if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            this.lastMarker.index = this.startMarker.index;\n\t            this.lastMarker.line = this.startMarker.line;\n\t            this.lastMarker.column = this.startMarker.column;\n\t        }\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-primary-expression\n\t    Parser.prototype.parsePrimaryExpression = function () {\n\t        var node = this.createNode();\n\t        var expr;\n\t        var token, raw;\n\t        switch (this.lookahead.type) {\n\t            case 3 /* Identifier */:\n\t                if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {\n\t                    this.tolerateUnexpectedToken(this.lookahead);\n\t                }\n\t                expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t                break;\n\t            case 6 /* NumericLiteral */:\n\t            case 8 /* StringLiteral */:\n\t                if (this.context.strict && this.lookahead.octal) {\n\t                    this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(token.value, raw));\n\t                break;\n\t            case 1 /* BooleanLiteral */:\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));\n\t                break;\n\t            case 5 /* NullLiteral */:\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(null, raw));\n\t                break;\n\t            case 10 /* Template */:\n\t                expr = this.parseTemplateLiteral();\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                switch (this.lookahead.value) {\n\t                    case '(':\n\t                        this.context.isBindingElement = false;\n\t                        expr = this.inheritCoverGrammar(this.parseGroupExpression);\n\t                        break;\n\t                    case '[':\n\t                        expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n\t                        break;\n\t                    case '{':\n\t                        expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n\t                        break;\n\t                    case '/':\n\t                    case '/=':\n\t                        this.context.isAssignmentTarget = false;\n\t                        this.context.isBindingElement = false;\n\t                        this.scanner.index = this.startMarker.index;\n\t                        token = this.nextRegexToken();\n\t                        raw = this.getTokenRaw(token);\n\t                        expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));\n\t                        break;\n\t                    default:\n\t                        expr = this.throwUnexpectedToken(this.nextToken());\n\t                }\n\t                break;\n\t            case 4 /* Keyword */:\n\t                if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {\n\t                    expr = this.parseIdentifierName();\n\t                }\n\t                else if (!this.context.strict && this.matchKeyword('let')) {\n\t                    expr = this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t                }\n\t                else {\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    if (this.matchKeyword('function')) {\n\t                        expr = this.parseFunctionExpression();\n\t                    }\n\t                    else if (this.matchKeyword('this')) {\n\t                        this.nextToken();\n\t                        expr = this.finalize(node, new Node.ThisExpression());\n\t                    }\n\t                    else if (this.matchKeyword('class')) {\n\t                        expr = this.parseClassExpression();\n\t                    }\n\t                    else {\n\t                        expr = this.throwUnexpectedToken(this.nextToken());\n\t                    }\n\t                }\n\t                break;\n\t            default:\n\t                expr = this.throwUnexpectedToken(this.nextToken());\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-array-initializer\n\t    Parser.prototype.parseSpreadElement = function () {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t        return this.finalize(node, new Node.SpreadElement(arg));\n\t    };\n\t    Parser.prototype.parseArrayInitializer = function () {\n\t        var node = this.createNode();\n\t        var elements = [];\n\t        this.expect('[');\n\t        while (!this.match(']')) {\n\t            if (this.match(',')) {\n\t                this.nextToken();\n\t                elements.push(null);\n\t            }\n\t            else if (this.match('...')) {\n\t                var element = this.parseSpreadElement();\n\t                if (!this.match(']')) {\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    this.expect(',');\n\t                }\n\t                elements.push(element);\n\t            }\n\t            else {\n\t                elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t                if (!this.match(']')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t        }\n\t        this.expect(']');\n\t        return this.finalize(node, new Node.ArrayExpression(elements));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-object-initializer\n\t    Parser.prototype.parsePropertyMethod = function (params) {\n\t        this.context.isAssignmentTarget = false;\n\t        this.context.isBindingElement = false;\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = params.simple;\n\t        var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n\t        if (this.context.strict && params.firstRestricted) {\n\t            this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n\t        }\n\t        if (this.context.strict && params.stricted) {\n\t            this.tolerateUnexpectedToken(params.stricted, params.message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        return body;\n\t    };\n\t    Parser.prototype.parsePropertyMethodFunction = function () {\n\t        var isGenerator = false;\n\t        var node = this.createNode();\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = true;\n\t        var params = this.parseFormalParameters();\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parsePropertyMethodAsyncFunction = function () {\n\t        var node = this.createNode();\n\t        var previousAllowYield = this.context.allowYield;\n\t        var previousAwait = this.context.await;\n\t        this.context.allowYield = false;\n\t        this.context.await = true;\n\t        var params = this.parseFormalParameters();\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        this.context.await = previousAwait;\n\t        return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));\n\t    };\n\t    Parser.prototype.parseObjectPropertyKey = function () {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var key;\n\t        switch (token.type) {\n\t            case 8 /* StringLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t                if (this.context.strict && token.octal) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                var raw = this.getTokenRaw(token);\n\t                key = this.finalize(node, new Node.Literal(token.value, raw));\n\t                break;\n\t            case 3 /* Identifier */:\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 4 /* Keyword */:\n\t                key = this.finalize(node, new Node.Identifier(token.value));\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                if (token.value === '[') {\n\t                    key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    this.expect(']');\n\t                }\n\t                else {\n\t                    key = this.throwUnexpectedToken(token);\n\t                }\n\t                break;\n\t            default:\n\t                key = this.throwUnexpectedToken(token);\n\t        }\n\t        return key;\n\t    };\n\t    Parser.prototype.isPropertyKey = function (key, value) {\n\t        return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||\n\t            (key.type === syntax_1.Syntax.Literal && key.value === value);\n\t    };\n\t    Parser.prototype.parseObjectProperty = function (hasProto) {\n\t        var node = this.createNode();\n\t        var token = this.lookahead;\n\t        var kind;\n\t        var key = null;\n\t        var value = null;\n\t        var computed = false;\n\t        var method = false;\n\t        var shorthand = false;\n\t        var isAsync = false;\n\t        if (token.type === 3 /* Identifier */) {\n\t            var id = token.value;\n\t            this.nextToken();\n\t            computed = this.match('[');\n\t            isAsync = !this.hasLineTerminator && (id === 'async') &&\n\t                !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');\n\t            key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));\n\t        }\n\t        else if (this.match('*')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t        }\n\t        var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t        if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {\n\t            kind = 'get';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            this.context.allowYield = false;\n\t            value = this.parseGetterMethod();\n\t        }\n\t        else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {\n\t            kind = 'set';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseSetterMethod();\n\t        }\n\t        else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t            kind = 'init';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseGeneratorMethod();\n\t            method = true;\n\t        }\n\t        else {\n\t            if (!key) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            kind = 'init';\n\t            if (this.match(':') && !isAsync) {\n\t                if (!computed && this.isPropertyKey(key, '__proto__')) {\n\t                    if (hasProto.value) {\n\t                        this.tolerateError(messages_1.Messages.DuplicateProtoProperty);\n\t                    }\n\t                    hasProto.value = true;\n\t                }\n\t                this.nextToken();\n\t                value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t            }\n\t            else if (this.match('(')) {\n\t                value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t                method = true;\n\t            }\n\t            else if (token.type === 3 /* Identifier */) {\n\t                var id = this.finalize(node, new Node.Identifier(token.value));\n\t                if (this.match('=')) {\n\t                    this.context.firstCoverInitializedNameError = this.lookahead;\n\t                    this.nextToken();\n\t                    shorthand = true;\n\t                    var init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    value = this.finalize(node, new Node.AssignmentPattern(id, init));\n\t                }\n\t                else {\n\t                    shorthand = true;\n\t                    value = id;\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));\n\t    };\n\t    Parser.prototype.parseObjectInitializer = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var properties = [];\n\t        var hasProto = { value: false };\n\t        while (!this.match('}')) {\n\t            properties.push(this.parseObjectProperty(hasProto));\n\t            if (!this.match('}')) {\n\t                this.expectCommaSeparator();\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.ObjectExpression(properties));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-template-literals\n\t    Parser.prototype.parseTemplateHead = function () {\n\t        assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var raw = token.value;\n\t        var cooked = token.cooked;\n\t        return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t    };\n\t    Parser.prototype.parseTemplateElement = function () {\n\t        if (this.lookahead.type !== 10 /* Template */) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var raw = token.value;\n\t        var cooked = token.cooked;\n\t        return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t    };\n\t    Parser.prototype.parseTemplateLiteral = function () {\n\t        var node = this.createNode();\n\t        var expressions = [];\n\t        var quasis = [];\n\t        var quasi = this.parseTemplateHead();\n\t        quasis.push(quasi);\n\t        while (!quasi.tail) {\n\t            expressions.push(this.parseExpression());\n\t            quasi = this.parseTemplateElement();\n\t            quasis.push(quasi);\n\t        }\n\t        return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-grouping-operator\n\t    Parser.prototype.reinterpretExpressionAsPattern = function (expr) {\n\t        switch (expr.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t            case syntax_1.Syntax.MemberExpression:\n\t            case syntax_1.Syntax.RestElement:\n\t            case syntax_1.Syntax.AssignmentPattern:\n\t                break;\n\t            case syntax_1.Syntax.SpreadElement:\n\t                expr.type = syntax_1.Syntax.RestElement;\n\t                this.reinterpretExpressionAsPattern(expr.argument);\n\t                break;\n\t            case syntax_1.Syntax.ArrayExpression:\n\t                expr.type = syntax_1.Syntax.ArrayPattern;\n\t                for (var i = 0; i < expr.elements.length; i++) {\n\t                    if (expr.elements[i] !== null) {\n\t                        this.reinterpretExpressionAsPattern(expr.elements[i]);\n\t                    }\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.ObjectExpression:\n\t                expr.type = syntax_1.Syntax.ObjectPattern;\n\t                for (var i = 0; i < expr.properties.length; i++) {\n\t                    this.reinterpretExpressionAsPattern(expr.properties[i].value);\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.AssignmentExpression:\n\t                expr.type = syntax_1.Syntax.AssignmentPattern;\n\t                delete expr.operator;\n\t                this.reinterpretExpressionAsPattern(expr.left);\n\t                break;\n\t            default:\n\t                // Allow other node type for tolerant parsing.\n\t                break;\n\t        }\n\t    };\n\t    Parser.prototype.parseGroupExpression = function () {\n\t        var expr;\n\t        this.expect('(');\n\t        if (this.match(')')) {\n\t            this.nextToken();\n\t            if (!this.match('=>')) {\n\t                this.expect('=>');\n\t            }\n\t            expr = {\n\t                type: ArrowParameterPlaceHolder,\n\t                params: [],\n\t                async: false\n\t            };\n\t        }\n\t        else {\n\t            var startToken = this.lookahead;\n\t            var params = [];\n\t            if (this.match('...')) {\n\t                expr = this.parseRestElement(params);\n\t                this.expect(')');\n\t                if (!this.match('=>')) {\n\t                    this.expect('=>');\n\t                }\n\t                expr = {\n\t                    type: ArrowParameterPlaceHolder,\n\t                    params: [expr],\n\t                    async: false\n\t                };\n\t            }\n\t            else {\n\t                var arrow = false;\n\t                this.context.isBindingElement = true;\n\t                expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t                if (this.match(',')) {\n\t                    var expressions = [];\n\t                    this.context.isAssignmentTarget = false;\n\t                    expressions.push(expr);\n\t                    while (this.lookahead.type !== 2 /* EOF */) {\n\t                        if (!this.match(',')) {\n\t                            break;\n\t                        }\n\t                        this.nextToken();\n\t                        if (this.match(')')) {\n\t                            this.nextToken();\n\t                            for (var i = 0; i < expressions.length; i++) {\n\t                                this.reinterpretExpressionAsPattern(expressions[i]);\n\t                            }\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: expressions,\n\t                                async: false\n\t                            };\n\t                        }\n\t                        else if (this.match('...')) {\n\t                            if (!this.context.isBindingElement) {\n\t                                this.throwUnexpectedToken(this.lookahead);\n\t                            }\n\t                            expressions.push(this.parseRestElement(params));\n\t                            this.expect(')');\n\t                            if (!this.match('=>')) {\n\t                                this.expect('=>');\n\t                            }\n\t                            this.context.isBindingElement = false;\n\t                            for (var i = 0; i < expressions.length; i++) {\n\t                                this.reinterpretExpressionAsPattern(expressions[i]);\n\t                            }\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: expressions,\n\t                                async: false\n\t                            };\n\t                        }\n\t                        else {\n\t                            expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t                        }\n\t                        if (arrow) {\n\t                            break;\n\t                        }\n\t                    }\n\t                    if (!arrow) {\n\t                        expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t                    }\n\t                }\n\t                if (!arrow) {\n\t                    this.expect(')');\n\t                    if (this.match('=>')) {\n\t                        if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: [expr],\n\t                                async: false\n\t                            };\n\t                        }\n\t                        if (!arrow) {\n\t                            if (!this.context.isBindingElement) {\n\t                                this.throwUnexpectedToken(this.lookahead);\n\t                            }\n\t                            if (expr.type === syntax_1.Syntax.SequenceExpression) {\n\t                                for (var i = 0; i < expr.expressions.length; i++) {\n\t                                    this.reinterpretExpressionAsPattern(expr.expressions[i]);\n\t                                }\n\t                            }\n\t                            else {\n\t                                this.reinterpretExpressionAsPattern(expr);\n\t                            }\n\t                            var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: parameters,\n\t                                async: false\n\t                            };\n\t                        }\n\t                    }\n\t                    this.context.isBindingElement = false;\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n\t    Parser.prototype.parseArguments = function () {\n\t        this.expect('(');\n\t        var args = [];\n\t        if (!this.match(')')) {\n\t            while (true) {\n\t                var expr = this.match('...') ? this.parseSpreadElement() :\n\t                    this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                args.push(expr);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expectCommaSeparator();\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return args;\n\t    };\n\t    Parser.prototype.isIdentifierName = function (token) {\n\t        return token.type === 3 /* Identifier */ ||\n\t            token.type === 4 /* Keyword */ ||\n\t            token.type === 1 /* BooleanLiteral */ ||\n\t            token.type === 5 /* NullLiteral */;\n\t    };\n\t    Parser.prototype.parseIdentifierName = function () {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        if (!this.isIdentifierName(token)) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new Node.Identifier(token.value));\n\t    };\n\t    Parser.prototype.parseNewExpression = function () {\n\t        var node = this.createNode();\n\t        var id = this.parseIdentifierName();\n\t        assert_1.assert(id.name === 'new', 'New expression must start with `new`');\n\t        var expr;\n\t        if (this.match('.')) {\n\t            this.nextToken();\n\t            if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {\n\t                var property = this.parseIdentifierName();\n\t                expr = new Node.MetaProperty(id, property);\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t        }\n\t        else {\n\t            var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n\t            var args = this.match('(') ? this.parseArguments() : [];\n\t            expr = new Node.NewExpression(callee, args);\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        return this.finalize(node, expr);\n\t    };\n\t    Parser.prototype.parseAsyncArgument = function () {\n\t        var arg = this.parseAssignmentExpression();\n\t        this.context.firstCoverInitializedNameError = null;\n\t        return arg;\n\t    };\n\t    Parser.prototype.parseAsyncArguments = function () {\n\t        this.expect('(');\n\t        var args = [];\n\t        if (!this.match(')')) {\n\t            while (true) {\n\t                var expr = this.match('...') ? this.parseSpreadElement() :\n\t                    this.isolateCoverGrammar(this.parseAsyncArgument);\n\t                args.push(expr);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expectCommaSeparator();\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return args;\n\t    };\n\t    Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {\n\t        var startToken = this.lookahead;\n\t        var maybeAsync = this.matchContextualKeyword('async');\n\t        var previousAllowIn = this.context.allowIn;\n\t        this.context.allowIn = true;\n\t        var expr;\n\t        if (this.matchKeyword('super') && this.context.inFunctionBody) {\n\t            expr = this.createNode();\n\t            this.nextToken();\n\t            expr = this.finalize(expr, new Node.Super());\n\t            if (!this.match('(') && !this.match('.') && !this.match('[')) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t        }\n\t        else {\n\t            expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t        }\n\t        while (true) {\n\t            if (this.match('.')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('.');\n\t                var property = this.parseIdentifierName();\n\t                expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));\n\t            }\n\t            else if (this.match('(')) {\n\t                var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = false;\n\t                var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n\t                expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));\n\t                if (asyncArrow && this.match('=>')) {\n\t                    for (var i = 0; i < args.length; ++i) {\n\t                        this.reinterpretExpressionAsPattern(args[i]);\n\t                    }\n\t                    expr = {\n\t                        type: ArrowParameterPlaceHolder,\n\t                        params: args,\n\t                        async: true\n\t                    };\n\t                }\n\t            }\n\t            else if (this.match('[')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('[');\n\t                var property = this.isolateCoverGrammar(this.parseExpression);\n\t                this.expect(']');\n\t                expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));\n\t            }\n\t            else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t                var quasi = this.parseTemplateLiteral();\n\t                expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        this.context.allowIn = previousAllowIn;\n\t        return expr;\n\t    };\n\t    Parser.prototype.parseSuper = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('super');\n\t        if (!this.match('[') && !this.match('.')) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        return this.finalize(node, new Node.Super());\n\t    };\n\t    Parser.prototype.parseLeftHandSideExpression = function () {\n\t        assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');\n\t        var node = this.startNode(this.lookahead);\n\t        var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :\n\t            this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t        while (true) {\n\t            if (this.match('[')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('[');\n\t                var property = this.isolateCoverGrammar(this.parseExpression);\n\t                this.expect(']');\n\t                expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));\n\t            }\n\t            else if (this.match('.')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('.');\n\t                var property = this.parseIdentifierName();\n\t                expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));\n\t            }\n\t            else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t                var quasi = this.parseTemplateLiteral();\n\t                expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-update-expressions\n\t    Parser.prototype.parseUpdateExpression = function () {\n\t        var expr;\n\t        var startToken = this.lookahead;\n\t        if (this.match('++') || this.match('--')) {\n\t            var node = this.startNode(startToken);\n\t            var token = this.nextToken();\n\t            expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t            if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictLHSPrefix);\n\t            }\n\t            if (!this.context.isAssignmentTarget) {\n\t                this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t            }\n\t            var prefix = true;\n\t            expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        else {\n\t            expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t            if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n\t                if (this.match('++') || this.match('--')) {\n\t                    if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t                        this.tolerateError(messages_1.Messages.StrictLHSPostfix);\n\t                    }\n\t                    if (!this.context.isAssignmentTarget) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t                    }\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    var operator = this.nextToken().value;\n\t                    var prefix = false;\n\t                    expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-unary-operators\n\t    Parser.prototype.parseAwaitExpression = function () {\n\t        var node = this.createNode();\n\t        this.nextToken();\n\t        var argument = this.parseUnaryExpression();\n\t        return this.finalize(node, new Node.AwaitExpression(argument));\n\t    };\n\t    Parser.prototype.parseUnaryExpression = function () {\n\t        var expr;\n\t        if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||\n\t            this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {\n\t            var node = this.startNode(this.lookahead);\n\t            var token = this.nextToken();\n\t            expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t            expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));\n\t            if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {\n\t                this.tolerateError(messages_1.Messages.StrictDelete);\n\t            }\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        else if (this.context.await && this.matchContextualKeyword('await')) {\n\t            expr = this.parseAwaitExpression();\n\t        }\n\t        else {\n\t            expr = this.parseUpdateExpression();\n\t        }\n\t        return expr;\n\t    };\n\t    Parser.prototype.parseExponentiationExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t        if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {\n\t            this.nextToken();\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t            var left = expr;\n\t            var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t            expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-exp-operator\n\t    // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n\t    // https://tc39.github.io/ecma262/#sec-additive-operators\n\t    // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n\t    // https://tc39.github.io/ecma262/#sec-relational-operators\n\t    // https://tc39.github.io/ecma262/#sec-equality-operators\n\t    // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n\t    // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n\t    Parser.prototype.binaryPrecedence = function (token) {\n\t        var op = token.value;\n\t        var precedence;\n\t        if (token.type === 7 /* Punctuator */) {\n\t            precedence = this.operatorPrecedence[op] || 0;\n\t        }\n\t        else if (token.type === 4 /* Keyword */) {\n\t            precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;\n\t        }\n\t        else {\n\t            precedence = 0;\n\t        }\n\t        return precedence;\n\t    };\n\t    Parser.prototype.parseBinaryExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n\t        var token = this.lookahead;\n\t        var prec = this.binaryPrecedence(token);\n\t        if (prec > 0) {\n\t            this.nextToken();\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t            var markers = [startToken, this.lookahead];\n\t            var left = expr;\n\t            var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t            var stack = [left, token.value, right];\n\t            var precedences = [prec];\n\t            while (true) {\n\t                prec = this.binaryPrecedence(this.lookahead);\n\t                if (prec <= 0) {\n\t                    break;\n\t                }\n\t                // Reduce: make a binary expression from the three topmost entries.\n\t                while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {\n\t                    right = stack.pop();\n\t                    var operator = stack.pop();\n\t                    precedences.pop();\n\t                    left = stack.pop();\n\t                    markers.pop();\n\t                    var node = this.startNode(markers[markers.length - 1]);\n\t                    stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));\n\t                }\n\t                // Shift.\n\t                stack.push(this.nextToken().value);\n\t                precedences.push(prec);\n\t                markers.push(this.lookahead);\n\t                stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n\t            }\n\t            // Final reduce to clean-up the stack.\n\t            var i = stack.length - 1;\n\t            expr = stack[i];\n\t            var lastMarker = markers.pop();\n\t            while (i > 1) {\n\t                var marker = markers.pop();\n\t                var lastLineStart = lastMarker && lastMarker.lineStart;\n\t                var node = this.startNode(marker, lastLineStart);\n\t                var operator = stack[i - 1];\n\t                expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));\n\t                i -= 2;\n\t                lastMarker = marker;\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-conditional-operator\n\t    Parser.prototype.parseConditionalExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n\t        if (this.match('?')) {\n\t            this.nextToken();\n\t            var previousAllowIn = this.context.allowIn;\n\t            this.context.allowIn = true;\n\t            var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            this.context.allowIn = previousAllowIn;\n\t            this.expect(':');\n\t            var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-assignment-operators\n\t    Parser.prototype.checkPatternParam = function (options, param) {\n\t        switch (param.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t                this.validateParam(options, param, param.name);\n\t                break;\n\t            case syntax_1.Syntax.RestElement:\n\t                this.checkPatternParam(options, param.argument);\n\t                break;\n\t            case syntax_1.Syntax.AssignmentPattern:\n\t                this.checkPatternParam(options, param.left);\n\t                break;\n\t            case syntax_1.Syntax.ArrayPattern:\n\t                for (var i = 0; i < param.elements.length; i++) {\n\t                    if (param.elements[i] !== null) {\n\t                        this.checkPatternParam(options, param.elements[i]);\n\t                    }\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.ObjectPattern:\n\t                for (var i = 0; i < param.properties.length; i++) {\n\t                    this.checkPatternParam(options, param.properties[i].value);\n\t                }\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        options.simple = options.simple && (param instanceof Node.Identifier);\n\t    };\n\t    Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {\n\t        var params = [expr];\n\t        var options;\n\t        var asyncArrow = false;\n\t        switch (expr.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t                break;\n\t            case ArrowParameterPlaceHolder:\n\t                params = expr.params;\n\t                asyncArrow = expr.async;\n\t                break;\n\t            default:\n\t                return null;\n\t        }\n\t        options = {\n\t            simple: true,\n\t            paramSet: {}\n\t        };\n\t        for (var i = 0; i < params.length; ++i) {\n\t            var param = params[i];\n\t            if (param.type === syntax_1.Syntax.AssignmentPattern) {\n\t                if (param.right.type === syntax_1.Syntax.YieldExpression) {\n\t                    if (param.right.argument) {\n\t                        this.throwUnexpectedToken(this.lookahead);\n\t                    }\n\t                    param.right.type = syntax_1.Syntax.Identifier;\n\t                    param.right.name = 'yield';\n\t                    delete param.right.argument;\n\t                    delete param.right.delegate;\n\t                }\n\t            }\n\t            else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            this.checkPatternParam(options, param);\n\t            params[i] = param;\n\t        }\n\t        if (this.context.strict || !this.context.allowYield) {\n\t            for (var i = 0; i < params.length; ++i) {\n\t                var param = params[i];\n\t                if (param.type === syntax_1.Syntax.YieldExpression) {\n\t                    this.throwUnexpectedToken(this.lookahead);\n\t                }\n\t            }\n\t        }\n\t        if (options.message === messages_1.Messages.StrictParamDupe) {\n\t            var token = this.context.strict ? options.stricted : options.firstRestricted;\n\t            this.throwUnexpectedToken(token, options.message);\n\t        }\n\t        return {\n\t            simple: options.simple,\n\t            params: params,\n\t            stricted: options.stricted,\n\t            firstRestricted: options.firstRestricted,\n\t            message: options.message\n\t        };\n\t    };\n\t    Parser.prototype.parseAssignmentExpression = function () {\n\t        var expr;\n\t        if (!this.context.allowYield && this.matchKeyword('yield')) {\n\t            expr = this.parseYieldExpression();\n\t        }\n\t        else {\n\t            var startToken = this.lookahead;\n\t            var token = startToken;\n\t            expr = this.parseConditionalExpression();\n\t            if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {\n\t                if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {\n\t                    var arg = this.parsePrimaryExpression();\n\t                    this.reinterpretExpressionAsPattern(arg);\n\t                    expr = {\n\t                        type: ArrowParameterPlaceHolder,\n\t                        params: [arg],\n\t                        async: true\n\t                    };\n\t                }\n\t            }\n\t            if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {\n\t                // https://tc39.github.io/ecma262/#sec-arrow-function-definitions\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                var isAsync = expr.async;\n\t                var list = this.reinterpretAsCoverFormalsList(expr);\n\t                if (list) {\n\t                    if (this.hasLineTerminator) {\n\t                        this.tolerateUnexpectedToken(this.lookahead);\n\t                    }\n\t                    this.context.firstCoverInitializedNameError = null;\n\t                    var previousStrict = this.context.strict;\n\t                    var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t                    this.context.allowStrictDirective = list.simple;\n\t                    var previousAllowYield = this.context.allowYield;\n\t                    var previousAwait = this.context.await;\n\t                    this.context.allowYield = true;\n\t                    this.context.await = isAsync;\n\t                    var node = this.startNode(startToken);\n\t                    this.expect('=>');\n\t                    var body = void 0;\n\t                    if (this.match('{')) {\n\t                        var previousAllowIn = this.context.allowIn;\n\t                        this.context.allowIn = true;\n\t                        body = this.parseFunctionSourceElements();\n\t                        this.context.allowIn = previousAllowIn;\n\t                    }\n\t                    else {\n\t                        body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    }\n\t                    var expression = body.type !== syntax_1.Syntax.BlockStatement;\n\t                    if (this.context.strict && list.firstRestricted) {\n\t                        this.throwUnexpectedToken(list.firstRestricted, list.message);\n\t                    }\n\t                    if (this.context.strict && list.stricted) {\n\t                        this.tolerateUnexpectedToken(list.stricted, list.message);\n\t                    }\n\t                    expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :\n\t                        this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));\n\t                    this.context.strict = previousStrict;\n\t                    this.context.allowStrictDirective = previousAllowStrictDirective;\n\t                    this.context.allowYield = previousAllowYield;\n\t                    this.context.await = previousAwait;\n\t                }\n\t            }\n\t            else {\n\t                if (this.matchAssign()) {\n\t                    if (!this.context.isAssignmentTarget) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t                    }\n\t                    if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {\n\t                        var id = expr;\n\t                        if (this.scanner.isRestrictedWord(id.name)) {\n\t                            this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);\n\t                        }\n\t                        if (this.scanner.isStrictModeReservedWord(id.name)) {\n\t                            this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t                        }\n\t                    }\n\t                    if (!this.match('=')) {\n\t                        this.context.isAssignmentTarget = false;\n\t                        this.context.isBindingElement = false;\n\t                    }\n\t                    else {\n\t                        this.reinterpretExpressionAsPattern(expr);\n\t                    }\n\t                    token = this.nextToken();\n\t                    var operator = token.value;\n\t                    var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));\n\t                    this.context.firstCoverInitializedNameError = null;\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-comma-operator\n\t    Parser.prototype.parseExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        if (this.match(',')) {\n\t            var expressions = [];\n\t            expressions.push(expr);\n\t            while (this.lookahead.type !== 2 /* EOF */) {\n\t                if (!this.match(',')) {\n\t                    break;\n\t                }\n\t                this.nextToken();\n\t                expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t            }\n\t            expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-block\n\t    Parser.prototype.parseStatementListItem = function () {\n\t        var statement;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.isBindingElement = true;\n\t        if (this.lookahead.type === 4 /* Keyword */) {\n\t            switch (this.lookahead.value) {\n\t                case 'export':\n\t                    if (!this.context.isModule) {\n\t                        this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);\n\t                    }\n\t                    statement = this.parseExportDeclaration();\n\t                    break;\n\t                case 'import':\n\t                    if (!this.context.isModule) {\n\t                        this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);\n\t                    }\n\t                    statement = this.parseImportDeclaration();\n\t                    break;\n\t                case 'const':\n\t                    statement = this.parseLexicalDeclaration({ inFor: false });\n\t                    break;\n\t                case 'function':\n\t                    statement = this.parseFunctionDeclaration();\n\t                    break;\n\t                case 'class':\n\t                    statement = this.parseClassDeclaration();\n\t                    break;\n\t                case 'let':\n\t                    statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n\t                    break;\n\t                default:\n\t                    statement = this.parseStatement();\n\t                    break;\n\t            }\n\t        }\n\t        else {\n\t            statement = this.parseStatement();\n\t        }\n\t        return statement;\n\t    };\n\t    Parser.prototype.parseBlock = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var block = [];\n\t        while (true) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            block.push(this.parseStatementListItem());\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.BlockStatement(block));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n\t    Parser.prototype.parseLexicalBinding = function (kind, options) {\n\t        var node = this.createNode();\n\t        var params = [];\n\t        var id = this.parsePattern(params, kind);\n\t        if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(id.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictVarName);\n\t            }\n\t        }\n\t        var init = null;\n\t        if (kind === 'const') {\n\t            if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {\n\t                if (this.match('=')) {\n\t                    this.nextToken();\n\t                    init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                }\n\t                else {\n\t                    this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');\n\t                }\n\t            }\n\t        }\n\t        else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {\n\t            this.expect('=');\n\t            init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        }\n\t        return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t    };\n\t    Parser.prototype.parseBindingList = function (kind, options) {\n\t        var list = [this.parseLexicalBinding(kind, options)];\n\t        while (this.match(',')) {\n\t            this.nextToken();\n\t            list.push(this.parseLexicalBinding(kind, options));\n\t        }\n\t        return list;\n\t    };\n\t    Parser.prototype.isLexicalDeclaration = function () {\n\t        var state = this.scanner.saveState();\n\t        this.scanner.scanComments();\n\t        var next = this.scanner.lex();\n\t        this.scanner.restoreState(state);\n\t        return (next.type === 3 /* Identifier */) ||\n\t            (next.type === 7 /* Punctuator */ && next.value === '[') ||\n\t            (next.type === 7 /* Punctuator */ && next.value === '{') ||\n\t            (next.type === 4 /* Keyword */ && next.value === 'let') ||\n\t            (next.type === 4 /* Keyword */ && next.value === 'yield');\n\t    };\n\t    Parser.prototype.parseLexicalDeclaration = function (options) {\n\t        var node = this.createNode();\n\t        var kind = this.nextToken().value;\n\t        assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\t        var declarations = this.parseBindingList(kind, options);\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.VariableDeclaration(declarations, kind));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n\t    Parser.prototype.parseBindingRestElement = function (params, kind) {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.parsePattern(params, kind);\n\t        return this.finalize(node, new Node.RestElement(arg));\n\t    };\n\t    Parser.prototype.parseArrayPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        this.expect('[');\n\t        var elements = [];\n\t        while (!this.match(']')) {\n\t            if (this.match(',')) {\n\t                this.nextToken();\n\t                elements.push(null);\n\t            }\n\t            else {\n\t                if (this.match('...')) {\n\t                    elements.push(this.parseBindingRestElement(params, kind));\n\t                    break;\n\t                }\n\t                else {\n\t                    elements.push(this.parsePatternWithDefault(params, kind));\n\t                }\n\t                if (!this.match(']')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t        }\n\t        this.expect(']');\n\t        return this.finalize(node, new Node.ArrayPattern(elements));\n\t    };\n\t    Parser.prototype.parsePropertyPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        var computed = false;\n\t        var shorthand = false;\n\t        var method = false;\n\t        var key;\n\t        var value;\n\t        if (this.lookahead.type === 3 /* Identifier */) {\n\t            var keyToken = this.lookahead;\n\t            key = this.parseVariableIdentifier();\n\t            var init = this.finalize(node, new Node.Identifier(keyToken.value));\n\t            if (this.match('=')) {\n\t                params.push(keyToken);\n\t                shorthand = true;\n\t                this.nextToken();\n\t                var expr = this.parseAssignmentExpression();\n\t                value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));\n\t            }\n\t            else if (!this.match(':')) {\n\t                params.push(keyToken);\n\t                shorthand = true;\n\t                value = init;\n\t            }\n\t            else {\n\t                this.expect(':');\n\t                value = this.parsePatternWithDefault(params, kind);\n\t            }\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            this.expect(':');\n\t            value = this.parsePatternWithDefault(params, kind);\n\t        }\n\t        return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));\n\t    };\n\t    Parser.prototype.parseObjectPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        var properties = [];\n\t        this.expect('{');\n\t        while (!this.match('}')) {\n\t            properties.push(this.parsePropertyPattern(params, kind));\n\t            if (!this.match('}')) {\n\t                this.expect(',');\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.ObjectPattern(properties));\n\t    };\n\t    Parser.prototype.parsePattern = function (params, kind) {\n\t        var pattern;\n\t        if (this.match('[')) {\n\t            pattern = this.parseArrayPattern(params, kind);\n\t        }\n\t        else if (this.match('{')) {\n\t            pattern = this.parseObjectPattern(params, kind);\n\t        }\n\t        else {\n\t            if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {\n\t                this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);\n\t            }\n\t            params.push(this.lookahead);\n\t            pattern = this.parseVariableIdentifier(kind);\n\t        }\n\t        return pattern;\n\t    };\n\t    Parser.prototype.parsePatternWithDefault = function (params, kind) {\n\t        var startToken = this.lookahead;\n\t        var pattern = this.parsePattern(params, kind);\n\t        if (this.match('=')) {\n\t            this.nextToken();\n\t            var previousAllowYield = this.context.allowYield;\n\t            this.context.allowYield = true;\n\t            var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            this.context.allowYield = previousAllowYield;\n\t            pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));\n\t        }\n\t        return pattern;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-variable-statement\n\t    Parser.prototype.parseVariableIdentifier = function (kind) {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        if (token.type === 4 /* Keyword */ && token.value === 'yield') {\n\t            if (this.context.strict) {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t            }\n\t            else if (!this.context.allowYield) {\n\t                this.throwUnexpectedToken(token);\n\t            }\n\t        }\n\t        else if (token.type !== 3 /* Identifier */) {\n\t            if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t            }\n\t            else {\n\t                if (this.context.strict || token.value !== 'let' || kind !== 'var') {\n\t                    this.throwUnexpectedToken(token);\n\t                }\n\t            }\n\t        }\n\t        else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {\n\t            this.tolerateUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new Node.Identifier(token.value));\n\t    };\n\t    Parser.prototype.parseVariableDeclaration = function (options) {\n\t        var node = this.createNode();\n\t        var params = [];\n\t        var id = this.parsePattern(params, 'var');\n\t        if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(id.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictVarName);\n\t            }\n\t        }\n\t        var init = null;\n\t        if (this.match('=')) {\n\t            this.nextToken();\n\t            init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        }\n\t        else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {\n\t            this.expect('=');\n\t        }\n\t        return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t    };\n\t    Parser.prototype.parseVariableDeclarationList = function (options) {\n\t        var opt = { inFor: options.inFor };\n\t        var list = [];\n\t        list.push(this.parseVariableDeclaration(opt));\n\t        while (this.match(',')) {\n\t            this.nextToken();\n\t            list.push(this.parseVariableDeclaration(opt));\n\t        }\n\t        return list;\n\t    };\n\t    Parser.prototype.parseVariableStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('var');\n\t        var declarations = this.parseVariableDeclarationList({ inFor: false });\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-empty-statement\n\t    Parser.prototype.parseEmptyStatement = function () {\n\t        var node = this.createNode();\n\t        this.expect(';');\n\t        return this.finalize(node, new Node.EmptyStatement());\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-expression-statement\n\t    Parser.prototype.parseExpressionStatement = function () {\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ExpressionStatement(expr));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-if-statement\n\t    Parser.prototype.parseIfClause = function () {\n\t        if (this.context.strict && this.matchKeyword('function')) {\n\t            this.tolerateError(messages_1.Messages.StrictFunction);\n\t        }\n\t        return this.parseStatement();\n\t    };\n\t    Parser.prototype.parseIfStatement = function () {\n\t        var node = this.createNode();\n\t        var consequent;\n\t        var alternate = null;\n\t        this.expectKeyword('if');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            consequent = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            consequent = this.parseIfClause();\n\t            if (this.matchKeyword('else')) {\n\t                this.nextToken();\n\t                alternate = this.parseIfClause();\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.IfStatement(test, consequent, alternate));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-do-while-statement\n\t    Parser.prototype.parseDoWhileStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('do');\n\t        var previousInIteration = this.context.inIteration;\n\t        this.context.inIteration = true;\n\t        var body = this.parseStatement();\n\t        this.context.inIteration = previousInIteration;\n\t        this.expectKeyword('while');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            if (this.match(';')) {\n\t                this.nextToken();\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.DoWhileStatement(body, test));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-while-statement\n\t    Parser.prototype.parseWhileStatement = function () {\n\t        var node = this.createNode();\n\t        var body;\n\t        this.expectKeyword('while');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            var previousInIteration = this.context.inIteration;\n\t            this.context.inIteration = true;\n\t            body = this.parseStatement();\n\t            this.context.inIteration = previousInIteration;\n\t        }\n\t        return this.finalize(node, new Node.WhileStatement(test, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-for-statement\n\t    // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n\t    Parser.prototype.parseForStatement = function () {\n\t        var init = null;\n\t        var test = null;\n\t        var update = null;\n\t        var forIn = true;\n\t        var left, right;\n\t        var node = this.createNode();\n\t        this.expectKeyword('for');\n\t        this.expect('(');\n\t        if (this.match(';')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            if (this.matchKeyword('var')) {\n\t                init = this.createNode();\n\t                this.nextToken();\n\t                var previousAllowIn = this.context.allowIn;\n\t                this.context.allowIn = false;\n\t                var declarations = this.parseVariableDeclarationList({ inFor: true });\n\t                this.context.allowIn = previousAllowIn;\n\t                if (declarations.length === 1 && this.matchKeyword('in')) {\n\t                    var decl = declarations[0];\n\t                    if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {\n\t                        this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');\n\t                    }\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseAssignmentExpression();\n\t                    init = null;\n\t                    forIn = false;\n\t                }\n\t                else {\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.expect(';');\n\t                }\n\t            }\n\t            else if (this.matchKeyword('const') || this.matchKeyword('let')) {\n\t                init = this.createNode();\n\t                var kind = this.nextToken().value;\n\t                if (!this.context.strict && this.lookahead.value === 'in') {\n\t                    init = this.finalize(init, new Node.Identifier(kind));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else {\n\t                    var previousAllowIn = this.context.allowIn;\n\t                    this.context.allowIn = false;\n\t                    var declarations = this.parseBindingList(kind, { inFor: true });\n\t                    this.context.allowIn = previousAllowIn;\n\t                    if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                        this.nextToken();\n\t                        left = init;\n\t                        right = this.parseExpression();\n\t                        init = null;\n\t                    }\n\t                    else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                        this.nextToken();\n\t                        left = init;\n\t                        right = this.parseAssignmentExpression();\n\t                        init = null;\n\t                        forIn = false;\n\t                    }\n\t                    else {\n\t                        this.consumeSemicolon();\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                    }\n\t                }\n\t            }\n\t            else {\n\t                var initStartToken = this.lookahead;\n\t                var previousAllowIn = this.context.allowIn;\n\t                this.context.allowIn = false;\n\t                init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t                this.context.allowIn = previousAllowIn;\n\t                if (this.matchKeyword('in')) {\n\t                    if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInForIn);\n\t                    }\n\t                    this.nextToken();\n\t                    this.reinterpretExpressionAsPattern(init);\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else if (this.matchContextualKeyword('of')) {\n\t                    if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);\n\t                    }\n\t                    this.nextToken();\n\t                    this.reinterpretExpressionAsPattern(init);\n\t                    left = init;\n\t                    right = this.parseAssignmentExpression();\n\t                    init = null;\n\t                    forIn = false;\n\t                }\n\t                else {\n\t                    if (this.match(',')) {\n\t                        var initSeq = [init];\n\t                        while (this.match(',')) {\n\t                            this.nextToken();\n\t                            initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t                        }\n\t                        init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));\n\t                    }\n\t                    this.expect(';');\n\t                }\n\t            }\n\t        }\n\t        if (typeof left === 'undefined') {\n\t            if (!this.match(';')) {\n\t                test = this.parseExpression();\n\t            }\n\t            this.expect(';');\n\t            if (!this.match(')')) {\n\t                update = this.parseExpression();\n\t            }\n\t        }\n\t        var body;\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            var previousInIteration = this.context.inIteration;\n\t            this.context.inIteration = true;\n\t            body = this.isolateCoverGrammar(this.parseStatement);\n\t            this.context.inIteration = previousInIteration;\n\t        }\n\t        return (typeof left === 'undefined') ?\n\t            this.finalize(node, new Node.ForStatement(init, test, update, body)) :\n\t            forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :\n\t                this.finalize(node, new Node.ForOfStatement(left, right, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-continue-statement\n\t    Parser.prototype.parseContinueStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('continue');\n\t        var label = null;\n\t        if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t            var id = this.parseVariableIdentifier();\n\t            label = id;\n\t            var key = '$' + id.name;\n\t            if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t            }\n\t        }\n\t        this.consumeSemicolon();\n\t        if (label === null && !this.context.inIteration) {\n\t            this.throwError(messages_1.Messages.IllegalContinue);\n\t        }\n\t        return this.finalize(node, new Node.ContinueStatement(label));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-break-statement\n\t    Parser.prototype.parseBreakStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('break');\n\t        var label = null;\n\t        if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t            var id = this.parseVariableIdentifier();\n\t            var key = '$' + id.name;\n\t            if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t            }\n\t            label = id;\n\t        }\n\t        this.consumeSemicolon();\n\t        if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n\t            this.throwError(messages_1.Messages.IllegalBreak);\n\t        }\n\t        return this.finalize(node, new Node.BreakStatement(label));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-return-statement\n\t    Parser.prototype.parseReturnStatement = function () {\n\t        if (!this.context.inFunctionBody) {\n\t            this.tolerateError(messages_1.Messages.IllegalReturn);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('return');\n\t        var hasArgument = (!this.match(';') && !this.match('}') &&\n\t            !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||\n\t            this.lookahead.type === 8 /* StringLiteral */ ||\n\t            this.lookahead.type === 10 /* Template */;\n\t        var argument = hasArgument ? this.parseExpression() : null;\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ReturnStatement(argument));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-with-statement\n\t    Parser.prototype.parseWithStatement = function () {\n\t        if (this.context.strict) {\n\t            this.tolerateError(messages_1.Messages.StrictModeWith);\n\t        }\n\t        var node = this.createNode();\n\t        var body;\n\t        this.expectKeyword('with');\n\t        this.expect('(');\n\t        var object = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            body = this.parseStatement();\n\t        }\n\t        return this.finalize(node, new Node.WithStatement(object, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-switch-statement\n\t    Parser.prototype.parseSwitchCase = function () {\n\t        var node = this.createNode();\n\t        var test;\n\t        if (this.matchKeyword('default')) {\n\t            this.nextToken();\n\t            test = null;\n\t        }\n\t        else {\n\t            this.expectKeyword('case');\n\t            test = this.parseExpression();\n\t        }\n\t        this.expect(':');\n\t        var consequent = [];\n\t        while (true) {\n\t            if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {\n\t                break;\n\t            }\n\t            consequent.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.SwitchCase(test, consequent));\n\t    };\n\t    Parser.prototype.parseSwitchStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('switch');\n\t        this.expect('(');\n\t        var discriminant = this.parseExpression();\n\t        this.expect(')');\n\t        var previousInSwitch = this.context.inSwitch;\n\t        this.context.inSwitch = true;\n\t        var cases = [];\n\t        var defaultFound = false;\n\t        this.expect('{');\n\t        while (true) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            var clause = this.parseSwitchCase();\n\t            if (clause.test === null) {\n\t                if (defaultFound) {\n\t                    this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);\n\t                }\n\t                defaultFound = true;\n\t            }\n\t            cases.push(clause);\n\t        }\n\t        this.expect('}');\n\t        this.context.inSwitch = previousInSwitch;\n\t        return this.finalize(node, new Node.SwitchStatement(discriminant, cases));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-labelled-statements\n\t    Parser.prototype.parseLabelledStatement = function () {\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        var statement;\n\t        if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {\n\t            this.nextToken();\n\t            var id = expr;\n\t            var key = '$' + id.name;\n\t            if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);\n\t            }\n\t            this.context.labelSet[key] = true;\n\t            var body = void 0;\n\t            if (this.matchKeyword('class')) {\n\t                this.tolerateUnexpectedToken(this.lookahead);\n\t                body = this.parseClassDeclaration();\n\t            }\n\t            else if (this.matchKeyword('function')) {\n\t                var token = this.lookahead;\n\t                var declaration = this.parseFunctionDeclaration();\n\t                if (this.context.strict) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);\n\t                }\n\t                else if (declaration.generator) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);\n\t                }\n\t                body = declaration;\n\t            }\n\t            else {\n\t                body = this.parseStatement();\n\t            }\n\t            delete this.context.labelSet[key];\n\t            statement = new Node.LabeledStatement(id, body);\n\t        }\n\t        else {\n\t            this.consumeSemicolon();\n\t            statement = new Node.ExpressionStatement(expr);\n\t        }\n\t        return this.finalize(node, statement);\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-throw-statement\n\t    Parser.prototype.parseThrowStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('throw');\n\t        if (this.hasLineTerminator) {\n\t            this.throwError(messages_1.Messages.NewlineAfterThrow);\n\t        }\n\t        var argument = this.parseExpression();\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ThrowStatement(argument));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-try-statement\n\t    Parser.prototype.parseCatchClause = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('catch');\n\t        this.expect('(');\n\t        if (this.match(')')) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        var params = [];\n\t        var param = this.parsePattern(params);\n\t        var paramMap = {};\n\t        for (var i = 0; i < params.length; i++) {\n\t            var key = '$' + params[i].value;\n\t            if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n\t                this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);\n\t            }\n\t            paramMap[key] = true;\n\t        }\n\t        if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(param.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictCatchVariable);\n\t            }\n\t        }\n\t        this.expect(')');\n\t        var body = this.parseBlock();\n\t        return this.finalize(node, new Node.CatchClause(param, body));\n\t    };\n\t    Parser.prototype.parseFinallyClause = function () {\n\t        this.expectKeyword('finally');\n\t        return this.parseBlock();\n\t    };\n\t    Parser.prototype.parseTryStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('try');\n\t        var block = this.parseBlock();\n\t        var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;\n\t        var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;\n\t        if (!handler && !finalizer) {\n\t            this.throwError(messages_1.Messages.NoCatchOrFinally);\n\t        }\n\t        return this.finalize(node, new Node.TryStatement(block, handler, finalizer));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-debugger-statement\n\t    Parser.prototype.parseDebuggerStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('debugger');\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.DebuggerStatement());\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n\t    Parser.prototype.parseStatement = function () {\n\t        var statement;\n\t        switch (this.lookahead.type) {\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t            case 8 /* StringLiteral */:\n\t            case 10 /* Template */:\n\t            case 9 /* RegularExpression */:\n\t                statement = this.parseExpressionStatement();\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                var value = this.lookahead.value;\n\t                if (value === '{') {\n\t                    statement = this.parseBlock();\n\t                }\n\t                else if (value === '(') {\n\t                    statement = this.parseExpressionStatement();\n\t                }\n\t                else if (value === ';') {\n\t                    statement = this.parseEmptyStatement();\n\t                }\n\t                else {\n\t                    statement = this.parseExpressionStatement();\n\t                }\n\t                break;\n\t            case 3 /* Identifier */:\n\t                statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n\t                break;\n\t            case 4 /* Keyword */:\n\t                switch (this.lookahead.value) {\n\t                    case 'break':\n\t                        statement = this.parseBreakStatement();\n\t                        break;\n\t                    case 'continue':\n\t                        statement = this.parseContinueStatement();\n\t                        break;\n\t                    case 'debugger':\n\t                        statement = this.parseDebuggerStatement();\n\t                        break;\n\t                    case 'do':\n\t                        statement = this.parseDoWhileStatement();\n\t                        break;\n\t                    case 'for':\n\t                        statement = this.parseForStatement();\n\t                        break;\n\t                    case 'function':\n\t                        statement = this.parseFunctionDeclaration();\n\t                        break;\n\t                    case 'if':\n\t                        statement = this.parseIfStatement();\n\t                        break;\n\t                    case 'return':\n\t                        statement = this.parseReturnStatement();\n\t                        break;\n\t                    case 'switch':\n\t                        statement = this.parseSwitchStatement();\n\t                        break;\n\t                    case 'throw':\n\t                        statement = this.parseThrowStatement();\n\t                        break;\n\t                    case 'try':\n\t                        statement = this.parseTryStatement();\n\t                        break;\n\t                    case 'var':\n\t                        statement = this.parseVariableStatement();\n\t                        break;\n\t                    case 'while':\n\t                        statement = this.parseWhileStatement();\n\t                        break;\n\t                    case 'with':\n\t                        statement = this.parseWithStatement();\n\t                        break;\n\t                    default:\n\t                        statement = this.parseExpressionStatement();\n\t                        break;\n\t                }\n\t                break;\n\t            default:\n\t                statement = this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        return statement;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-function-definitions\n\t    Parser.prototype.parseFunctionSourceElements = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var body = this.parseDirectivePrologues();\n\t        var previousLabelSet = this.context.labelSet;\n\t        var previousInIteration = this.context.inIteration;\n\t        var previousInSwitch = this.context.inSwitch;\n\t        var previousInFunctionBody = this.context.inFunctionBody;\n\t        this.context.labelSet = {};\n\t        this.context.inIteration = false;\n\t        this.context.inSwitch = false;\n\t        this.context.inFunctionBody = true;\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        this.expect('}');\n\t        this.context.labelSet = previousLabelSet;\n\t        this.context.inIteration = previousInIteration;\n\t        this.context.inSwitch = previousInSwitch;\n\t        this.context.inFunctionBody = previousInFunctionBody;\n\t        return this.finalize(node, new Node.BlockStatement(body));\n\t    };\n\t    Parser.prototype.validateParam = function (options, param, name) {\n\t        var key = '$' + name;\n\t        if (this.context.strict) {\n\t            if (this.scanner.isRestrictedWord(name)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamName;\n\t            }\n\t            if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamDupe;\n\t            }\n\t        }\n\t        else if (!options.firstRestricted) {\n\t            if (this.scanner.isRestrictedWord(name)) {\n\t                options.firstRestricted = param;\n\t                options.message = messages_1.Messages.StrictParamName;\n\t            }\n\t            else if (this.scanner.isStrictModeReservedWord(name)) {\n\t                options.firstRestricted = param;\n\t                options.message = messages_1.Messages.StrictReservedWord;\n\t            }\n\t            else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamDupe;\n\t            }\n\t        }\n\t        /* istanbul ignore next */\n\t        if (typeof Object.defineProperty === 'function') {\n\t            Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n\t        }\n\t        else {\n\t            options.paramSet[key] = true;\n\t        }\n\t    };\n\t    Parser.prototype.parseRestElement = function (params) {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.parsePattern(params);\n\t        if (this.match('=')) {\n\t            this.throwError(messages_1.Messages.DefaultRestParameter);\n\t        }\n\t        if (!this.match(')')) {\n\t            this.throwError(messages_1.Messages.ParameterAfterRestParameter);\n\t        }\n\t        return this.finalize(node, new Node.RestElement(arg));\n\t    };\n\t    Parser.prototype.parseFormalParameter = function (options) {\n\t        var params = [];\n\t        var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n\t        for (var i = 0; i < params.length; i++) {\n\t            this.validateParam(options, params[i], params[i].value);\n\t        }\n\t        options.simple = options.simple && (param instanceof Node.Identifier);\n\t        options.params.push(param);\n\t    };\n\t    Parser.prototype.parseFormalParameters = function (firstRestricted) {\n\t        var options;\n\t        options = {\n\t            simple: true,\n\t            params: [],\n\t            firstRestricted: firstRestricted\n\t        };\n\t        this.expect('(');\n\t        if (!this.match(')')) {\n\t            options.paramSet = {};\n\t            while (this.lookahead.type !== 2 /* EOF */) {\n\t                this.parseFormalParameter(options);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expect(',');\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return {\n\t            simple: options.simple,\n\t            params: options.params,\n\t            stricted: options.stricted,\n\t            firstRestricted: options.firstRestricted,\n\t            message: options.message\n\t        };\n\t    };\n\t    Parser.prototype.matchAsyncFunction = function () {\n\t        var match = this.matchContextualKeyword('async');\n\t        if (match) {\n\t            var state = this.scanner.saveState();\n\t            this.scanner.scanComments();\n\t            var next = this.scanner.lex();\n\t            this.scanner.restoreState(state);\n\t            match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');\n\t        }\n\t        return match;\n\t    };\n\t    Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {\n\t        var node = this.createNode();\n\t        var isAsync = this.matchContextualKeyword('async');\n\t        if (isAsync) {\n\t            this.nextToken();\n\t        }\n\t        this.expectKeyword('function');\n\t        var isGenerator = isAsync ? false : this.match('*');\n\t        if (isGenerator) {\n\t            this.nextToken();\n\t        }\n\t        var message;\n\t        var id = null;\n\t        var firstRestricted = null;\n\t        if (!identifierIsOptional || !this.match('(')) {\n\t            var token = this.lookahead;\n\t            id = this.parseVariableIdentifier();\n\t            if (this.context.strict) {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t                }\n\t            }\n\t            else {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictFunctionName;\n\t                }\n\t                else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictReservedWord;\n\t                }\n\t            }\n\t        }\n\t        var previousAllowAwait = this.context.await;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.await = isAsync;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters(firstRestricted);\n\t        var params = formalParameters.params;\n\t        var stricted = formalParameters.stricted;\n\t        firstRestricted = formalParameters.firstRestricted;\n\t        if (formalParameters.message) {\n\t            message = formalParameters.message;\n\t        }\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = formalParameters.simple;\n\t        var body = this.parseFunctionSourceElements();\n\t        if (this.context.strict && firstRestricted) {\n\t            this.throwUnexpectedToken(firstRestricted, message);\n\t        }\n\t        if (this.context.strict && stricted) {\n\t            this.tolerateUnexpectedToken(stricted, message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        this.context.await = previousAllowAwait;\n\t        this.context.allowYield = previousAllowYield;\n\t        return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :\n\t            this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));\n\t    };\n\t    Parser.prototype.parseFunctionExpression = function () {\n\t        var node = this.createNode();\n\t        var isAsync = this.matchContextualKeyword('async');\n\t        if (isAsync) {\n\t            this.nextToken();\n\t        }\n\t        this.expectKeyword('function');\n\t        var isGenerator = isAsync ? false : this.match('*');\n\t        if (isGenerator) {\n\t            this.nextToken();\n\t        }\n\t        var message;\n\t        var id = null;\n\t        var firstRestricted;\n\t        var previousAllowAwait = this.context.await;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.await = isAsync;\n\t        this.context.allowYield = !isGenerator;\n\t        if (!this.match('(')) {\n\t            var token = this.lookahead;\n\t            id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();\n\t            if (this.context.strict) {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t                }\n\t            }\n\t            else {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictFunctionName;\n\t                }\n\t                else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictReservedWord;\n\t                }\n\t            }\n\t        }\n\t        var formalParameters = this.parseFormalParameters(firstRestricted);\n\t        var params = formalParameters.params;\n\t        var stricted = formalParameters.stricted;\n\t        firstRestricted = formalParameters.firstRestricted;\n\t        if (formalParameters.message) {\n\t            message = formalParameters.message;\n\t        }\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = formalParameters.simple;\n\t        var body = this.parseFunctionSourceElements();\n\t        if (this.context.strict && firstRestricted) {\n\t            this.throwUnexpectedToken(firstRestricted, message);\n\t        }\n\t        if (this.context.strict && stricted) {\n\t            this.tolerateUnexpectedToken(stricted, message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        this.context.await = previousAllowAwait;\n\t        this.context.allowYield = previousAllowYield;\n\t        return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :\n\t            this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n\t    Parser.prototype.parseDirective = function () {\n\t        var token = this.lookahead;\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));\n\t    };\n\t    Parser.prototype.parseDirectivePrologues = function () {\n\t        var firstRestricted = null;\n\t        var body = [];\n\t        while (true) {\n\t            var token = this.lookahead;\n\t            if (token.type !== 8 /* StringLiteral */) {\n\t                break;\n\t            }\n\t            var statement = this.parseDirective();\n\t            body.push(statement);\n\t            var directive = statement.directive;\n\t            if (typeof directive !== 'string') {\n\t                break;\n\t            }\n\t            if (directive === 'use strict') {\n\t                this.context.strict = true;\n\t                if (firstRestricted) {\n\t                    this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                if (!this.context.allowStrictDirective) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);\n\t                }\n\t            }\n\t            else {\n\t                if (!firstRestricted && token.octal) {\n\t                    firstRestricted = token;\n\t                }\n\t            }\n\t        }\n\t        return body;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-method-definitions\n\t    Parser.prototype.qualifiedPropertyName = function (token) {\n\t        switch (token.type) {\n\t            case 3 /* Identifier */:\n\t            case 8 /* StringLiteral */:\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t            case 4 /* Keyword */:\n\t                return true;\n\t            case 7 /* Punctuator */:\n\t                return token.value === '[';\n\t            default:\n\t                break;\n\t        }\n\t        return false;\n\t    };\n\t    Parser.prototype.parseGetterMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = false;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters();\n\t        if (formalParameters.params.length > 0) {\n\t            this.tolerateError(messages_1.Messages.BadGetterArity);\n\t        }\n\t        var method = this.parsePropertyMethod(formalParameters);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parseSetterMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = false;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters();\n\t        if (formalParameters.params.length !== 1) {\n\t            this.tolerateError(messages_1.Messages.BadSetterArity);\n\t        }\n\t        else if (formalParameters.params[0] instanceof Node.RestElement) {\n\t            this.tolerateError(messages_1.Messages.BadSetterRestParameter);\n\t        }\n\t        var method = this.parsePropertyMethod(formalParameters);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parseGeneratorMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = true;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = true;\n\t        var params = this.parseFormalParameters();\n\t        this.context.allowYield = false;\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n\t    Parser.prototype.isStartOfExpression = function () {\n\t        var start = true;\n\t        var value = this.lookahead.value;\n\t        switch (this.lookahead.type) {\n\t            case 7 /* Punctuator */:\n\t                start = (value === '[') || (value === '(') || (value === '{') ||\n\t                    (value === '+') || (value === '-') ||\n\t                    (value === '!') || (value === '~') ||\n\t                    (value === '++') || (value === '--') ||\n\t                    (value === '/') || (value === '/='); // regular expression literal\n\t                break;\n\t            case 4 /* Keyword */:\n\t                start = (value === 'class') || (value === 'delete') ||\n\t                    (value === 'function') || (value === 'let') || (value === 'new') ||\n\t                    (value === 'super') || (value === 'this') || (value === 'typeof') ||\n\t                    (value === 'void') || (value === 'yield');\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        return start;\n\t    };\n\t    Parser.prototype.parseYieldExpression = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('yield');\n\t        var argument = null;\n\t        var delegate = false;\n\t        if (!this.hasLineTerminator) {\n\t            var previousAllowYield = this.context.allowYield;\n\t            this.context.allowYield = false;\n\t            delegate = this.match('*');\n\t            if (delegate) {\n\t                this.nextToken();\n\t                argument = this.parseAssignmentExpression();\n\t            }\n\t            else if (this.isStartOfExpression()) {\n\t                argument = this.parseAssignmentExpression();\n\t            }\n\t            this.context.allowYield = previousAllowYield;\n\t        }\n\t        return this.finalize(node, new Node.YieldExpression(argument, delegate));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-class-definitions\n\t    Parser.prototype.parseClassElement = function (hasConstructor) {\n\t        var token = this.lookahead;\n\t        var node = this.createNode();\n\t        var kind = '';\n\t        var key = null;\n\t        var value = null;\n\t        var computed = false;\n\t        var method = false;\n\t        var isStatic = false;\n\t        var isAsync = false;\n\t        if (this.match('*')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            var id = key;\n\t            if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {\n\t                token = this.lookahead;\n\t                isStatic = true;\n\t                computed = this.match('[');\n\t                if (this.match('*')) {\n\t                    this.nextToken();\n\t                }\n\t                else {\n\t                    key = this.parseObjectPropertyKey();\n\t                }\n\t            }\n\t            if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {\n\t                var punctuator = this.lookahead.value;\n\t                if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {\n\t                    isAsync = true;\n\t                    token = this.lookahead;\n\t                    key = this.parseObjectPropertyKey();\n\t                    if (token.type === 3 /* Identifier */ && token.value === 'constructor') {\n\t                        this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t        if (token.type === 3 /* Identifier */) {\n\t            if (token.value === 'get' && lookaheadPropertyKey) {\n\t                kind = 'get';\n\t                computed = this.match('[');\n\t                key = this.parseObjectPropertyKey();\n\t                this.context.allowYield = false;\n\t                value = this.parseGetterMethod();\n\t            }\n\t            else if (token.value === 'set' && lookaheadPropertyKey) {\n\t                kind = 'set';\n\t                computed = this.match('[');\n\t                key = this.parseObjectPropertyKey();\n\t                value = this.parseSetterMethod();\n\t            }\n\t        }\n\t        else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t            kind = 'init';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseGeneratorMethod();\n\t            method = true;\n\t        }\n\t        if (!kind && key && this.match('(')) {\n\t            kind = 'init';\n\t            value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t            method = true;\n\t        }\n\t        if (!kind) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        if (kind === 'init') {\n\t            kind = 'method';\n\t        }\n\t        if (!computed) {\n\t            if (isStatic && this.isPropertyKey(key, 'prototype')) {\n\t                this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);\n\t            }\n\t            if (!isStatic && this.isPropertyKey(key, 'constructor')) {\n\t                if (kind !== 'method' || !method || (value && value.generator)) {\n\t                    this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);\n\t                }\n\t                if (hasConstructor.value) {\n\t                    this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);\n\t                }\n\t                else {\n\t                    hasConstructor.value = true;\n\t                }\n\t                kind = 'constructor';\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));\n\t    };\n\t    Parser.prototype.parseClassElementList = function () {\n\t        var body = [];\n\t        var hasConstructor = { value: false };\n\t        this.expect('{');\n\t        while (!this.match('}')) {\n\t            if (this.match(';')) {\n\t                this.nextToken();\n\t            }\n\t            else {\n\t                body.push(this.parseClassElement(hasConstructor));\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return body;\n\t    };\n\t    Parser.prototype.parseClassBody = function () {\n\t        var node = this.createNode();\n\t        var elementList = this.parseClassElementList();\n\t        return this.finalize(node, new Node.ClassBody(elementList));\n\t    };\n\t    Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {\n\t        var node = this.createNode();\n\t        var previousStrict = this.context.strict;\n\t        this.context.strict = true;\n\t        this.expectKeyword('class');\n\t        var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();\n\t        var superClass = null;\n\t        if (this.matchKeyword('extends')) {\n\t            this.nextToken();\n\t            superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t        }\n\t        var classBody = this.parseClassBody();\n\t        this.context.strict = previousStrict;\n\t        return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));\n\t    };\n\t    Parser.prototype.parseClassExpression = function () {\n\t        var node = this.createNode();\n\t        var previousStrict = this.context.strict;\n\t        this.context.strict = true;\n\t        this.expectKeyword('class');\n\t        var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;\n\t        var superClass = null;\n\t        if (this.matchKeyword('extends')) {\n\t            this.nextToken();\n\t            superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t        }\n\t        var classBody = this.parseClassBody();\n\t        this.context.strict = previousStrict;\n\t        return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-scripts\n\t    // https://tc39.github.io/ecma262/#sec-modules\n\t    Parser.prototype.parseModule = function () {\n\t        this.context.strict = true;\n\t        this.context.isModule = true;\n\t        this.scanner.isModule = true;\n\t        var node = this.createNode();\n\t        var body = this.parseDirectivePrologues();\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.Module(body));\n\t    };\n\t    Parser.prototype.parseScript = function () {\n\t        var node = this.createNode();\n\t        var body = this.parseDirectivePrologues();\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.Script(body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-imports\n\t    Parser.prototype.parseModuleSpecifier = function () {\n\t        var node = this.createNode();\n\t        if (this.lookahead.type !== 8 /* StringLiteral */) {\n\t            this.throwError(messages_1.Messages.InvalidModuleSpecifier);\n\t        }\n\t        var token = this.nextToken();\n\t        var raw = this.getTokenRaw(token);\n\t        return this.finalize(node, new Node.Literal(token.value, raw));\n\t    };\n\t    // import {<foo as bar>} ...;\n\t    Parser.prototype.parseImportSpecifier = function () {\n\t        var node = this.createNode();\n\t        var imported;\n\t        var local;\n\t        if (this.lookahead.type === 3 /* Identifier */) {\n\t            imported = this.parseVariableIdentifier();\n\t            local = imported;\n\t            if (this.matchContextualKeyword('as')) {\n\t                this.nextToken();\n\t                local = this.parseVariableIdentifier();\n\t            }\n\t        }\n\t        else {\n\t            imported = this.parseIdentifierName();\n\t            local = imported;\n\t            if (this.matchContextualKeyword('as')) {\n\t                this.nextToken();\n\t                local = this.parseVariableIdentifier();\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.ImportSpecifier(local, imported));\n\t    };\n\t    // {foo, bar as bas}\n\t    Parser.prototype.parseNamedImports = function () {\n\t        this.expect('{');\n\t        var specifiers = [];\n\t        while (!this.match('}')) {\n\t            specifiers.push(this.parseImportSpecifier());\n\t            if (!this.match('}')) {\n\t                this.expect(',');\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return specifiers;\n\t    };\n\t    // import <foo> ...;\n\t    Parser.prototype.parseImportDefaultSpecifier = function () {\n\t        var node = this.createNode();\n\t        var local = this.parseIdentifierName();\n\t        return this.finalize(node, new Node.ImportDefaultSpecifier(local));\n\t    };\n\t    // import <* as foo> ...;\n\t    Parser.prototype.parseImportNamespaceSpecifier = function () {\n\t        var node = this.createNode();\n\t        this.expect('*');\n\t        if (!this.matchContextualKeyword('as')) {\n\t            this.throwError(messages_1.Messages.NoAsAfterImportNamespace);\n\t        }\n\t        this.nextToken();\n\t        var local = this.parseIdentifierName();\n\t        return this.finalize(node, new Node.ImportNamespaceSpecifier(local));\n\t    };\n\t    Parser.prototype.parseImportDeclaration = function () {\n\t        if (this.context.inFunctionBody) {\n\t            this.throwError(messages_1.Messages.IllegalImportDeclaration);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('import');\n\t        var src;\n\t        var specifiers = [];\n\t        if (this.lookahead.type === 8 /* StringLiteral */) {\n\t            // import 'foo';\n\t            src = this.parseModuleSpecifier();\n\t        }\n\t        else {\n\t            if (this.match('{')) {\n\t                // import {bar}\n\t                specifiers = specifiers.concat(this.parseNamedImports());\n\t            }\n\t            else if (this.match('*')) {\n\t                // import * as foo\n\t                specifiers.push(this.parseImportNamespaceSpecifier());\n\t            }\n\t            else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {\n\t                // import foo\n\t                specifiers.push(this.parseImportDefaultSpecifier());\n\t                if (this.match(',')) {\n\t                    this.nextToken();\n\t                    if (this.match('*')) {\n\t                        // import foo, * as foo\n\t                        specifiers.push(this.parseImportNamespaceSpecifier());\n\t                    }\n\t                    else if (this.match('{')) {\n\t                        // import foo, {bar}\n\t                        specifiers = specifiers.concat(this.parseNamedImports());\n\t                    }\n\t                    else {\n\t                        this.throwUnexpectedToken(this.lookahead);\n\t                    }\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t            if (!this.matchContextualKeyword('from')) {\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            this.nextToken();\n\t            src = this.parseModuleSpecifier();\n\t        }\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ImportDeclaration(specifiers, src));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-exports\n\t    Parser.prototype.parseExportSpecifier = function () {\n\t        var node = this.createNode();\n\t        var local = this.parseIdentifierName();\n\t        var exported = local;\n\t        if (this.matchContextualKeyword('as')) {\n\t            this.nextToken();\n\t            exported = this.parseIdentifierName();\n\t        }\n\t        return this.finalize(node, new Node.ExportSpecifier(local, exported));\n\t    };\n\t    Parser.prototype.parseExportDeclaration = function () {\n\t        if (this.context.inFunctionBody) {\n\t            this.throwError(messages_1.Messages.IllegalExportDeclaration);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('export');\n\t        var exportDeclaration;\n\t        if (this.matchKeyword('default')) {\n\t            // export default ...\n\t            this.nextToken();\n\t            if (this.matchKeyword('function')) {\n\t                // export default function foo () {}\n\t                // export default function () {}\n\t                var declaration = this.parseFunctionDeclaration(true);\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else if (this.matchKeyword('class')) {\n\t                // export default class foo {}\n\t                var declaration = this.parseClassDeclaration(true);\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else if (this.matchContextualKeyword('async')) {\n\t                // export default async function f () {}\n\t                // export default async function () {}\n\t                // export default async x => x\n\t                var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else {\n\t                if (this.matchContextualKeyword('from')) {\n\t                    this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);\n\t                }\n\t                // export default {};\n\t                // export default [];\n\t                // export default (1 + 2);\n\t                var declaration = this.match('{') ? this.parseObjectInitializer() :\n\t                    this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n\t                this.consumeSemicolon();\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t        }\n\t        else if (this.match('*')) {\n\t            // export * from 'foo';\n\t            this.nextToken();\n\t            if (!this.matchContextualKeyword('from')) {\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            this.nextToken();\n\t            var src = this.parseModuleSpecifier();\n\t            this.consumeSemicolon();\n\t            exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));\n\t        }\n\t        else if (this.lookahead.type === 4 /* Keyword */) {\n\t            // export var f = 1;\n\t            var declaration = void 0;\n\t            switch (this.lookahead.value) {\n\t                case 'let':\n\t                case 'const':\n\t                    declaration = this.parseLexicalDeclaration({ inFor: false });\n\t                    break;\n\t                case 'var':\n\t                case 'class':\n\t                case 'function':\n\t                    declaration = this.parseStatementListItem();\n\t                    break;\n\t                default:\n\t                    this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t        }\n\t        else if (this.matchAsyncFunction()) {\n\t            var declaration = this.parseFunctionDeclaration();\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t        }\n\t        else {\n\t            var specifiers = [];\n\t            var source = null;\n\t            var isExportFromIdentifier = false;\n\t            this.expect('{');\n\t            while (!this.match('}')) {\n\t                isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');\n\t                specifiers.push(this.parseExportSpecifier());\n\t                if (!this.match('}')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t            this.expect('}');\n\t            if (this.matchContextualKeyword('from')) {\n\t                // export {default} from 'foo';\n\t                // export {foo} from 'foo';\n\t                this.nextToken();\n\t                source = this.parseModuleSpecifier();\n\t                this.consumeSemicolon();\n\t            }\n\t            else if (isExportFromIdentifier) {\n\t                // export {default}; // missing fromClause\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            else {\n\t                // export {foo};\n\t                this.consumeSemicolon();\n\t            }\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));\n\t        }\n\t        return exportDeclaration;\n\t    };\n\t    return Parser;\n\t}());\n\texports.Parser = Parser;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Ensure the condition is true, otherwise throw an error.\n\t// This is only to have a better contract semantic, i.e. another safety net\n\t// to catch a logic error. The condition shall be fulfilled in normal case.\n\t// Do NOT use this to enforce a certain condition on any user input.\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction assert(condition, message) {\n\t    /* istanbul ignore if */\n\t    if (!condition) {\n\t        throw new Error('ASSERT: ' + message);\n\t    }\n\t}\n\texports.assert = assert;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t/* tslint:disable:max-classes-per-file */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ErrorHandler = (function () {\n\t    function ErrorHandler() {\n\t        this.errors = [];\n\t        this.tolerant = false;\n\t    }\n\t    ErrorHandler.prototype.recordError = function (error) {\n\t        this.errors.push(error);\n\t    };\n\t    ErrorHandler.prototype.tolerate = function (error) {\n\t        if (this.tolerant) {\n\t            this.recordError(error);\n\t        }\n\t        else {\n\t            throw error;\n\t        }\n\t    };\n\t    ErrorHandler.prototype.constructError = function (msg, column) {\n\t        var error = new Error(msg);\n\t        try {\n\t            throw error;\n\t        }\n\t        catch (base) {\n\t            /* istanbul ignore else */\n\t            if (Object.create && Object.defineProperty) {\n\t                error = Object.create(base);\n\t                Object.defineProperty(error, 'column', { value: column });\n\t            }\n\t        }\n\t        /* istanbul ignore next */\n\t        return error;\n\t    };\n\t    ErrorHandler.prototype.createError = function (index, line, col, description) {\n\t        var msg = 'Line ' + line + ': ' + description;\n\t        var error = this.constructError(msg, col);\n\t        error.index = index;\n\t        error.lineNumber = line;\n\t        error.description = description;\n\t        return error;\n\t    };\n\t    ErrorHandler.prototype.throwError = function (index, line, col, description) {\n\t        throw this.createError(index, line, col, description);\n\t    };\n\t    ErrorHandler.prototype.tolerateError = function (index, line, col, description) {\n\t        var error = this.createError(index, line, col, description);\n\t        if (this.tolerant) {\n\t            this.recordError(error);\n\t        }\n\t        else {\n\t            throw error;\n\t        }\n\t    };\n\t    return ErrorHandler;\n\t}());\n\texports.ErrorHandler = ErrorHandler;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Error messages should be identical to V8.\n\texports.Messages = {\n\t    BadGetterArity: 'Getter must not have any formal parameters',\n\t    BadSetterArity: 'Setter must have exactly one formal parameter',\n\t    BadSetterRestParameter: 'Setter function argument must not be a rest parameter',\n\t    ConstructorIsAsync: 'Class constructor may not be an async method',\n\t    ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n\t    DeclarationMissingInitializer: 'Missing initializer in %0 declaration',\n\t    DefaultRestParameter: 'Unexpected token =',\n\t    DuplicateBinding: 'Duplicate binding %0',\n\t    DuplicateConstructor: 'A class may only have one constructor',\n\t    DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n\t    ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',\n\t    GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',\n\t    IllegalBreak: 'Illegal break statement',\n\t    IllegalContinue: 'Illegal continue statement',\n\t    IllegalExportDeclaration: 'Unexpected token',\n\t    IllegalImportDeclaration: 'Unexpected token',\n\t    IllegalLanguageModeDirective: 'Illegal \\'use strict\\' directive in function with non-simple parameter list',\n\t    IllegalReturn: 'Illegal return statement',\n\t    InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',\n\t    InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',\n\t    InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n\t    InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n\t    InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n\t    InvalidModuleSpecifier: 'Unexpected token',\n\t    InvalidRegExp: 'Invalid regular expression',\n\t    LetInLexicalBinding: 'let is disallowed as a lexically bound name',\n\t    MissingFromClause: 'Unexpected token',\n\t    MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n\t    NewlineAfterThrow: 'Illegal newline after throw',\n\t    NoAsAfterImportNamespace: 'Unexpected token',\n\t    NoCatchOrFinally: 'Missing catch or finally after try',\n\t    ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n\t    Redeclaration: '%0 \\'%1\\' has already been declared',\n\t    StaticPrototype: 'Classes may not have static property named prototype',\n\t    StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n\t    StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n\t    StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',\n\t    StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n\t    StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n\t    StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n\t    StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n\t    StrictModeWith: 'Strict mode code may not include a with statement',\n\t    StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n\t    StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n\t    StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n\t    StrictReservedWord: 'Use of future reserved word in strict mode',\n\t    StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n\t    TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n\t    UnexpectedEOS: 'Unexpected end of input',\n\t    UnexpectedIdentifier: 'Unexpected identifier',\n\t    UnexpectedNumber: 'Unexpected number',\n\t    UnexpectedReserved: 'Unexpected reserved word',\n\t    UnexpectedString: 'Unexpected string',\n\t    UnexpectedTemplate: 'Unexpected quasi %0',\n\t    UnexpectedToken: 'Unexpected token %0',\n\t    UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',\n\t    UnknownLabel: 'Undefined label \\'%0\\'',\n\t    UnterminatedRegExp: 'Invalid regular expression: missing /'\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar character_1 = __webpack_require__(4);\n\tvar messages_1 = __webpack_require__(11);\n\tfunction hexValue(ch) {\n\t    return '0123456789abcdef'.indexOf(ch.toLowerCase());\n\t}\n\tfunction octalValue(ch) {\n\t    return '01234567'.indexOf(ch);\n\t}\n\tvar Scanner = (function () {\n\t    function Scanner(code, handler) {\n\t        this.source = code;\n\t        this.errorHandler = handler;\n\t        this.trackComment = false;\n\t        this.isModule = false;\n\t        this.length = code.length;\n\t        this.index = 0;\n\t        this.lineNumber = (code.length > 0) ? 1 : 0;\n\t        this.lineStart = 0;\n\t        this.curlyStack = [];\n\t    }\n\t    Scanner.prototype.saveState = function () {\n\t        return {\n\t            index: this.index,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart\n\t        };\n\t    };\n\t    Scanner.prototype.restoreState = function (state) {\n\t        this.index = state.index;\n\t        this.lineNumber = state.lineNumber;\n\t        this.lineStart = state.lineStart;\n\t    };\n\t    Scanner.prototype.eof = function () {\n\t        return this.index >= this.length;\n\t    };\n\t    Scanner.prototype.throwUnexpectedToken = function (message) {\n\t        if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t        return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t    };\n\t    Scanner.prototype.tolerateUnexpectedToken = function (message) {\n\t        if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t        this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-comments\n\t    Scanner.prototype.skipSingleLineComment = function (offset) {\n\t        var comments = [];\n\t        var start, loc;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t            start = this.index - offset;\n\t            loc = {\n\t                start: {\n\t                    line: this.lineNumber,\n\t                    column: this.index - this.lineStart - offset\n\t                },\n\t                end: {}\n\t            };\n\t        }\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            ++this.index;\n\t            if (character_1.Character.isLineTerminator(ch)) {\n\t                if (this.trackComment) {\n\t                    loc.end = {\n\t                        line: this.lineNumber,\n\t                        column: this.index - this.lineStart - 1\n\t                    };\n\t                    var entry = {\n\t                        multiLine: false,\n\t                        slice: [start + offset, this.index - 1],\n\t                        range: [start, this.index - 1],\n\t                        loc: loc\n\t                    };\n\t                    comments.push(entry);\n\t                }\n\t                if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                this.lineStart = this.index;\n\t                return comments;\n\t            }\n\t        }\n\t        if (this.trackComment) {\n\t            loc.end = {\n\t                line: this.lineNumber,\n\t                column: this.index - this.lineStart\n\t            };\n\t            var entry = {\n\t                multiLine: false,\n\t                slice: [start + offset, this.index],\n\t                range: [start, this.index],\n\t                loc: loc\n\t            };\n\t            comments.push(entry);\n\t        }\n\t        return comments;\n\t    };\n\t    Scanner.prototype.skipMultiLineComment = function () {\n\t        var comments = [];\n\t        var start, loc;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t            start = this.index - 2;\n\t            loc = {\n\t                start: {\n\t                    line: this.lineNumber,\n\t                    column: this.index - this.lineStart - 2\n\t                },\n\t                end: {}\n\t            };\n\t        }\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (character_1.Character.isLineTerminator(ch)) {\n\t                if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                ++this.index;\n\t                this.lineStart = this.index;\n\t            }\n\t            else if (ch === 0x2A) {\n\t                // Block comment ends with '*/'.\n\t                if (this.source.charCodeAt(this.index + 1) === 0x2F) {\n\t                    this.index += 2;\n\t                    if (this.trackComment) {\n\t                        loc.end = {\n\t                            line: this.lineNumber,\n\t                            column: this.index - this.lineStart\n\t                        };\n\t                        var entry = {\n\t                            multiLine: true,\n\t                            slice: [start + 2, this.index - 2],\n\t                            range: [start, this.index],\n\t                            loc: loc\n\t                        };\n\t                        comments.push(entry);\n\t                    }\n\t                    return comments;\n\t                }\n\t                ++this.index;\n\t            }\n\t            else {\n\t                ++this.index;\n\t            }\n\t        }\n\t        // Ran off the end of the file - the whole thing is a comment\n\t        if (this.trackComment) {\n\t            loc.end = {\n\t                line: this.lineNumber,\n\t                column: this.index - this.lineStart\n\t            };\n\t            var entry = {\n\t                multiLine: true,\n\t                slice: [start + 2, this.index],\n\t                range: [start, this.index],\n\t                loc: loc\n\t            };\n\t            comments.push(entry);\n\t        }\n\t        this.tolerateUnexpectedToken();\n\t        return comments;\n\t    };\n\t    Scanner.prototype.scanComments = function () {\n\t        var comments;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t        }\n\t        var start = (this.index === 0);\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (character_1.Character.isWhiteSpace(ch)) {\n\t                ++this.index;\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch)) {\n\t                ++this.index;\n\t                if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                this.lineStart = this.index;\n\t                start = true;\n\t            }\n\t            else if (ch === 0x2F) {\n\t                ch = this.source.charCodeAt(this.index + 1);\n\t                if (ch === 0x2F) {\n\t                    this.index += 2;\n\t                    var comment = this.skipSingleLineComment(2);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                    start = true;\n\t                }\n\t                else if (ch === 0x2A) {\n\t                    this.index += 2;\n\t                    var comment = this.skipMultiLineComment();\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else if (start && ch === 0x2D) {\n\t                // U+003E is '>'\n\t                if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {\n\t                    // '-->' is a single-line comment\n\t                    this.index += 3;\n\t                    var comment = this.skipSingleLineComment(3);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else if (ch === 0x3C && !this.isModule) {\n\t                if (this.source.slice(this.index + 1, this.index + 4) === '!--') {\n\t                    this.index += 4; // `<!--`\n\t                    var comment = this.skipSingleLineComment(4);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return comments;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-future-reserved-words\n\t    Scanner.prototype.isFutureReservedWord = function (id) {\n\t        switch (id) {\n\t            case 'enum':\n\t            case 'export':\n\t            case 'import':\n\t            case 'super':\n\t                return true;\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.isStrictModeReservedWord = function (id) {\n\t        switch (id) {\n\t            case 'implements':\n\t            case 'interface':\n\t            case 'package':\n\t            case 'private':\n\t            case 'protected':\n\t            case 'public':\n\t            case 'static':\n\t            case 'yield':\n\t            case 'let':\n\t                return true;\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.isRestrictedWord = function (id) {\n\t        return id === 'eval' || id === 'arguments';\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-keywords\n\t    Scanner.prototype.isKeyword = function (id) {\n\t        switch (id.length) {\n\t            case 2:\n\t                return (id === 'if') || (id === 'in') || (id === 'do');\n\t            case 3:\n\t                return (id === 'var') || (id === 'for') || (id === 'new') ||\n\t                    (id === 'try') || (id === 'let');\n\t            case 4:\n\t                return (id === 'this') || (id === 'else') || (id === 'case') ||\n\t                    (id === 'void') || (id === 'with') || (id === 'enum');\n\t            case 5:\n\t                return (id === 'while') || (id === 'break') || (id === 'catch') ||\n\t                    (id === 'throw') || (id === 'const') || (id === 'yield') ||\n\t                    (id === 'class') || (id === 'super');\n\t            case 6:\n\t                return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n\t                    (id === 'switch') || (id === 'export') || (id === 'import');\n\t            case 7:\n\t                return (id === 'default') || (id === 'finally') || (id === 'extends');\n\t            case 8:\n\t                return (id === 'function') || (id === 'continue') || (id === 'debugger');\n\t            case 10:\n\t                return (id === 'instanceof');\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.codePointAt = function (i) {\n\t        var cp = this.source.charCodeAt(i);\n\t        if (cp >= 0xD800 && cp <= 0xDBFF) {\n\t            var second = this.source.charCodeAt(i + 1);\n\t            if (second >= 0xDC00 && second <= 0xDFFF) {\n\t                var first = cp;\n\t                cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t            }\n\t        }\n\t        return cp;\n\t    };\n\t    Scanner.prototype.scanHexEscape = function (prefix) {\n\t        var len = (prefix === 'u') ? 4 : 2;\n\t        var code = 0;\n\t        for (var i = 0; i < len; ++i) {\n\t            if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t                code = code * 16 + hexValue(this.source[this.index++]);\n\t            }\n\t            else {\n\t                return null;\n\t            }\n\t        }\n\t        return String.fromCharCode(code);\n\t    };\n\t    Scanner.prototype.scanUnicodeCodePointEscape = function () {\n\t        var ch = this.source[this.index];\n\t        var code = 0;\n\t        // At least, one hex digit is required.\n\t        if (ch === '}') {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index++];\n\t            if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            code = code * 16 + hexValue(ch);\n\t        }\n\t        if (code > 0x10FFFF || ch !== '}') {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return character_1.Character.fromCodePoint(code);\n\t    };\n\t    Scanner.prototype.getIdentifier = function () {\n\t        var start = this.index++;\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (ch === 0x5C) {\n\t                // Blackslash (U+005C) marks Unicode escape sequence.\n\t                this.index = start;\n\t                return this.getComplexIdentifier();\n\t            }\n\t            else if (ch >= 0xD800 && ch < 0xDFFF) {\n\t                // Need to handle surrogate pairs.\n\t                this.index = start;\n\t                return this.getComplexIdentifier();\n\t            }\n\t            if (character_1.Character.isIdentifierPart(ch)) {\n\t                ++this.index;\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return this.source.slice(start, this.index);\n\t    };\n\t    Scanner.prototype.getComplexIdentifier = function () {\n\t        var cp = this.codePointAt(this.index);\n\t        var id = character_1.Character.fromCodePoint(cp);\n\t        this.index += id.length;\n\t        // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t        var ch;\n\t        if (cp === 0x5C) {\n\t            if (this.source.charCodeAt(this.index) !== 0x75) {\n\t                this.throwUnexpectedToken();\n\t            }\n\t            ++this.index;\n\t            if (this.source[this.index] === '{') {\n\t                ++this.index;\n\t                ch = this.scanUnicodeCodePointEscape();\n\t            }\n\t            else {\n\t                ch = this.scanHexEscape('u');\n\t                if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {\n\t                    this.throwUnexpectedToken();\n\t                }\n\t            }\n\t            id = ch;\n\t        }\n\t        while (!this.eof()) {\n\t            cp = this.codePointAt(this.index);\n\t            if (!character_1.Character.isIdentifierPart(cp)) {\n\t                break;\n\t            }\n\t            ch = character_1.Character.fromCodePoint(cp);\n\t            id += ch;\n\t            this.index += ch.length;\n\t            // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t            if (cp === 0x5C) {\n\t                id = id.substr(0, id.length - 1);\n\t                if (this.source.charCodeAt(this.index) !== 0x75) {\n\t                    this.throwUnexpectedToken();\n\t                }\n\t                ++this.index;\n\t                if (this.source[this.index] === '{') {\n\t                    ++this.index;\n\t                    ch = this.scanUnicodeCodePointEscape();\n\t                }\n\t                else {\n\t                    ch = this.scanHexEscape('u');\n\t                    if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t                        this.throwUnexpectedToken();\n\t                    }\n\t                }\n\t                id += ch;\n\t            }\n\t        }\n\t        return id;\n\t    };\n\t    Scanner.prototype.octalToDecimal = function (ch) {\n\t        // \\0 is not octal escape sequence\n\t        var octal = (ch !== '0');\n\t        var code = octalValue(ch);\n\t        if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t            octal = true;\n\t            code = code * 8 + octalValue(this.source[this.index++]);\n\t            // 3 digits are only allowed when string starts\n\t            // with 0, 1, 2, 3\n\t            if ('0123'.indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t                code = code * 8 + octalValue(this.source[this.index++]);\n\t            }\n\t        }\n\t        return {\n\t            code: code,\n\t            octal: octal\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t    Scanner.prototype.scanIdentifier = function () {\n\t        var type;\n\t        var start = this.index;\n\t        // Backslash (U+005C) starts an escaped character.\n\t        var id = (this.source.charCodeAt(start) === 0x5C) ? this.getComplexIdentifier() : this.getIdentifier();\n\t        // There is no keyword or literal with only one character.\n\t        // Thus, it must be an identifier.\n\t        if (id.length === 1) {\n\t            type = 3 /* Identifier */;\n\t        }\n\t        else if (this.isKeyword(id)) {\n\t            type = 4 /* Keyword */;\n\t        }\n\t        else if (id === 'null') {\n\t            type = 5 /* NullLiteral */;\n\t        }\n\t        else if (id === 'true' || id === 'false') {\n\t            type = 1 /* BooleanLiteral */;\n\t        }\n\t        else {\n\t            type = 3 /* Identifier */;\n\t        }\n\t        if (type !== 3 /* Identifier */ && (start + id.length !== this.index)) {\n\t            var restore = this.index;\n\t            this.index = start;\n\t            this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);\n\t            this.index = restore;\n\t        }\n\t        return {\n\t            type: type,\n\t            value: id,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-punctuators\n\t    Scanner.prototype.scanPunctuator = function () {\n\t        var start = this.index;\n\t        // Check for most common single-character punctuators.\n\t        var str = this.source[this.index];\n\t        switch (str) {\n\t            case '(':\n\t            case '{':\n\t                if (str === '{') {\n\t                    this.curlyStack.push('{');\n\t                }\n\t                ++this.index;\n\t                break;\n\t            case '.':\n\t                ++this.index;\n\t                if (this.source[this.index] === '.' && this.source[this.index + 1] === '.') {\n\t                    // Spread operator: ...\n\t                    this.index += 2;\n\t                    str = '...';\n\t                }\n\t                break;\n\t            case '}':\n\t                ++this.index;\n\t                this.curlyStack.pop();\n\t                break;\n\t            case ')':\n\t            case ';':\n\t            case ',':\n\t            case '[':\n\t            case ']':\n\t            case ':':\n\t            case '?':\n\t            case '~':\n\t                ++this.index;\n\t                break;\n\t            default:\n\t                // 4-character punctuator.\n\t                str = this.source.substr(this.index, 4);\n\t                if (str === '>>>=') {\n\t                    this.index += 4;\n\t                }\n\t                else {\n\t                    // 3-character punctuators.\n\t                    str = str.substr(0, 3);\n\t                    if (str === '===' || str === '!==' || str === '>>>' ||\n\t                        str === '<<=' || str === '>>=' || str === '**=') {\n\t                        this.index += 3;\n\t                    }\n\t                    else {\n\t                        // 2-character punctuators.\n\t                        str = str.substr(0, 2);\n\t                        if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n\t                            str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n\t                            str === '++' || str === '--' || str === '<<' || str === '>>' ||\n\t                            str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n\t                            str === '<=' || str === '>=' || str === '=>' || str === '**') {\n\t                            this.index += 2;\n\t                        }\n\t                        else {\n\t                            // 1-character punctuators.\n\t                            str = this.source[this.index];\n\t                            if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n\t                                ++this.index;\n\t                            }\n\t                        }\n\t                    }\n\t                }\n\t        }\n\t        if (this.index === start) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 7 /* Punctuator */,\n\t            value: str,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t    Scanner.prototype.scanHexLiteral = function (start) {\n\t        var num = '';\n\t        while (!this.eof()) {\n\t            if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (num.length === 0) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt('0x' + num, 16),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.scanBinaryLiteral = function (start) {\n\t        var num = '';\n\t        var ch;\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index];\n\t            if (ch !== '0' && ch !== '1') {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (num.length === 0) {\n\t            // only 0b or 0B\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (!this.eof()) {\n\t            ch = this.source.charCodeAt(this.index);\n\t            /* istanbul ignore else */\n\t            if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {\n\t                this.throwUnexpectedToken();\n\t            }\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt(num, 2),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.scanOctalLiteral = function (prefix, start) {\n\t        var num = '';\n\t        var octal = false;\n\t        if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {\n\t            octal = true;\n\t            num = '0' + this.source[this.index++];\n\t        }\n\t        else {\n\t            ++this.index;\n\t        }\n\t        while (!this.eof()) {\n\t            if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (!octal && num.length === 0) {\n\t            // only 0o or 0O\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt(num, 8),\n\t            octal: octal,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.isImplicitOctalLiteral = function () {\n\t        // Implicit octal, unless there is a non-octal digit.\n\t        // (Annex B.1.1 on Numeric Literals)\n\t        for (var i = this.index + 1; i < this.length; ++i) {\n\t            var ch = this.source[i];\n\t            if (ch === '8' || ch === '9') {\n\t                return false;\n\t            }\n\t            if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                return true;\n\t            }\n\t        }\n\t        return true;\n\t    };\n\t    Scanner.prototype.scanNumericLiteral = function () {\n\t        var start = this.index;\n\t        var ch = this.source[start];\n\t        assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), 'Numeric literal must start with a decimal digit or a decimal point');\n\t        var num = '';\n\t        if (ch !== '.') {\n\t            num = this.source[this.index++];\n\t            ch = this.source[this.index];\n\t            // Hex number starts with '0x'.\n\t            // Octal number starts with '0'.\n\t            // Octal number in ES6 starts with '0o'.\n\t            // Binary number in ES6 starts with '0b'.\n\t            if (num === '0') {\n\t                if (ch === 'x' || ch === 'X') {\n\t                    ++this.index;\n\t                    return this.scanHexLiteral(start);\n\t                }\n\t                if (ch === 'b' || ch === 'B') {\n\t                    ++this.index;\n\t                    return this.scanBinaryLiteral(start);\n\t                }\n\t                if (ch === 'o' || ch === 'O') {\n\t                    return this.scanOctalLiteral(ch, start);\n\t                }\n\t                if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                    if (this.isImplicitOctalLiteral()) {\n\t                        return this.scanOctalLiteral(ch, start);\n\t                    }\n\t                }\n\t            }\n\t            while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                num += this.source[this.index++];\n\t            }\n\t            ch = this.source[this.index];\n\t        }\n\t        if (ch === '.') {\n\t            num += this.source[this.index++];\n\t            while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                num += this.source[this.index++];\n\t            }\n\t            ch = this.source[this.index];\n\t        }\n\t        if (ch === 'e' || ch === 'E') {\n\t            num += this.source[this.index++];\n\t            ch = this.source[this.index];\n\t            if (ch === '+' || ch === '-') {\n\t                num += this.source[this.index++];\n\t            }\n\t            if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                    num += this.source[this.index++];\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken();\n\t            }\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseFloat(num),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-string-literals\n\t    Scanner.prototype.scanStringLiteral = function () {\n\t        var start = this.index;\n\t        var quote = this.source[start];\n\t        assert_1.assert((quote === '\\'' || quote === '\"'), 'String literal must starts with a quote');\n\t        ++this.index;\n\t        var octal = false;\n\t        var str = '';\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index++];\n\t            if (ch === quote) {\n\t                quote = '';\n\t                break;\n\t            }\n\t            else if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    switch (ch) {\n\t                        case 'u':\n\t                            if (this.source[this.index] === '{') {\n\t                                ++this.index;\n\t                                str += this.scanUnicodeCodePointEscape();\n\t                            }\n\t                            else {\n\t                                var unescaped_1 = this.scanHexEscape(ch);\n\t                                if (unescaped_1 === null) {\n\t                                    this.throwUnexpectedToken();\n\t                                }\n\t                                str += unescaped_1;\n\t                            }\n\t                            break;\n\t                        case 'x':\n\t                            var unescaped = this.scanHexEscape(ch);\n\t                            if (unescaped === null) {\n\t                                this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t                            }\n\t                            str += unescaped;\n\t                            break;\n\t                        case 'n':\n\t                            str += '\\n';\n\t                            break;\n\t                        case 'r':\n\t                            str += '\\r';\n\t                            break;\n\t                        case 't':\n\t                            str += '\\t';\n\t                            break;\n\t                        case 'b':\n\t                            str += '\\b';\n\t                            break;\n\t                        case 'f':\n\t                            str += '\\f';\n\t                            break;\n\t                        case 'v':\n\t                            str += '\\x0B';\n\t                            break;\n\t                        case '8':\n\t                        case '9':\n\t                            str += ch;\n\t                            this.tolerateUnexpectedToken();\n\t                            break;\n\t                        default:\n\t                            if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                                var octToDec = this.octalToDecimal(ch);\n\t                                octal = octToDec.octal || octal;\n\t                                str += String.fromCharCode(octToDec.code);\n\t                            }\n\t                            else {\n\t                                str += ch;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t                else {\n\t                    ++this.lineNumber;\n\t                    if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                        ++this.index;\n\t                    }\n\t                    this.lineStart = this.index;\n\t                }\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            else {\n\t                str += ch;\n\t            }\n\t        }\n\t        if (quote !== '') {\n\t            this.index = start;\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 8 /* StringLiteral */,\n\t            value: str,\n\t            octal: octal,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n\t    Scanner.prototype.scanTemplate = function () {\n\t        var cooked = '';\n\t        var terminated = false;\n\t        var start = this.index;\n\t        var head = (this.source[start] === '`');\n\t        var tail = false;\n\t        var rawOffset = 2;\n\t        ++this.index;\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index++];\n\t            if (ch === '`') {\n\t                rawOffset = 1;\n\t                tail = true;\n\t                terminated = true;\n\t                break;\n\t            }\n\t            else if (ch === '$') {\n\t                if (this.source[this.index] === '{') {\n\t                    this.curlyStack.push('${');\n\t                    ++this.index;\n\t                    terminated = true;\n\t                    break;\n\t                }\n\t                cooked += ch;\n\t            }\n\t            else if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    switch (ch) {\n\t                        case 'n':\n\t                            cooked += '\\n';\n\t                            break;\n\t                        case 'r':\n\t                            cooked += '\\r';\n\t                            break;\n\t                        case 't':\n\t                            cooked += '\\t';\n\t                            break;\n\t                        case 'u':\n\t                            if (this.source[this.index] === '{') {\n\t                                ++this.index;\n\t                                cooked += this.scanUnicodeCodePointEscape();\n\t                            }\n\t                            else {\n\t                                var restore = this.index;\n\t                                var unescaped_2 = this.scanHexEscape(ch);\n\t                                if (unescaped_2 !== null) {\n\t                                    cooked += unescaped_2;\n\t                                }\n\t                                else {\n\t                                    this.index = restore;\n\t                                    cooked += ch;\n\t                                }\n\t                            }\n\t                            break;\n\t                        case 'x':\n\t                            var unescaped = this.scanHexEscape(ch);\n\t                            if (unescaped === null) {\n\t                                this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t                            }\n\t                            cooked += unescaped;\n\t                            break;\n\t                        case 'b':\n\t                            cooked += '\\b';\n\t                            break;\n\t                        case 'f':\n\t                            cooked += '\\f';\n\t                            break;\n\t                        case 'v':\n\t                            cooked += '\\v';\n\t                            break;\n\t                        default:\n\t                            if (ch === '0') {\n\t                                if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                                    // Illegal: \\01 \\02 and so on\n\t                                    this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t                                }\n\t                                cooked += '\\0';\n\t                            }\n\t                            else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                                // Illegal: \\1 \\2\n\t                                this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t                            }\n\t                            else {\n\t                                cooked += ch;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t                else {\n\t                    ++this.lineNumber;\n\t                    if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                        ++this.index;\n\t                    }\n\t                    this.lineStart = this.index;\n\t                }\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                ++this.lineNumber;\n\t                if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                    ++this.index;\n\t                }\n\t                this.lineStart = this.index;\n\t                cooked += '\\n';\n\t            }\n\t            else {\n\t                cooked += ch;\n\t            }\n\t        }\n\t        if (!terminated) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (!head) {\n\t            this.curlyStack.pop();\n\t        }\n\t        return {\n\t            type: 10 /* Template */,\n\t            value: this.source.slice(start + 1, this.index - rawOffset),\n\t            cooked: cooked,\n\t            head: head,\n\t            tail: tail,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t    Scanner.prototype.testRegExp = function (pattern, flags) {\n\t        // The BMP character to use as a replacement for astral symbols when\n\t        // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n\t        // approximation.\n\t        // Note: replacing with '\\uFFFF' enables false positives in unlikely\n\t        // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n\t        // pattern that would not be detected by this substitution.\n\t        var astralSubstitute = '\\uFFFF';\n\t        var tmp = pattern;\n\t        var self = this;\n\t        if (flags.indexOf('u') >= 0) {\n\t            tmp = tmp\n\t                .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n\t                var codePoint = parseInt($1 || $2, 16);\n\t                if (codePoint > 0x10FFFF) {\n\t                    self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t                }\n\t                if (codePoint <= 0xFFFF) {\n\t                    return String.fromCharCode(codePoint);\n\t                }\n\t                return astralSubstitute;\n\t            })\n\t                .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, astralSubstitute);\n\t        }\n\t        // First, detect invalid regular expressions.\n\t        try {\n\t            RegExp(tmp);\n\t        }\n\t        catch (e) {\n\t            this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t        }\n\t        // Return a regular expression object for this pattern-flag pair, or\n\t        // `null` in case the current environment doesn't support the flags it\n\t        // uses.\n\t        try {\n\t            return new RegExp(pattern, flags);\n\t        }\n\t        catch (exception) {\n\t            /* istanbul ignore next */\n\t            return null;\n\t        }\n\t    };\n\t    Scanner.prototype.scanRegExpBody = function () {\n\t        var ch = this.source[this.index];\n\t        assert_1.assert(ch === '/', 'Regular expression literal must start with a slash');\n\t        var str = this.source[this.index++];\n\t        var classMarker = false;\n\t        var terminated = false;\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index++];\n\t            str += ch;\n\t            if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t                if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t                }\n\t                str += ch;\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t            }\n\t            else if (classMarker) {\n\t                if (ch === ']') {\n\t                    classMarker = false;\n\t                }\n\t            }\n\t            else {\n\t                if (ch === '/') {\n\t                    terminated = true;\n\t                    break;\n\t                }\n\t                else if (ch === '[') {\n\t                    classMarker = true;\n\t                }\n\t            }\n\t        }\n\t        if (!terminated) {\n\t            this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t        }\n\t        // Exclude leading and trailing slash.\n\t        return str.substr(1, str.length - 2);\n\t    };\n\t    Scanner.prototype.scanRegExpFlags = function () {\n\t        var str = '';\n\t        var flags = '';\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index];\n\t            if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            ++this.index;\n\t            if (ch === '\\\\' && !this.eof()) {\n\t                ch = this.source[this.index];\n\t                if (ch === 'u') {\n\t                    ++this.index;\n\t                    var restore = this.index;\n\t                    var char = this.scanHexEscape('u');\n\t                    if (char !== null) {\n\t                        flags += char;\n\t                        for (str += '\\\\u'; restore < this.index; ++restore) {\n\t                            str += this.source[restore];\n\t                        }\n\t                    }\n\t                    else {\n\t                        this.index = restore;\n\t                        flags += 'u';\n\t                        str += '\\\\u';\n\t                    }\n\t                    this.tolerateUnexpectedToken();\n\t                }\n\t                else {\n\t                    str += '\\\\';\n\t                    this.tolerateUnexpectedToken();\n\t                }\n\t            }\n\t            else {\n\t                flags += ch;\n\t                str += ch;\n\t            }\n\t        }\n\t        return flags;\n\t    };\n\t    Scanner.prototype.scanRegExp = function () {\n\t        var start = this.index;\n\t        var pattern = this.scanRegExpBody();\n\t        var flags = this.scanRegExpFlags();\n\t        var value = this.testRegExp(pattern, flags);\n\t        return {\n\t            type: 9 /* RegularExpression */,\n\t            value: '',\n\t            pattern: pattern,\n\t            flags: flags,\n\t            regex: value,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.lex = function () {\n\t        if (this.eof()) {\n\t            return {\n\t                type: 2 /* EOF */,\n\t                value: '',\n\t                lineNumber: this.lineNumber,\n\t                lineStart: this.lineStart,\n\t                start: this.index,\n\t                end: this.index\n\t            };\n\t        }\n\t        var cp = this.source.charCodeAt(this.index);\n\t        if (character_1.Character.isIdentifierStart(cp)) {\n\t            return this.scanIdentifier();\n\t        }\n\t        // Very common: ( and ) and ;\n\t        if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n\t            return this.scanPunctuator();\n\t        }\n\t        // String literal starts with single quote (U+0027) or double quote (U+0022).\n\t        if (cp === 0x27 || cp === 0x22) {\n\t            return this.scanStringLiteral();\n\t        }\n\t        // Dot (.) U+002E can also start a floating-point number, hence the need\n\t        // to check the next character.\n\t        if (cp === 0x2E) {\n\t            if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n\t                return this.scanNumericLiteral();\n\t            }\n\t            return this.scanPunctuator();\n\t        }\n\t        if (character_1.Character.isDecimalDigit(cp)) {\n\t            return this.scanNumericLiteral();\n\t        }\n\t        // Template literals start with ` (U+0060) for template head\n\t        // or } (U+007D) for template middle or template tail.\n\t        if (cp === 0x60 || (cp === 0x7D && this.curlyStack[this.curlyStack.length - 1] === '${')) {\n\t            return this.scanTemplate();\n\t        }\n\t        // Possible identifier start in a surrogate pair.\n\t        if (cp >= 0xD800 && cp < 0xDFFF) {\n\t            if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {\n\t                return this.scanIdentifier();\n\t            }\n\t        }\n\t        return this.scanPunctuator();\n\t    };\n\t    return Scanner;\n\t}());\n\texports.Scanner = Scanner;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.TokenName = {};\n\texports.TokenName[1 /* BooleanLiteral */] = 'Boolean';\n\texports.TokenName[2 /* EOF */] = '<end>';\n\texports.TokenName[3 /* Identifier */] = 'Identifier';\n\texports.TokenName[4 /* Keyword */] = 'Keyword';\n\texports.TokenName[5 /* NullLiteral */] = 'Null';\n\texports.TokenName[6 /* NumericLiteral */] = 'Numeric';\n\texports.TokenName[7 /* Punctuator */] = 'Punctuator';\n\texports.TokenName[8 /* StringLiteral */] = 'String';\n\texports.TokenName[9 /* RegularExpression */] = 'RegularExpression';\n\texports.TokenName[10 /* Template */] = 'Template';\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Generated by generate-xhtml-entities.js. DO NOT MODIFY!\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.XHTMLEntities = {\n\t    quot: '\\u0022',\n\t    amp: '\\u0026',\n\t    apos: '\\u0027',\n\t    gt: '\\u003E',\n\t    nbsp: '\\u00A0',\n\t    iexcl: '\\u00A1',\n\t    cent: '\\u00A2',\n\t    pound: '\\u00A3',\n\t    curren: '\\u00A4',\n\t    yen: '\\u00A5',\n\t    brvbar: '\\u00A6',\n\t    sect: '\\u00A7',\n\t    uml: '\\u00A8',\n\t    copy: '\\u00A9',\n\t    ordf: '\\u00AA',\n\t    laquo: '\\u00AB',\n\t    not: '\\u00AC',\n\t    shy: '\\u00AD',\n\t    reg: '\\u00AE',\n\t    macr: '\\u00AF',\n\t    deg: '\\u00B0',\n\t    plusmn: '\\u00B1',\n\t    sup2: '\\u00B2',\n\t    sup3: '\\u00B3',\n\t    acute: '\\u00B4',\n\t    micro: '\\u00B5',\n\t    para: '\\u00B6',\n\t    middot: '\\u00B7',\n\t    cedil: '\\u00B8',\n\t    sup1: '\\u00B9',\n\t    ordm: '\\u00BA',\n\t    raquo: '\\u00BB',\n\t    frac14: '\\u00BC',\n\t    frac12: '\\u00BD',\n\t    frac34: '\\u00BE',\n\t    iquest: '\\u00BF',\n\t    Agrave: '\\u00C0',\n\t    Aacute: '\\u00C1',\n\t    Acirc: '\\u00C2',\n\t    Atilde: '\\u00C3',\n\t    Auml: '\\u00C4',\n\t    Aring: '\\u00C5',\n\t    AElig: '\\u00C6',\n\t    Ccedil: '\\u00C7',\n\t    Egrave: '\\u00C8',\n\t    Eacute: '\\u00C9',\n\t    Ecirc: '\\u00CA',\n\t    Euml: '\\u00CB',\n\t    Igrave: '\\u00CC',\n\t    Iacute: '\\u00CD',\n\t    Icirc: '\\u00CE',\n\t    Iuml: '\\u00CF',\n\t    ETH: '\\u00D0',\n\t    Ntilde: '\\u00D1',\n\t    Ograve: '\\u00D2',\n\t    Oacute: '\\u00D3',\n\t    Ocirc: '\\u00D4',\n\t    Otilde: '\\u00D5',\n\t    Ouml: '\\u00D6',\n\t    times: '\\u00D7',\n\t    Oslash: '\\u00D8',\n\t    Ugrave: '\\u00D9',\n\t    Uacute: '\\u00DA',\n\t    Ucirc: '\\u00DB',\n\t    Uuml: '\\u00DC',\n\t    Yacute: '\\u00DD',\n\t    THORN: '\\u00DE',\n\t    szlig: '\\u00DF',\n\t    agrave: '\\u00E0',\n\t    aacute: '\\u00E1',\n\t    acirc: '\\u00E2',\n\t    atilde: '\\u00E3',\n\t    auml: '\\u00E4',\n\t    aring: '\\u00E5',\n\t    aelig: '\\u00E6',\n\t    ccedil: '\\u00E7',\n\t    egrave: '\\u00E8',\n\t    eacute: '\\u00E9',\n\t    ecirc: '\\u00EA',\n\t    euml: '\\u00EB',\n\t    igrave: '\\u00EC',\n\t    iacute: '\\u00ED',\n\t    icirc: '\\u00EE',\n\t    iuml: '\\u00EF',\n\t    eth: '\\u00F0',\n\t    ntilde: '\\u00F1',\n\t    ograve: '\\u00F2',\n\t    oacute: '\\u00F3',\n\t    ocirc: '\\u00F4',\n\t    otilde: '\\u00F5',\n\t    ouml: '\\u00F6',\n\t    divide: '\\u00F7',\n\t    oslash: '\\u00F8',\n\t    ugrave: '\\u00F9',\n\t    uacute: '\\u00FA',\n\t    ucirc: '\\u00FB',\n\t    uuml: '\\u00FC',\n\t    yacute: '\\u00FD',\n\t    thorn: '\\u00FE',\n\t    yuml: '\\u00FF',\n\t    OElig: '\\u0152',\n\t    oelig: '\\u0153',\n\t    Scaron: '\\u0160',\n\t    scaron: '\\u0161',\n\t    Yuml: '\\u0178',\n\t    fnof: '\\u0192',\n\t    circ: '\\u02C6',\n\t    tilde: '\\u02DC',\n\t    Alpha: '\\u0391',\n\t    Beta: '\\u0392',\n\t    Gamma: '\\u0393',\n\t    Delta: '\\u0394',\n\t    Epsilon: '\\u0395',\n\t    Zeta: '\\u0396',\n\t    Eta: '\\u0397',\n\t    Theta: '\\u0398',\n\t    Iota: '\\u0399',\n\t    Kappa: '\\u039A',\n\t    Lambda: '\\u039B',\n\t    Mu: '\\u039C',\n\t    Nu: '\\u039D',\n\t    Xi: '\\u039E',\n\t    Omicron: '\\u039F',\n\t    Pi: '\\u03A0',\n\t    Rho: '\\u03A1',\n\t    Sigma: '\\u03A3',\n\t    Tau: '\\u03A4',\n\t    Upsilon: '\\u03A5',\n\t    Phi: '\\u03A6',\n\t    Chi: '\\u03A7',\n\t    Psi: '\\u03A8',\n\t    Omega: '\\u03A9',\n\t    alpha: '\\u03B1',\n\t    beta: '\\u03B2',\n\t    gamma: '\\u03B3',\n\t    delta: '\\u03B4',\n\t    epsilon: '\\u03B5',\n\t    zeta: '\\u03B6',\n\t    eta: '\\u03B7',\n\t    theta: '\\u03B8',\n\t    iota: '\\u03B9',\n\t    kappa: '\\u03BA',\n\t    lambda: '\\u03BB',\n\t    mu: '\\u03BC',\n\t    nu: '\\u03BD',\n\t    xi: '\\u03BE',\n\t    omicron: '\\u03BF',\n\t    pi: '\\u03C0',\n\t    rho: '\\u03C1',\n\t    sigmaf: '\\u03C2',\n\t    sigma: '\\u03C3',\n\t    tau: '\\u03C4',\n\t    upsilon: '\\u03C5',\n\t    phi: '\\u03C6',\n\t    chi: '\\u03C7',\n\t    psi: '\\u03C8',\n\t    omega: '\\u03C9',\n\t    thetasym: '\\u03D1',\n\t    upsih: '\\u03D2',\n\t    piv: '\\u03D6',\n\t    ensp: '\\u2002',\n\t    emsp: '\\u2003',\n\t    thinsp: '\\u2009',\n\t    zwnj: '\\u200C',\n\t    zwj: '\\u200D',\n\t    lrm: '\\u200E',\n\t    rlm: '\\u200F',\n\t    ndash: '\\u2013',\n\t    mdash: '\\u2014',\n\t    lsquo: '\\u2018',\n\t    rsquo: '\\u2019',\n\t    sbquo: '\\u201A',\n\t    ldquo: '\\u201C',\n\t    rdquo: '\\u201D',\n\t    bdquo: '\\u201E',\n\t    dagger: '\\u2020',\n\t    Dagger: '\\u2021',\n\t    bull: '\\u2022',\n\t    hellip: '\\u2026',\n\t    permil: '\\u2030',\n\t    prime: '\\u2032',\n\t    Prime: '\\u2033',\n\t    lsaquo: '\\u2039',\n\t    rsaquo: '\\u203A',\n\t    oline: '\\u203E',\n\t    frasl: '\\u2044',\n\t    euro: '\\u20AC',\n\t    image: '\\u2111',\n\t    weierp: '\\u2118',\n\t    real: '\\u211C',\n\t    trade: '\\u2122',\n\t    alefsym: '\\u2135',\n\t    larr: '\\u2190',\n\t    uarr: '\\u2191',\n\t    rarr: '\\u2192',\n\t    darr: '\\u2193',\n\t    harr: '\\u2194',\n\t    crarr: '\\u21B5',\n\t    lArr: '\\u21D0',\n\t    uArr: '\\u21D1',\n\t    rArr: '\\u21D2',\n\t    dArr: '\\u21D3',\n\t    hArr: '\\u21D4',\n\t    forall: '\\u2200',\n\t    part: '\\u2202',\n\t    exist: '\\u2203',\n\t    empty: '\\u2205',\n\t    nabla: '\\u2207',\n\t    isin: '\\u2208',\n\t    notin: '\\u2209',\n\t    ni: '\\u220B',\n\t    prod: '\\u220F',\n\t    sum: '\\u2211',\n\t    minus: '\\u2212',\n\t    lowast: '\\u2217',\n\t    radic: '\\u221A',\n\t    prop: '\\u221D',\n\t    infin: '\\u221E',\n\t    ang: '\\u2220',\n\t    and: '\\u2227',\n\t    or: '\\u2228',\n\t    cap: '\\u2229',\n\t    cup: '\\u222A',\n\t    int: '\\u222B',\n\t    there4: '\\u2234',\n\t    sim: '\\u223C',\n\t    cong: '\\u2245',\n\t    asymp: '\\u2248',\n\t    ne: '\\u2260',\n\t    equiv: '\\u2261',\n\t    le: '\\u2264',\n\t    ge: '\\u2265',\n\t    sub: '\\u2282',\n\t    sup: '\\u2283',\n\t    nsub: '\\u2284',\n\t    sube: '\\u2286',\n\t    supe: '\\u2287',\n\t    oplus: '\\u2295',\n\t    otimes: '\\u2297',\n\t    perp: '\\u22A5',\n\t    sdot: '\\u22C5',\n\t    lceil: '\\u2308',\n\t    rceil: '\\u2309',\n\t    lfloor: '\\u230A',\n\t    rfloor: '\\u230B',\n\t    loz: '\\u25CA',\n\t    spades: '\\u2660',\n\t    clubs: '\\u2663',\n\t    hearts: '\\u2665',\n\t    diams: '\\u2666',\n\t    lang: '\\u27E8',\n\t    rang: '\\u27E9'\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar token_1 = __webpack_require__(13);\n\tvar Reader = (function () {\n\t    function Reader() {\n\t        this.values = [];\n\t        this.curly = this.paren = -1;\n\t    }\n\t    // A function following one of those tokens is an expression.\n\t    Reader.prototype.beforeFunctionExpression = function (t) {\n\t        return ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n\t            'return', 'case', 'delete', 'throw', 'void',\n\t            // assignment operators\n\t            '=', '+=', '-=', '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=',\n\t            '&=', '|=', '^=', ',',\n\t            // binary/unary operators\n\t            '+', '-', '*', '**', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n\t            '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n\t            '<=', '<', '>', '!=', '!=='].indexOf(t) >= 0;\n\t    };\n\t    // Determine if forward slash (/) is an operator or part of a regular expression\n\t    // https://github.com/mozilla/sweet.js/wiki/design\n\t    Reader.prototype.isRegexStart = function () {\n\t        var previous = this.values[this.values.length - 1];\n\t        var regex = (previous !== null);\n\t        switch (previous) {\n\t            case 'this':\n\t            case ']':\n\t                regex = false;\n\t                break;\n\t            case ')':\n\t                var keyword = this.values[this.paren - 1];\n\t                regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');\n\t                break;\n\t            case '}':\n\t                // Dividing a function by anything makes little sense,\n\t                // but we have to check for that.\n\t                regex = false;\n\t                if (this.values[this.curly - 3] === 'function') {\n\t                    // Anonymous function, e.g. function(){} /42\n\t                    var check = this.values[this.curly - 4];\n\t                    regex = check ? !this.beforeFunctionExpression(check) : false;\n\t                }\n\t                else if (this.values[this.curly - 4] === 'function') {\n\t                    // Named function, e.g. function f(){} /42/\n\t                    var check = this.values[this.curly - 5];\n\t                    regex = check ? !this.beforeFunctionExpression(check) : true;\n\t                }\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        return regex;\n\t    };\n\t    Reader.prototype.push = function (token) {\n\t        if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n\t            if (token.value === '{') {\n\t                this.curly = this.values.length;\n\t            }\n\t            else if (token.value === '(') {\n\t                this.paren = this.values.length;\n\t            }\n\t            this.values.push(token.value);\n\t        }\n\t        else {\n\t            this.values.push(null);\n\t        }\n\t    };\n\t    return Reader;\n\t}());\n\tvar Tokenizer = (function () {\n\t    function Tokenizer(code, config) {\n\t        this.errorHandler = new error_handler_1.ErrorHandler();\n\t        this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;\n\t        this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t        this.scanner.trackComment = config ? (typeof config.comment === 'boolean' && config.comment) : false;\n\t        this.trackRange = config ? (typeof config.range === 'boolean' && config.range) : false;\n\t        this.trackLoc = config ? (typeof config.loc === 'boolean' && config.loc) : false;\n\t        this.buffer = [];\n\t        this.reader = new Reader();\n\t    }\n\t    Tokenizer.prototype.errors = function () {\n\t        return this.errorHandler.errors;\n\t    };\n\t    Tokenizer.prototype.getNextToken = function () {\n\t        if (this.buffer.length === 0) {\n\t            var comments = this.scanner.scanComments();\n\t            if (this.scanner.trackComment) {\n\t                for (var i = 0; i < comments.length; ++i) {\n\t                    var e = comments[i];\n\t                    var value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n\t                    var comment = {\n\t                        type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t                        value: value\n\t                    };\n\t                    if (this.trackRange) {\n\t                        comment.range = e.range;\n\t                    }\n\t                    if (this.trackLoc) {\n\t                        comment.loc = e.loc;\n\t                    }\n\t                    this.buffer.push(comment);\n\t                }\n\t            }\n\t            if (!this.scanner.eof()) {\n\t                var loc = void 0;\n\t                if (this.trackLoc) {\n\t                    loc = {\n\t                        start: {\n\t                            line: this.scanner.lineNumber,\n\t                            column: this.scanner.index - this.scanner.lineStart\n\t                        },\n\t                        end: {}\n\t                    };\n\t                }\n\t                var startRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();\n\t                var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();\n\t                this.reader.push(token);\n\t                var entry = {\n\t                    type: token_1.TokenName[token.type],\n\t                    value: this.scanner.source.slice(token.start, token.end)\n\t                };\n\t                if (this.trackRange) {\n\t                    entry.range = [token.start, token.end];\n\t                }\n\t                if (this.trackLoc) {\n\t                    loc.end = {\n\t                        line: this.scanner.lineNumber,\n\t                        column: this.scanner.index - this.scanner.lineStart\n\t                    };\n\t                    entry.loc = loc;\n\t                }\n\t                if (token.type === 9 /* RegularExpression */) {\n\t                    var pattern = token.pattern;\n\t                    var flags = token.flags;\n\t                    entry.regex = { pattern: pattern, flags: flags };\n\t                }\n\t                this.buffer.push(entry);\n\t            }\n\t        }\n\t        return this.buffer.shift();\n\t    };\n\t    return Tokenizer;\n\t}());\n\texports.Tokenizer = Tokenizer;\n\n\n/***/ }\n/******/ ])\n});\n;", "/**\n * Default minimum size of a run.\n */\nconst DEFAULT_MIN_MERGE = 32\n\n/**\n * Minimum ordered subsequece required to do galloping.\n */\nconst DEFAULT_MIN_GALLOPING = 7\n\n/**\n * Default tmp storage length. Can increase depending on the size of the\n * smallest run to merge.\n */\nconst DEFAULT_TMP_STORAGE_LENGTH = 256\n\n/**\n * Pre-computed powers of 10 for efficient lexicographic comparison of\n * small integers.\n */\nconst POWERS_OF_TEN = [1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9]\n\nlet results\n\n/**\n * Estimate the logarithm base 10 of a small integer.\n *\n * @param {number} x - The integer to estimate the logarithm of.\n * @return {number} - The estimated logarithm of the integer.\n */\nconst log10 = x => x < 1e5\n  ? x < 1e2\n    ? x < 1e1\n      ? 0\n      : 1\n    : x < 1e4\n      ? x < 1e3\n        ? 2\n        : 3\n      : 4\n  : x < 1e7\n    ? x < 1e6\n      ? 5\n      : 6\n    : x < 1e9\n      ? x < 1e8\n        ? 7\n        : 8\n      : 9\n\n/**\n * Default alphabetical comparison of items.\n *\n * @param {string|object|number} a - First element to compare.\n * @param {string|object|number} b - Second element to compare.\n * @return {number} - A positive number if a.toString() > b.toString(), a\n * negative number if .toString() < b.toString(), 0 otherwise.\n */\nfunction alphabeticalCompare (a, b) {\n  if (a === b) {\n    return 0\n  }\n\n  if (~ ~ a === a && ~ ~ b === b) {\n    if (a === 0 || b === 0) {\n      return a < b ? - 1 : 1\n    }\n\n    if (a < 0 || b < 0) {\n      if (b >= 0) {\n        return - 1\n      }\n\n      if (a >= 0) {\n        return 1\n      }\n\n      a = - a\n      b = - b\n    }\n\n    const al = log10(a)\n    const bl = log10(b)\n\n    let t = 0\n\n    if (al < bl) {\n      a *= POWERS_OF_TEN[bl - al - 1]\n      b /= 10\n      t = - 1\n    } else if (al > bl) {\n      b *= POWERS_OF_TEN[al - bl - 1]\n      a /= 10\n      t = 1\n    }\n\n    if (a === b) {\n      return t\n    }\n\n    return a < b ? - 1 : 1\n  }\n\n  const aStr = String(a)\n  const bStr = String(b)\n\n  if (aStr === bStr) {\n    return 0\n  }\n\n  return aStr < bStr ? - 1 : 1\n}\n\n/**\n * Compute minimum run length for TimSort\n *\n * @param {number} n - The size of the array to sort.\n */\nfunction minRunLength (n) {\n  let r = 0\n\n  while (n >= DEFAULT_MIN_MERGE) {\n    r |= (n & 1)\n    n >>= 1\n  }\n\n  return n + r\n}\n\n/**\n * Counts the length of a monotonically ascending or strictly monotonically\n * descending sequence (run) starting at array[lo] in the range [lo, hi). If\n * the run is descending it is made ascending.\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {function} compare - Item comparison function.\n * @return {number} - The length of the run.\n */\nfunction makeAscendingRun (array, lo, hi, compare) {\n  let runHi = lo + 1\n\n  if (runHi === hi) {\n    return 1\n  }\n\n  // Descending\n  if (compare(array[runHi ++], array[lo]) < 0) {\n    while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n      runHi ++\n    }\n\n    reverseRun(array, lo, runHi)\n    reverseRun(results, lo, runHi)\n    // Ascending\n  } else {\n    while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n      runHi ++\n    }\n  }\n\n  return runHi - lo\n}\n\n/**\n * Reverse an array in the range [lo, hi).\n *\n * @param {array} array - The array to reverse.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n */\nfunction reverseRun (array, lo, hi) {\n  hi --\n\n  while (lo < hi) {\n    const t = array[lo]\n    array[lo ++] = array[hi]\n    array[hi --] = t\n  }\n}\n\n/**\n * Perform the binary sort of the array in the range [lo, hi) where start is\n * the first element possibly out of order.\n *\n * @param {array} array - The array to sort.\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n * @param {number} start - First element possibly out of order.\n * @param {function} compare - Item comparison function.\n */\nfunction binaryInsertionSort (array, lo, hi, start, compare) {\n  if (start === lo) {\n    start ++\n  }\n\n  for (; start < hi; start ++) {\n    const pivot = array[start]\n    const pivotIndex = results[start]\n\n    // Ranges of the array where pivot belongs\n    let left = lo\n    let right = start\n\n    /*\n     *   pivot >= array[i] for i in [lo, left)\n     *   pivot <  array[i] for i in  in [right, start)\n     */\n    while (left < right) {\n      const mid = (left + right) >>> 1\n\n      if (compare(pivot, array[mid]) < 0) {\n        right = mid\n      } else {\n        left = mid + 1\n      }\n    }\n\n    /*\n     * Move elements right to make room for the pivot. If there are elements\n     * equal to pivot, left points to the first slot after them: this is also\n     * a reason for which TimSort is stable\n     */\n    let n = start - left\n    // Switch is just an optimization for small arrays\n    switch (n) {\n    case 3:\n      array[left + 3] = array[left + 2]\n      results[left + 3] = results[left + 2]\n      /* falls through */\n    case 2:\n      array[left + 2] = array[left + 1]\n      results[left + 2] = results[left + 1]\n      /* falls through */\n    case 1:\n      array[left + 1] = array[left]\n      results[left + 1] = results[left]\n      break\n    default:\n      while (n > 0) {\n        array[left + n] = array[left + n - 1]\n        results[left + n] = results[left + n - 1]\n        n --\n      }\n    }\n\n    array[left] = pivot\n    results[left] = pivotIndex\n  }\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the leftmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopLeft (value, array, start, length, hint, compare) {\n  let lastOffset = 0\n  let maxOffset = 0\n  let offset = 1\n\n  if (compare(value, array[start + hint]) > 0) {\n    maxOffset = length - hint\n\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint + offset]) > 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    lastOffset += hint\n    offset += hint\n\n    // value <= array[start + hint]\n  } else {\n    maxOffset = hint + 1\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint - offset]) <= 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    const tmp = lastOffset\n    lastOffset = hint - offset\n    offset = hint - tmp\n  }\n\n  /*\n   * Now array[start+lastOffset] < value <= array[start+offset], so value\n   * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n   * binary search, with invariant array[start + lastOffset - 1] < value <=\n   * array[start + offset].\n   */\n  lastOffset ++\n  while (lastOffset < offset) {\n    const m = lastOffset + ((offset - lastOffset) >>> 1)\n\n    if (compare(value, array[start + m]) > 0) {\n      lastOffset = m + 1\n    } else {\n      offset = m\n    }\n  }\n  return offset\n}\n\n/**\n * Find the position at which to insert a value in a sorted range. If the range\n * contains elements equal to the value the rightmost element index is returned\n * (for stability).\n *\n * @param {number} value - Value to insert.\n * @param {array} array - The array in which to insert value.\n * @param {number} start - First element in the range.\n * @param {number} length - Length of the range.\n * @param {number} hint - The index at which to begin the search.\n * @param {function} compare - Item comparison function.\n * @return {number} - The index where to insert value.\n */\nfunction gallopRight (value, array, start, length, hint, compare) {\n  let lastOffset = 0\n  let maxOffset = 0\n  let offset = 1\n\n  if (compare(value, array[start + hint]) < 0) {\n    maxOffset = hint + 1\n\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint - offset]) < 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    const tmp = lastOffset\n    lastOffset = hint - offset\n    offset = hint - tmp\n\n    // value >= array[start + hint]\n  } else {\n    maxOffset = length - hint\n\n    while (\n      offset < maxOffset\n      && compare(value, array[start + hint + offset]) >= 0\n    ) {\n      lastOffset = offset\n      offset = (offset << 1) + 1\n\n      if (offset <= 0) {\n        offset = maxOffset\n      }\n    }\n\n    if (offset > maxOffset) {\n      offset = maxOffset\n    }\n\n    // Make offsets relative to start\n    lastOffset += hint\n    offset += hint\n  }\n\n  /*\n   * Now array[start+lastOffset] < value <= array[start+offset], so value\n   * belongs somewhere in the range (start + lastOffset, start + offset]. Do a\n   * binary search, with invariant array[start + lastOffset - 1] < value <=\n   * array[start + offset].\n   */\n  lastOffset ++\n\n  while (lastOffset < offset) {\n    const m = lastOffset + ((offset - lastOffset) >>> 1)\n\n    if (compare(value, array[start + m]) < 0) {\n      offset = m\n    } else {\n      lastOffset = m + 1\n    }\n  }\n\n  return offset\n}\n\nclass TimSort {\n  constructor (array, compare) {\n    this.array = array\n    this.compare = compare\n\n    const {length} = array\n\n    this.length = length\n    this.minGallop = DEFAULT_MIN_GALLOPING\n\n    this.tmpStorageLength = length < 2 * DEFAULT_TMP_STORAGE_LENGTH\n      ? length >>> 1\n      : DEFAULT_TMP_STORAGE_LENGTH\n\n    this.tmp = new Array(this.tmpStorageLength)\n    this.tmpIndex = new Array(this.tmpStorageLength)\n\n    this.stackLength = length < 120\n      ? 5\n      : length < 1542\n        ? 10\n        : length < 119151\n          ? 19\n          : 40\n\n    this.runStart = new Array(this.stackLength)\n    this.runLength = new Array(this.stackLength)\n\n    this.stackSize = 0\n  }\n\n  /**\n   * Push a new run on TimSort's stack.\n   *\n   * @param {number} runStart - Start index of the run in the original array.\n   * @param {number} runLength - Length of the run;\n   */\n  pushRun (runStart, runLength) {\n    this.runStart[this.stackSize] = runStart\n    this.runLength[this.stackSize] = runLength\n    this.stackSize += 1\n  }\n\n  /**\n   * Merge runs on TimSort's stack so that the following holds for all i:\n   * 1) runLength[i - 3] > runLength[i - 2] + runLength[i - 1]\n   * 2) runLength[i - 2] > runLength[i - 1]\n   */\n  mergeRuns () {\n    while (this.stackSize > 1) {\n      let n = this.stackSize - 2\n\n      if (\n        (\n          n >= 1\n          && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1]\n        )\n        || (\n          n >= 2\n          && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]\n        )\n      ) {\n        if (this.runLength[n - 1] < this.runLength[n + 1]) {\n          n --\n        }\n      } else if (this.runLength[n] > this.runLength[n + 1]) {\n        break\n      }\n      this.mergeAt(n)\n    }\n  }\n\n  /**\n   * Merge all runs on TimSort's stack until only one remains.\n   */\n  forceMergeRuns () {\n    while (this.stackSize > 1) {\n      let n = this.stackSize - 2\n\n      if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n        n --\n      }\n\n      this.mergeAt(n)\n    }\n  }\n\n  /**\n   * Merge the runs on the stack at positions i and i+1. Must be always be called\n   * with i=stackSize-2 or i=stackSize-3 (that is, we merge on top of the stack).\n   *\n   * @param {number} i - Index of the run to merge in TimSort's stack.\n   */\n  mergeAt (i) {\n    const {compare} = this\n    const {array} = this\n\n    let start1 = this.runStart[i]\n    let length1 = this.runLength[i]\n    const start2 = this.runStart[i + 1]\n    let length2 = this.runLength[i + 1]\n\n    this.runLength[i] = length1 + length2\n\n    if (i === this.stackSize - 3) {\n      this.runStart[i + 1] = this.runStart[i + 2]\n      this.runLength[i + 1] = this.runLength[i + 2]\n    }\n\n    this.stackSize --\n\n    /*\n     * Find where the first element in the second run goes in run1. Previous\n     * elements in run1 are already in place\n     */\n    const k = gallopRight(array[start2], array, start1, length1, 0, compare)\n    start1 += k\n    length1 -= k\n\n    if (length1 === 0) {\n      return\n    }\n\n    /*\n     * Find where the last element in the first run goes in run2. Next elements\n     * in run2 are already in place\n     */\n    length2 = gallopLeft(\n      array[start1 + length1 - 1],\n      array,\n      start2,\n      length2,\n      length2 - 1,\n      compare\n    )\n\n    if (length2 === 0) {\n      return\n    }\n\n    /*\n     * Merge remaining runs. A tmp array with length = min(length1, length2) is\n     * used\n     */\n    if (length1 <= length2) {\n      this.mergeLow(start1, length1, start2, length2)\n    } else {\n      this.mergeHigh(start1, length1, start2, length2)\n    }\n  }\n\n  /**\n   * Merge two adjacent runs in a stable way. The runs must be such that the\n   * first element of run1 is bigger than the first element in run2 and the\n   * last element of run1 is greater than all the elements in run2.\n   * The method should be called when run1.length <= run2.length as it uses\n   * TimSort temporary array to store run1. Use mergeHigh if run1.length >\n   * run2.length.\n   *\n   * @param {number} start1 - First element in run1.\n   * @param {number} length1 - Length of run1.\n   * @param {number} start2 - First element in run2.\n   * @param {number} length2 - Length of run2.\n   */\n  mergeLow (start1, length1, start2, length2) {\n    const {compare} = this\n    const {array} = this\n    const {tmp} = this\n    const {tmpIndex} = this\n    let i = 0\n\n    for (i = 0; i < length1; i ++) {\n      tmp[i] = array[start1 + i]\n      tmpIndex[i] = results[start1 + i]\n    }\n\n    let cursor1 = 0\n    let cursor2 = start2\n    let dest = start1\n\n    array[dest] = array[cursor2]\n    results[dest] = results[cursor2]\n\n    dest ++\n    cursor2 ++\n\n    if (-- length2 === 0) {\n      for (i = 0; i < length1; i ++) {\n        array[dest + i] = tmp[cursor1 + i]\n        results[dest + i] = tmpIndex[cursor1 + i]\n      }\n      return\n    }\n\n    if (length1 === 1) {\n      for (i = 0; i < length2; i ++) {\n        array[dest + i] = array[cursor2 + i]\n        results[dest + i] = results[cursor2 + i]\n      }\n      array[dest + length2] = tmp[cursor1]\n      results[dest + length2] = tmpIndex[cursor1]\n      return\n    }\n\n    let {minGallop} = this\n\n    while (true) {\n      let count1 = 0\n      let count2 = 0\n      let exit = false\n\n      do {\n        if (compare(array[cursor2], tmp[cursor1]) < 0) {\n          array[dest] = array[cursor2]\n          results[dest] = results[cursor2]\n          dest ++\n          cursor2 ++\n          count2 ++\n          count1 = 0\n\n          if (-- length2 === 0) {\n            exit = true\n            break\n          }\n        } else {\n          array[dest] = tmp[cursor1]\n          results[dest] = tmpIndex[cursor1]\n          dest ++\n          cursor1 ++\n          count1 ++\n          count2 = 0\n          if (-- length1 === 1) {\n            exit = true\n            break\n          }\n        }\n      } while ((count1 | count2) < minGallop)\n\n      if (exit) {\n        break\n      }\n\n      do {\n        count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare)\n\n        if (count1 !== 0) {\n          for (i = 0; i < count1; i ++) {\n            array[dest + i] = tmp[cursor1 + i]\n            results[dest + i] = tmpIndex[cursor1 + i]\n          }\n\n          dest += count1\n          cursor1 += count1\n          length1 -= count1\n          if (length1 <= 1) {\n            exit = true\n            break\n          }\n        }\n\n        array[dest] = array[cursor2]\n        results[dest] = results[cursor2]\n\n        dest ++\n        cursor2 ++\n\n        if (-- length2 === 0) {\n          exit = true\n          break\n        }\n\n        count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare)\n\n        if (count2 !== 0) {\n          for (i = 0; i < count2; i ++) {\n            array[dest + i] = array[cursor2 + i]\n            results[dest + i] = results[cursor2 + i]\n          }\n\n          dest += count2\n          cursor2 += count2\n          length2 -= count2\n\n          if (length2 === 0) {\n            exit = true\n            break\n          }\n        }\n        array[dest] = tmp[cursor1]\n        results[dest] = tmpIndex[cursor1]\n        dest ++\n        cursor1 ++\n\n        if (-- length1 === 1) {\n          exit = true\n          break\n        }\n\n        minGallop --\n      } while (\n        count1 >= DEFAULT_MIN_GALLOPING\n        || count2 >= DEFAULT_MIN_GALLOPING\n      )\n\n      if (exit) {\n        break\n      }\n\n      if (minGallop < 0) {\n        minGallop = 0\n      }\n\n      minGallop += 2\n    }\n\n    this.minGallop = minGallop\n\n    if (minGallop < 1) {\n      this.minGallop = 1\n    }\n\n    if (length1 === 1) {\n      for (i = 0; i < length2; i ++) {\n        array[dest + i] = array[cursor2 + i]\n        results[dest + i] = results[cursor2 + i]\n      }\n      array[dest + length2] = tmp[cursor1]\n      results[dest + length2] = tmpIndex[cursor1]\n    } else if (length1 === 0) {\n      throw new Error('mergeLow preconditions were not respected')\n    } else {\n      for (i = 0; i < length1; i ++) {\n        array[dest + i] = tmp[cursor1 + i]\n        results[dest + i] = tmpIndex[cursor1 + i]\n      }\n    }\n  }\n\n  /**\n   * Merge two adjacent runs in a stable way. The runs must be such that the\n   * first element of run1 is bigger than the first element in run2 and the\n   * last element of run1 is greater than all the elements in run2.\n   * The method should be called when run1.length > run2.length as it uses\n   * TimSort temporary array to store run2. Use mergeLow if run1.length <=\n   * run2.length.\n   *\n   * @param {number} start1 - First element in run1.\n   * @param {number} length1 - Length of run1.\n   * @param {number} start2 - First element in run2.\n   * @param {number} length2 - Length of run2.\n   */\n  mergeHigh (start1, length1, start2, length2) {\n    const {compare} = this\n    const {array} = this\n    const {tmp} = this\n    const {tmpIndex} = this\n    let i = 0\n\n    for (i = 0; i < length2; i ++) {\n      tmp[i] = array[start2 + i]\n      tmpIndex[i] = results[start2 + i]\n    }\n\n    let cursor1 = start1 + length1 - 1\n    let cursor2 = length2 - 1\n    let dest = start2 + length2 - 1\n    let customCursor = 0\n    let customDest = 0\n\n    array[dest] = array[cursor1]\n    results[dest] = results[cursor1]\n\n    dest --\n    cursor1 --\n\n    if (-- length1 === 0) {\n      customCursor = dest - (length2 - 1)\n\n      for (i = 0; i < length2; i ++) {\n        array[customCursor + i] = tmp[i]\n        results[customCursor + i] = tmpIndex[i]\n      }\n\n      return\n    }\n\n    if (length2 === 1) {\n      dest -= length1\n      cursor1 -= length1\n      customDest = dest + 1\n      customCursor = cursor1 + 1\n\n      for (i = length1 - 1; i >= 0; i --) {\n        array[customDest + i] = array[customCursor + i]\n        results[customDest + i] = results[customCursor + i]\n      }\n\n      array[dest] = tmp[cursor2]\n      results[dest] = tmpIndex[cursor2]\n      return\n    }\n\n    let {minGallop} = this\n\n    while (true) {\n      let count1 = 0\n      let count2 = 0\n      let exit = false\n\n      do {\n        if (compare(tmp[cursor2], array[cursor1]) < 0) {\n          array[dest] = array[cursor1]\n          results[dest] = results[cursor1]\n          dest --\n          cursor1 --\n          count1 ++\n          count2 = 0\n          if (-- length1 === 0) {\n            exit = true\n            break\n          }\n        } else {\n          array[dest] = tmp[cursor2]\n          results[dest] = tmpIndex[cursor2]\n          dest --\n          cursor2 --\n          count2 ++\n          count1 = 0\n          if (-- length2 === 1) {\n            exit = true\n            break\n          }\n        }\n      } while ((count1 | count2) < minGallop)\n\n      if (exit) {\n        break\n      }\n\n      do {\n        count1 = length1 - gallopRight(\n          tmp[cursor2],\n          array,\n          start1,\n          length1,\n          length1 - 1,\n          compare\n        )\n\n        if (count1 !== 0) {\n          dest -= count1\n          cursor1 -= count1\n          length1 -= count1\n          customDest = dest + 1\n          customCursor = cursor1 + 1\n\n          for (i = count1 - 1; i >= 0; i --) {\n            array[customDest + i] = array[customCursor + i]\n            results[customDest + i] = results[customCursor + i]\n          }\n\n          if (length1 === 0) {\n            exit = true\n            break\n          }\n        }\n\n        array[dest] = tmp[cursor2]\n        results[dest] = tmpIndex[cursor2]\n        dest --\n        cursor2 --\n\n        if (-- length2 === 1) {\n          exit = true\n          break\n        }\n\n        count2 = length2 - gallopLeft(\n          array[cursor1],\n          tmp,\n          0,\n          length2,\n          length2 - 1,\n          compare\n        )\n\n        if (count2 !== 0) {\n          dest -= count2\n          cursor2 -= count2\n          length2 -= count2\n          customDest = dest + 1\n          customCursor = cursor2 + 1\n\n          for (i = 0; i < count2; i ++) {\n            array[customDest + i] = tmp[customCursor + i]\n            results[customDest + i] = tmpIndex[customCursor + i]\n          }\n\n          if (length2 <= 1) {\n            exit = true\n            break\n          }\n        }\n\n        array[dest] = array[cursor1]\n        results[dest] = results[cursor1]\n        dest --\n        cursor1 --\n\n        if (-- length1 === 0) {\n          exit = true\n          break\n        }\n\n        minGallop --\n      } while (\n        count1 >= DEFAULT_MIN_GALLOPING\n        || count2 >= DEFAULT_MIN_GALLOPING\n      )\n\n      if (exit) {\n        break\n      }\n\n      if (minGallop < 0) {\n        minGallop = 0\n      }\n\n      minGallop += 2\n    }\n\n    this.minGallop = minGallop\n\n    if (minGallop < 1) {\n      this.minGallop = 1\n    }\n\n    if (length2 === 1) {\n      dest -= length1\n      cursor1 -= length1\n      customDest = dest + 1\n      customCursor = cursor1 + 1\n\n      for (i = length1 - 1; i >= 0; i --) {\n        array[customDest + i] = array[customCursor + i]\n        results[customDest + i] = results[customCursor + i]\n      }\n\n      array[dest] = tmp[cursor2]\n      results[dest] = tmpIndex[cursor2]\n    } else if (length2 === 0) {\n      throw new Error('mergeHigh preconditions were not respected')\n    } else {\n      customCursor = dest - (length2 - 1)\n      for (i = 0; i < length2; i ++) {\n        array[customCursor + i] = tmp[i]\n        results[customCursor + i] = tmpIndex[i]\n      }\n    }\n  }\n}\n\n/**\n * Sort an array in the range [lo, hi) using TimSort.\n *\n * @param {array} array - The array to sort.\n * @param {function=} compare - Item comparison function. Default is\n *     alphabetical\n * @param {number} lo - First element in the range (inclusive).\n * @param {number} hi - Last element in the range.\n *     comparator.\n */\nfunction sort (array, compare, lo, hi) {\n  if (!Array.isArray(array)) {\n    throw new TypeError(\n      `The \"array\" argument must be an array. Received ${array}`\n    )\n  }\n\n  results = []\n\n  const {length} = array\n\n  let i = 0\n\n  while (i < length) {\n    results[i] = i ++\n  }\n\n  /*\n   * Handle the case where a comparison function is not provided. We do\n   * lexicographic sorting\n   */\n  if (!compare) {\n    compare = alphabeticalCompare\n  } else if (typeof compare !== 'function') {\n    hi = lo\n    lo = compare\n    compare = alphabeticalCompare\n  }\n\n  if (!lo) {\n    lo = 0\n  }\n  if (!hi) {\n    hi = length\n  }\n\n  let remaining = hi - lo\n\n  // The array is already sorted\n  if (remaining < 2) {\n    return results\n  }\n\n  let runLength = 0\n  // On small arrays binary sort can be used directly\n  if (remaining < DEFAULT_MIN_MERGE) {\n    runLength = makeAscendingRun(array, lo, hi, compare)\n    binaryInsertionSort(array, lo, hi, lo + runLength, compare)\n    return results\n  }\n\n  const ts = new TimSort(array, compare)\n\n  const minRun = minRunLength(remaining)\n\n  do {\n    runLength = makeAscendingRun(array, lo, hi, compare)\n    if (runLength < minRun) {\n      let force = remaining\n      if (force > minRun) {\n        force = minRun\n      }\n\n      binaryInsertionSort(array, lo, lo + force, lo + runLength, compare)\n      runLength = force\n    }\n    // Push new run and merge if necessary\n    ts.pushRun(lo, runLength)\n    ts.mergeRuns()\n\n    // Go find next run\n    remaining -= runLength\n    lo += runLength\n  } while (remaining !== 0)\n\n  // Force merging of remaining runs\n  ts.forceMergeRuns()\n\n  return results\n}\n\nmodule.exports = {\n  sort\n}\n", "const {\n  isObject,\n  isArray,\n  isString,\n  isNumber,\n  isFunction\n} = require('core-util-is')\n\nconst PREFIX_BEFORE = 'before'\nconst PREFIX_AFTER_PROP = 'after-prop'\nconst PREFIX_AFTER_COLON = 'after-colon'\nconst PREFIX_AFTER_VALUE = 'after-value'\nconst PREFIX_AFTER = 'after'\n\nconst PREFIX_BEFORE_ALL = 'before-all'\nconst PREFIX_AFTER_ALL = 'after-all'\n\nconst BRACKET_OPEN = '['\nconst BRACKET_CLOSE = ']'\nconst CURLY_BRACKET_OPEN = '{'\nconst CURLY_BRACKET_CLOSE = '}'\nconst COMMA = ','\nconst EMPTY = ''\nconst MINUS = '-'\n\nconst PROP_SYMBOL_PREFIXES = [\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER\n]\n\nconst NON_PROP_SYMBOL_PREFIXES = [\n  PREFIX_BEFORE,\n  PREFIX_AFTER,\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL\n]\n\nconst NON_PROP_SYMBOL_KEYS = NON_PROP_SYMBOL_PREFIXES.map(Symbol.for)\n\nconst COLON = ':'\nconst UNDEFINED = undefined\n\nconst symbol = (prefix, key) => Symbol.for(prefix + COLON + key)\nconst symbol_checked = (prefix, key) => {\n  if (key) {\n    if (PROP_SYMBOL_PREFIXES.includes(prefix)) {\n      return symbol(prefix, key)\n    }\n\n    throw new RangeError(\n      `Unsupported comment position ${prefix} with key ${key}`\n    )\n  }\n\n  if (NON_PROP_SYMBOL_PREFIXES.includes(prefix)) {\n    return Symbol.for(prefix)\n  }\n\n  throw new RangeError(`Unsupported comment position ${prefix}`)\n}\n\nconst define = (target, key, value) => Object.defineProperty(target, key, {\n  value,\n  writable: true,\n  configurable: true\n})\n\nconst copy_comments_by_kind = (\n  target, source, target_key, source_key, prefix, remove_source\n) => {\n  const source_prop = symbol(prefix, source_key)\n  if (!Object.hasOwn(source, source_prop)) {\n    return\n  }\n\n  const target_prop = target_key === source_key\n    ? source_prop\n    : symbol(prefix, target_key)\n\n  define(target, target_prop, source[source_prop])\n\n  if (remove_source) {\n    delete source[source_prop]\n  }\n}\n\nconst copy_comments = (\n  target, source, target_key, source_key, remove_source\n) => {\n  PROP_SYMBOL_PREFIXES.forEach(prefix => {\n    copy_comments_by_kind(\n      target, source, target_key, source_key, prefix, remove_source\n    )\n  })\n}\n\nconst swap_comments = (array, from, to) => {\n  if (from === to) {\n    return\n  }\n\n  PROP_SYMBOL_PREFIXES.forEach(prefix => {\n    const target_prop = symbol(prefix, to)\n    if (!Object.hasOwn(array, target_prop)) {\n      copy_comments_by_kind(array, array, to, from, prefix, true)\n      return\n    }\n\n    const comments = array[target_prop]\n    delete array[target_prop]\n\n    copy_comments_by_kind(array, array, to, from, prefix, true)\n    define(array, symbol(prefix, from), comments)\n  })\n}\n\nconst assign_non_prop_comments = (target, source) => {\n  NON_PROP_SYMBOL_KEYS.forEach(key => {\n    const comments = source[key]\n\n    if (comments) {\n      define(target, key, comments)\n    }\n  })\n}\n\n// Assign keys and comments\nconst assign = (target, source, keys) => {\n  keys.forEach(key => {\n    if (!isString(key) && !isNumber(key)) {\n      return\n    }\n\n    if (!Object.hasOwn(source, key)) {\n      return\n    }\n\n    target[key] = source[key]\n    copy_comments(target, source, key, key)\n  })\n\n  return target\n}\n\nconst is_raw_json = isFunction(JSON.isRawJSON)\n  // For backward compatibility,\n  // since JSON.isRawJSON is not supported in node < 21\n  ? JSON.isRawJSON\n  // istanbul ignore next\n  : () => false\n\nmodule.exports = {\n  PROP_SYMBOL_PREFIXES,\n\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  BRACKET_OPEN,\n  BRACKET_CLOSE,\n  CURLY_BRACKET_OPEN,\n  CURLY_BRACKET_CLOSE,\n\n  COLON,\n  COMMA,\n  MINUS,\n  EMPTY,\n\n  UNDEFINED,\n\n  symbol,\n  define,\n  copy_comments,\n  swap_comments,\n  assign_non_prop_comments,\n\n  is_raw_json,\n\n  /**\n   * Assign properties and comments from source to target object.\n   *\n   * @param {Object} target The target object to assign properties and comments\n   *   to.\n   * @param {Object} source The source object to copy properties and comments\n   *   from.\n   * @param {Array<string|number>} [keys] Optional array of keys to assign. If\n   *   not provided, all keys and non-property comments are assigned. If empty\n   *   array, only non-property comments are assigned.\n   * @returns {Object} The target object with assigned properties and comments.\n   *\n   * @throws {TypeError} If target cannot be converted to object or keys is not\n   *   array or undefined.\n   *\n   * @example\n   * const source = parse('{\"a\": 1 // comment a, \"b\": 2 // comment b}')\n   * const target = {}\n   *\n   * // Copy all properties and comments\n   * assign(target, source)\n   *\n   * // Copy only specific properties and their comments\n   * assign(target, source, ['a'])\n   *\n   * // Copy only non-property comments\n   * assign(target, source, [])\n   */\n  assign (target, source, keys) {\n    if (!isObject(target)) {\n      throw new TypeError('Cannot convert undefined or null to object')\n    }\n\n    if (!isObject(source)) {\n      return target\n    }\n\n    if (keys === UNDEFINED) {\n      // Copy all comments from source to target, including:\n      // - non-property comments\n      // - property comments\n\n      keys = Object.keys(source)\n      // We assign non-property comments\n      // if argument `keys` is not specified\n      assign_non_prop_comments(target, source)\n    } else if (!isArray(keys)) {\n      throw new TypeError('keys must be array or undefined')\n    } else if (keys.length === 0) {\n      // Copy all non-property comments from source to target\n\n      // Or argument `keys` is an empty array\n      assign_non_prop_comments(target, source)\n    }\n\n    // Copy specified property comments from source to target\n    return assign(target, source, keys)\n  },\n\n  /**\n   * Move comments from one location to another within objects.\n   *\n   * @param {Object} source The source object containing comments to move.\n   * @param {Object} [target] The target object to move comments to. If not\n   *   provided, defaults to source (move within same object).\n   * @param {Object} from The source comment location.\n   * @param {string} from.where The comment position (e.g., 'before',\n   *   'after', 'before-all', etc.).\n   * @param {string} [from.key] The property key for property-specific comments.\n   *   Omit for non-property comments.\n   * @param {Object} to The target comment location.\n   * @param {string} to.where The comment position (e.g., 'before',\n   *   'after', 'before-all', etc.).\n   * @param {string} [to.key] The property key for property-specific comments.\n   *   Omit for non-property comments.\n   * @param {boolean} [override=false] Whether to override existing comments at\n   *   the target location. If false, comments will be appended.\n   *\n   * @throws {TypeError} If source is not an object.\n   * @throws {RangeError} If where parameter is invalid or incompatible with key.\n   *\n   * @example\n   * const obj = parse('{\"a\": 1 // comment on a}')\n   *\n   * // Move comment from after 'a' to before 'a'\n   * moveComments(obj, obj,\n   *   { where: 'after', key: 'a' },\n   *   { where: 'before', key: 'a' }\n   * )\n   *\n   * @example\n   * // Move non-property comment\n   * moveComments(obj, obj,\n   *   { where: 'before-all' },\n   *   { where: 'after-all' }\n   * )\n   */\n  moveComments (source, target, {\n    where: from_where,\n    key: from_key\n  }, {\n    where: to_where,\n    key: to_key\n  }, override = false) {\n    if (!isObject(source)) {\n      throw new TypeError('source must be an object')\n    }\n\n    if (!target) {\n      target = source\n    }\n\n    if (!isObject(target)) {\n      // No target to move to\n      return\n    }\n\n    const from_prop = symbol_checked(from_where, from_key)\n    const to_prop = symbol_checked(to_where, to_key)\n\n    if (!Object.hasOwn(source, from_prop)) {\n      return\n    }\n\n    const source_comments = source[from_prop]\n    delete source[from_prop]\n\n    if (override || !Object.hasOwn(target, to_prop)) {\n      // Override\n      // or the target has no existing comments\n      define(target, to_prop, source_comments)\n      return\n    }\n\n    const target_comments = target[to_prop]\n    if (target_comments) {\n      target_comments.push(...source_comments)\n    }\n  },\n\n  /**\n   * Remove comments from a specific location within an object.\n   *\n   * @param {Object} target The target object to remove comments from.\n   * @param {Object} location The comment location to remove.\n   * @param {string} location.where The comment position (e.g., 'before',\n   *   'after', 'before-all', etc.).\n   * @param {string} [location.key] The property key for property-specific\n   *   comments. Omit for non-property comments.\n   *\n   * @throws {TypeError} If target is not an object.\n   * @throws {RangeError} If where parameter is invalid or incompatible with key.\n   *\n   * @example\n   * const obj = parse('{\"a\": 1 // comment on a}')\n   *\n   * // Remove comment after 'a'\n   * removeComments(obj, { where: 'after', key: 'a' })\n   *\n   * @example\n   * // Remove non-property comment\n   * removeComments(obj, { where: 'before-all' })\n   */\n  removeComments (target, {\n    where,\n    key\n  }) {\n    if (!isObject(target)) {\n      throw new TypeError('target must be an object')\n    }\n\n    const prop = symbol_checked(where, key)\n    if (!Object.hasOwn(target, prop)) {\n      return\n    }\n\n    delete target[prop]\n  }\n}\n", "const {isArray} = require('core-util-is')\nconst {sort} = require('array-timsort')\n\nconst {\n  PROP_SYMBOL_PREFIXES,\n\n  UNDEFINED,\n\n  symbol,\n  copy_comments,\n  swap_comments\n} = require('./common')\n\nconst reverse_comments = array => {\n  const {length} = array\n  let i = 0\n  const max = length / 2\n\n  for (; i < max; i ++) {\n    swap_comments(array, i, length - i - 1)\n  }\n}\n\nconst move_comment = (target, source, i, offset, remove) => {\n  copy_comments(target, source, i + offset, i, remove)\n}\n\nconst move_comments = (\n  // `Array` target array\n  target,\n  // `Array` source array\n  source,\n  // `number` start index\n  start,\n  // `number` number of indexes to move\n  count,\n  // `number` offset to move\n  offset,\n  // `boolean` whether should remove the comments from source\n  remove\n) => {\n  if (offset > 0) {\n    let i = count\n    //         |   count   | offset |\n    // source: -------------\n    // target:          -------------\n    //         | remove |\n    // => remove === offset\n\n    // From [count - 1, 0]\n    while (i -- > 0) {\n      move_comment(target, source, start + i, offset, remove)\n    }\n    return\n  }\n\n  let i = 0\n  // | remove  |  count    |\n  //           -------------\n  // -------------\n  //             | offset  |\n\n  // From [0, count - 1]\n  while (i < count) {\n    const ii = i ++\n    move_comment(target, source, start + ii, offset, remove)\n  }\n}\n\nconst remove_comments = (array, key) => {\n  PROP_SYMBOL_PREFIXES.forEach(prefix => {\n    const prop = symbol(prefix, key)\n    delete array[prop]\n  })\n}\n\nconst get_mapped = (map, key) => {\n  let mapped = key\n\n  while (mapped in map) {\n    mapped = map[mapped]\n  }\n\n  return mapped\n}\n\n/**\n * An Array subclass that preserves comments when array operations are performed.\n *\n * CommentArray extends the native Array class and automatically handles comment\n * preservation during array mutations like splice, slice, push, pop, etc.\n * Comments are stored as symbol properties and are moved/copied appropriately\n * when the array structure changes.\n *\n * @extends Array\n *\n * @example\n * const arr = parse('[1, 2, 3]') // with comments\n * // arr is a CommentArray instance\n * arr.splice(1, 1) // Comments are preserved and repositioned correctly\n */\nclass CommentArray extends Array {\n  // - deleteCount + items.length\n\n  // We should avoid `splice(begin, deleteCount, ...items)`,\n  // because `splice(0, undefined)` is not equivalent to `splice(0)`,\n  // as well as:\n  // - slice\n  /**\n   * Changes the contents of an array by removing or replacing existing\n   *   elements and/or adding new elements in place.\n   * Comments are automatically preserved and repositioned during the operation.\n   *\n   * @param {...*} args Arguments passed to Array.prototype.splice\n   * @returns {CommentArray} A new CommentArray containing the deleted elements.\n   */\n  splice (...args) {\n    const {length} = this\n    const ret = super.splice(...args)\n\n    // #16\n    // If no element removed, we might still need to move comments,\n    //   because splice could add new items\n\n    // if (!ret.length) {\n    //   return ret\n    // }\n\n    // JavaScript syntax is silly\n    // eslint-disable-next-line prefer-const\n    let [begin, deleteCount, ...items] = args\n\n    if (begin < 0) {\n      begin += length\n    }\n\n    if (arguments.length === 1) {\n      deleteCount = length - begin\n    } else {\n      deleteCount = Math.min(length - begin, deleteCount)\n    }\n\n    const {\n      length: item_length\n    } = items\n\n    // itemsToDelete: -\n    // itemsToAdd: +\n    //        |    dc      |  count   |\n    // =======-------------============\n    // =======++++++============\n    //        | il |\n    const offset = item_length - deleteCount\n    const start = begin + deleteCount\n    const count = length - start\n\n    move_comments(this, this, start, count, offset, true)\n\n    return ret\n  }\n\n  /**\n   * Returns a shallow copy of a portion of an array into a new CommentArray object.\n   * Comments are copied to the appropriate positions in the new array.\n   *\n   * @param {...*} args Arguments passed to Array.prototype.slice\n   * @returns {CommentArray} A new CommentArray containing the extracted\n   *   elements with their comments.\n   */\n  slice (...args) {\n    const {length} = this\n    const array = super.slice(...args)\n    if (!array.length) {\n      return new CommentArray()\n    }\n\n    let [begin, before] = args\n\n    // Ref:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n    if (before === UNDEFINED) {\n      before = length\n    } else if (before < 0) {\n      before += length\n    }\n\n    if (begin < 0) {\n      begin += length\n    } else if (begin === UNDEFINED) {\n      begin = 0\n    }\n\n    move_comments(array, this, begin, before - begin, - begin)\n\n    return array\n  }\n\n  unshift (...items) {\n    const {length} = this\n    const ret = super.unshift(...items)\n    const {\n      length: items_length\n    } = items\n\n    if (items_length > 0) {\n      move_comments(this, this, 0, length, items_length, true)\n    }\n\n    return ret\n  }\n\n  shift () {\n    const ret = super.shift()\n    const {length} = this\n\n    remove_comments(this, 0)\n    move_comments(this, this, 1, length, - 1, true)\n\n    return ret\n  }\n\n  reverse () {\n    super.reverse()\n\n    reverse_comments(this)\n\n    return this\n  }\n\n  pop () {\n    const ret = super.pop()\n\n    // Removes comments\n    remove_comments(this, this.length)\n\n    return ret\n  }\n\n  concat (...items) {\n    let {length} = this\n    const ret = super.concat(...items)\n\n    if (!items.length) {\n      return ret\n    }\n\n    move_comments(ret, this, 0, this.length, 0)\n\n    items.forEach(item => {\n      const prev = length\n      length += isArray(item)\n        ? item.length\n        : 1\n\n      if (!(item instanceof CommentArray)) {\n        return\n      }\n\n      move_comments(ret, item, 0, item.length, prev)\n    })\n\n    return ret\n  }\n\n  sort (...args) {\n    const result = sort(\n      this,\n      // Make sure there is no more than one argument\n      ...args.slice(0, 1)\n    )\n\n    // For example,\n    // if we sort ['b', 'd', 'c', 'a'],\n    // then `result` will be [3, 0, 2, 1], and the array is ['a', 'b', 'c', 'd']\n\n    // First, we swap index 0 (b) and index 3 (a), then the array comments are\n    // ['a.comments', 'd.comments', 'c.comments', 'b.comments']\n    // index 0 is finalized\n    // index 3 is actually mapped to original index 0, we present as 0 -> 3\n\n    // Then swap index 1 (d) and index 0 (-> 3, b)\n    // 1 (index) -> 0 (new index) -> 3 (real_index)\n    // ['d.comments', 'b.comments', 'c.comments', 'd.comments']\n    // index 1 is finalized\n    // index 3 is contains the item of original index 1\n    // - we present as 1 -> 3\n    // - it is ok that we don't remove mapping 0 -> 3\n\n    // Then index 2 should be skipped\n\n    // Then swap index 3 (d) and index 1 (-> 3, b), skipped\n\n    const map = Object.create(null)\n\n    result.forEach((source_index, index) => {\n      if (source_index === index) {\n        return\n      }\n\n      const real_source_index = get_mapped(map, source_index)\n\n      if (real_source_index === index) {\n        return\n      }\n\n      // The item of index `index` gets the final value\n      // delete map[index]\n      map[index] = real_source_index\n\n      swap_comments(this, index, real_source_index)\n    })\n\n    return this\n  }\n}\n\nmodule.exports = {\n  CommentArray\n}\n", "// JSON formatting\n\nconst esprima = require('esprima')\n\nconst {\n  CommentArray,\n} = require('./array')\n\nconst {\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  BRACKET_OPEN,\n  BRACKET_CLOSE,\n  CURLY_BRACKET_OPEN,\n  CURLY_BRACKET_CLOSE,\n\n  COLON,\n  COMMA,\n  MINUS,\n  EMPTY,\n\n  UNDEFINED,\n\n  define,\n  assign_non_prop_comments\n} = require('./common')\n\n/**\n * Tokenize JSON string with comments into an array of tokens.\n *\n * @param {string} code The JSON string with comments to tokenize.\n * @returns {Array} Array of token objects containing type, value, and location\n *   information.\n *\n * @example\n * const tokens = tokenize('{\"a\": 1 // comment}')\n * // Returns array of tokens including comment tokens\n */\nconst tokenize = code => esprima.tokenize(code, {\n  comment: true,\n  loc: true\n})\n\nlet current_code\nconst previous_hosts = []\nlet comments_host = null\nlet unassigned_comments = null\n\nconst previous_props = []\nlet last_prop\n\nlet remove_comments = false\nlet inline = false\nlet tokens = null\nlet last = null\nlet current = null\nlet index\nlet reviver = null\n\nconst clean = () => {\n  current_code = UNDEFINED\n  previous_props.length =\n  previous_hosts.length = 0\n\n  last = null\n  last_prop = UNDEFINED\n}\n\nconst free = () => {\n  clean()\n\n  tokens.length = 0\n\n  unassigned_comments =\n  comments_host =\n  tokens =\n  last =\n  current =\n  reviver = null\n\n  current_code = UNDEFINED\n}\n\nconst symbolFor = prefix => Symbol.for(\n  last_prop !== UNDEFINED\n    ? prefix + COLON + last_prop\n    : prefix\n)\n\nconst transform = (k, {value, context = {}}) => reviver\n  ? reviver(k, value, context)\n  : value\n\nconst unexpected = () => {\n  const error = new SyntaxError(`Unexpected token '${current.value.slice(0, 1)}', \"${current_code}\" is not valid JSON`)\n  Object.assign(error, current.loc.start)\n\n  free()\n\n  throw error\n}\n\nconst unexpected_end = () => {\n  const error = new SyntaxError('Unexpected end of JSON input')\n  Object.assign(error, last\n    ? last.loc.end\n    // Empty string\n    : {\n      line: 1,\n      column: 0\n    })\n\n  free()\n\n  throw error\n}\n\n// Move the reader to the next\nconst next = () => {\n  const new_token = tokens[++ index]\n  inline = current\n    && new_token\n    && current.loc.end.line === new_token.loc.start.line\n    || false\n\n  last = current\n  current = new_token\n}\n\nconst type = () => {\n  if (!current) {\n    unexpected_end()\n  }\n\n  return current.type === 'Punctuator'\n    ? current.value\n    : current.type\n}\n\nconst is = t => type() === t\n\nconst expect = a => {\n  if (!is(a)) {\n    unexpected()\n  }\n}\n\nconst set_comments_host = new_host => {\n  previous_hosts.push(comments_host)\n  comments_host = new_host\n}\n\nconst restore_comments_host = () => {\n  comments_host = previous_hosts.pop()\n}\n\nconst assign_after_comments = () => {\n  if (!unassigned_comments) {\n    return\n  }\n\n  const after_comments = []\n\n  for (const comment of unassigned_comments) {\n    // If the comment is inline, then it is an after-comma comment\n    if (comment.inline) {\n      after_comments.push(comment)\n    // Otherwise, all comments are before:<next-prop> comment\n    } else {\n      break\n    }\n  }\n\n  const {length} = after_comments\n  if (!length) {\n    return\n  }\n\n  if (length === unassigned_comments.length) {\n    // If unassigned_comments are all consumed\n    unassigned_comments = null\n  } else {\n    unassigned_comments.splice(0, length)\n  }\n\n  define(comments_host, symbolFor(PREFIX_AFTER), after_comments)\n}\n\nconst assign_comments = prefix => {\n  if (!unassigned_comments) {\n    return\n  }\n\n  define(comments_host, symbolFor(prefix), unassigned_comments)\n\n  unassigned_comments = null\n}\n\nconst parse_comments = prefix => {\n  const comments = []\n\n  while (\n    current\n    && (\n      is('LineComment')\n      || is('BlockComment')\n    )\n  ) {\n    const comment = {\n      ...current,\n      inline\n    }\n\n    // delete comment.loc\n    comments.push(comment)\n\n    next()\n  }\n\n  if (remove_comments) {\n    return\n  }\n\n  if (!comments.length) {\n    return\n  }\n\n  if (prefix) {\n    define(comments_host, symbolFor(prefix), comments)\n    return\n  }\n\n  unassigned_comments = comments\n}\n\nconst set_prop = (prop, push) => {\n  if (push) {\n    previous_props.push(last_prop)\n  }\n\n  last_prop = prop\n}\n\nconst restore_prop = () => {\n  last_prop = previous_props.pop()\n}\n\nconst parse_object = () => {\n  const obj = {}\n  set_comments_host(obj)\n  set_prop(UNDEFINED, true)\n\n  let started = false\n  let name\n\n  parse_comments()\n\n  while (!is(CURLY_BRACKET_CLOSE)) {\n    if (started) {\n      assign_comments(PREFIX_AFTER_VALUE)\n\n      // key-value pair delimiter\n      expect(COMMA)\n      next()\n      parse_comments()\n\n      assign_after_comments()\n\n      // If there is a trailing comma, we might reach the end\n      // ```\n      // {\n      //   \"a\": 1,\n      // }\n      // ```\n      if (is(CURLY_BRACKET_CLOSE)) {\n        break\n      }\n    }\n\n    started = true\n    expect('String')\n    name = JSON.parse(current.value)\n\n    set_prop(name)\n    assign_comments(PREFIX_BEFORE)\n\n    next()\n    parse_comments(PREFIX_AFTER_PROP)\n\n    expect(COLON)\n\n    next()\n    parse_comments(PREFIX_AFTER_COLON)\n\n    obj[name] = transform(name, walk())\n    parse_comments()\n  }\n\n  if (started) {\n    // If there are properties,\n    // then the unassigned comments are after comments\n    assign_comments(PREFIX_AFTER)\n  }\n\n  // bypass }\n  next()\n  last_prop = undefined\n\n  if (!started) {\n    // Otherwise, they are before comments\n    assign_comments(PREFIX_BEFORE)\n  }\n\n  restore_comments_host()\n  restore_prop()\n\n  return obj\n}\n\nconst parse_array = () => {\n  const array = new CommentArray()\n  set_comments_host(array)\n  set_prop(UNDEFINED, true)\n\n  let started = false\n  let i = 0\n\n  parse_comments()\n\n  while (!is(BRACKET_CLOSE)) {\n    if (started) {\n      assign_comments(PREFIX_AFTER_VALUE)\n      expect(COMMA)\n      next()\n      parse_comments()\n\n      assign_after_comments()\n\n      if (is(BRACKET_CLOSE)) {\n        break\n      }\n    }\n\n    started = true\n\n    set_prop(i)\n    assign_comments(PREFIX_BEFORE)\n\n    array[i] = transform(i, walk())\n    i ++\n\n    parse_comments()\n  }\n\n  if (started) {\n    assign_comments(PREFIX_AFTER)\n  }\n\n  next()\n  last_prop = undefined\n\n  if (!started) {\n    assign_comments(PREFIX_BEFORE)\n  }\n\n  restore_comments_host()\n  restore_prop()\n\n  return array\n}\n\nfunction walk () {\n  let tt = type()\n\n  if (tt === CURLY_BRACKET_OPEN) {\n    next()\n    return {\n      value: parse_object()\n    }\n  }\n\n  if (tt === BRACKET_OPEN) {\n    next()\n    return {\n      value: parse_array()\n    }\n  }\n\n  let negative = EMPTY\n\n  // -1\n  if (tt === MINUS) {\n    next()\n    tt = type()\n    negative = MINUS\n  }\n\n  let v\n  let source\n\n  switch (tt) {\n  case 'String':\n  case 'Boolean':\n  case 'Null':\n  case 'Numeric':\n    v = current.value\n    next()\n\n    source = negative + v\n    return {\n      value: JSON.parse(source),\n      context: {\n        source\n      }\n    }\n  default:\n    // => unexpected token\n    return {}\n  }\n}\n\nconst isObject = subject => Object(subject) === subject\n\n/**\n * Converts a JavaScript Object Notation (JSON) string with comments into an\n * object.\n *\n * @param {string} code A valid JSON string with comments.\n * @param {function} [rev] A function that transforms the results. This function\n *   is called for each member of the object. If a member contains nested\n *   objects, the nested objects are transformed before the parent object is.\n * @param {boolean} [no_comments=false] If true, the comments won't be\n *   maintained, which is often used when we want to get a clean object.\n * @returns {*} The JavaScript object corresponding to the given JSON text with\n *   comments preserved as symbol properties.\n *\n * @example\n * const result = parse('{\"a\": 1 // This is a comment}')\n * // result.a === 1\n * // Comments are stored in symbol properties\n *\n * @example\n * // With reviver function\n * const result = parse('{\"a\": \"1\"}', (key, value) => {\n *   return typeof value === 'string' ? parseInt(value) : value\n * })\n *\n * @example\n * // Without comments\n * const clean = parse('{\"a\": 1 // comment}', null, true)\n * // Returns clean object without comment symbols\n */\nconst parse = (code, rev, no_comments) => {\n  // Clean variables in closure\n  clean()\n\n  current_code = code\n  tokens = tokenize(code)\n  reviver = rev\n  remove_comments = no_comments\n\n  if (!tokens.length) {\n    unexpected_end()\n  }\n\n  index = - 1\n  next()\n\n  set_comments_host({})\n\n  parse_comments(PREFIX_BEFORE_ALL)\n\n  const final = walk()\n\n  parse_comments(PREFIX_AFTER_ALL)\n\n  if (current) {\n    unexpected()\n  }\n\n  // reviver\n  let result = transform('', final)\n\n  // We should run reviver before the checks below,\n  // otherwise the comment info will be lost\n  if (!no_comments && result !== null) {\n    if (!isObject(result)) {\n      // 1 -> new Number(1)\n      // true -> new Boolean(1)\n      // \"foo\" -> new String(\"foo\")\n\n      // eslint-disable-next-line no-new-object\n      result = new Object(result)\n    }\n\n    assign_non_prop_comments(result, comments_host)\n  }\n\n  restore_comments_host()\n\n  free()\n\n  return result\n}\n\nmodule.exports = {\n  parse,\n  tokenize\n}\n", "const {\n  isArray, isObject, isFunction, isNumber, isString\n} = require('core-util-is')\n\nconst {\n  PREFIX_BEFORE_ALL,\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n  PREFIX_AFTER_ALL,\n\n  BRACKET_OPEN,\n  BRACKET_CLOSE,\n  CURLY_BRACKET_OPEN,\n  CURLY_BRACKET_CLOSE,\n  COLON,\n  COMMA,\n  EMPTY,\n\n  UNDEFINED,\n\n  is_raw_json\n} = require('./common')\n\n// eslint-disable-next-line no-control-regex, no-misleading-character-class\nconst ESCAPABLE = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g\n\n// String constants\nconst SPACE = ' '\nconst LF = '\\n'\nconst STR_NULL = 'null'\n\n// Symbol tags\nconst BEFORE = prop => `${PREFIX_BEFORE}:${prop}`\nconst AFTER_PROP = prop => `${PREFIX_AFTER_PROP}:${prop}`\nconst AFTER_COLON = prop => `${PREFIX_AFTER_COLON}:${prop}`\nconst AFTER_VALUE = prop => `${PREFIX_AFTER_VALUE}:${prop}`\nconst AFTER = prop => `${PREFIX_AFTER}:${prop}`\n\n// table of character substitutions\nconst meta = {\n  '\\b': '\\\\b',\n  '\\t': '\\\\t',\n  '\\n': '\\\\n',\n  '\\f': '\\\\f',\n  '\\r': '\\\\r',\n  '\"': '\\\\\"',\n  '\\\\': '\\\\\\\\'\n}\n\nconst escape = string => {\n  ESCAPABLE.lastIndex = 0\n\n  if (!ESCAPABLE.test(string)) {\n    return string\n  }\n\n  return string.replace(ESCAPABLE, a => {\n    const c = meta[a]\n    return typeof c === 'string'\n      ? c\n      : a\n  })\n}\n\n// Escape no control characters, no quote characters,\n// and no backslash characters,\n// then we can safely slap some quotes around it.\nconst quote = string => `\"${escape(string)}\"`\nconst comment_stringify = (value, line) => line\n  ? `//${value}`\n  : `/*${value}*/`\n\n// display_block `boolean` whether the\n//   WHOLE block of comments is always a block group\nconst process_comments = (host, symbol_tag, deeper_gap, display_block) => {\n  const comments = host[Symbol.for(symbol_tag)]\n  if (!comments || !comments.length) {\n    return EMPTY\n  }\n\n  let is_line_comment = false\n\n  const str = comments.reduce((prev, {\n    inline,\n    type,\n    value\n  }) => {\n    const delimiter = inline\n      ? SPACE\n      : LF + deeper_gap\n\n    is_line_comment = type === 'LineComment'\n\n    return prev + delimiter + comment_stringify(value, is_line_comment)\n  }, EMPTY)\n\n  return display_block\n  // line comment should always end with a LF\n  || is_line_comment\n    ? str + LF + deeper_gap\n    : str\n}\n\nlet replacer = null\nlet indent = EMPTY\n\nconst clean = () => {\n  replacer = null\n  indent = EMPTY\n}\n\nconst join = (one, two, gap) =>\n  one\n    ? two\n      // Symbol.for('before') and Symbol.for('before:prop')\n      // might both exist if user mannually add comments to the object\n      // and make a mistake.\n      // SO, we are not to only trimRight but trim for both sides\n      ? one + two.trim() + LF + gap\n      : one.trimRight() + LF + gap\n    : two\n      ? two.trimRight() + LF + gap\n      : EMPTY\n\nconst join_content = (inside, value, gap) => {\n  const comment = process_comments(value, PREFIX_BEFORE, gap + indent, true)\n\n  return join(comment, inside, gap)\n}\n\n// | deeper_gap   |\n// | gap | indent |\n//       [\n//                \"foo\",\n//                \"bar\"\n//       ]\nconst array_stringify = (value, gap) => {\n  const deeper_gap = gap + indent\n\n  const {length} = value\n\n  // From the item to before close\n  let inside = EMPTY\n  let after_comma = EMPTY\n\n  // Never use Array.prototype.forEach,\n  // that we should iterate all items\n  for (let i = 0; i < length; i ++) {\n    if (i !== 0) {\n      inside += COMMA\n    }\n\n    const before = join(\n      after_comma,\n      process_comments(value, BEFORE(i), deeper_gap),\n      deeper_gap\n    )\n\n    inside += before || (LF + deeper_gap)\n\n    // JSON.stringify([undefined])  => [null]\n    inside += stringify(i, value, deeper_gap) || STR_NULL\n\n    inside += process_comments(value, AFTER_VALUE(i), deeper_gap)\n\n    after_comma = process_comments(value, AFTER(i), deeper_gap)\n  }\n\n  inside += join(\n    after_comma,\n    process_comments(value, PREFIX_AFTER, deeper_gap),\n    deeper_gap\n  )\n\n  return BRACKET_OPEN\n   + join_content(inside, value, gap)\n   + BRACKET_CLOSE\n}\n\n// | deeper_gap   |\n// | gap | indent |\n//       {\n//                \"foo\": 1,\n//                \"bar\": 2\n//       }\nconst object_stringify = (value, gap) => {\n  // Due to a specification blunder in ECMAScript, typeof null is 'object',\n  // so watch out for that case.\n  if (!value) {\n    return 'null'\n  }\n\n  const deeper_gap = gap + indent\n\n  // From the first element to before close\n  let inside = EMPTY\n  let after_comma = EMPTY\n  let first = true\n\n  const keys = isArray(replacer)\n    ? replacer\n    : Object.keys(value)\n\n  const iteratee = key => {\n    // Stringified value\n    const sv = stringify(key, value, deeper_gap)\n\n    // If a value is undefined, then the key-value pair should be ignored\n    if (sv === UNDEFINED) {\n      return\n    }\n\n    // The treat ment\n    if (!first) {\n      inside += COMMA\n    }\n\n    first = false\n\n    const before = join(\n      after_comma,\n      process_comments(value, BEFORE(key), deeper_gap),\n      deeper_gap\n    )\n\n    inside += before || (LF + deeper_gap)\n\n    inside += quote(key)\n    + process_comments(value, AFTER_PROP(key), deeper_gap)\n    + COLON\n    + process_comments(value, AFTER_COLON(key), deeper_gap)\n    + SPACE\n    + sv\n    + process_comments(value, AFTER_VALUE(key), deeper_gap)\n\n    after_comma = process_comments(value, AFTER(key), deeper_gap)\n  }\n\n  keys.forEach(iteratee)\n\n  // if (after_comma) {\n  //   inside += COMMA\n  // }\n\n  inside += join(\n    after_comma,\n    process_comments(value, PREFIX_AFTER, deeper_gap),\n    deeper_gap\n  )\n\n  return CURLY_BRACKET_OPEN\n  + join_content(inside, value, gap)\n  + CURLY_BRACKET_CLOSE\n}\n\n// @param {string} key\n// @param {Object} holder\n// @param {function()|Array} replacer\n// @param {string} indent\n// @param {string} gap\nfunction stringify (key, holder, gap) {\n  let value = holder[key]\n\n  // If the value has a toJSON method, call it to obtain a replacement value.\n  if (isObject(value) && isFunction(value.toJSON)) {\n    value = value.toJSON(key)\n  }\n\n  // If we were called with a replacer function, then call the replacer to\n  // obtain a replacement value.\n  if (isFunction(replacer)) {\n    value = replacer.call(holder, key, value)\n  }\n\n  switch (typeof value) {\n  case 'string':\n    return quote(value)\n\n  case 'number':\n    // JSON numbers must be finite. Encode non-finite numbers as null.\n    return Number.isFinite(value) ? String(value) : STR_NULL\n\n  case 'boolean':\n  case 'null':\n\n    // If the value is a boolean or null, convert it to a string. Note:\n    // typeof null does not produce 'null'. The case is included here in\n    // the remote chance that this gets fixed someday.\n    return String(value)\n\n  // If the type is 'object', we might be dealing with an object or an array or\n  // null.\n  case 'object':\n    if (is_raw_json(value)) {\n      return value.rawJSON\n    }\n\n    return isArray(value)\n      ? array_stringify(value, gap)\n      : object_stringify(value, gap)\n\n  // undefined\n  default:\n    // JSON.stringify(undefined) === undefined\n    // JSON.stringify('foo', () => undefined) === undefined\n  }\n}\n\nconst get_indent = space => isString(space)\n  // If the space parameter is a string, it will be used as the indent string.\n  ? space\n  : isNumber(space)\n    ? SPACE.repeat(space)\n    : EMPTY\n\nconst {toString} = Object.prototype\nconst PRIMITIVE_OBJECT_TYPES = [\n  '[object Number]',\n  '[object String]',\n  '[object Boolean]'\n]\n\nconst is_primitive_object = subject => {\n  if (typeof subject !== 'object') {\n    return false\n  }\n\n  const str = toString.call(subject)\n  return PRIMITIVE_OBJECT_TYPES.includes(str)\n}\n\n/**\n * Converts a JavaScript value to a JavaScript Object Notation (JSON) string\n * with comments preserved.\n *\n * @param {*} value A JavaScript value, usually an object or array, to be\n *   converted.\n * @param {function|Array|null} [replacer_] A function that transforms the\n *   results or an array of strings and numbers that acts as an approved list\n *   for selecting the object properties that will be stringified.\n * @param {string|number} [space] Adds indentation, white space, and line\n *   break characters to the return-value JSON text to make it easier to read.\n * @returns {string} A JSON string representing the given value with comments\n *   preserved.\n *\n * @example\n * const obj = parse('{\"a\": 1 // comment}')\n * stringify(obj, null, 2)\n * // Returns: '{\\n  \"a\": 1 // comment\\n}'\n *\n * @example\n * // With replacer function\n * stringify(obj, (key, value) => typeof value === 'number' ? value * 2 : value)\n *\n * @example\n * // With replacer array\n * stringify(obj, ['a', 'b']) // Only include 'a' and 'b' properties\n */\nmodule.exports = (value, replacer_, space) => {\n  // The stringify method takes a value and an optional replacer, and an optional\n  // space parameter, and returns a JSON text. The replacer can be a function\n  // that can replace values, or an array of strings that will select the keys.\n  // A default replacer method can be provided. Use of the space parameter can\n  // produce text that is more easily readable.\n\n  // If the space parameter is a number, make an indent string containing that\n  // many spaces.\n  const indent_ = get_indent(space)\n\n  if (!indent_) {\n    return JSON.stringify(value, replacer_)\n  }\n\n  // vanilla `JSON.parse` allow invalid replacer\n  if (!isFunction(replacer_) && !isArray(replacer_)) {\n    replacer_ = null\n  }\n\n  replacer = replacer_\n  indent = indent_\n\n  const str = is_primitive_object(value)\n    ? JSON.stringify(value)\n    : stringify('', {'': value}, EMPTY)\n\n  clean()\n\n  return isObject(value)\n    ? process_comments(value, PREFIX_BEFORE_ALL, EMPTY, true).trimLeft()\n      + str\n      + process_comments(value, PREFIX_AFTER_ALL, EMPTY).trimRight()\n    : str\n}\n", "const {parse, tokenize} = require('./parse')\nconst stringify = require('./stringify')\nconst {CommentArray} = require('./array')\nconst {\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  assign,\n  moveComments,\n  removeComments\n} = require('./common')\n\nmodule.exports = {\n  PREFIX_BEFORE,\n  PREFIX_AFTER_PROP,\n  PREFIX_AFTER_COLON,\n  PREFIX_AFTER_VALUE,\n  PREFIX_AFTER,\n\n  PREFIX_BEFORE_ALL,\n  PREFIX_AFTER_ALL,\n\n  parse,\n  stringify,\n  tokenize,\n\n  CommentArray,\n  assign,\n  moveComments,\n  removeComments\n}\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * # JsonUtilities - Comment-Preserving JSON Handling\r\n *\r\n * This module provides centralized utilities for parsing and stringifying JSON\r\n * while preserving C-style comments (// and /* *\\/).\r\n *\r\n * ## Key Concepts\r\n *\r\n * - Uses the `comment-json` library which stores comments as Symbol properties\r\n * - Comments are attached to the parsed object and survive mutations\r\n * - To preserve comments during round-trip, you must:\r\n *   1. Parse once with `parseJsonWithComments()`\r\n *   2. Mutate the returned object (don't create a new one)\r\n *   3. Stringify with `stringifyJsonWithComments()`\r\n *\r\n * ## Important Limitations\r\n *\r\n * - Array reassignment loses comments - use `commentJson.assign()` or in-place mutations\r\n * - Copying objects with spread/Object.assign loses comment symbols\r\n * - The parsed object must be retained to preserve comments\r\n *\r\n * ## Usage Pattern\r\n *\r\n * ```typescript\r\n * // Parse and cache the result\r\n * const obj = JsonUtilities.parseJsonWithComments(jsonString);\r\n *\r\n * // Modify properties directly on the parsed object\r\n * obj.someProperty = \"new value\";\r\n *\r\n * // Stringify preserves comments\r\n * const output = JsonUtilities.stringifyJsonWithComments(obj);\r\n * ```\r\n */\r\n\r\nimport * as commentJson from \"comment-json\";\r\nimport Utilities from \"./Utilities\";\r\n\r\n// Re-export types from comment-json for convenience (as type-only exports)\r\nexport type { CommentJSONValue, CommentObject, CommentToken } from \"comment-json\";\r\n\r\n// Re-export CommentArray as a value (it's a class)\r\nexport const CommentArrayClass = commentJson.CommentArray;\r\n\r\n/**\r\n * Parses a JSON string while preserving comments.\r\n * The returned object contains Symbol properties that store comment metadata.\r\n *\r\n * @param jsonString The JSON string to parse (may contain // and /* *\\/ comments)\r\n * @param fixContent If true, applies Utilities.fixJsonContentForCommentJson to handle\r\n *                   trailing commas and other non-standard JSON before parsing\r\n * @returns The parsed object with comment metadata preserved as Symbol properties\r\n */\r\nexport function parseJsonWithComments(jsonString: string, fixContent: boolean = true): commentJson.CommentJSONValue {\r\n  if (fixContent) {\r\n    jsonString = Utilities.fixJsonContentForCommentJson(jsonString);\r\n  }\r\n\r\n  return commentJson.parse(jsonString);\r\n}\r\n\r\n/**\r\n * Stringifies an object to JSON, preserving any comments stored as Symbol properties.\r\n *\r\n * @param value The object to stringify (should be one returned from parseJsonWithComments\r\n *              or created with comment-json utilities to have comments)\r\n * @param space Indentation (default: 2 spaces)\r\n * @returns JSON string with comments restored in their original positions\r\n */\r\nexport function stringifyJsonWithComments(value: unknown, space: string | number = 2): string {\r\n  return commentJson.stringify(value, null, space);\r\n}\r\n\r\n/**\r\n * Assigns properties from source to target while preserving comment metadata.\r\n * Use this instead of Object.assign or spread to maintain comments.\r\n *\r\n * @param target The target object to assign properties to\r\n * @param source The source object to copy properties from\r\n * @param keys Optional array of keys to assign. If not provided, all keys are assigned.\r\n * @returns The target object with properties and comments from source\r\n */\r\nexport function assignJsonPreservingComments<T, S>(target: T, source: S, keys?: readonly (string | number)[]): T {\r\n  return commentJson.assign(target, source, keys);\r\n}\r\n\r\n/**\r\n * Checks if two JSON strings are semantically equal (same data, ignoring whitespace/formatting).\r\n * This does NOT consider comments - it only compares the actual data values.\r\n *\r\n * @param contentA First JSON string\r\n * @param contentB Second JSON string\r\n * @returns true if the JSON data is semantically equivalent\r\n */\r\nexport function jsonContentsSemanticallyEqual(contentA: string, contentB: string): boolean {\r\n  try {\r\n    // Parse without preserving comments for semantic comparison\r\n    const objA = commentJson.parse(contentA, null, true); // true = remove comments\r\n    const objB = commentJson.parse(contentB, null, true);\r\n\r\n    return Utilities.consistentStringify(objA) === Utilities.consistentStringify(objB);\r\n  } catch (e) {\r\n    // If parsing fails, fall back to string comparison\r\n    return contentA === contentB;\r\n  }\r\n}\r\n\r\n/**\r\n * Compares two JSON objects for semantic equality, ignoring comment metadata.\r\n * Use this when you have already-parsed objects and want to check if their\r\n * actual data (not comments) is the same.\r\n *\r\n * @param objA First object (may have comment metadata)\r\n * @param objB Second object (may have comment metadata)\r\n * @returns true if the JSON data is semantically equivalent\r\n */\r\nexport function jsonObjectsSemanticallyEqual(objA: unknown, objB: unknown): boolean {\r\n  try {\r\n    return Utilities.consistentStringify(objA) === Utilities.consistentStringify(objB);\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n}\r\n\r\n/**\r\n * Merges new values into an existing comment-json object, preserving comments.\r\n * This is the recommended way to update a JSON object while keeping its comments.\r\n *\r\n * @param original The original parsed object with comments\r\n * @param updates An object containing the properties to update\r\n * @returns The original object with updates applied (mutates in place)\r\n */\r\nexport function mergeJsonPreservingComments<T extends object>(original: T, updates: Partial<T>): T {\r\n  // Use comment-json's assign to copy properties while preserving comment symbols\r\n  for (const key of Object.keys(updates) as (keyof T)[]) {\r\n    // Guard against prototype pollution\r\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\r\n      continue;\r\n    }\r\n    const value = updates[key];\r\n    if (value !== undefined) {\r\n      // For nested objects, we need to recursively merge\r\n      if (\r\n        typeof value === \"object\" &&\r\n        value !== null &&\r\n        !Array.isArray(value) &&\r\n        typeof original[key] === \"object\" &&\r\n        original[key] !== null &&\r\n        !Array.isArray(original[key])\r\n      ) {\r\n        mergeJsonPreservingComments(original[key] as object, value as object);\r\n      } else {\r\n        // For primitives and arrays, just assign\r\n        // Note: Array assignment will lose comments on the array itself\r\n        // For arrays, consider using CommentArray methods like splice/push\r\n        (original as any)[key] = value;\r\n      }\r\n    }\r\n  }\r\n\r\n  return original;\r\n}\r\n\r\n/**\r\n * Creates a deep clone of a comment-json object, preserving comments.\r\n * Use this when you need a copy that retains comment metadata.\r\n *\r\n * @param obj The object to clone\r\n * @returns A new object with the same data and comments\r\n */\r\nexport function cloneJsonWithComments<T>(obj: T): T {\r\n  // The simplest way to clone while preserving comments is to stringify and re-parse\r\n  const jsonString = commentJson.stringify(obj, null, 2);\r\n  return commentJson.parse(jsonString) as T;\r\n}\r\n\r\n/**\r\n * Checks if an object was parsed with comment-json and contains comment metadata.\r\n *\r\n * @param obj The object to check\r\n * @returns true if the object has comment Symbol properties\r\n */\r\nexport function hasCommentMetadata(obj: unknown): boolean {\r\n  if (obj === null || typeof obj !== \"object\") {\r\n    return false;\r\n  }\r\n\r\n  // Check for any comment-json symbols\r\n  const symbols = Object.getOwnPropertySymbols(obj);\r\n  return symbols.some((sym) => sym.description?.startsWith(\"before\") || sym.description?.startsWith(\"after\"));\r\n}\r\n\r\n/**\r\n * Default export providing all JsonUtilities functions as a namespace-like object.\r\n * This allows both `import JsonUtilities from \"./JsonUtilities\"` and\r\n * `import { parseJsonWithComments } from \"./JsonUtilities\"` usage patterns.\r\n */\r\nconst JsonUtilities = {\r\n  parseJsonWithComments,\r\n  stringifyJsonWithComments,\r\n  assignJsonPreservingComments,\r\n  mergeJsonPreservingComments,\r\n  jsonContentsSemanticallyEqual,\r\n  jsonObjectsSemanticallyEqual,\r\n  cloneJsonWithComments,\r\n  hasCommentMetadata,\r\n  CommentArrayClass,\r\n};\r\n\r\nexport default JsonUtilities;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport IFolder from \"./IFolder\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport IStorage from \"./IStorage\";\r\nimport * as md5 from \"js-md5\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport JsonUtilities from \"../core/JsonUtilities\";\r\n\r\nexport default abstract class FileBase implements IFile {\r\n  abstract get name(): string;\r\n  abstract get parentFolder(): IFolder;\r\n  abstract get isContentLoaded(): boolean;\r\n\r\n  priorVersions: IVersionContent[] = [];\r\n\r\n  isDisposed: boolean = false;\r\n\r\n  isInErrorState?: boolean;\r\n  errorStateMessage?: string;\r\n\r\n  /**\r\n   * Cache for comment-json parsed object.\r\n   * When set, contains the parsed JSON with comment metadata preserved as Symbol properties.\r\n   */\r\n  commentJsonCache?: unknown;\r\n\r\n  protected _content: string | Uint8Array | null;\r\n\r\n  #fileContainerStorage: IStorage | null = null;\r\n  #onFileContentUpdated = new EventDispatcher<IFile, IFile>();\r\n\r\n  get fileContainerStorage() {\r\n    return this.#fileContainerStorage;\r\n  }\r\n\r\n  public get onFileContentUpdated() {\r\n    return this.#onFileContentUpdated.asEvent();\r\n  }\r\n\r\n  set fileContainerStorage(newStorage: IStorage | null) {\r\n    this.#fileContainerStorage = newStorage;\r\n  }\r\n\r\n  get isString() {\r\n    return this._content !== null && typeof this._content === \"string\";\r\n  }\r\n\r\n  get canIgnore() {\r\n    return StorageUtilities.canIgnoreFileName(this.name) || StorageUtilities.canIgnoreFileExtension(this.type);\r\n  }\r\n\r\n  get isBinary() {\r\n    if (this._content === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (this._content instanceof Uint8Array) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get content() {\r\n    return this._content;\r\n  }\r\n\r\n  get latestModified() {\r\n    if (this.modified == null) {\r\n      return this.modifiedAtLoad;\r\n    }\r\n\r\n    if (this.modifiedAtLoad == null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.modified.getTime() > this.modifiedAtLoad.getTime()) {\r\n      return this.modified;\r\n    }\r\n\r\n    return this.modifiedAtLoad;\r\n  }\r\n\r\n  modified: Date | null;\r\n  modifiedAtLoad: Date | null;\r\n  lastLoadedOrSaved: Date | null;\r\n  manager?: any;\r\n  tag?: any;\r\n\r\n  get type(): string {\r\n    return StorageUtilities.getTypeFromName(this.name);\r\n  }\r\n\r\n  get needsSave() {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    return this.modified != null && (this.lastLoadedOrSaved == null || this.modified >= this.lastLoadedOrSaved);\r\n  }\r\n\r\n  get fullPath(): string {\r\n    return this.storageRelativePath;\r\n  }\r\n\r\n  get extendedPath(): string {\r\n    let start = \"\";\r\n\r\n    if (this.parentFolder.storage.storagePath) {\r\n      start = this.parentFolder.storage.storagePath;\r\n    }\r\n\r\n    return start + this.fullPath;\r\n  }\r\n\r\n  get storageRelativePath() {\r\n    return this.parentFolder.storageRelativePath + this.name;\r\n  }\r\n\r\n  getRootRelativePath() {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    return this.getFolderRelativePath(this.parentFolder.storage.rootFolder);\r\n  }\r\n\r\n  getFolderRelativePath(toFolder: IFolder) {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    let result = this.parentFolder.getFolderRelativePath(toFolder);\r\n\r\n    if (result === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return result + this.name;\r\n  }\r\n\r\n  get coreContentLength() {\r\n    if (!this.content) {\r\n      return 0;\r\n    }\r\n\r\n    if (this.isBinary || typeof this.content !== \"string\") {\r\n      return this.content.length;\r\n    }\r\n\r\n    return this.content.replace(/\\s/g, \"\").length;\r\n  }\r\n\r\n  constructor() {\r\n    this.modified = null;\r\n    this.modifiedAtLoad = null;\r\n    this.lastLoadedOrSaved = null;\r\n    this._content = null;\r\n  }\r\n\r\n  contentWasModified(oldContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    let oldVersionContent: IVersionContent | undefined = undefined;\r\n\r\n    if (updateType !== FileUpdateType.versionRestoration && updateType !== FileUpdateType.versionlessEdit) {\r\n      let oldModified = this.modified;\r\n\r\n      if (oldModified === null) {\r\n        oldModified = this.lastLoadedOrSaved;\r\n      }\r\n\r\n      oldVersionContent = {\r\n        id: Utilities.createRandomId(10),\r\n        content: oldContent,\r\n        file: this,\r\n        versionTime: oldModified,\r\n      };\r\n\r\n      this.parentFolder.storage.addVersion(oldVersionContent, updateType ? updateType : FileUpdateType.regularEdit);\r\n    }\r\n\r\n    this.modified = new Date();\r\n\r\n    this.notifyFileContentUpdated();\r\n\r\n    if (this.parentFolder.storage) {\r\n      this.parentFolder.storage.notifyFileContentsUpdated({\r\n        file: this,\r\n        updateType: updateType ? updateType : FileUpdateType.regularEdit,\r\n        sourceId: sourceId,\r\n        priorVersion: oldVersionContent,\r\n      });\r\n    }\r\n  }\r\n\r\n  notifyFileContentUpdated() {\r\n    this.#onFileContentUpdated.dispatch(this, this);\r\n  }\r\n\r\n  async getHash(): Promise<string | undefined> {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent(false);\r\n    }\r\n\r\n    if (this._content === undefined || this._content === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return (md5 as any).md5(this._content);\r\n  }\r\n\r\n  unload() {\r\n    this._content = null;\r\n    this.lastLoadedOrSaved = null;\r\n    // Also clear the manager (typically a Definition object with parsed JSON) to fully release memory\r\n    this.manager = undefined;\r\n    // Clear cached parsed JSON to release memory\r\n    this.commentJsonCache = undefined;\r\n  }\r\n\r\n  dispose() {\r\n    this.manager = undefined;\r\n    this._content = null;\r\n    this.lastLoadedOrSaved = null;\r\n    this.commentJsonCache = undefined;\r\n\r\n    this.isDisposed = true;\r\n  }\r\n\r\n  async exists() {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    await this.loadContent(false);\r\n\r\n    return this._content !== null;\r\n  }\r\n\r\n  getRelativePathFor(file: IFile): string | undefined {\r\n    if (file.parentFolder.storage !== this.parentFolder.storage) {\r\n      return undefined;\r\n    }\r\n    const foldersByPath: { [path: string]: IFolder } = {};\r\n    let targetParentFolder: IFolder | null = file.parentFolder;\r\n\r\n    while (targetParentFolder) {\r\n      foldersByPath[targetParentFolder.storageRelativePath] = targetParentFolder;\r\n      targetParentFolder = targetParentFolder.parentFolder;\r\n    }\r\n\r\n    let myParentFolder: IFolder | null = this.parentFolder;\r\n\r\n    let relativePath = \".\" + myParentFolder.storage.folderDelimiter;\r\n    while (myParentFolder && foldersByPath[myParentFolder.storageRelativePath] === undefined) {\r\n      relativePath += \"..\" + myParentFolder.storage.folderDelimiter;\r\n\r\n      myParentFolder = myParentFolder.parentFolder;\r\n    }\r\n\r\n    if (!myParentFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRelativePath = file.getFolderRelativePath(myParentFolder);\r\n\r\n    if (!folderRelativePath) {\r\n      return undefined;\r\n    }\r\n\r\n    return relativePath + StorageUtilities.ensureNotStartsWithDelimiter(folderRelativePath);\r\n  }\r\n\r\n  setObjectContentIfSemanticallyDifferent(\r\n    value: object | null | undefined,\r\n    updateType?: FileUpdateType,\r\n    sourceId?: string\r\n  ) {\r\n    if (value === null || value === undefined) {\r\n      if (this._content !== null) {\r\n        this.setContent(null, updateType, sourceId);\r\n        this.commentJsonCache = undefined;\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    if (!(typeof this._content === \"string\")) {\r\n      // No existing content - check if the new value has comment metadata\r\n      if (JsonUtilities.hasCommentMetadata(value)) {\r\n        this.setContent(JsonUtilities.stringifyJsonWithComments(value), updateType, sourceId);\r\n        this.commentJsonCache = value;\r\n      } else {\r\n        this.setContent(JSON.stringify(value, null, 2), updateType, sourceId);\r\n      }\r\n      return true;\r\n    }\r\n\r\n    try {\r\n      // If the value has comment metadata, use comment-preserving comparison and stringify\r\n      if (JsonUtilities.hasCommentMetadata(value)) {\r\n        const currentObj = this.commentJsonCache ?? JsonUtilities.parseJsonWithComments(this._content as string);\r\n\r\n        if (!JsonUtilities.jsonObjectsSemanticallyEqual(currentObj, value)) {\r\n          this.setContent(JsonUtilities.stringifyJsonWithComments(value), updateType, sourceId);\r\n          this.commentJsonCache = value;\r\n          return true;\r\n        }\r\n        return false;\r\n      }\r\n\r\n      // Standard path for objects without comment metadata\r\n      const currentObj = JSON.parse(this._content);\r\n\r\n      if (Utilities.consistentStringify(currentObj) !== Utilities.consistentStringify(value)) {\r\n        this.setContent(JSON.stringify(value, null, 2), updateType, sourceId);\r\n        return true;\r\n      }\r\n    } catch (e) {\r\n      // JSON.parse failed \u2014 current content may have comments or trailing commas.\r\n      // Try comment-aware parsing before unconditionally overwriting (prevents phantom edits).\r\n      try {\r\n        const currentObj = JSON.parse(Utilities.fixJsonContent(this._content as string));\r\n        if (Utilities.consistentStringify(currentObj) === Utilities.consistentStringify(value)) {\r\n          return false;\r\n        }\r\n      } catch {\r\n        // Both parses failed \u2014 content is truly unparseable, proceed with overwrite\r\n      }\r\n\r\n      if (JsonUtilities.hasCommentMetadata(value)) {\r\n        this.setContent(JsonUtilities.stringifyJsonWithComments(value), updateType, sourceId);\r\n        this.commentJsonCache = value;\r\n      } else {\r\n        this.setContent(JSON.stringify(value, null, 2), updateType, sourceId);\r\n      }\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async reloadAfterExternalUpdate() {\r\n    let existingContent = this._content;\r\n\r\n    await this.loadContent(true);\r\n\r\n    if (this._content !== existingContent) {\r\n      this.contentWasModified(existingContent, FileUpdateType.externalChange);\r\n    }\r\n  }\r\n\r\n  setContentIfSemanticallyDifferent(value: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    if (value === null) {\r\n      if (this._content !== null) {\r\n        this.setContent(null, updateType, sourceId);\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    if (value instanceof Uint8Array) {\r\n      if (!(this._content instanceof Uint8Array) || this._content.length !== value.length) {\r\n        this.setContent(value, updateType, sourceId);\r\n        return true;\r\n      } else {\r\n        for (let i = 0; i < value.length; i++) {\r\n          if (this._content[i] !== value[i]) {\r\n            this.setContent(value, updateType, sourceId);\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    } else if (typeof value === \"string\") {\r\n      if (!(typeof this._content === \"string\")) {\r\n        this.setContent(value, updateType, sourceId);\r\n\r\n        return true;\r\n      } else {\r\n        if (this.type === \"json\") {\r\n          try {\r\n            const currentObj = JSON.parse(this._content);\r\n            const newObj = JSON.parse(value);\r\n\r\n            if (Utilities.consistentStringify(currentObj) !== Utilities.consistentStringify(newObj)) {\r\n              return this.setContent(value, updateType, sourceId);\r\n            }\r\n          } catch (e) {\r\n            return this.setContent(value);\r\n          }\r\n        } else {\r\n          if (this._content.length !== value.length) {\r\n            return this.setContent(value, updateType, sourceId);\r\n          }\r\n\r\n          for (let i = 0; i < value.length; i++) {\r\n            if (this._content[i] !== value[i]) {\r\n              return this.setContent(value, updateType, sourceId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  abstract scanForChanges(): Promise<void>;\r\n  abstract deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean>;\r\n  abstract moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n  abstract loadContent(force?: boolean): Promise<Date>;\r\n  abstract setContent(value: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string): boolean;\r\n  abstract saveContent(): Promise<Date>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ZipFolder from \"./ZipFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport FileBase from \"./FileBase\";\r\nimport JSZip from \"jszip\";\r\nimport StorageUtilities, { EncodingType } from \"./StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ZipFile extends FileBase implements IFile {\r\n  _name: string;\r\n  _parentFolder: ZipFolder;\r\n  _jszipo: JSZip.JSZipObject | null;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    return StorageUtilities.ensureEndsWithDelimiter(this._parentFolder.fullPath) + this.name;\r\n  }\r\n\r\n  get parentFolder(): ZipFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  updateZipNativeFile(thisFileObject: JSZip.JSZipObject) {\r\n    this._jszipo = thisFileObject;\r\n  }\r\n\r\n  constructor(parentFolder: ZipFolder, fileName: string, thisFileObject: JSZip.JSZipObject | null) {\r\n    super();\r\n\r\n    this._jszipo = thisFileObject;\r\n    this._parentFolder = parentFolder;\r\n    this._name = fileName;\r\n\r\n    this.modified = null;\r\n    this.lastLoadedOrSaved = null;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for zip storage\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async loadContent(force?: boolean, forceEncoding?: EncodingType): Promise<Date> {\r\n    if (force || !this.lastLoadedOrSaved) {\r\n      if (this._jszipo !== null) {\r\n        const type = forceEncoding ?? StorageUtilities.getEncodingByFileName(this.name);\r\n\r\n        if (type === EncodingType.ByteBuffer) {\r\n          try {\r\n            this._content = await this._jszipo.async(\"uint8array\");\r\n          } catch (e: any) {\r\n            this.errorStateMessage = e.toString();\r\n          } /*, (metadata) => {\r\n            Log.verbose(\"Extracting \" + this.storageRelativePath + \" (\" + metadata.percent.toFixed(2) + \")%\");\r\n          });*/\r\n\r\n          Log.assert(this._content !== null, \"Unexpectedly could not load content.\");\r\n        } else {\r\n          try {\r\n            this._content = await this._jszipo.async(\"string\");\r\n          } catch (e: any) {\r\n            this.errorStateMessage = e.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    this._parentFolder.storage.modified = this.modified;\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(force?: boolean): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.needsSave || force === true) {\r\n      this.lastLoadedOrSaved = new Date();\r\n\r\n      if (this.content !== null) {\r\n        // Log.debug(\"Saving '\" + this.content.length + \"' content to '\" + this.name + \"' within zip\");\r\n\r\n        this._parentFolder.storage.modified = this.modified;\r\n        this._parentFolder.zip.file(this.name, this.content);\r\n      }\r\n    }\r\n\r\n    if (this.lastLoadedOrSaved === null) {\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"./IFile\";\r\nimport IFolder from \"./IFolder\";\r\n\r\nexport default class AllFolderFileIterator implements AsyncIterator<IFile> {\r\n  folderStack: IFolder[] = [];\r\n  folderFileIndices: number[] = [];\r\n  folderFolderIndices: number[] = [];\r\n  currentDepth = 0;\r\n\r\n  constructor(rootFolder: IFolder) {\r\n    this.folderStack[0] = rootFolder;\r\n    this.folderFileIndices[0] = 0;\r\n    this.folderFolderIndices[0] = 0;\r\n  }\r\n\r\n  async next(): Promise<IteratorResult<IFile, any>> {\r\n    while (this.currentDepth >= 0) {\r\n      if (this.folderFileIndices[this.currentDepth] === 0 && this.folderFolderIndices[this.currentDepth] === 0) {\r\n        await this.folderStack[this.currentDepth].load(false);\r\n      }\r\n\r\n      // iterate over files in the currentdepth folder\r\n      if (this.folderFileIndices[this.currentDepth] < this.folderStack[this.currentDepth].fileCount) {\r\n        const file = this.getNthFile(this.folderStack[this.currentDepth], this.folderFileIndices[this.currentDepth]);\r\n\r\n        if (file) {\r\n          this.folderFileIndices[this.currentDepth]++;\r\n          return { value: file, done: false };\r\n        } else {\r\n          throw new Error();\r\n        }\r\n      } /* now look over child folders */ else if (\r\n        this.folderFolderIndices[this.currentDepth] < this.folderStack[this.currentDepth].folderCount\r\n      ) {\r\n        const folder = this.getNthFolder(\r\n          this.folderStack[this.currentDepth],\r\n          this.folderFolderIndices[this.currentDepth]\r\n        );\r\n\r\n        this.folderFolderIndices[this.currentDepth]++;\r\n\r\n        this.currentDepth++;\r\n\r\n        if (folder) {\r\n          this.folderFileIndices[this.currentDepth] = 0;\r\n          this.folderFolderIndices[this.currentDepth] = 0;\r\n          this.folderStack[this.currentDepth] = folder;\r\n        } else {\r\n          throw new Error();\r\n        }\r\n      } else {\r\n        this.currentDepth--;\r\n      }\r\n    }\r\n\r\n    return {\r\n      value: undefined,\r\n      done: true,\r\n    };\r\n  }\r\n\r\n  getNthFile(folder: IFolder, index: number) {\r\n    let count = 0;\r\n\r\n    for (const fileName in folder.files) {\r\n      if (count === index) {\r\n        return folder.files[fileName];\r\n      }\r\n\r\n      count++;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getNthFolder(folder: IFolder, index: number) {\r\n    let count = 0;\r\n\r\n    for (const fileName in folder.folders) {\r\n      if (count === index) {\r\n        return folder.folders[fileName];\r\n      }\r\n\r\n      count++;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder, { FolderErrorStatus } from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport IStorage, { IFolderMove } from \"./IStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport AllFolderFileIterator from \"./AllFolderFileIterator\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport StorageBase from \"./StorageBase\";\r\n\r\nexport default abstract class FolderBase implements IFolder {\r\n  abstract get name(): string;\r\n\r\n  get ensuredName(): string {\r\n    return this.name;\r\n  }\r\n\r\n  isDisposed: boolean = false;\r\n  #lastLoadedOrSaved: Date | null;\r\n\r\n  abstract get parentFolder(): IFolder | null;\r\n  abstract get storage(): IStorage;\r\n  manager?: any;\r\n\r\n  #onFolderMoved = new EventDispatcher<FolderBase, IFolderMove>();\r\n  #onChildFolderMoved = new EventDispatcher<FolderBase, IFolderMove>();\r\n\r\n  errorStatus?: FolderErrorStatus;\r\n\r\n  public get onFolderMoved() {\r\n    return this.#onFolderMoved.asEvent();\r\n  }\r\n\r\n  public get onChildFolderMoved() {\r\n    return this.#onChildFolderMoved.asEvent();\r\n  }\r\n\r\n  get isLoaded() {\r\n    return this.#lastLoadedOrSaved !== null;\r\n  }\r\n\r\n  get canIgnore() {\r\n    return StorageUtilities.isIgnorableFolder(this.name);\r\n  }\r\n\r\n  get allFiles(): AsyncIterable<IFile> {\r\n    let parentFolder = this;\r\n\r\n    return {\r\n      [Symbol.asyncIterator](): AsyncIterator<IFile> {\r\n        return new AllFolderFileIterator(parentFolder);\r\n      },\r\n    };\r\n  }\r\n\r\n  get folderCount() {\r\n    let i = 0;\r\n\r\n    for (const folderName in this.folders) {\r\n      if (this.folders[folderName]) {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return i;\r\n  }\r\n\r\n  get fileCount() {\r\n    let i = 0;\r\n\r\n    // eslint-disable-next-line\r\n    for (const fileName in this.files) {\r\n      if (this.files[fileName]) {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return i;\r\n  }\r\n\r\n  get storageRelativePath() {\r\n    if (this.parentFolder === null) {\r\n      return \"/\";\r\n    } else {\r\n      return this.parentFolder.storageRelativePath + this.name + \"/\";\r\n    }\r\n  }\r\n\r\n  get lastLoadedOrSaved() {\r\n    return this.#lastLoadedOrSaved;\r\n  }\r\n\r\n  get fullPath(): string {\r\n    return this.storageRelativePath;\r\n  }\r\n\r\n  get extendedPath(): string {\r\n    let start = \"\";\r\n\r\n    if (this.storage.storagePath) {\r\n      start = this.storage.storagePath;\r\n    }\r\n\r\n    let result = start + this.fullPath;\r\n\r\n    if (!result.endsWith(this.storage.folderDelimiter)) {\r\n      result += this.storage.folderDelimiter;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  constructor() {\r\n    this.#lastLoadedOrSaved = null;\r\n  }\r\n\r\n  updateLastLoadedOrSaved() {\r\n    this.#lastLoadedOrSaved = new Date();\r\n  }\r\n\r\n  getFolderRelativePath(toFolder: IFolder): string | undefined {\r\n    if (toFolder.storage !== this.storage && this.storage.storagePath) {\r\n      const parentPath = toFolder.storageRelativePath;\r\n\r\n      if (\r\n        parentPath &&\r\n        this.extendedPath &&\r\n        this.extendedPath.startsWith(parentPath) &&\r\n        StorageUtilities.ensureEndsWithDelimiter(parentPath)\r\n      ) {\r\n        const subPath = this.extendedPath.substring(parentPath.length - 1);\r\n\r\n        return subPath;\r\n      }\r\n\r\n      return this.extendedPath;\r\n    } else if (this === toFolder) {\r\n      return \"/\";\r\n    } else if (this.parentFolder === null) {\r\n      return undefined;\r\n    } else {\r\n      const result = this.parentFolder.getFolderRelativePath(toFolder);\r\n\r\n      if (result === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      return result + this.name + \"/\";\r\n    }\r\n  }\r\n\r\n  dispose() {\r\n    this.manager = undefined;\r\n\r\n    if (this.folders) {\r\n      for (const folderName in this.folders) {\r\n        const folder = this.folders[folderName];\r\n\r\n        if (folder) {\r\n          folder.dispose();\r\n          this.folders[folderName] = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.files) {\r\n      for (const fileName in this.files) {\r\n        const file = this.files[fileName];\r\n\r\n        if (file) {\r\n          file.dispose();\r\n          this.files[fileName] = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.isDisposed = true;\r\n  }\r\n\r\n  async setStructureFromFileList(fileList: string[]) {\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    for (const file of fileList) {\r\n      let folderPath = StorageUtilities.getFolderPath(file);\r\n\r\n      if (folderPath) {\r\n        folderPath = StorageUtilities.ensureEndsDelimited(folderPath);\r\n\r\n        if (folderPath.length > 2) {\r\n          const folder = (await this.ensureFolderFromRelativePath(folderPath, true)) as FolderBase;\r\n\r\n          folder.updateLastLoadedOrSaved();\r\n          let parentFolder = folder.parentFolder as FolderBase;\r\n\r\n          while (parentFolder && parentFolder !== this) {\r\n            parentFolder.updateLastLoadedOrSaved();\r\n\r\n            parentFolder = parentFolder.parentFolder as FolderBase;\r\n          }\r\n        }\r\n\r\n        await this.ensureFileFromRelativePath(file, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  isSameFolder(newFolderStorageRelativePath: string) {\r\n    if (\r\n      StorageUtilities.canonicalizePath(newFolderStorageRelativePath) ===\r\n      StorageUtilities.canonicalizePath(this.storageRelativePath)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: IFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.folders[nameCanon] = folder as this;\r\n    }\r\n  }\r\n\r\n  _removeExistingFolderFromParent(folder: IFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.folders[nameCanon] = undefined;\r\n    }\r\n  }\r\n\r\n  folderExists(name: string): boolean {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    return !Utilities.isNullOrUndefined(this.folders[nameCanon]);\r\n  }\r\n\r\n  fileExists(name: string): boolean {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    return !Utilities.isNullOrUndefined(this.files[nameCanon]);\r\n  }\r\n\r\n  async deleteFileFromRelativePath(path: string): Promise<boolean> {\r\n    path = this.canonicalizePath(path);\r\n\r\n    const file = await this.getFileFromRelativePath(path);\r\n\r\n    if (file !== undefined) {\r\n      return await file.deleteThisFile();\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  canonicalizePath(path: string) {\r\n    return path.replace(/\\\\/g, \"/\");\r\n  }\r\n\r\n  async getFileFromRelativePath(path: string): Promise<IFile | undefined> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    await this.ensureExists();\r\n    await this.load(false);\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const fileName = path.substring(1, path.length);\r\n\r\n      return this.files[StorageUtilities.canonicalizeName(fileName)];\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      const folder = this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n\r\n      if (folder === undefined || folder === null) {\r\n        return undefined;\r\n      }\r\n\r\n      return await (folder as IFolder).getFileFromRelativePath(path.substring(nextSlash, path.length));\r\n    }\r\n  }\r\n\r\n  clearAllManagers() {\r\n    if (this.manager) {\r\n      this.manager = undefined;\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        file.manager = undefined;\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        folder.clearAllManagers();\r\n      }\r\n    }\r\n  }\r\n\r\n  async getFolderFromRelativePath(path: string): Promise<IFolder | undefined> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path === \"/\" || path === \"\\\\\") {\r\n      return this;\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    await this.ensureExists();\r\n    await this.load(false);\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const folderName = path.substring(1, path.length);\r\n\r\n      return this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n    } else {\r\n      let folderName = path.substring(1, nextSlash);\r\n\r\n      folderName = StorageUtilities.canonicalizeName(folderName);\r\n\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder === undefined || folder === null) {\r\n        return undefined;\r\n      }\r\n\r\n      const nextPath = path.substring(nextSlash, path.length);\r\n\r\n      if (nextPath === \"/\" || nextPath === \"\\\\\") {\r\n        return folder;\r\n      }\r\n\r\n      return await (folder as IFolder).getFolderFromRelativePath(nextPath);\r\n    }\r\n  }\r\n\r\n  getFolderByIndex(index: number) {\r\n    let curIndex = 0;\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder && curIndex === index) {\r\n        return folder;\r\n      }\r\n\r\n      if (folder) {\r\n        curIndex++;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getSortedFolderKeys(): string[] {\r\n    return Object.keys(this.folders).sort();\r\n  }\r\n\r\n  getSortedFileKeys(): string[] {\r\n    return Object.keys(this.files).sort();\r\n  }\r\n\r\n  getSummary() {\r\n    let str = \"P: \" + this.fullPath + \" FO:\";\r\n\r\n    for (const folderName in this.folders) {\r\n      str += \" \" + folderName;\r\n    }\r\n\r\n    str += \" FI:\";\r\n\r\n    for (const fileName in this.files) {\r\n      str += \" \" + fileName;\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  getFolderFromRelativePathLocal(path: string): IFolder | undefined {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path === \"/\" || path === \"\\\\\") {\r\n      return this;\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const folderName = path.substring(1, path.length);\r\n\r\n      return this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      let folder = this.folders[StorageUtilities.canonicalizeName(folderName)];\r\n\r\n      if (folder === undefined || folder === null) {\r\n        if (folderName.endsWith(\"#\")) {\r\n          const storageFile =\r\n            this.files[StorageUtilities.canonicalizeName(folderName.substring(0, folderName.length - 1))];\r\n\r\n          if (storageFile) {\r\n            if (storageFile.fileContainerStorage) {\r\n              folder = storageFile.fileContainerStorage.rootFolder;\r\n            }\r\n          }\r\n        }\r\n        if (folder === undefined || folder === null) {\r\n          return undefined;\r\n        }\r\n      }\r\n\r\n      const nextPath = path.substring(nextSlash, path.length);\r\n\r\n      if (nextPath === \"/\" || nextPath === \"\\\\\") {\r\n        return folder;\r\n      }\r\n\r\n      return (folder as IFolder).getFolderFromRelativePathLocal(nextPath);\r\n    }\r\n  }\r\n\r\n  async saveAll(force?: boolean): Promise<boolean> {\r\n    // Log.verbose(\"Saving all at \" + this.storageRelativePath);\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file !== undefined && (file.needsSave || force)) {\r\n        await file.saveContent(force);\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder !== undefined && !folder.errorStatus) {\r\n        await folder.saveAll(force);\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureFolderFromRelativePath(path: string, ignoreLoad?: boolean): Promise<IFolder> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path === \"/\" || path === \"\\\\\") {\r\n      return this;\r\n    }\r\n\r\n    if (path.startsWith(\"./\")) {\r\n      path = path.substring(1);\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[path.length - 1] !== \"/\") {\r\n      path = path + \"/\";\r\n    }\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    if (!ignoreLoad) {\r\n      await this.ensureExists();\r\n      await this.load(false);\r\n    }\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      throw new Error(\"Unexpected path format error\");\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      const folder = this.ensureFolder(folderName) as FolderBase;\r\n\r\n      if (nextSlash === path.length - 1) {\r\n        return folder;\r\n      } else {\r\n        return folder.ensureFolderFromRelativePath(path.substring(nextSlash, path.length), ignoreLoad);\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureFileFromRelativePath(path: string, ignoreLoad?: boolean): Promise<IFile> {\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    if (path.length < 2) {\r\n      throw Error(\"Path is too short.\");\r\n    }\r\n\r\n    path = this.canonicalizePath(path);\r\n\r\n    if (path[0] !== \"/\") {\r\n      throw Error(\"Storage relative path '\" + path + \"' is not in the right format.\");\r\n    }\r\n\r\n    await this.ensureExists();\r\n\r\n    if (!ignoreLoad) {\r\n      await this.load(false);\r\n    }\r\n\r\n    const nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash < 0) {\r\n      const file = this.ensureFile(path.substring(1, path.length));\r\n\r\n      return file;\r\n    } else {\r\n      const folderName = path.substring(1, nextSlash);\r\n\r\n      const folder = this.ensureFolder(folderName) as FolderBase;\r\n\r\n      const file = await folder.ensureFileFromRelativePath(path.substring(nextSlash, path.length), ignoreLoad);\r\n\r\n      return file;\r\n    }\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    const file = this.files[nameCanon];\r\n\r\n    if (file !== undefined) {\r\n      return await file.deleteThisFile();\r\n    }\r\n\r\n    this.files[nameCanon] = undefined;\r\n\r\n    return false;\r\n  }\r\n\r\n  removeFolder(name: string): boolean {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      throw new Error();\r\n    }\r\n\r\n    const exists = this.folders[nameCanon] !== undefined;\r\n\r\n    this.folders[nameCanon] = undefined;\r\n\r\n    return exists;\r\n  }\r\n\r\n  async rename(name: string): Promise<boolean> {\r\n    let targetPath = name;\r\n\r\n    if (this.parentFolder !== null) {\r\n      targetPath = this.storage.joinPath(this.parentFolder.storageRelativePath, targetPath);\r\n    }\r\n\r\n    return await this.moveTo(targetPath);\r\n  }\r\n\r\n  async recursiveDeleteThisFolder() {\r\n    let isAllDeletes = await this.recursiveDeleteContentsOfThisFolder();\r\n\r\n    this.removeMeFromParent();\r\n\r\n    return isAllDeletes;\r\n  }\r\n\r\n  async recursiveDeleteContentsOfThisFolder() {\r\n    let isAllDeletes = true;\r\n\r\n    await this.load(true);\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        if (!(await folder.deleteThisFolder())) {\r\n          isAllDeletes = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        if (!(await file.deleteThisFile(true))) {\r\n          isAllDeletes = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    return isAllDeletes;\r\n  }\r\n\r\n  notifyFolderMoved(folderMove: IFolderMove) {\r\n    this.#onFolderMoved.dispatch(this, folderMove);\r\n\r\n    if (this.parentFolder) {\r\n      (this.parentFolder as FolderBase).notifyChildFolderMoved(folderMove);\r\n    }\r\n\r\n    (this.storage as StorageBase).notifyFolderMoved(folderMove);\r\n  }\r\n\r\n  notifyChildFolderMoved(folderMove: IFolderMove) {\r\n    this.#onChildFolderMoved.dispatch(this, folderMove);\r\n\r\n    if (this.parentFolder) {\r\n      (this.parentFolder as FolderBase).notifyChildFolderMoved(folderMove);\r\n    }\r\n  }\r\n\r\n  removeMeFromParent() {\r\n    if (this.parentFolder) {\r\n      this.parentFolder.removeFolder(this.name);\r\n    }\r\n  }\r\n\r\n  abstract scanForChanges(): Promise<void>;\r\n\r\n  abstract deleteThisFolder(): Promise<boolean>;\r\n  abstract deleteAllFolderContents(): Promise<boolean>;\r\n\r\n  abstract exists(): Promise<boolean>;\r\n  abstract ensureExists(): Promise<boolean>;\r\n\r\n  abstract folders: { [name: string]: IFolder | undefined };\r\n  abstract files: { [name: string]: IFile | undefined };\r\n  abstract moveTo(newStorageRelativePath: string): Promise<boolean>;\r\n  abstract load(force?: boolean): Promise<Date>;\r\n\r\n  abstract ensureFolder(name: string): IFolder;\r\n  abstract ensureFile(name: string): IFile;\r\n\r\n  abstract createFile(name: string): Promise<IFile>;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport ZipFile from \"./ZipFile\";\r\nimport ZipStorage from \"./ZipStorage\";\r\nimport JSZip from \"jszip\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport FolderBase from \"./FolderBase\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ZipFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _parentPath: string;\r\n\r\n  folders: { [id: string]: ZipFolder | undefined };\r\n  files: { [id: string]: ZipFile | undefined };\r\n\r\n  private _storage: ZipStorage;\r\n  private _parentFolder: ZipFolder | null;\r\n\r\n  private _jsz: JSZip;\r\n\r\n  get ensuredName(): string {\r\n    if (this.name.length > 0) {\r\n      return this.name;\r\n    }\r\n\r\n    if (this.storage.name) {\r\n      let name = this.storage.name;\r\n\r\n      const lastPeriod = name.lastIndexOf(\".\");\r\n\r\n      if (lastPeriod > 0) {\r\n        name = name.substring(0, lastPeriod);\r\n      }\r\n\r\n      return name;\r\n    }\r\n\r\n    return \"folder\";\r\n  }\r\n\r\n  get zip() {\r\n    return this._jsz;\r\n  }\r\n\r\n  set zip(newZip: JSZip) {\r\n    this._jsz = newZip;\r\n  }\r\n\r\n  get storage(): ZipStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): ZipFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    if (!this.parentFolder) {\r\n      return \"/\";\r\n    }\r\n\r\n    return StorageUtilities.ensureEndsWithDelimiter(this._parentPath) + this.name;\r\n  }\r\n\r\n  constructor(\r\n    storage: ZipStorage,\r\n    jszipThisFolder: JSZip,\r\n    parentFolder: ZipFolder | null,\r\n    parentPath: string,\r\n    folderName: string\r\n  ) {\r\n    super();\r\n\r\n    this._jsz = jszipThisFolder;\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._parentPath = parentPath;\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for zip storage\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists() {\r\n    return true;\r\n  }\r\n\r\n  ensureFile(name: string): ZipFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      throw new Error();\r\n    }\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      const zipObject = this._jsz.file(name);\r\n\r\n      candFile = new ZipFile(this, name, zipObject);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  ensureFolder(name: string): ZipFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      throw new Error();\r\n    }\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      const zipFolder = this._jsz.folder(name);\r\n\r\n      if (zipFolder == null) {\r\n        throw new Error(\"unexpected inability to create a zip file folder\");\r\n      }\r\n\r\n      candFolder = new ZipFolder(this._storage, zipFolder as JSZip, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    throw new Error(\"Deletion of file not supported\");\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    this._jsz.forEach((relativePath: string, file: JSZip.JSZipObject) => {\r\n      // some zip files use \\ as a delimiter (??)\r\n      relativePath = relativePath.replace(/\\\\/gi, ZipStorage.slashFolderDelimiter);\r\n\r\n      const countDelim = Utilities.countChar(relativePath, ZipStorage.slashFolderDelimiter);\r\n\r\n      if (countDelim === 0) {\r\n        const nameCanon = StorageUtilities.canonicalizeName(relativePath);\r\n\r\n        if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n          throw new Error();\r\n        }\r\n\r\n        let candFile = this.files[nameCanon];\r\n\r\n        if (\r\n          candFile == null &&\r\n          (this._storage.allowAllFiles || StorageUtilities.isUsableFile(StorageUtilities.getLeafName(relativePath)))\r\n        ) {\r\n          candFile = new ZipFile(this, relativePath, file);\r\n\r\n          this.files[nameCanon] = candFile;\r\n        }\r\n      } else if (countDelim >= 1) {\r\n        let lastFolder: IFolder = this;\r\n        let subPath = relativePath;\r\n\r\n        if (subPath.startsWith(\"/\")) {\r\n          subPath = subPath.substring(1);\r\n        }\r\n\r\n        let nextDelim = subPath.indexOf(ZipStorage.slashFolderDelimiter);\r\n\r\n        while (nextDelim > 0) {\r\n          lastFolder = lastFolder.ensureFolder(subPath.substring(0, nextDelim));\r\n\r\n          subPath = subPath.substring(nextDelim + 1);\r\n          nextDelim = subPath.indexOf(ZipStorage.slashFolderDelimiter);\r\n        }\r\n\r\n        if (subPath.length > 0 && file) {\r\n          Log.assert(!file.dir, \"Unexpected non directory file.\");\r\n          if (this._storage.allowAllFiles || StorageUtilities.isUsableFile(StorageUtilities.getLeafName(subPath))) {\r\n            const zipFile = lastFolder.ensureFile(subPath) as ZipFile;\r\n            zipFile.updateZipNativeFile(file);\r\n          } else {\r\n            Log.message(\"Unexpected file type found in zip file: \" + subPath);\r\n          }\r\n        }\r\n      }\r\n    });\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * StorageBase.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This is the base implementation for all storage types in MCTools.\r\n * It provides the event dispatching infrastructure for file/folder change notifications.\r\n *\r\n * EVENTS (for real-time synchronization):\r\n * ---------------------------------------\r\n * - onFileAdded: Dispatched by notifyFileAdded() when a new file is detected\r\n * - onFileRemoved: Dispatched by notifyFileRemoved() when a file is deleted\r\n * - onFileContentsUpdated: Dispatched by notifyFileContentsUpdated() when content changes\r\n * - onFolderAdded: Dispatched by notifyFolderAdded() when a folder is created\r\n * - onFolderRemoved: Dispatched by notifyFolderRemoved() when a folder is deleted\r\n * - onFolderMoved: Dispatched by notifyFolderMoved() when a folder is renamed/moved\r\n *\r\n * These events power the sync pipeline:\r\n *   NodeStorage (watcher) -> HttpServer -> WebSocket -> HttpStorage -> MCWorld -> WorldView\r\n *\r\n * SUBCLASSES:\r\n * -----------\r\n * - NodeStorage: Local file system (server-side, adds fs.watch() support)\r\n * - HttpStorage: HTTP-based storage (client-side, receives WebSocket notifications)\r\n * - ZipStorage: ZIP file storage (in-memory)\r\n * - BrowserStorage: Browser local storage\r\n * - VirtualFolderStorage: Aggregates multiple folders\r\n *\r\n * HOW TO ADD A NEW STORAGE TYPE:\r\n * ------------------------------\r\n * 1. Extend StorageBase\r\n * 2. Implement abstract rootFolder and getAvailable()\r\n * 3. Create corresponding FolderBase and FileBase subclasses\r\n * 4. If supporting watching, implement IWatchableStorage from IStorageWatcher.ts\r\n * 5. Call notify*() methods when changes are detected\r\n */\r\n\r\nimport IStorage, { IFileUpdateEvent, IFolderMove, StorageErrorStatus } from \"./IStorage\";\r\nimport IFolder from \"./IFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\n\r\nexport const MaxRecentVersionsToConsider = 100;\r\nexport const WeRecentlyChangedItThresholdMs = 50;\r\nexport default abstract class StorageBase implements IStorage {\r\n  abstract rootFolder: IFolder;\r\n  isContentUpdated: boolean = false;\r\n  readOnly: boolean = false;\r\n  scanForChangesPhase: number = 0;\r\n\r\n  static readonly slashFolderDelimiter = \"/\";\r\n\r\n  priorVersions: IVersionContent[] = [];\r\n  currentVersionId: string | undefined;\r\n\r\n  containerFile?: IFile | undefined;\r\n\r\n  #onFileAdded = new EventDispatcher<StorageBase, IFile>();\r\n  #onFileRemoved = new EventDispatcher<StorageBase, string>();\r\n  #onFileContentsUpdated = new EventDispatcher<StorageBase, IFileUpdateEvent>();\r\n  #onFolderMoved = new EventDispatcher<StorageBase, IFolderMove>();\r\n\r\n  #onFolderAdded = new EventDispatcher<StorageBase, IFolder>();\r\n  #onFolderRemoved = new EventDispatcher<StorageBase, string>();\r\n\r\n  #storagePath: string | undefined;\r\n\r\n  available?: boolean | undefined;\r\n\r\n  errorStatus?: StorageErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  channelId?: string;\r\n\r\n  get folderDelimiter() {\r\n    return StorageBase.slashFolderDelimiter;\r\n  }\r\n\r\n  public get storagePath() {\r\n    return this.#storagePath;\r\n  }\r\n\r\n  public set storagePath(newStoragePath: string | undefined) {\r\n    this.#storagePath = newStoragePath;\r\n  }\r\n\r\n  public resetContentUpdated() {\r\n    this.isContentUpdated = false;\r\n  }\r\n\r\n  public get onFileAdded() {\r\n    return this.#onFileAdded.asEvent();\r\n  }\r\n\r\n  public get onFileRemoved() {\r\n    return this.#onFileRemoved.asEvent();\r\n  }\r\n\r\n  public get onFileContentsUpdated() {\r\n    return this.#onFileContentsUpdated.asEvent();\r\n  }\r\n\r\n  public get onFolderMoved() {\r\n    return this.#onFolderMoved.asEvent();\r\n  }\r\n\r\n  public get onFolderAdded() {\r\n    return this.#onFolderAdded.asEvent();\r\n  }\r\n\r\n  public get onFolderRemoved() {\r\n    return this.#onFolderRemoved.asEvent();\r\n  }\r\n\r\n  async ensureFolderFromStorageRelativePath(path: string) {\r\n    if (path.startsWith(\"/\" + this.rootFolder.name + \"/\")) {\r\n      path = path.substring(this.rootFolder.name.length + 1);\r\n    }\r\n\r\n    return this.rootFolder.ensureFolderFromRelativePath(path);\r\n  }\r\n\r\n  notifyFileAdded(file: IFile) {\r\n    this.#onFileAdded.dispatch(this, file);\r\n  }\r\n\r\n  notifyFolderAdded(folder: IFolder) {\r\n    this.#onFolderAdded.dispatch(this, folder);\r\n  }\r\n\r\n  notifyFolderRemoved(folder: IFolder) {\r\n    this.#onFolderRemoved.dispatch(this, folder.name);\r\n  }\r\n\r\n  notifyFileContentsUpdated(fileEvent: IFileUpdateEvent) {\r\n    this.isContentUpdated = true;\r\n\r\n    this.#onFileContentsUpdated.dispatch(this, fileEvent);\r\n  }\r\n\r\n  notifyFolderMoved(folderMove: IFolderMove) {\r\n    this.isContentUpdated = true;\r\n    this.#onFolderMoved.dispatch(this, folderMove);\r\n  }\r\n\r\n  notifyFileRemoved(fileName: string) {\r\n    this.#onFileRemoved.dispatch(this, fileName);\r\n  }\r\n\r\n  async incrementalScanForChanges() {\r\n    const folders = this.getFolderList();\r\n\r\n    this.scanForChangesPhase++;\r\n    this.scanForChangesPhase %= folders.length;\r\n\r\n    const folderToScan = folders[this.scanForChangesPhase];\r\n\r\n    await folderToScan.scanForChanges();\r\n\r\n    for (const fileKey in folderToScan.files) {\r\n      const file = folderToScan.files[fileKey];\r\n\r\n      if (file) {\r\n        await file.scanForChanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  async scanForChanges() {\r\n    const folders = this.getFolderList();\r\n\r\n    for (const folder of folders) {\r\n      await folder.scanForChanges();\r\n\r\n      for (const fileKey in folder.files) {\r\n        const file = folder.files[fileKey];\r\n\r\n        if (file) {\r\n          await file.scanForChanges();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async notifyPathWasUpdatedExternal(path: string) {\r\n    const dtNow = new Date().getTime();\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    for (let i = 0; i < this.priorVersions.length && i < MaxRecentVersionsToConsider; i++) {\r\n      const pv = this.priorVersions[i];\r\n\r\n      if (\r\n        pv.versionTime &&\r\n        StorageUtilities.canonicalizePath(pv.file.fullPath) === StorageUtilities.canonicalizePath(path)\r\n      ) {\r\n        if (Math.abs(pv.versionTime.getTime() - dtNow) < WeRecentlyChangedItThresholdMs) {\r\n          // we updated the file very recently, so ignore this change, \"it's probably us\"\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (path.startsWith(this.rootFolder.fullPath)) {\r\n      path = StorageUtilities.ensureStartsWithDelimiter(path.substring(this.rootFolder.fullPath.length));\r\n\r\n      const file = await this.rootFolder.getFileFromRelativePath(path);\r\n\r\n      if (file) {\r\n        await file.scanForChanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a new file is detected externally (e.g., by fs.watch in Electron).\r\n   * Creates the file object in the folder tree and fires the onFileAdded event.\r\n   *\r\n   * @param path The full path to the newly added file\r\n   */\r\n  async notifyPathWasAddedExternal(path: string) {\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    if (path.startsWith(this.rootFolder.fullPath)) {\r\n      const relativePath = StorageUtilities.ensureStartsWithDelimiter(path.substring(this.rootFolder.fullPath.length));\r\n\r\n      // Get the parent folder path and filename\r\n      const lastDelim = relativePath.lastIndexOf(\"/\");\r\n      if (lastDelim < 0) {\r\n        return; // No valid path structure\r\n      }\r\n\r\n      const folderPath = relativePath.substring(0, lastDelim);\r\n      const fileName = relativePath.substring(lastDelim + 1);\r\n\r\n      if (!fileName) {\r\n        // This is a folder being added, not a file\r\n        const folder = await this.rootFolder.ensureFolderFromRelativePath(relativePath);\r\n        if (folder) {\r\n          this.notifyFolderAdded(folder);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Ensure the parent folder exists in our tree\r\n      const parentFolder = await this.rootFolder.ensureFolderFromRelativePath(folderPath || \"/\");\r\n\r\n      if (parentFolder) {\r\n        // Create the file in the folder tree\r\n        const file = parentFolder.ensureFile(fileName);\r\n\r\n        // Fire the event so subscribers (like Project) can react\r\n        this.notifyFileAdded(file);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a file is deleted externally (e.g., by fs.watch in Electron).\r\n   * Removes the file from the folder tree and fires the onFileRemoved event.\r\n   *\r\n   * @param path The full path to the removed file\r\n   */\r\n  async notifyPathWasRemovedExternal(path: string) {\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    if (path.startsWith(this.rootFolder.fullPath)) {\r\n      const relativePath = StorageUtilities.ensureStartsWithDelimiter(path.substring(this.rootFolder.fullPath.length));\r\n\r\n      // Get the parent folder path and filename\r\n      const lastDelim = relativePath.lastIndexOf(\"/\");\r\n      if (lastDelim < 0) {\r\n        return;\r\n      }\r\n\r\n      const folderPath = relativePath.substring(0, lastDelim);\r\n      const fileName = relativePath.substring(lastDelim + 1);\r\n\r\n      if (!fileName) {\r\n        // This might be a folder being removed\r\n        // Try to find and remove it from the parent\r\n        const parentPath = folderPath.substring(0, folderPath.lastIndexOf(\"/\")) || \"/\";\r\n        const parentFolder = await this.rootFolder.getFolderFromRelativePath(parentPath);\r\n        const removedFolderName = folderPath.substring(folderPath.lastIndexOf(\"/\") + 1);\r\n\r\n        if (parentFolder && removedFolderName && parentFolder.folders[removedFolderName]) {\r\n          const removedFolder = parentFolder.folders[removedFolderName];\r\n          if (removedFolder) {\r\n            this.notifyFolderRemoved(removedFolder);\r\n          }\r\n          delete parentFolder.folders[removedFolderName];\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Try to find the parent folder\r\n      const parentFolder = await this.rootFolder.getFolderFromRelativePath(folderPath || \"/\");\r\n\r\n      if (parentFolder) {\r\n        // Check if the file exists in our tree\r\n        const file = parentFolder.files[fileName];\r\n\r\n        if (file) {\r\n          // Fire the event so subscribers can react\r\n          this.notifyFileRemoved(file.fullPath);\r\n\r\n          // Remove from the folder's files collection\r\n          delete parentFolder.files[fileName];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getFolderList() {\r\n    const folders: IFolder[] = [];\r\n\r\n    this._addFolders(this.rootFolder, folders);\r\n\r\n    return folders;\r\n  }\r\n\r\n  _addFolders(folder: IFolder, folderList: IFolder[]) {\r\n    folderList.push(folder);\r\n\r\n    for (const folderKey in folder.folders) {\r\n      const childFolder = folder.folders[folderKey];\r\n      if (childFolder) {\r\n        this._addFolders(childFolder, folderList);\r\n      }\r\n    }\r\n  }\r\n\r\n  setToVersion(versionId: string) {\r\n    let startIndex = this.priorVersions.length - 1;\r\n\r\n    if (this.currentVersionId) {\r\n      for (let i = 0; i < this.priorVersions.length; i++) {\r\n        if (this.priorVersions[i].id === this.currentVersionId) {\r\n          startIndex = i;\r\n        }\r\n      }\r\n    }\r\n\r\n    let updateType = FileUpdateType.versionRestoration;\r\n\r\n    if (this.currentVersionId === undefined) {\r\n      updateType = FileUpdateType.versionRestorationRetainCurrent;\r\n    }\r\n\r\n    for (let i = 0; i < this.priorVersions.length; i++) {\r\n      if (this.priorVersions[i].id === versionId) {\r\n        // rewind to i\r\n        if (startIndex > i) {\r\n          for (let v = startIndex - 1; v >= i; v--) {\r\n            const content = this.priorVersions[v].content;\r\n            if (content !== null) {\r\n              this.priorVersions[v].file.setContent(content, updateType);\r\n            }\r\n          }\r\n        } else if (startIndex < i) {\r\n          // fast forward to i\r\n          for (let v = startIndex + 1; v <= i; v++) {\r\n            const content = this.priorVersions[v].content;\r\n            if (content !== null) {\r\n              this.priorVersions[v].file.setContent(content, updateType);\r\n            }\r\n          }\r\n        }\r\n\r\n        this.currentVersionId = versionId;\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  trimAfterVersion(versionId: string) {\r\n    for (let i = 0; i < this.priorVersions.length; i++) {\r\n      if (this.priorVersions[i].id === versionId) {\r\n        let versionsToRemove = this.priorVersions.slice(i + 1);\r\n        this.priorVersions = this.priorVersions.slice(0, i + 1);\r\n\r\n        for (let v = 0; v < versionsToRemove.length; v++) {\r\n          let versionToRemove = versionsToRemove[v];\r\n\r\n          versionToRemove.file.priorVersions = versionToRemove.file.priorVersions.filter(\r\n            (fv) => fv.id !== versionToRemove.id\r\n          );\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  addVersion(versionContent: IVersionContent, updateType: FileUpdateType) {\r\n    if (updateType === FileUpdateType.versionRestoration || updateType === FileUpdateType.versionlessEdit) {\r\n      return;\r\n    }\r\n\r\n    // we have a new organic change in, so clear out any redo history\r\n    if (this.currentVersionId) {\r\n      this.trimAfterVersion(this.currentVersionId);\r\n      this.currentVersionId = undefined;\r\n    }\r\n\r\n    this.priorVersions.push(versionContent);\r\n\r\n    this.priorVersions = StorageUtilities.coalesceVersions(this.priorVersions);\r\n\r\n    versionContent.file.priorVersions.push(versionContent);\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      fullPath += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(StorageBase.slashFolderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n\r\n  abstract getAvailable(): Promise<boolean>;\r\n\r\n  getUsesPollingBasedUpdating() {\r\n    return false;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Security utilities for input validation and sanitization\r\n */\r\nexport default class SecurityUtilities {\r\n  // Maximum upload size: 700MB\r\n  public static readonly MAX_UPLOAD_SIZE = 700 * 1024 * 1024;\r\n\r\n  // Maximum number of files in a ZIP\r\n  public static readonly MAX_ZIP_FILES = 50000;\r\n\r\n  // Maximum decompressed size: 500MB\r\n  public static readonly MAX_DECOMPRESSED_SIZE = 500 * 1024 * 1024;\r\n\r\n  // Rate limiting: max attempts per IP\r\n  private static readonly authAttempts: Map<string, { count: number; resetTime: number }> = new Map();\r\n  private static readonly MAX_AUTH_ATTEMPTS = 5;\r\n  private static readonly AUTH_WINDOW_MS = 15 * 60 * 1000; // 15 minutes\r\n\r\n  /**\r\n   * Validates that a path doesn't contain directory traversal sequences\r\n   */\r\n  public static validatePath(path: string): boolean {\r\n    if (!path) {\r\n      return false;\r\n    }\r\n\r\n    // Normalize the path\r\n    const normalized = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Check for directory traversal patterns\r\n    if (\r\n      normalized.includes(\"../\") ||\r\n      normalized.includes(\"/..\") ||\r\n      normalized.startsWith(\"..\") ||\r\n      normalized.includes(\"/../\") ||\r\n      normalized.match(/[/\\\\]\\.\\./) ||\r\n      normalized.includes(\"\\0\") // null byte\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    // Check for absolute paths\r\n    if (\r\n      normalized.startsWith(\"/\") ||\r\n      normalized.match(/^[a-zA-Z]:/) // Windows drive letter\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Validates that a path doesn't contain directory traversal sequences.\r\n   * Unlike validatePath, this allows leading slashes for storage-relative paths.\r\n   */\r\n  public static validatePathTraversal(path: string): boolean {\r\n    if (!path) {\r\n      return false;\r\n    }\r\n\r\n    // Normalize the path\r\n    const normalized = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Check for directory traversal patterns\r\n    if (\r\n      normalized.includes(\"../\") ||\r\n      normalized.includes(\"/..\") ||\r\n      normalized.startsWith(\"..\") ||\r\n      normalized.includes(\"/../\") ||\r\n      normalized.match(/[/\\\\]\\.\\./) ||\r\n      normalized.includes(\"\\0\") // null byte\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Sanitizes a storage path by removing dangerous characters while preserving leading slash.\r\n   * For use with internal storage system that expects paths like \"/images/file.png\".\r\n   */\r\n  public static sanitizeStoragePath(path: string): string {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    // Remove null bytes\r\n    path = path.replace(/\\0/g, \"\");\r\n\r\n    // Normalize slashes\r\n    path = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Remove drive letters\r\n    path = path.replace(/^[a-zA-Z]:/, \"\");\r\n\r\n    // Split into segments and validate each (filter out . and ..)\r\n    const hasLeadingSlash = path.startsWith(\"/\");\r\n    const segments = path.split(\"/\").filter((segment) => {\r\n      return segment && segment !== \".\" && segment !== \"..\";\r\n    });\r\n\r\n    return (hasLeadingSlash ? \"/\" : \"\") + segments.join(\"/\");\r\n  }\r\n\r\n  /**\r\n   * Sanitizes a path by removing dangerous characters and sequences\r\n   */\r\n  public static sanitizePath(path: string): string {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    // Remove null bytes\r\n    path = path.replace(/\\0/g, \"\");\r\n\r\n    // Normalize slashes\r\n    path = path.replace(/\\\\/g, \"/\");\r\n\r\n    // Remove leading slashes and drive letters\r\n    path = path.replace(/^[a-zA-Z]:/, \"\");\r\n    path = path.replace(/^\\/+/, \"\");\r\n\r\n    // Split into segments and validate each\r\n    const segments = path.split(\"/\").filter((segment) => {\r\n      return segment && segment !== \".\" && segment !== \"..\";\r\n    });\r\n\r\n    return segments.join(\"/\");\r\n  }\r\n\r\n  /**\r\n   * Validates that a file size is within acceptable limits\r\n   */\r\n  public static validateFileSize(size: number, maxSize: number = SecurityUtilities.MAX_UPLOAD_SIZE): boolean {\r\n    return size > 0 && size <= maxSize;\r\n  }\r\n\r\n  /**\r\n   * Validates Minecraft command input to prevent injection\r\n   */\r\n  public static sanitizeCommand(command: string): string {\r\n    if (!command) {\r\n      return \"\";\r\n    }\r\n\r\n    // Remove control characters (including newlines, carriage returns, etc.)\r\n    command = command.replace(/[\\x00-\\x1F\\x7F]/g, \"\");\r\n\r\n    // Trim whitespace\r\n    command = command.trim();\r\n\r\n    // Remove leading slash if present (will be added by server)\r\n    if (command.startsWith(\"/\")) {\r\n      command = command.substring(1);\r\n    }\r\n\r\n    return command;\r\n  }\r\n\r\n  /**\r\n   * Validates that a command is safe to execute\r\n   */\r\n  public static isCommandSafe(command: string): boolean {\r\n    if (!command) {\r\n      return false;\r\n    }\r\n\r\n    // Check for command separators or multiple commands\r\n    if (command.includes(\"\\n\") || command.includes(\"\\r\") || command.includes(\";\")) {\r\n      return false;\r\n    }\r\n\r\n    // Check for excessive length\r\n    if (command.length > 1000) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Rate limiting for authentication attempts\r\n   */\r\n  public static checkAuthRateLimit(identifier: string): boolean {\r\n    const now = Date.now();\r\n    const attempt = SecurityUtilities.authAttempts.get(identifier);\r\n\r\n    if (!attempt) {\r\n      SecurityUtilities.authAttempts.set(identifier, { count: 1, resetTime: now + SecurityUtilities.AUTH_WINDOW_MS });\r\n      return true;\r\n    }\r\n\r\n    // Reset if window has passed\r\n    if (now > attempt.resetTime) {\r\n      SecurityUtilities.authAttempts.set(identifier, { count: 1, resetTime: now + SecurityUtilities.AUTH_WINDOW_MS });\r\n      return true;\r\n    }\r\n\r\n    // Check if under limit\r\n    if (attempt.count < SecurityUtilities.MAX_AUTH_ATTEMPTS) {\r\n      attempt.count++;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Reset rate limit for an identifier (on successful auth)\r\n   */\r\n  public static resetAuthRateLimit(identifier: string): void {\r\n    SecurityUtilities.authAttempts.delete(identifier);\r\n  }\r\n\r\n  /**\r\n   * Validates JSON object doesn't contain prototype pollution\r\n   */\r\n  public static sanitizeJsonObject(obj: any): any {\r\n    if (obj === null || typeof obj !== \"object\") {\r\n      return obj;\r\n    }\r\n\r\n    // Remove dangerous properties\r\n    const dangerous = [\"__proto__\", \"constructor\", \"prototype\"];\r\n    for (const key of dangerous) {\r\n      if (key in obj) {\r\n        delete obj[key];\r\n      }\r\n    }\r\n\r\n    // Recursively sanitize nested objects\r\n    for (const key in obj) {\r\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n        obj[key] = SecurityUtilities.sanitizeJsonObject(obj[key]);\r\n      }\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Validates that a string contains only safe characters for player names\r\n   */\r\n  public static sanitizePlayerName(name: string): string {\r\n    if (!name) {\r\n      return \"\";\r\n    }\r\n\r\n    // Only allow alphanumeric, spaces, underscores, and hyphens\r\n    return name.replace(/[^a-zA-Z0-9 _-]/g, \"\");\r\n  }\r\n}\r\n\r\n/**\r\n * Result of Authenticode signature verification\r\n */\r\nexport interface ISignatureVerificationResult {\r\n  /** Whether the signature is valid */\r\n  isValid: boolean;\r\n  /** Status string from signature verification */\r\n  status: string;\r\n  /** Subject (signer) of the certificate, if available */\r\n  signer?: string;\r\n  /** Error message if verification failed */\r\n  error?: string;\r\n  /** Whether the signer is Microsoft/Mojang */\r\n  isMicrosoftSigned?: boolean;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport JSZip from \"jszip\";\r\nimport IStorage, { StorageErrorStatus } from \"./IStorage\";\r\nimport ZipFolder from \"./ZipFolder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport IFile from \"./IFile\";\r\nimport SecurityUtilities from \"../core/SecurityUtilities\";\r\n\r\nexport default class ZipStorage extends StorageBase implements IStorage {\r\n  private _jsz: JSZip;\r\n\r\n  name?: string;\r\n  rootFolder: ZipFolder;\r\n  modified: Date | null = null;\r\n  lastLoadedOrSaved: Date | null = null;\r\n\r\n  allowAllFiles = false;\r\n\r\n  get updatedSinceLoad() {\r\n    if (this.modified === null || (this.lastLoadedOrSaved === null && this.modified === null)) {\r\n      return false;\r\n    } else if (this.lastLoadedOrSaved === null) {\r\n      return true;\r\n    }\r\n\r\n    return this.modified > this.lastLoadedOrSaved;\r\n  }\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    ZipStorage.zipFixup();\r\n\r\n    this._jsz = new JSZip();\r\n\r\n    this.rootFolder = new ZipFolder(this, this._jsz, null, \"\", \"\");\r\n  }\r\n\r\n  static zipFixup() {\r\n    if (CreatorToolsHost.hostType === HostType.electronNodeJs || CreatorToolsHost.hostType === HostType.toolsNodejs) {\r\n      // Fix CommonJS/ESM interop for JSZip without using eval\r\n      // The issue is that in some Node.js contexts, jszip_1.default is undefined\r\n      // but jszip_1 itself is the constructor we need\r\n      try {\r\n        // Access the module through the global require cache if available\r\n        // This is safer than eval and achieves the same result\r\n        const jszip_1 = require(\"jszip\");\r\n        if (jszip_1 && !jszip_1.default && typeof jszip_1 === \"function\") {\r\n          // If jszip_1 is the constructor but default is missing, add it\r\n          (jszip_1 as any).default = jszip_1;\r\n        }\r\n      } catch {\r\n        // If require fails (e.g., in bundled contexts), the import should work\r\n        // No action needed\r\n      }\r\n    }\r\n  }\r\n\r\n  static fromJsonString(jsonData: string) {\r\n    const zs = new ZipStorage();\r\n\r\n    const file = zs.rootFolder.ensureFile(\"d.json\");\r\n\r\n    file.setContent(jsonData);\r\n\r\n    file.saveContent();\r\n\r\n    return zs;\r\n  }\r\n\r\n  static fromJsObject(data: object) {\r\n    const zs = new ZipStorage();\r\n\r\n    const file = zs.rootFolder.ensureFile(\"d.json\");\r\n\r\n    let jsonData = undefined;\r\n\r\n    jsonData = JSON.stringify(data);\r\n\r\n    file.setContent(jsonData);\r\n\r\n    file.saveContent();\r\n\r\n    return zs;\r\n  }\r\n\r\n  static async fromZipBytesToJsonObject(data: Uint8Array) {\r\n    const zs = new ZipStorage();\r\n\r\n    await zs.loadFromUint8Array(data);\r\n\r\n    return await ZipStorage.toJsObject(zs);\r\n  }\r\n\r\n  static async toJsObject(storage: IStorage) {\r\n    const file = storage.rootFolder.ensureFile(\"d.json\");\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    return StorageUtilities.getJsonObject(file);\r\n  }\r\n\r\n  updateLastLoadedOrSaved() {\r\n    this.lastLoadedOrSaved = new Date();\r\n  }\r\n\r\n  async loadFromBase64(data: string, name?: string) {\r\n    try {\r\n      await this._jsz.loadAsync(data, {\r\n        base64: true,\r\n        checkCRC32: true,\r\n      });\r\n    } catch (e: any) {\r\n      this.errorMessage = e.toString();\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n    }\r\n\r\n    // Log.fail(\"Loading zip file from data \" + data.length);\r\n\r\n    this.name = name;\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    await this.rootFolder.load(true);\r\n  }\r\n\r\n  static async loadFromFile(file: IFile) {\r\n    if (file.fileContainerStorage && file.fileContainerStorage instanceof ZipStorage) {\r\n      return file.fileContainerStorage;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    const data = file.content;\r\n\r\n    if (data && data instanceof Uint8Array) {\r\n      const zs = new ZipStorage();\r\n\r\n      await zs.loadFromUint8Array(data, file.name);\r\n\r\n      file.fileContainerStorage = zs;\r\n      zs.containerFile = file;\r\n\r\n      return zs;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async loadFromUint8Array(data: Uint8Array, name?: string) {\r\n    // Security: Validate upload size\r\n    if (!SecurityUtilities.validateFileSize(data.byteLength)) {\r\n      this.errorMessage = `ZIP file too large: ${data.byteLength} bytes (max: ${SecurityUtilities.MAX_UPLOAD_SIZE})`;\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    try {\r\n      await this._jsz.loadAsync(data, {\r\n        base64: false,\r\n      });\r\n    } catch (e: any) {\r\n      this.errorMessage = e.toString();\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw e;\r\n    }\r\n\r\n    const filePaths = Object.keys(this._jsz.files);\r\n\r\n    // Security: Validate ZIP contents\r\n    const fileCount = filePaths.length;\r\n    if (fileCount > SecurityUtilities.MAX_ZIP_FILES) {\r\n      this.errorMessage = `ZIP contains too many files: ${fileCount} (max: ${SecurityUtilities.MAX_ZIP_FILES})`;\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    // Security: Validate paths in ZIP\r\n    for (const filePath of filePaths) {\r\n      if (!SecurityUtilities.validatePath(filePath)) {\r\n        this.errorMessage = `ZIP contains invalid path: ${filePath}`;\r\n        this.errorStatus = StorageErrorStatus.unprocessable;\r\n        throw new Error(this.errorMessage);\r\n      }\r\n    }\r\n\r\n    // Security: Validate total decompressed size against bomb threshold\r\n    let totalDecompressedSize = 0;\r\n    for (const filePath of filePaths) {\r\n      const file = this._jsz.files[filePath];\r\n      if (file && !file.dir) {\r\n        const fileData = (file as any)._data;\r\n        if (fileData && typeof fileData.uncompressedSize === \"number\") {\r\n          totalDecompressedSize += fileData.uncompressedSize;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (totalDecompressedSize > SecurityUtilities.MAX_DECOMPRESSED_SIZE) {\r\n      this.errorMessage = `This file is too large to import: decompressed size ${totalDecompressedSize} bytes exceeds limit of ${SecurityUtilities.MAX_DECOMPRESSED_SIZE} bytes`;\r\n      this.errorStatus = StorageErrorStatus.unprocessable;\r\n      throw new Error(this.errorMessage);\r\n    }\r\n\r\n    this.name = name;\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    await this.rootFolder.load(true);\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      fullPath += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  async generateUint8ArrayAsync(): Promise<Uint8Array> {\r\n    const result = await this._jsz.generateAsync({\r\n      type: \"uint8array\",\r\n      compression: \"DEFLATE\",\r\n      compressionOptions: {\r\n        level: 9,\r\n      },\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  async generateCompressedBase64Async(): Promise<string> {\r\n    const result = await this._jsz.generateAsync({\r\n      type: \"base64\",\r\n      compression: \"DEFLATE\",\r\n      compressionOptions: {\r\n        level: 9,\r\n      },\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  async generateCompressedUint8ArrayAsync(): Promise<Uint8Array> {\r\n    const result = await this._jsz.generateAsync({\r\n      type: \"uint8array\",\r\n      compression: \"DEFLATE\",\r\n      compressionOptions: {\r\n        level: 9,\r\n      },\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  async generateBlobAsync(): Promise<any> {\r\n    let type = \"blob\";\r\n\r\n    if (CreatorToolsHost.isLocalNode) {\r\n      type = \"nodebuffer\";\r\n    }\r\n\r\n    const result = await this._jsz.generateAsync({ type: type as any });\r\n\r\n    return result;\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFileDifference, { FileDifferenceType } from \"./IFileDifference\";\r\nimport IFolderDifference, { FolderDifferenceType } from \"./IFolderDifference\";\r\nimport IStorage from \"./IStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport ZipStorage from \"./ZipStorage\";\r\n\r\nexport default class DifferenceSet {\r\n  fileDifferences: IFileDifference[] = [];\r\n  folderDifferences: IFolderDifference[] = [];\r\n\r\n  async getZip() {\r\n    const zipStorage = new ZipStorage();\r\n\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const fileDiff = this.fileDifferences[i];\r\n\r\n      if (fileDiff.type === FileDifferenceType.fileAdded || fileDiff.type === FileDifferenceType.contentsDifferent) {\r\n        if (fileDiff.updated) {\r\n          const zipFile = await zipStorage.rootFolder.ensureFileFromRelativePath(fileDiff.path);\r\n\r\n          if (fileDiff.updated.content) {\r\n            zipFile.setContent(fileDiff.updated.content);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    await zipStorage.rootFolder.saveAll();\r\n\r\n    return zipStorage;\r\n  }\r\n\r\n  getHasDeletions() {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      if (this.fileDifferences[i].type === FileDifferenceType.fileDeleted) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.folderDifferences.length; i++) {\r\n      if (this.folderDifferences[i].type === FolderDifferenceType.folderDeleted) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  hasFileOnlyOfExtension(...extensions: string[]) {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const extension = StorageUtilities.getTypeFromName(this.fileDifferences[i].path);\r\n\r\n      if (!extensions.includes(extension)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  hasFileOfExtension(...extensions: string[]) {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const extension = StorageUtilities.getTypeFromName(this.fileDifferences[i].path);\r\n\r\n      if (extensions.includes(extension)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async copyFileUpdatesAndAdds(storage: IStorage) {\r\n    for (let i = 0; i < this.fileDifferences.length; i++) {\r\n      const fileDiff = this.fileDifferences[i];\r\n\r\n      if (\r\n        (fileDiff.type === FileDifferenceType.fileAdded || fileDiff.type === FileDifferenceType.contentsDifferent) &&\r\n        fileDiff.updated &&\r\n        fileDiff.updated.content !== null\r\n      ) {\r\n        const file = await storage.rootFolder.ensureFileFromRelativePath(fileDiff.path);\r\n\r\n        file.setContent(fileDiff.updated.content);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport FileBase from \"./FileBase\";\r\nimport Folder from \"./Folder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport Storage from \"./Storage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\n\r\nexport default class File extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: Folder;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    return true;\r\n  }\r\n\r\n  get parentFolder(): Folder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._parentFolder.fullPath + Storage.folderDelimiter + this.name;\r\n  }\r\n\r\n  constructor(parentFolder: Folder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for in-memory storage\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return true;\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    Log.verbose(\"Deleting file '\" + this.storageRelativePath + \"'\");\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as Folder;\r\n\r\n    (newParentFolder as Folder)._addExistingFile(this);\r\n\r\n    return true;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    if (this._content === newContent) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n\r\n      // This is expected in serialized storage mode where files are created with initial content\r\n      // Log.debugAlert(\"Setting a file without loading it first.\");\r\n    }\r\n\r\n    let oldContent = this._content;\r\n\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport File from \"./File\";\r\nimport Storage from \"./Storage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport FolderBase from \"./FolderBase\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class Folder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _path: string;\r\n\r\n  folders: { [name: string]: Folder | undefined };\r\n  files: { [name: string]: File | undefined };\r\n\r\n  private _storage: Storage;\r\n  private _parentFolder: Folder | null;\r\n\r\n  get storage(): Storage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): Folder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._path + Storage.folderDelimiter + this.name;\r\n  }\r\n\r\n  constructor(storage: Storage, parentFolder: Folder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._path = parentPath;\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists() {\r\n    return true;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for in-memory storage\r\n  }\r\n\r\n  ensureFile(name: string): File {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile === undefined) {\r\n      candFile = new File(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n  }\r\n\r\n  _addExistingFile(file: File) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    this.files[nameCanon] = file;\r\n  }\r\n\r\n  ensureFolder(name: string): Folder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new Folder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: Folder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    this.folders[nameCanon] = folder;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Folder exists at specified path.\");\r\n      }\r\n      this._parentFolder = newParentFolder as Folder;\r\n\r\n      (newParentFolder as Folder)._addExistingFolderToParent(this);\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    return true;\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Folder from \"./Folder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport IStorage from \"./IStorage\";\r\n\r\nexport default class Storage extends StorageBase implements IStorage {\r\n  rootFolder: Folder;\r\n\r\n  static readonly folderDelimiter = \"/\";\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this.rootFolder = new Folder(this, null, \"\", \"root\");\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(Storage.folderDelimiter)) {\r\n      fullPath += Storage.folderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(this.folderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAndAssertSingleCodePoint = exports.invertCaseOfAlphabeticChar = exports.isUpperCase = exports.isLowerCase = exports.isAlphabetic = exports.isDigit = exports.isWordChar = exports.convertSurrogatePairToCodePoint = exports.isLowSurrogate = exports.isHighSurrogate = void 0;\nfunction isHighSurrogate(char) {\n    return 55296 /* CharacterCode.HighSurrogateStart */ <= char && char <= 56319 /* CharacterCode.HighSurrogateEnd */;\n}\nexports.isHighSurrogate = isHighSurrogate;\nfunction isLowSurrogate(char) {\n    return 56320 /* CharacterCode.LowSurrogateStart */ <= char && char <= 57343 /* CharacterCode.LowSurrogateEnd */;\n}\nexports.isLowSurrogate = isLowSurrogate;\n// See https://unicodebook.readthedocs.io/unicode_encodings.html#utf-16-surrogate-pairs.\nfunction convertSurrogatePairToCodePoint(highSurrogate, lowSurrogate) {\n    return ((highSurrogate - 55296 /* CharacterCode.HighSurrogateStart */) * 0x400 +\n        lowSurrogate -\n        56320 /* CharacterCode.LowSurrogateStart */ +\n        0x10000);\n}\nexports.convertSurrogatePairToCodePoint = convertSurrogatePairToCodePoint;\nfunction isWordChar(char) {\n    return isDigit(char) || isAlphabetic(char);\n}\nexports.isWordChar = isWordChar;\nfunction isDigit(char) {\n    return 48 /* CharacterCode.Zero */ <= char && char <= 57 /* CharacterCode.Nine */;\n}\nexports.isDigit = isDigit;\nfunction isAlphabetic(char) {\n    return isLowerCase(char) || isUpperCase(char);\n}\nexports.isAlphabetic = isAlphabetic;\nfunction isLowerCase(char) {\n    return 97 /* CharacterCode.LowerA */ <= char && char <= 122 /* CharacterCode.LowerZ */;\n}\nexports.isLowerCase = isLowerCase;\nfunction isUpperCase(char) {\n    return 65 /* CharacterCode.UpperA */ <= char && char <= 90 /* CharacterCode.UpperZ */;\n}\nexports.isUpperCase = isUpperCase;\n// Input must be a lower-case or upper-case ASCII alphabet character.\nfunction invertCaseOfAlphabeticChar(char) {\n    return char ^ 0x20;\n}\nexports.invertCaseOfAlphabeticChar = invertCaseOfAlphabeticChar;\n// Asserts that the string is comprised of one and only one code point,\n// then returns said code point.\nfunction getAndAssertSingleCodePoint(str) {\n    if ([...str].length !== 1)\n        throw new RangeError(`Expected the input string to be one code point in length.`);\n    return str.codePointAt(0);\n}\nexports.getAndAssertSingleCodePoint = getAndAssertSingleCodePoint;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomCharFromSetCensorStrategy = exports.fixedCharCensorStrategy = exports.fixedPhraseCensorStrategy = exports.grawlixCensorStrategy = exports.asteriskCensorStrategy = exports.keepEndCensorStrategy = exports.keepStartCensorStrategy = void 0;\nconst Char_1 = require(\"../util/Char\");\n/**\n * A text censoring strategy that extends another strategy, adding the first\n * character matched at the start of the generated string.\n *\n * @example\n * ```typescript\n * const strategy = keepStartCensorStrategy(grawlixCensorStrategy());\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: 'f$@* you'\n * ```\n * @example\n * ```typescript\n * // Since keepEndCensorStrategy() returns another text censoring strategy, you can use it\n * // as the base strategy to pass to keepStartCensorStrategy().\n * const strategy = keepStartCensorStrategy(keepEndCensorStrategy(asteriskCensorStrategy()));\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: 'f**k you'\n * ```\n * @param baseStrategy - Strategy to extend. It will be used to produce the end of\n * the generated string.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction keepStartCensorStrategy(baseStrategy) {\n    return (ctx) => {\n        if (ctx.overlapsAtStart)\n            return baseStrategy(ctx);\n        const firstChar = String.fromCodePoint(ctx.input.codePointAt(ctx.startIndex));\n        return firstChar + baseStrategy({ ...ctx, matchLength: ctx.matchLength - 1 });\n    };\n}\nexports.keepStartCensorStrategy = keepStartCensorStrategy;\n/**\n * A text censoring strategy that extends another strategy, adding the last\n * character matched at the end of the generated string.\n *\n * @example\n * ```typescript\n * const strategy = keepEndCensorStrategy(asteriskCensorStrategy());\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '***k you'\n * ```\n * @param baseStrategy - Strategy to extend. It will be used to produce the start\n * of the generated string.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction keepEndCensorStrategy(baseStrategy) {\n    return (ctx) => {\n        if (ctx.overlapsAtEnd)\n            return baseStrategy(ctx);\n        const lastChar = String.fromCodePoint(ctx.input.codePointAt(ctx.endIndex));\n        return baseStrategy({ ...ctx, matchLength: ctx.matchLength - 1 }) + lastChar;\n    };\n}\nexports.keepEndCensorStrategy = keepEndCensorStrategy;\n/**\n * A text censoring strategy that generates strings made up of asterisks (`*`).\n *\n * @example\n * ```typescript\n * const strategy = asteriskCensorStrategy();\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '**** you'\n * ```\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction asteriskCensorStrategy() {\n    return fixedCharCensorStrategy('*');\n}\nexports.asteriskCensorStrategy = asteriskCensorStrategy;\n/**\n * A text censoring strategy that generates\n * [grawlix](https://www.merriam-webster.com/words-at-play/grawlix-symbols-swearing-comic-strips),\n * i.e. strings that contain the characters `%`, `@`, `$`, `&`, and `*`.\n *\n * @example\n * ```typescript\n * const strategy = grawlixCensorStrategy();\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '%@&* you'\n * ```\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction grawlixCensorStrategy() {\n    return randomCharFromSetCensorStrategy('%@$&*');\n}\nexports.grawlixCensorStrategy = grawlixCensorStrategy;\n/**\n * A text censoring strategy that returns a fixed string.\n *\n * @example\n * ```typescript\n * // The replacement phrase '' effectively removes all matched regions\n * // from the string.\n * const strategy = fixedPhraseCensorStrategy('');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: ' you'\n * ```\n * @example\n * ```typescript\n * const strategy = fixedPhraseCensorStrategy('fudge');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: 'fudge you'\n * ```\n * @param phrase - Replacement phrase to use.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction fixedPhraseCensorStrategy(phrase) {\n    return () => phrase;\n}\nexports.fixedPhraseCensorStrategy = fixedPhraseCensorStrategy;\n/**\n * A text censoring strategy that generates replacement strings that are made up\n * of the character given, repeated as many times as needed.\n *\n * @example\n * ```typescript\n * const strategy = fixedCharCensorStrategy('*');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you'\n * // After: '**** you'.\n * ```\n * @param char - String that represents the code point which should be used when\n * generating the replacement string. Must be exactly one code point in length.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction fixedCharCensorStrategy(char) {\n    // Make sure the input character is one code point in length.\n    (0, Char_1.getAndAssertSingleCodePoint)(char);\n    return (ctx) => char.repeat(ctx.matchLength);\n}\nexports.fixedCharCensorStrategy = fixedCharCensorStrategy;\n/**\n * A text censoring strategy that generates replacement strings made up of\n * random characters from the set of characters provided. The strings never\n * contain two of the same character in a row.\n *\n * @example\n * ```typescript\n * const strategy = randomCharFromSetCensorStrategy('$#!');\n * const censor = new TextCensor().setStrategy(strategy);\n * // Before: 'fuck you!'\n * // After: '!#$# you!'\n * ```\n * @param charset - Set of characters from which the replacement string should\n * be constructed. Must have at least two characters.\n * @returns A [[TextCensorStrategy]] for use with the [[TextCensor]].\n */\nfunction randomCharFromSetCensorStrategy(charset) {\n    const chars = [...charset];\n    if (chars.length < 2)\n        throw new Error('The character set passed must have at least 2 characters.');\n    return (ctx) => {\n        if (ctx.matchLength === 0)\n            return '';\n        let lastIdx = Math.floor(Math.random() * chars.length);\n        let censored = chars[lastIdx];\n        for (let i = 1; i < ctx.matchLength; i++) {\n            let idx = Math.floor(Math.random() * (chars.length - 1));\n            // Transform the distribution for idx from [0, len-1) to\n            // [0, lastIdx) \u222A (lastIdx, len) to exclude lastIdx while\n            // ensuring a uniform distribution of generated characters.\n            if (idx >= lastIdx)\n                idx++;\n            lastIdx = idx;\n            censored += chars[idx];\n        }\n        return censored;\n    };\n}\nexports.randomCharFromSetCensorStrategy = randomCharFromSetCensorStrategy;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compareIntervals = void 0;\nfunction compareIntervals(lowerBound0, upperBound0, lowerBound1, upperBound1) {\n    if (lowerBound0 < lowerBound1)\n        return -1;\n    if (lowerBound1 < lowerBound0)\n        return 1;\n    if (upperBound0 < upperBound1)\n        return -1;\n    if (upperBound1 < upperBound0)\n        return 1;\n    return 0;\n}\nexports.compareIntervals = compareIntervals;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compareMatchByPositionAndId = void 0;\nconst Interval_1 = require(\"../util/Interval\");\n/**\n * Compares two match payloads.\n *\n * If the first match payload's start index is less than the second's, `-1` is\n *   returned;\n * If the second match payload's start index is less than the first's, `1` is\n *   returned;\n * If the first match payload's end index is less than the second's, `-1` is\n *   returned;\n * If the second match payload's end index is less than the first's, `1` is\n *   returned;\n * If the first match payload's term ID is less than the second's, `-1` is\n *   returned;\n * If the first match payload's term ID is equal to the second's, `0` is\n *   returned;\n * Otherwise, `1` is returned.\n *\n * @param a - First match payload.\n * @param b - Second match payload.\n * @returns The result of the comparison: -1 if the first should sort lower than\n * the second, 0 if they are the same, and 1 if the second should sort lower\n * than the first.\n */\nfunction compareMatchByPositionAndId(a, b) {\n    const result = (0, Interval_1.compareIntervals)(a.startIndex, a.endIndex, b.startIndex, b.endIndex);\n    if (result !== 0)\n        return result;\n    return a.termId === b.termId ? 0 : a.termId < b.termId ? -1 : 1;\n}\nexports.compareMatchByPositionAndId = compareMatchByPositionAndId;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TextCensor = void 0;\nconst MatchPayload_1 = require(\"../matcher/MatchPayload\");\nconst BuiltinStrategies_1 = require(\"./BuiltinStrategies\");\n/**\n * Censors regions of text matched by a [[Matcher]], supporting flexible\n * [[TextCensorStrategy | censoring strategies]].\n */\nclass TextCensor {\n    constructor() {\n        this.strategy = (0, BuiltinStrategies_1.grawlixCensorStrategy)();\n    }\n    /**\n     * Sets the censoring strategy, which is responsible for generating\n     * replacement text for regions of the text that should be censored.\n     *\n     * The default censoring strategy is the [[grawlixCensorStrategy]],\n     * generating text like `$%@*`. There are several other built-in strategies\n     * available:\n     * - [[keepStartCensorStrategy]] - extends another strategy and keeps the\n     *   first character matched, e.g. `f***`.\n     * - [[keepEndCensorStrategy]] - extends another strategy and keeps the last\n     *   character matched, e.g. `***k`.\n     * - [[asteriskCensorStrategy]] - replaces the text with asterisks, e.g.\n     *   `****`.\n     * - [[grawlixCensorStrategy]] - the default strategy, discussed earlier.\n     *\n     * Note that since censoring strategies are just functions (see the\n     * documentation for [[TextCensorStrategy]]), it is relatively simple to\n     * create your own.\n     *\n     * To ease creation of common censoring strategies, we provide a number of\n     * utility functions:\n     * - [[fixedPhraseCensorStrategy]] - generates a fixed phrase, e.g. `fudge`.\n     * - [[fixedCharCensorStrategy]] - generates replacement strings constructed\n     *   from the character given, repeated as many times as needed.\n     * - [[randomCharFromSetCensorStrategy]] - generates replacement strings\n     *   made up of random characters from the set of characters provided.\n     *\n     * @param strategy - Text censoring strategy to use.\n     */\n    setStrategy(strategy) {\n        this.strategy = strategy;\n        return this;\n    }\n    /**\n     * Applies the censoring strategy to the text, returning the censored text.\n     *\n     * **Overlapping regions**\n     *\n     * Overlapping regions are an annoying edge case to deal with when censoring\n     * text. There is no single best way to handle them, but the implementation\n     * of this method guarantees that overlapping regions will always be\n     * replaced, following the rules below:\n     *\n     * - Replacement text for matched regions will be generated in the order\n     *   specified by [[compareMatchByPositionAndId]];\n     * - When generating replacements for regions that overlap at the start with\n     *   some other region, the start index of the censor context passed to the\n     *   censoring strategy will be the end index of the first region, plus one.\n     *\n     * @param input - Input text.\n     * @param matches - A list of matches.\n     * @returns The censored text.\n     */\n    applyTo(input, matches) {\n        if (matches.length === 0)\n            return input;\n        const sorted = [...matches].sort(MatchPayload_1.compareMatchByPositionAndId);\n        let censored = '';\n        let lastIndex = 0; // end index of last match, plus one\n        for (let i = 0; i < sorted.length; i++) {\n            const match = sorted[i];\n            if (lastIndex > match.endIndex)\n                continue; // completely contained in the previous span\n            const overlapsAtStart = match.startIndex < lastIndex;\n            // Add the chunk of text between the end of the last match and the\n            // start of the current match.\n            if (!overlapsAtStart)\n                censored += input.slice(lastIndex, match.startIndex);\n            const actualStartIndex = Math.max(lastIndex, match.startIndex);\n            const overlapsAtEnd = i < sorted.length - 1 && // not the last match\n                match.endIndex >= sorted[i + 1].startIndex && // end index of this match and start index of next one overlap\n                match.endIndex < sorted[i + 1].endIndex; // doesn't completely contain next match\n            censored += this.strategy({ ...match, startIndex: actualStartIndex, input, overlapsAtStart, overlapsAtEnd });\n            lastIndex = match.endIndex + 1;\n        }\n        censored += input.slice(lastIndex);\n        return censored;\n    }\n}\nexports.TextCensor = TextCensor;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignIncrementingIds = void 0;\n/**\n * Assigns incrementing IDs to the patterns provided, starting with 0. It is\n * useful if you have a list of patterns to match against but don't care about\n * identifying which pattern matched.\n *\n * @example\n * ```typescript\n * const matcher = new RegExpMatcher({\n *  ...,\n *  blacklistedTerms: assignIncrementingIds([\n *      pattern`f?uck`,\n *      pattern`|shit|`,\n *  ]),\n * });\n * ```\n * @param patterns - List of parsed patterns.\n * @returns A list of blacklisted terms with valid IDs which can then be passed\n * to the [[RegExpMatcher]].\n */\nfunction assignIncrementingIds(patterns) {\n    let currentId = 0;\n    return patterns.map((pattern) => ({ id: currentId++, pattern }));\n}\nexports.assignIncrementingIds = assignIncrementingIds;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PhraseBuilder = exports.DataSet = void 0;\nconst BlacklistedTerm_1 = require(\"../matcher/BlacklistedTerm\");\n/**\n * Holds phrases (groups of patterns and whitelisted terms), optionally\n * associating metadata with them.\n *\n * @typeParam MetadataType - Metadata type for phrases. Note that the metadata\n * type is implicitly nullable.\n */\nclass DataSet {\n    constructor() {\n        this.containers = [];\n        this.patternCount = 0;\n        this.patternIdToPhraseContainer = new Map(); // pattern ID => index of its container\n    }\n    /**\n     * Adds all the phrases from the dataset provided to this one.\n     *\n     * @example\n     * ```typescript\n     * const customDataset = new DataSet().addAll(englishDataset);\n     * ```\n     * @param other - Other dataset.\n     */\n    addAll(other) {\n        for (const container of other.containers)\n            this.registerContainer(container);\n        return this;\n    }\n    /**\n     * Removes phrases that match the predicate given.\n     *\n     * @example\n     * ```typescript\n     * const customDataset = new DataSet<{ originalWord: string }>()\n     * \t.addAll(englishDataset)\n     * \t.removePhrasesIf((phrase) => phrase.metadata.originalWord === 'fuck');\n     * ```\n     * @param predicate - A predicate that determines whether or not a phrase should be removed.\n     * Return `true` to remove, `false` to keep.\n     */\n    removePhrasesIf(predicate) {\n        // Clear the internal state, then gradually rebuild it by adding the\n        // containers that should be kept.\n        this.patternCount = 0;\n        this.patternIdToPhraseContainer.clear();\n        const containers = this.containers.splice(0);\n        for (const container of containers) {\n            const remove = predicate(container);\n            if (!remove)\n                this.registerContainer(container);\n        }\n        return this;\n    }\n    /**\n     * Adds a phrase to this dataset.\n     *\n     * @example\n     * ```typescript\n     * const data = new DataSet<{ originalWord: string }>()\n     * \t.addPhrase((phrase) => phrase.setMetadata({ originalWord: 'fuck' })\n     * \t\t.addPattern(pattern`fuck`)\n     * \t\t.addPattern(pattern`f[?]ck`)\n     * \t\t.addWhitelistedTerm('Afck'))\n     * \t.build();\n     * ```\n     * @param fn - A function that takes a [[PhraseBuilder]], adds\n     * patterns/whitelisted terms/metadata to it, and returns it.\n     */\n    addPhrase(fn) {\n        const container = fn(new PhraseBuilder()).build();\n        this.registerContainer(container);\n        return this;\n    }\n    /**\n     * Retrieves the phrase metadata associated with a pattern and returns a\n     * copy of the match payload with said metadata attached to it.\n     *\n     * @example\n     * ```typescript\n     * const matches = matcher.getAllMatches(input);\n     * const matchesWithPhraseMetadata = matches.map((match) => dataset.getPayloadWithPhraseMetadata(match));\n     * // Now we can access the 'phraseMetadata' property:\n     * const phraseMetadata = matchesWithPhraseMetadata[0].phraseMetadata;\n     * ```\n     * @param payload - Original match payload.\n     */\n    getPayloadWithPhraseMetadata(payload) {\n        const offset = this.patternIdToPhraseContainer.get(payload.termId);\n        if (offset === undefined) {\n            throw new Error(`The pattern with ID ${payload.termId} does not exist in this dataset.`);\n        }\n        return {\n            ...payload,\n            phraseMetadata: this.containers[offset].metadata,\n        };\n    }\n    /**\n     * Returns the dataset in a format suitable for usage with the [[RegExpMatcher]].\n     *\n     * @example\n     * ```typescript\n     * // With the RegExpMatcher:\n     * const matcher = new RegExpMatcher({\n     * \t...dataset.build(),\n     * \t// additional options here\n     * });\n     * ```\n     */\n    build() {\n        return {\n            blacklistedTerms: (0, BlacklistedTerm_1.assignIncrementingIds)(this.containers.flatMap((p) => p.patterns)),\n            whitelistedTerms: this.containers.flatMap((p) => p.whitelistedTerms),\n        };\n    }\n    registerContainer(container) {\n        const offset = this.containers.push(container) - 1;\n        for (let i = 0, phraseId = this.patternCount; i < container.patterns.length; i++, phraseId++) {\n            this.patternIdToPhraseContainer.set(phraseId, offset);\n            this.patternCount++;\n        }\n    }\n}\nexports.DataSet = DataSet;\n/**\n * Builder for phrases.\n */\nclass PhraseBuilder {\n    constructor() {\n        this.patterns = [];\n        this.whitelistedTerms = [];\n    }\n    /**\n     * Associates a pattern with this phrase.\n     *\n     * @param pattern - Pattern to add.\n     */\n    addPattern(pattern) {\n        this.patterns.push(pattern);\n        return this;\n    }\n    /**\n     * Associates a whitelisted pattern with this phrase.\n     *\n     * @param term - Whitelisted term to add.\n     */\n    addWhitelistedTerm(term) {\n        this.whitelistedTerms.push(term);\n        return this;\n    }\n    /**\n     * Associates some metadata with this phrase.\n     *\n     * @param metadata - Metadata to use.\n     */\n    setMetadata(metadata) {\n        this.metadata = metadata;\n        return this;\n    }\n    /**\n     * Builds the phrase, returning a [[PhraseContainer]] for use with the\n     * [[DataSet]].\n     */\n    build() {\n        return {\n            patterns: this.patterns,\n            whitelistedTerms: this.whitelistedTerms,\n            metadata: this.metadata,\n        };\n    }\n}\nexports.PhraseBuilder = PhraseBuilder;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyntaxKind = void 0;\n/**\n * An enumeration of the kinds of nodes there are.\n */\nvar SyntaxKind;\n(function (SyntaxKind) {\n    SyntaxKind[SyntaxKind[\"Optional\"] = 0] = \"Optional\";\n    SyntaxKind[SyntaxKind[\"Wildcard\"] = 1] = \"Wildcard\";\n    SyntaxKind[SyntaxKind[\"Literal\"] = 2] = \"Literal\";\n    SyntaxKind[SyntaxKind[\"BoundaryAssertion\"] = 3] = \"BoundaryAssertion\";\n})(SyntaxKind || (exports.SyntaxKind = SyntaxKind = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRegExpStringForNode = exports.compilePatternToRegExp = exports.potentiallyMatchesEmptyString = void 0;\nconst Nodes_1 = require(\"./Nodes\");\nfunction potentiallyMatchesEmptyString(pattern) {\n    return pattern.nodes.every((node) => node.kind === Nodes_1.SyntaxKind.Optional);\n}\nexports.potentiallyMatchesEmptyString = potentiallyMatchesEmptyString;\nfunction compilePatternToRegExp(pattern) {\n    let regExpStr = '';\n    if (pattern.requireWordBoundaryAtStart)\n        regExpStr += '\\\\b';\n    for (const node of pattern.nodes)\n        regExpStr += getRegExpStringForNode(node);\n    if (pattern.requireWordBoundaryAtEnd)\n        regExpStr += `\\\\b`;\n    return new RegExp(regExpStr, 'gs');\n}\nexports.compilePatternToRegExp = compilePatternToRegExp;\nconst regExpSpecialChars = ['[', '.', '*', '+', '?', '^', '$', '{', '}', '(', ')', '|', '[', '\\\\', ']'].map((str) => str.charCodeAt(0));\nfunction getRegExpStringForNode(node) {\n    switch (node.kind) {\n        case Nodes_1.SyntaxKind.Literal: {\n            let str = '';\n            for (const char of node.chars) {\n                if (regExpSpecialChars.includes(char))\n                    str += '\\\\';\n                str += String.fromCodePoint(char);\n            }\n            return str;\n        }\n        case Nodes_1.SyntaxKind.Optional:\n            return `(?:${getRegExpStringForNode(node.childNode)})?`;\n        case Nodes_1.SyntaxKind.Wildcard:\n            return `.`;\n    }\n}\nexports.getRegExpStringForNode = getRegExpStringForNode;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TransformerSet = void 0;\nclass TransformerSet {\n    constructor(transformers) {\n        this.transformers = transformers;\n        this.statefulTransformers = Array.from({ length: this.transformers.length });\n        for (let i = 0; i < this.transformers.length; i++) {\n            const transformer = this.transformers[i];\n            if (transformer.type === 1 /* TransformerType.Stateful */) {\n                this.statefulTransformers[i] = transformer.factory();\n            }\n        }\n    }\n    applyTo(char) {\n        let transformed = char;\n        for (let i = 0; i < this.transformers.length && transformed !== undefined; i++) {\n            const transformer = this.transformers[i];\n            if (transformer.type === 0 /* TransformerType.Simple */)\n                transformed = transformer.transform(transformed);\n            else\n                transformed = this.statefulTransformers[i].transform(transformed);\n        }\n        return transformed;\n    }\n    resetAll() {\n        for (let i = 0; i < this.transformers.length; i++) {\n            if (this.transformers[i].type === 1 /* TransformerType.Stateful */) {\n                this.statefulTransformers[i].reset();\n            }\n        }\n    }\n}\nexports.TransformerSet = TransformerSet;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CharacterIterator = void 0;\nconst Char_1 = require(\"./Char\");\nclass CharacterIterator {\n    constructor(input) {\n        this.lastPosition = -1;\n        this.currentPosition = 0;\n        this._lastWidth = 0;\n        this._input = input ?? '';\n    }\n    get input() {\n        return this._input;\n    }\n    setInput(input) {\n        this._input = input;\n        this.reset();\n        return this;\n    }\n    reset() {\n        this.lastPosition = -1;\n        this.currentPosition = 0;\n        this._lastWidth = 0;\n    }\n    next() {\n        if (this.done)\n            return { done: true, value: undefined };\n        this.lastPosition = this.currentPosition;\n        const char = this._input.charCodeAt(this.currentPosition++);\n        this._lastWidth = 1;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (this.done || !(0, Char_1.isHighSurrogate)(char))\n            return { done: false, value: char };\n        // Do we have a surrogate pair?\n        const next = this._input.charCodeAt(this.currentPosition);\n        if ((0, Char_1.isLowSurrogate)(next)) {\n            this._lastWidth++;\n            this.currentPosition++;\n            return { done: false, value: (0, Char_1.convertSurrogatePairToCodePoint)(char, next) };\n        }\n        return { done: false, value: char };\n    }\n    // Position of the iterator; equals the start index of the last character consumed.\n    // -1 if no characters were consumed yet.\n    get position() {\n        return this.lastPosition;\n    }\n    // Width of the last character consumed; 2 if it was a surrogate pair and 1 otherwise.\n    // 0 if no characters were consumed yet.\n    get lastWidth() {\n        return this._lastWidth;\n    }\n    get done() {\n        return this.currentPosition >= this._input.length;\n    }\n    [Symbol.iterator]() {\n        return this;\n    }\n}\nexports.CharacterIterator = CharacterIterator;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IntervalCollection = void 0;\nclass IntervalCollection {\n    constructor() {\n        this.dirty = false;\n        this.intervals = [];\n    }\n    insert(lowerBound, upperBound) {\n        this.intervals.push([lowerBound, upperBound]);\n        this.dirty = true;\n    }\n    query(lowerBound, upperBound) {\n        if (this.intervals.length === 0)\n            return false;\n        if (this.dirty) {\n            this.dirty = false;\n            // Sort by lower bound.\n            this.intervals.sort(\n            /* istanbul ignore next: not possible to write a robust test for this */\n            (a, b) => (a[0] < b[0] ? -1 : b[0] < a[0] ? 1 : 0));\n        }\n        for (const interval of this.intervals) {\n            // Since the intervals are sorted by lower bound, if we see an\n            // interval with a lower bound greater than the target, we can skip\n            // checking all the ones after it as it's impossible that they fully\n            // contain the target interval.\n            if (interval[0] > lowerBound)\n                break;\n            if (interval[0] <= lowerBound && upperBound <= interval[1])\n                return true;\n        }\n        return false;\n    }\n    values() {\n        return this.intervals.values();\n    }\n    [Symbol.iterator]() {\n        return this.values();\n    }\n}\nexports.IntervalCollection = IntervalCollection;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegExpMatcher = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Util_1 = require(\"../../pattern/Util\");\nconst TransformerSet_1 = require(\"../../transformer/TransformerSet\");\nconst CharacterIterator_1 = require(\"../../util/CharacterIterator\");\nconst IntervalCollection_1 = require(\"../IntervalCollection\");\nconst MatchPayload_1 = require(\"../MatchPayload\");\n/**\n * An implementation of the [[Matcher]] interface using regular expressions and\n * string searching methods.\n */\nclass RegExpMatcher {\n    /**\n     * Creates a new [[RegExpMatcher]] with the options given.\n     *\n     * @example\n     * ```typescript\n     * // Use the options provided by the English preset.\n     * const matcher = new RegExpMatcher({\n     * \t...englishDataset.build(),\n     * \t...englishRecommendedTransformers,\n     * });\n     * ```\n     * @example\n     * ```typescript\n     * // Simple matcher that only has blacklisted patterns.\n     * const matcher = new RegExpMatcher({\n     *  blacklistedTerms: assignIncrementingIds([\n     *      pattern`fuck`,\n     *      pattern`f?uck`, // wildcards (?)\n     *      pattern`bitch`,\n     *      pattern`b[i]tch` // optionals ([i] matches either \"i\" or \"\")\n     *  ]),\n     * });\n     *\n     * // Check whether some string matches any of the patterns.\n     * const doesMatch = matcher.hasMatch('fuck you bitch');\n     * ```\n     * @example\n     * ```typescript\n     * // A more advanced example, with transformers and whitelisted terms.\n     * const matcher = new RegExpMatcher({\n     *  blacklistedTerms: [\n     *      { id: 1, pattern: pattern`penis` },\n     *      { id: 2, pattern: pattern`fuck` },\n     *  ],\n     *  whitelistedTerms: ['pen is'],\n     *  blacklistMatcherTransformers: [\n     *      resolveConfusablesTransformer(), // '\uD83C\uDD70' => 'a'\n     *      resolveLeetSpeakTransformer(), // '$' => 's'\n     *      foldAsciiCharCaseTransformer(), // case insensitive matching\n     *      skipNonAlphabeticTransformer(), // 'f.u...c.k' => 'fuck'\n     *      collapseDuplicatesTransformer(), // 'aaaa' => 'a'\n     *  ],\n     * });\n     *\n     * // Output all matches.\n     * console.log(matcher.getAllMatches('fu.....uuuuCK the pen is mightier than the sword!'));\n     * ```\n     * @param options - Options to use.\n     */\n    constructor({ blacklistedTerms, whitelistedTerms = [], blacklistMatcherTransformers = [], whitelistMatcherTransformers = [], }) {\n        this.blacklistedTerms = this.compileTerms(blacklistedTerms);\n        this.validateWhitelistedTerms(whitelistedTerms);\n        this.whitelistedTerms = whitelistedTerms;\n        this.blacklistMatcherTransformers = new TransformerSet_1.TransformerSet(blacklistMatcherTransformers);\n        this.whitelistMatcherTransformers = new TransformerSet_1.TransformerSet(whitelistMatcherTransformers);\n    }\n    getAllMatches(input, sorted = false) {\n        const whitelistedIntervals = this.getWhitelistedIntervals(input);\n        const [transformedToOrigIndex, transformed] = this.applyTransformers(input, this.blacklistMatcherTransformers);\n        const matches = [];\n        for (const blacklistedTerm of this.blacklistedTerms) {\n            for (const match of transformed.matchAll(blacklistedTerm.regExp)) {\n                const origStartIndex = transformedToOrigIndex[match.index];\n                let origEndIndex = transformedToOrigIndex[match.index + match[0].length - 1];\n                // End index is (unfortunately) inclusive, so adjust as necessary.\n                if (origEndIndex < input.length - 1 && // not the last character\n                    (0, Char_1.isHighSurrogate)(input.charCodeAt(origEndIndex)) && // character is a high surrogate\n                    (0, Char_1.isLowSurrogate)(input.charCodeAt(origEndIndex + 1)) // next character is a low surrogate\n                ) {\n                    origEndIndex++;\n                }\n                if (!whitelistedIntervals.query(origStartIndex, origEndIndex)) {\n                    matches.push({\n                        termId: blacklistedTerm.id,\n                        startIndex: origStartIndex,\n                        endIndex: origEndIndex,\n                        matchLength: [...match[0]].length,\n                    });\n                }\n            }\n        }\n        if (sorted)\n            matches.sort(MatchPayload_1.compareMatchByPositionAndId);\n        return matches;\n    }\n    hasMatch(input) {\n        const whitelistedIntervals = this.getWhitelistedIntervals(input);\n        const [transformedToOrigIndex, transformed] = this.applyTransformers(input, this.blacklistMatcherTransformers);\n        for (const blacklistedTerm of this.blacklistedTerms) {\n            for (const match of transformed.matchAll(blacklistedTerm.regExp)) {\n                const origStartIndex = transformedToOrigIndex[match.index];\n                let origEndIndex = transformedToOrigIndex[match.index + match[0].length - 1];\n                // End index is (unfortunately) inclusive, so adjust as necessary.\n                if (origEndIndex < input.length - 1 && // not the last character\n                    (0, Char_1.isHighSurrogate)(input.charCodeAt(origEndIndex)) && // character is a high surrogate\n                    (0, Char_1.isLowSurrogate)(input.charCodeAt(origEndIndex + 1)) // next character is a low surrogate\n                ) {\n                    origEndIndex++;\n                }\n                if (!whitelistedIntervals.query(origStartIndex, origEndIndex))\n                    return true;\n            }\n        }\n        return false;\n    }\n    getWhitelistedIntervals(input) {\n        const matches = new IntervalCollection_1.IntervalCollection();\n        const [transformedToOrigIndex, transformed] = this.applyTransformers(input, this.whitelistMatcherTransformers);\n        for (const whitelistedTerm of this.whitelistedTerms) {\n            let lastEnd = 0;\n            for (let startIndex = transformed.indexOf(whitelistedTerm, lastEnd); startIndex !== -1; startIndex = transformed.indexOf(whitelistedTerm, lastEnd)) {\n                let origEndIndex = transformedToOrigIndex[startIndex + whitelistedTerm.length - 1];\n                // End index is (unfortunately) inclusive, so adjust as necessary.\n                if (origEndIndex < input.length - 1 && // not the last character\n                    (0, Char_1.isHighSurrogate)(input.charCodeAt(origEndIndex)) && // character is a high surrogate\n                    (0, Char_1.isLowSurrogate)(input.charCodeAt(origEndIndex + 1)) // next character is a low surrogate\n                ) {\n                    origEndIndex++;\n                }\n                matches.insert(transformedToOrigIndex[startIndex], origEndIndex);\n                lastEnd = startIndex + whitelistedTerm.length;\n            }\n        }\n        return matches;\n    }\n    applyTransformers(input, transformers) {\n        const transformedToOrigIndex = [];\n        let transformed = '';\n        const iter = new CharacterIterator_1.CharacterIterator(input);\n        for (const char of iter) {\n            const transformedChar = transformers.applyTo(char);\n            if (transformedChar !== undefined) {\n                transformed += String.fromCodePoint(transformedChar);\n                while (transformedToOrigIndex.length < transformed.length)\n                    transformedToOrigIndex.push(iter.position);\n            }\n        }\n        transformers.resetAll();\n        return [transformedToOrigIndex, transformed];\n    }\n    compileTerms(terms) {\n        const compiled = [];\n        const seenIds = new Set();\n        for (const term of terms) {\n            if (seenIds.has(term.id))\n                throw new Error(`Duplicate blacklisted term ID ${term.id}.`);\n            if ((0, Util_1.potentiallyMatchesEmptyString)(term.pattern)) {\n                throw new Error(`Pattern with ID ${term.id} potentially matches empty string; this is unsupported.`);\n            }\n            compiled.push({\n                id: term.id,\n                regExp: (0, Util_1.compilePatternToRegExp)(term.pattern),\n            });\n            seenIds.add(term.id);\n        }\n        return compiled;\n    }\n    validateWhitelistedTerms(whitelist) {\n        if (whitelist.some((term) => term.length === 0)) {\n            throw new Error('Whitelisted term set contains empty string; this is unsupported.');\n        }\n    }\n}\nexports.RegExpMatcher = RegExpMatcher;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ParserError = void 0;\n/**\n * Custom error thrown by the parser when syntactical errors are detected.\n */\nclass ParserError extends Error {\n    constructor(message, line, column) {\n        super(`${line}:${column}: ${message}`);\n        this.name = 'ParserError';\n        this.line = line;\n        this.column = column;\n    }\n}\nexports.ParserError = ParserError;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Parser = void 0;\nconst Char_1 = require(\"../util/Char\");\nconst CharacterIterator_1 = require(\"../util/CharacterIterator\");\nconst Nodes_1 = require(\"./Nodes\");\nconst ParserError_1 = require(\"./ParserError\");\nconst supportsEscaping = [\n    92 /* CharacterCode.Backslash */,\n    91 /* CharacterCode.LeftSquareBracket */,\n    93 /* CharacterCode.RightSquareBracket */,\n    63 /* CharacterCode.QuestionMark */,\n    124 /* CharacterCode.VerticalBar */,\n];\nconst supportsEscapingList = supportsEscaping.map((char) => `'${String.fromCodePoint(char)}'`).join(', ');\nconst eof = -1;\nclass Parser {\n    constructor() {\n        this.input = '';\n        this.line = 1;\n        this.column = 1;\n        this.position = 0;\n        this.lastColumn = 1;\n        this.lastWidth = 0;\n    }\n    parse(input) {\n        this.setInput(input);\n        const nodes = [];\n        const firstNode = this.nextNode();\n        const requireWordBoundaryAtStart = firstNode?.kind === Nodes_1.SyntaxKind.BoundaryAssertion;\n        if (firstNode && !requireWordBoundaryAtStart)\n            nodes.push(firstNode);\n        let requireWordBoundaryAtEnd = false;\n        while (!this.done) {\n            const pos = this.mark();\n            const node = this.nextNode();\n            if (node.kind !== Nodes_1.SyntaxKind.BoundaryAssertion) {\n                nodes.push(node);\n                continue;\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            if (!this.done) {\n                this.reportError('Boundary assertions are not supported in this position; they are only allowed at the start / end of the pattern.', pos);\n            }\n            requireWordBoundaryAtEnd = true;\n        }\n        return { requireWordBoundaryAtStart, requireWordBoundaryAtEnd, nodes };\n    }\n    setInput(input) {\n        this.input = input;\n        this.line = 1;\n        this.column = 1;\n        this.position = 0;\n        this.lastColumn = 1;\n        this.lastWidth = 0;\n        return this;\n    }\n    nextNode() {\n        switch (this.peek()) {\n            case eof:\n                return undefined;\n            case 91 /* CharacterCode.LeftSquareBracket */:\n                return this.parseOptional();\n            case 93 /* CharacterCode.RightSquareBracket */:\n                this.reportError(`Unexpected ']' with no corresponding '['.`);\n            // eslint-disable-next-line no-fallthrough\n            case 63 /* CharacterCode.QuestionMark */:\n                return this.parseWildcard();\n            case 124 /* CharacterCode.VerticalBar */:\n                return this.parseBoundaryAssertion();\n            default:\n                return this.parseLiteral();\n        }\n    }\n    get done() {\n        return this.position >= this.input.length;\n    }\n    // Optional ::= '[' Wildcard | Text ']'\n    parseOptional() {\n        const preOpenBracketPos = this.mark();\n        this.next(); // '['\n        const postOpenBracketPos = this.mark();\n        if (this.done)\n            this.reportError(\"Unexpected unclosed '['.\", preOpenBracketPos);\n        if (this.accept('['))\n            this.reportError('Unexpected nested optional node.', postOpenBracketPos);\n        const childNode = this.nextNode();\n        if (childNode.kind === Nodes_1.SyntaxKind.BoundaryAssertion) {\n            this.reportError('Boundary assertions are not supported in this position; they are only allowed at the start / end of the pattern.', postOpenBracketPos);\n        }\n        if (!this.accept(']'))\n            this.reportError(\"Unexpected unclosed '['.\");\n        return { kind: Nodes_1.SyntaxKind.Optional, childNode: childNode };\n    }\n    // Wildcard ::= '?'\n    parseWildcard() {\n        this.next(); // '?'\n        return { kind: Nodes_1.SyntaxKind.Wildcard };\n    }\n    // BoundaryAssertion ::= '|'\n    parseBoundaryAssertion() {\n        this.next(); // '|'\n        return { kind: Nodes_1.SyntaxKind.BoundaryAssertion };\n    }\n    // Literal              ::= (NON_SPECIAL | '\\' SUPPORTS_ESCAPING)+\n    // NON_SPECIAL         ::= _any character other than '\\', '?', '[', ']', or '|'_\n    // SUPPORTS_ESCAPING   ::= '\\' | '[' | ']' | '?' | '|'\n    parseLiteral() {\n        const chars = [];\n        while (!this.done) {\n            if (this.accept('[]?|')) {\n                this.backup();\n                break;\n            }\n            const next = this.next();\n            if (next === 92 /* CharacterCode.Backslash */) {\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                if (this.done) {\n                    this.backup();\n                    this.reportError('Unexpected trailing backslash.');\n                }\n                // Can we escape the next character?\n                const escaped = this.next();\n                if (!supportsEscaping.includes(escaped)) {\n                    const repr = String.fromCodePoint(escaped);\n                    this.backup();\n                    this.reportError(`Cannot escape character '${repr}'; the only characters that can be escaped are the following: ${supportsEscapingList}.`);\n                }\n                chars.push(escaped);\n            }\n            else {\n                chars.push(next);\n            }\n        }\n        return { kind: Nodes_1.SyntaxKind.Literal, chars };\n    }\n    reportError(message, { line = this.line, column = this.column } = {}) {\n        throw new ParserError_1.ParserError(message, line, column);\n    }\n    // Marks the current position.\n    mark() {\n        return { line: this.line, column: this.column };\n    }\n    // Accepts any code point in the charset provided. Iff accepted, the character is consumed.\n    accept(charset) {\n        const next = this.next();\n        const iter = new CharacterIterator_1.CharacterIterator(charset);\n        for (const char of iter) {\n            if (char === next)\n                return true;\n        }\n        this.backup();\n        return false;\n    }\n    // Reads one code point from the input, without consuming it.\n    peek() {\n        const next = this.next();\n        this.backup();\n        return next;\n    }\n    // Consumes one code point from the input.\n    next() {\n        if (this.done)\n            return eof;\n        const char = this.input.charCodeAt(this.position++);\n        this.lastWidth = 1;\n        if (char === 10 /* CharacterCode.Newline */) {\n            this.lastColumn = this.column;\n            this.column = 1;\n            this.line++;\n            return char;\n        }\n        this.lastColumn = this.column++;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!(0, Char_1.isHighSurrogate)(char) || this.done)\n            return char;\n        // Do we have a surrogate pair?\n        const next = this.input.charCodeAt(this.position);\n        if ((0, Char_1.isLowSurrogate)(next)) {\n            this.position++;\n            this.lastWidth++;\n            return (0, Char_1.convertSurrogatePairToCodePoint)(char, next);\n        }\n        return char;\n    }\n    // Steps back one character; can only be called once per call to next().\n    backup() {\n        this.position -= this.lastWidth;\n        this.column = this.lastColumn;\n        // Adjust line count if needed.\n        if (this.lastWidth === 1 && this.input.charCodeAt(this.position) === 10 /* CharacterCode.Newline */) {\n            this.line--;\n        }\n    }\n}\nexports.Parser = Parser;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseRawPattern = exports.pattern = void 0;\nconst Parser_1 = require(\"./Parser\");\nconst parser = new Parser_1.Parser();\n/**\n * Parses a pattern, which matches a set of strings; see the `Syntax` section\n * for details. This function is intended to be called as a [template\n * tag](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates).\n *\n * **Syntax**\n *\n * Generally speaking, in patterns, characters are interpreted literally. That\n * is, they match exactly what they are: `a` matches an `a`, `b` matches a `b`,\n * `;` matches a `;`, and so on.\n *\n * However, there are several constructs that have special meaning:\n *\n * - `[expr]` matches either the empty string or `expr` (an **optional\n *   expression**). `expr` may be a sequence of literal characters or a wildcard\n *   (see below).\n * - `?` matches any character (a **wildcard**).\n * - A `|` at the start or end of the pattern asserts position at a word\n *   boundary (a **word boundary assertion**). If `|` is at the start, it\n *   ensures that the match either starts at the start of the string or a non-\n *   word character preceding it; if it is at the end, it ensures that the match\n *   either ends at the end of the string or a non-word character follows it.\n *\n *   A word character is an lower-case or upper-case ASCII alphabet character or\n *   an ASCII digit.\n * - In a literal, a backslash may be used to **escape** one of the\n *   meta-characters mentioned above so that it does match literally: `\\\\[`\n *   matches `[`, and does not mark the start of an optional expression.\n *\n *   **Note about escapes**\n *\n *   As this function operates on raw strings, double-escaping backslashes is\n *   not necessary:\n *\n *   ```typescript\n *   // Use this:\n *   const parsed = pattern`hello \\[`;\n *   // Don't use this:\n *   const parsed = pattern`hello \\\\[`;\n *   ```\n *\n * **Examples**\n *\n * - `baz` matches `baz` exactly.\n *\n * - `b\\[ar` matches `b[ar` exactly.\n *\n * - `d?ude` matches `d`, then any character, then `ude`. All of the following\n *   strings are matched by this pattern:\n *   - `dyude`\n *   - `d;ude`\n *   - `d!ude`\n *\n * - `h[?]ello` matches either `h`, any character, then `ello` or the literal\n *   string `hello`. The set of strings it matches is equal to the union of the\n *   set of strings that the two patterns `hello` and `h?ello` match. All of the\n *   following strings are matched by this pattern:\n *   - `hello`\n *   - `h!ello`\n *   - `h;ello`\n *\n * - `|foobar|` asserts position at a word boundary, matches the literal string\n *   `foobar`, and asserts position at a word boundary:\n *   - `foobar` matches, as the start and end of string count as word\n *     boundaries;\n *   - `yofoobar` does _not_ match, as `f` is immediately preceded by a word\n *     character;\n *   - `hello foobar bye` matches, as `f` is immediately preceded by a non-word\n *     character, and `r` is immediately followed by a non-word character.\n *\n * **Grammar**\n *\n * ```\n * Pattern  ::= '['? Atom* ']'?\n * Atom     ::= Literal | Wildcard | Optional\n * Optional ::= '[' Literal | Wildcard ']'\n * Literal  ::= (NON_SPECIAL | '\\' SUPPORTS_ESCAPING)+\n *\n * NON_SPECIAL       ::= _any character other than '\\', '?', '[', ']', or '|'_\n * SUPPORTS_ESCAPING ::= '\\' | '[' | ']' | '?' | '|'\n * ```\n *\n * @example\n * ```typescript\n * const parsed = pattern`hello?`; // match \"hello\", then any character\n * ```\n * @example\n * ```typescript\n * const parsed = pattern`w[o]rld`; // match \"wrld\" or \"world\"\n * ```\n * @example\n * ```typescript\n * const parsed = pattern`my initials are \\[??\\]`; // match \"my initials are [\", then any two characters, then a \"]\"\n * ```\n * @returns The parsed pattern, which can then be used with the\n * [[RegExpMatcher]].\n * @throws [[ParserError]] if a syntactical error was detected while parsing the\n * pattern.\n * @see [[parseRawPattern]] if you want to parse a string into a pattern without\n * using a template tag.\n */\nfunction pattern(strings, ...expressions) {\n    let result = strings.raw[0];\n    for (const [i, expression] of expressions.entries()) {\n        result += expression;\n        result += strings.raw[i + 1];\n    }\n    return parser.parse(result);\n}\nexports.pattern = pattern;\n/**\n * Parses a string as a pattern directly.\n *\n * **Note**\n *\n * It is recommended to use the [[pattern | pattern template tag]] instead of\n * this function for literal patterns (i.e. ones without dynamic content).\n *\n * @param pattern - The string to parse.\n * @throws [[ParserError]] if a syntactical error was detected while parsing the\n * pattern.\n * @returns The parsed pattern, which can then be used with the\n * [[RegExpMatcher]].\n */\nfunction parseRawPattern(pattern) {\n    return parser.parse(pattern);\n}\nexports.parseRawPattern = parseRawPattern;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createStatefulTransformer = exports.createSimpleTransformer = void 0;\n/**\n * Creates a container holding the transformer function provided. Simple\n * transformers are suitable for stateless transformations, e.g., a\n * transformation that maps certain characters to others. For transformations\n * that need to keep around state, see `createStatefulTransformer`.\n *\n * @example\n * ```typescript\n * function lowercaseToUppercase(char) {\n *  return isLowercase(char) ? char - 32 : char;\n * }\n *\n * const transformer = createSimpleTransformer(lowercaseToUppercase);\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * function ignoreAllNonDigitChars(char) {\n *  return isDigit(char) ? char : undefined;\n * }\n *\n * const transformer = createSimpleTransformer(ignoreAllNonDigitChars);\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param transformer - Function that applies the transformation. It should\n * accept one argument, the input character, and return the transformed\n * character. A return value of `undefined` indicates that the character should\n * be ignored.\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction createSimpleTransformer(transformer) {\n    return { type: 0 /* TransformerType.Simple */, transform: transformer };\n}\nexports.createSimpleTransformer = createSimpleTransformer;\n/**\n * Creates a container holding the stateful transformer. Stateful transformers\n * are objects which satisfy the `StatefulTransformer` interface. They are\n * suitable for transformations that require keeping around some state regarding\n * the characters previously transformed in the text.\n *\n * @example\n * ```typescript\n * class IgnoreDuplicateCharactersTransformer implements StatefulTransformer {\n *  private lastChar = -1;\n *\n *  public transform(char: number) {\n *      if (char === this.lastChar) return undefined;\n *      this.lastChar = char;\n *      return char;\n *  }\n *\n *  public reset() {\n *      this.lastChar = -1;\n *  }\n * }\n *\n * const transformer = createStatefulTransformer(() => new IgnoreDuplicateCharactersTransformer());\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param factory A function that returns an instance of the stateful\n * transformer.\n * @returns A container holding the stateful transformer, which can then be\n * passed to the [[RegExpMatcher]].\n */\nfunction createStatefulTransformer(factory) {\n    return { type: 1 /* TransformerType.Stateful */, factory };\n}\nexports.createStatefulTransformer = createStatefulTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CollapseDuplicatesTransformer = void 0;\nclass CollapseDuplicatesTransformer {\n    constructor({ defaultThreshold, customThresholds }) {\n        this.remaining = -1;\n        this.lastChar = -1;\n        this.defaultThreshold = defaultThreshold;\n        this.customThresholds = customThresholds;\n    }\n    transform(char) {\n        if (char === this.lastChar) {\n            return this.remaining-- > 0 ? char : undefined;\n        }\n        const threshold = this.customThresholds.get(char) ?? this.defaultThreshold;\n        this.remaining = threshold - 1;\n        this.lastChar = char;\n        return threshold > 0 ? char : undefined;\n    }\n    reset() {\n        this.remaining = -1;\n        this.lastChar = -1;\n    }\n}\nexports.CollapseDuplicatesTransformer = CollapseDuplicatesTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collapseDuplicatesTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Transformers_1 = require(\"../Transformers\");\nconst transformer_1 = require(\"./transformer\");\n/**\n * Creates a transformer that collapses duplicate characters. This is useful for\n * detecting variants of patterns in which a character is repeated to bypass\n * detection.\n *\n * As an example, the pattern `hi` does not match `hhiii` by default, as the\n * frequency of the characters does not match. With this transformer, `hhiii`\n * would become `hi`, and would therefore match the pattern.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied after all other\n * transformers. Using it before other transformers may have the effect of not\n * catching duplicates of certain characters that were originally different but\n * became the same after a series of transformations.\n *\n * **Warning**\n *\n * This transformer should be used with caution, as while it can make certain\n * patterns match text that wouldn't have been matched before, it can also go\n * the other way. For example, the pattern `hello` clearly matches `hello`, but\n * with this transformer, by default, `hello` would become `helo` which does\n * _not_ match. In this cases, the `customThresholds` option can be used to\n * allow two `l`s in a row, making it leave `hello` unchanged.\n *\n * @example\n * ```typescript\n * // Collapse runs of the same character.\n * const transformer = collapseDuplicatesTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * // Collapse runs of characters other than 'a'.\n * const transformer = collapseDuplicatesTransformer({ customThresholds: new Map([['a', Infinity]]) });\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param options - Options for the transformer.\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction collapseDuplicatesTransformer({ defaultThreshold = 1, customThresholds = new Map(), } = {}) {\n    const map = createCharacterToThresholdMap(customThresholds);\n    return (0, Transformers_1.createStatefulTransformer)(() => new transformer_1.CollapseDuplicatesTransformer({ defaultThreshold, customThresholds: map }));\n}\nexports.collapseDuplicatesTransformer = collapseDuplicatesTransformer;\nfunction createCharacterToThresholdMap(customThresholds) {\n    const map = new Map();\n    for (const [str, threshold] of customThresholds) {\n        if (threshold < 0)\n            throw new RangeError('Expected all thresholds to be non-negative.');\n        const char = (0, Char_1.getAndAssertSingleCodePoint)(str);\n        map.set(char, threshold);\n    }\n    return map;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remapCharactersTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst CharacterIterator_1 = require(\"../../util/CharacterIterator\");\nconst Transformers_1 = require(\"../Transformers\");\n/**\n * Maps certain characters to other characters, leaving other characters\n * unchanged.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the start of the\n * transformer chain.\n *\n * @example\n * ```typescript\n * // Transform 'a' to 'b'.\n * const transformer = remapCharactersTransformer({ 'b': 'a' });\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * // Transform '\uD83C\uDD71\uFE0F' to 'b', and use a map instead of an object as the argument.\n * const transformer = remapCharactersTransformer(new Map([['b', '\uD83C\uDD71\uFE0F']]));\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @example\n * ```typescript\n * // Transform '\uD83C\uDDF4' and '0' to 'o'.\n * const transformer = remapCharactersTransformer({ o: '\uD83C\uDDF40' });\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @param mapping - A map/object mapping certain characters to others.\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n * @see [[resolveConfusablesTransformer|  Transformer that handles confusable Unicode characters]]\n * @see [[resolveLeetSpeakTransformer | Transformer that handles leet-speak]]\n */\nfunction remapCharactersTransformer(mapping) {\n    const map = createOneToOneMap(mapping);\n    return (0, Transformers_1.createSimpleTransformer)((c) => map.get(c) ?? c);\n}\nexports.remapCharactersTransformer = remapCharactersTransformer;\nfunction createOneToOneMap(mapping) {\n    const map = new Map();\n    const iterable = mapping instanceof Map ? mapping.entries() : Object.entries(mapping);\n    for (const [original, equivalents] of iterable) {\n        const originalChar = (0, Char_1.getAndAssertSingleCodePoint)(original);\n        const iter = new CharacterIterator_1.CharacterIterator(equivalents);\n        for (const equivalent of iter)\n            map.set(equivalent, originalChar);\n    }\n    return map;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.confusables = void 0;\n/**\n * Maps confusable Unicode characters to their normalized equivalents.\n *\n * @copyright\n * The data here is taken from the\n * [confusables](https://github.com/gc/confusables) library.\n *\n * ```text\n * # The MIT License (MIT)\n *\n * Copyright \u00A9 2019 https://github.com/gc/\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \u201CSoftware\u201D), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \u201CAS IS\u201D, WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n * ```\n */\nexports.confusables = new Map([\n    [' ', ' '],\n    ['0', '\u24FF'],\n    ['1', '\u24F5\u278A\u2474\u00B9\uD835\uDFCF\uD835\uDFD9\uFF11\uD835\uDFF7\uD835\uDFE3\u2488\uD835\uDFED1\u2780\u2081\u2460\u2776\u2960'],\n    ['2', '\u24F6\u2489\u2475\u278B\u01BB\u00B2\u14BF\uD835\uDFDA\uFF12\uD835\uDFEE\uD835\uDFE4\u14BE\uD835\uDFF8\u01A7\uD835\uDFD0\u2461\u1D24\u2082\u2781\u2777\u161D\u01A8'],\n    ['3', '\u00B3\u2CCC\uA7AB\uD835\uDFD1\u2128\uD835\uDFDB\uD835\uDFEF\uD835\uDFE5\uA76A\u278C\u0417\u021C\u24F7\u04E0\u01B7\uFF13\uD835\uDFF9\u2476\u248A\u0292\u0293\u01EF\u01EE\u01BA\uD835\uDD74\u1DBE\u0437\u19A1\u2782\u2462\u2083\u1D9A\u1D23\u1D1F\u2778\u0498\u0499\u04EC\u04E1\u04ED\u04DF\u04DE'],\n    ['4', '\u278D\u04B6\u13CE\uD835\uDFDC\u04B7\u24F8\u04B8\u04B9\u04F4\u04F5\u1DA3\uFF14\u0447\u3129\u2074\u2783\u2084\u2463\u2779\u04CB\u2477\u248B'],\n    ['5', '\uD835\uDFF1\u24F9\u278E\u01BC\uD835\uDFD3\uD835\uDFFB\uD835\uDFDD\uD835\uDFE7\uFF15\u2784\u2085\u2464\u2075\u277A\u01BD\u2478\u248C'],\n    ['6', '\u2CD2\u13EE\uD835\uDFDE\uD835\uDFE8\uD835\uDFD4\u278F\u24FA\u03EC\u03ED\u2076\u0431\uFF16\u19C8\u2465\u2785\u2086\u277B\u2479\u248D'],\n    ['7', '\u24FB\uD801\uDCD2\u2790\uFF17\u2077\u2466\u2087\u277C\u2786\u247A\u248E'],\n    ['8', '\uD800\uDF1A\u2791\u24FC\uFF18\uD835\uDFE0\uD835\uDFEA\u09EA\u2078\u2088\uD835\uDFF4\u2787\u2467\u277D\uD835\uDFFE\uD835\uDFD6\u247B\u248F'],\n    ['9', '\uA76E\u2CCA\u24FD\u2792\u0A67\u09ED\u0B68\uFF19\uD835\uDFEB\uD835\uDFFF\uD835\uDFD7\u2079\u2089\u0533\u2788\u2468\u277E\u247C\u2490'],\n    ['A', '\uD83C\uDD30\u13AF\uD800\uDEA0\uD835\uDD6C\uD835\uDF1C\uD835\uDC34\uA4EE\u13AA\uD835\uDEA8\uAB7A\uD835\uDF56\uD83C\uDD50\u212B\u2200\uD83C\uDDE6\u20B3\uD83C\uDD70\uD835\uDC9C\uD835\uDE08\uD835\uDC00\uD835\uDD38\u0434\u01FA\u15C5\u24B6\uFF21\u0391\u1F8B\u15E9\u0102\u00C3\u00C5\u01CD\u0200\u0202\u0100\u023A\u0104\u028C\u039B\u03BB\u019B\u1D00\u1D2C\u0414\u0410\u120D\u00C4\u2090\u1571\u00AA\u01DE\u04D2\u0386\u1EA0\u1EA2\u1EA6\u1EA8\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1FB8\u1FB9\u1FBA\u1FBB\u1FBC\u1F88\u1F89\u1F8A\u1F8C\u1F8D\u1F8E\u1F8F\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D\u1F0E\u1F0F\u1E00\u0226\u01E0\u04D0\u00C0\u00C1\u00C2\u1EA4\u1EAA\uD835\uDEE2\uD835\uDCD0\uD835\uDE70\uD835\uDE3C'],\n    ['a', '\u2202\u237A\u24D0\u0571\u01DF\u1D43\u1D8F\u249C\u0430\u0252\uFF41\u03B1\u0203\u0201\u0E04\u01CE\u10DB\u00E4\u0251\u0101\u0250\u0105\u1F84\u1E9A\u1EA1\u1EA3\u01E1\u1EA7\u1EB5\u1E01\u0227\u04D1\u04D3\u00E3\u00E5\u03AC\u1F70\u1F71\u0103\u1EA9\u1EB1\u1EB3\u1EB7\u1F80\u1F81\u1F82\u1F83\u1F85\u1F86\u1FB0\u1FB1\u1FB2\u1FB3\u1FB4\u1D90\u1FB6\u1FB7\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F87\u1EAD\u1EAF\u00E0\u00E1\u00E2\u1EA5\u1EAB\u01FB\u2C65\uD835\uDC1A\uD835\uDC4E\uD835\uDC82\uD835\uDCB6\uD835\uDCEA\uD835\uDD1E\uD835\uDD52\uD835\uDD86\uD835\uDDBA\uD835\uDDEE\uD835\uDE22\uD835\uDE56\uD835\uDE8A\uD835\uDEC2\uD835\uDEFC\uD835\uDF36\uD835\uDF70\uD835\uDFAA\u2376'],\n    ['B', '\uD800\uDF01\uD835\uDC69\uD835\uDD6D\uD83C\uDD31\uD800\uDEA1\uD835\uDDA1\uD835\uDE3D\uA4D0\uD835\uDDD5\uD835\uDE09\uD835\uDF1D\uD800\uDE82\uD835\uDEA9\uD835\uDC01\uD835\uDEE3\uD835\uDF57\uD835\uDC35\uD835\uDE71\uD835\uDD39\u13F4\u13FC\uD835\uDF91\uA7B4\uD835\uDD05\uD83C\uDD51\u0E3F\uD835\uDCD1\u15FF\u15FE\u15FD\uD83C\uDD71\u24B7\uFF22\u0432\u03D0\u15F7\u0181\u4E43\u00DF\u10EA\u10E9\u0E56\u03B2\u026E\u0411\u0545\u0E52\u1656\u0299\u1D2E\u1D47\u130C\u1E04\u212C\u0392\u0412\u1E9E\u1E02\u1E06\u0243\u0D26\u15F9\u15F8\u1D5D\u165E\u165F\u165D\u16D2\u1657\u1658\u1D03\uD83C\uDDE7'],\n    ['b', '\u13CF\uD835\uDC1B\uD835\uDE23\uD835\uDCB7\uD835\uDD1F\uD835\uDCEB\uD835\uDD87\uD835\uDDBB\uD835\uDC4F\uD835\uDE57\uD835\uDD53\uD835\uDC83\uD835\uDDEF\uD835\uDE8B\u266D\u1473\u1488\uFF42\u159A\u1579\u157A\u24D1\u1E03\u1E05\u048D\u044A\u1E07\u0183\u0253\u0185\u15AF\u0184\u042C\u1472\u00FE\u0182\u249D\u042A\u1D80\u147F\u1480\u1482\u1481\u147E\u044C\u0180\u048C\u0462\u0463\u150E'],\n    ['C', '\u13DF\u2CA4\uD83C\uDD32\uA4DA\uD800\uDEA2\uD800\uDF02\uD83C\uDD72\uD801\uDC15\uD83C\uDD52\u263E\u010C\u00C7\u24B8\uFF23\u2183\u0187\u1455\u3108\u00A2\u096E\u21BB\u0108\u03FE\u0547\u023B\u1645\u1D9C\u249E\u0106\u0480\u010A\u00A9\u091F\u0186\u2102\u212D\u03F9\u0421\u531A\u1E08\u04AA\u0297\u1456\u1461\u1462\u1463\u1464\u1465\u216D\uD835\uDC02\uD835\uDC36\uD835\uDC6A\uD835\uDC9E\uD835\uDCD2\uD835\uDD6E\uD835\uDDA2\uD835\uDDD6\uD835\uDE0A\uD835\uDE3E\u150D'],\n    ['c', '\u2CA5\uD801\uDC3D\uABAF\u0109\uFF43\u24D2\u0107\u010D\u010B\u00E7\u0481\u0188\u1E09\u023C\u2184\u0441\u122D\u1D04\u03F2\u04AB\uA49D\u03C2\u027D\u03DB\uD835\uDE72\u1466\u19DA\uD835\uDC1C\uD835\uDC50\uD835\uDC84\uD835\uDCB8\uD835\uDCEC\uD835\uDD20\uD835\uDD54\uD835\uDD88\uD835\uDDBC\uD835\uDDF0\uD835\uDE24\uD835\uDE58\uD835\uDE8C\u20B5\uD83C\uDDE8\u1974\u14BC\u217D'],\n    ['D', '\u13A0\uD83C\uDD33\uD835\uDD21\uD835\uDD89\uD835\uDD3B\uD835\uDDD7\uD835\uDE0B\uD835\uDE73\uD835\uDC37\uD835\uDCD3\uD835\uDC03\uD835\uDC6B\uD835\uDD6F\uD835\uDDA3\uD835\uDD07\uD835\uDE3F\uAB70\u2145\uD835\uDC9F\uA4D3\uD83C\uDD73\uD83C\uDD53\u24B9\uFF24\u0189\u15EA\u018A\u00D0\u053A\u1D05\u1D30\u2181\u1E0A\u0110\u00DE\u216E\u15DE\u146F\u010E\u1E0C\u1E10\u1E12\u1E0E\u15EB\u15EC\u15DF\u15E0\u1D9B\u1D06\uD83C\uDDE9'],\n    ['d', '\u13E7\uA4D2\uD835\uDCED\u1D6D\u20AB\u0503\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u1D48\u249F\u0501\u217E\u1D81\u0500\u147A\u147B\u147C\u147D\u1484\u1470\u1471\u1D91\uD835\uDD55\uD835\uDDBD\uD835\uDC51\uD835\uDE25\uD835\uDC85\uD835\uDE59\uD835\uDC1D\uD835\uDDF1\uD835\uDE8D\u2146\uD835\uDCB9\u02A0\u056A'],\n    ['E', '\uAB7C\uD83C\uDD34\uD835\uDE40\uD835\uDD3C\uD800\uDE86\uD835\uDEAC\uA4F0\uD835\uDF5A\uD835\uDF94\uD835\uDCD4\uD835\uDC6C\uD835\uDDD8\uD83C\uDD74\uD83C\uDD54\u24BA\u0388\uFF25\u018E\u1F1D\u156E\u0190\u30E2\u0404\u1D07\u1D31\u1D49\u00C9\u4E47\u0401\u0246\uA085\u20AC\u00C8\u2130\u0395\u0415\u2D39\u13AC\u0112\u0114\u0116\u0118\u011A\u00CA\u00CB\u0510\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u1E14\u1E16\u1EBA\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u1E18\u1E1A\u1F18\u1F19\u1F1A\u1F1B\u1F1C\u1FC8\u1FC9\u04D6\u1F72\u1F73\u0400\u03F5\uD83C\uDDEA'],\n    ['e', '\uD835\uDC52\uD835\uDCEE\uD835\uDD56\uD835\uDD8A\uD835\uDE26\uD835\uDDF2\uD835\uDE8E\uD835\uDE5A\uD835\uDC86\uD835\uDD22\uD835\uDDBE\uD835\uDC1E\u04BE\u04BF\u24D4\uFF45\u24A0\u00E8\u19C9\u00E9\u1D92\u00EA\u0258\u1F14\u1EC1\u1EBF\u1EC5\u0AEF\u01DD\u0454\u03B5\u0113\u04BD\u025B\u1EC3\u1EBD\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u0247\u2091\u0119\u1E1D\u1E19\u1E1B\u212E\u0435\u0511\u0450\u04D7\u1971\u0451\u1F10\u1F11\u1F12\u1F13\u1F15\u212F'],\n    ['F', '\uD83C\uDD35\uD800\uDE87\uD835\uDD09\uD835\uDE0D\uD800\uDEA5\uA4DD\uA798\uD83C\uDD75\uD83C\uDD55\uD835\uDCD5\u24BB\uFF26\u0493\u0492\u15B4\u0191\u0532\u03DD\u127B\u1E1E\u2131\u03DC\u20A3\uD83C\uDDEB\u2132'],\n    ['f', '\uD835\uDC1F\uD835\uDD8B\u24D5\uFF46\u0192\u1E1F\u0283\u0562\u1DA0\u24A1\u017F\uA2B0\u0284\u2231\u1D82\uD835\uDE27'],\n    ['G', '\uA4D6\u13F3\uD83C\uDD36\u13C0\u13FB\uD835\uDD3E\uD835\uDCD6\uD835\uDC6E\uD835\uDD72\uAB90\uD835\uDCA2\uD835\uDE42\uD835\uDDA6\uD835\uDE76\uD835\uDD0A\uD835\uDC3A\uD835\uDC06\uD83C\uDD76\uD83C\uDD56\u24BC\uFF27\u0262\u0193\u029B\u0122\u161C\u1D33\u01F4\u0120\u050C\u011C\u1E20\u011E\u01E6\u01E4\u050D\u20B2\uD83C\uDDEC\u2141'],\n    ['g', '\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u0581\u0AED\u01E5\u0260\uFEED\uFEEE\u1D4D\u24A2\u210A\u0261\u19C1\uD835\uDC20\uD835\uDC54\uD835\uDC88\uD835\uDCF0\uD835\uDD24\uD835\uDD58\uD835\uDD8C\uD835\uDDC0\uD835\uDDF4\uD835\uDE28\uD835\uDE5C\uD835\uDE90'],\n    ['H', '\uD83C\uDD37\uD835\uDF22\uA4E7\uD835\uDE0F\uD835\uDC3B\uD835\uDF5C\uD835\uDDA7\uD800\uDECF\uD835\uDDDB\uAB8B\u210D\u13BB\u210C\u2C8E\uD835\uDC6F\uD835\uDF96\uD83C\uDD77\uD83C\uDD57\u12DE\u01F6\u050B\u24BD\uFF28\u0124\u16BA\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u04A2\u04A3\u04A4\u1FCA\u1FCB\u1FCC\u1F28\u1F29\u1F2A\u1F2B\u1F2D\u1F2E\u1F2F\u1F98\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u04C9\u04C8\u04A5\u0389\u043D\u5344\u2653\uD835\uDCD7\u210B\u041D\uD835\uDC07\uD835\uDE43\uD835\uDE77\u029C\uD835\uDEE8\u0397\uD835\uDEAE\u157C\u04C7\u1D34\u1D78\uD83C\uDDED'],\n    ['h', '\u04BA\u24A3\u0452\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u0570\u04BB\u12A8\u12A9\u12AA\u12AB\u0266\u210E\uD835\uDC21\uD835\uDC89\uD835\uDCBD\uD835\uDCF1\uD835\uDD25\uD835\uDD59\uD835\uDD8D\uD835\uDDC1\uD835\uDDF5\uD835\uDE29\uD835\uDE5D\uD835\uDE91\u056B\u02B0\u144B\u15C1\u0267\u3093\u0265'],\n    ['I', '\uD83C\uDD38\u0407\uA024\u13C6\uD83C\uDD78\uD83C\uDD58\u0625\uFE87\u0673\u0623\uFE83\u0672\u0675\u24BE\uFF29\u17F8\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197\u30A7\u30A8\u1FD8\u1FD9\u1FDA\u1FDB\u1F38\u1F39\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u2160\u03AA\u038A\u026A\u1DA6\u144A\u1963\uD835\uDEEA\uD835\uDC08\uD835\uDE44\uD835\uDE78\uD835\uDCF5\uD835\uDE61\uD835\uDC3C\u1D35\uD835\uDEB0\uD835\uDC70\uD83C\uDDEE'],\n    ['i', '\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u1E2D\u1FD0\u1FD1\u1FD2\u1FD3\u1FD6\u1FD7\u1F30\u1F31\u1F32\u2170\u217C\u2223\u2D4F\uFFE8\u05C0\u0627\u0661\u06F1\u07CA\u16C1\u1F33\u1F34\u1F35\u0268\u0456\u1F76\u1F77\u1D96\uD835\uDD26\uD835\uDE92\uD835\uDF78\uD835\uDDC2\uD835\uDC22\uD835\uDD5A\uD835\uDD8E\uD835\uDDF6\uD835\uDE2A\uD835\uDE5E\u03AF\u2071\u1D62\uD835\uDCF2\u24A4'],\n    ['J', '\uD83C\uDD39\uD83C\uDD79\uD83C\uDD59\u24BF\uFF2A\u0408\u029D\u148D\u05E0\uFF8C\u0134\u0286\u0E27\u0644\u0575\u0296\u1D0A\u1D36\uFEDD\u130B\u0248\u2C7C\u0542\u0E45\u10B1\u012F\u13AB\u0237\u4E3F\u2110\u2111\u1498\u1499\u149A\u149B\u14B4\u14B5\u148E\u148F\uD83C\uDDEF'],\n    ['j', '\u24D9\uFF4A\u03F3\u02B2\u24A5\u0249\u0135\u01F0\u0458\u06B6\u1DA8\uD835\uDCBF\uD835\uDE2B\uD835\uDDF7\uD835\uDC57\uD835\uDE5F\uD835\uDD27\uD835\uDC8B\uD835\uDDC3\uD835\uDCF3\uD835\uDD5B\uD835\uDE93\uD835\uDD8F\uD835\uDC23'],\n    ['K', '\uD835\uDDDE\uD83C\uDD3A\uD835\uDF25\uD835\uDE12\uA4D7\uD835\uDE46\uD835\uDD42\u2C94\uD835\uDD0E\uD835\uDEEB\u13E6\uD835\uDF99\uD835\uDCA6\uD83C\uDD7A\uD83C\uDD5A\u20AD\u24C0\uFF2B\u0138\u1E30\u045C\u0198\u043A\u04A0\u03BA\u049B\u049F\u04C4\u029E\u049A\u041A\u04A1\u1D0B\u1D37\u1D4F\u24A6\u16D5\u040C\u1315\u1E32\u039A\u212A\u049C\u049D\u049E\u0136\u1E34\u01E8\u2C69\u03D7\u04C3\uD83C\uDDF0'],\n    ['k', '\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\u1D84\uD835\uDC24\uD835\uDE2C\uD835\uDDC4\uD835\uDD5C\uD835\uDF05\uD835\uDF18\uD835\uDF3F\uD835\uDF52\uD835\uDF79\uD835\uDF8C\uD835\uDFB3\uD835\uDE60\uD835\uDE94\uD835\uDC58\uD835\uDC8C\u03F0\uD835\uDECB\uD835\uDEDE\uD835\uDFC6\uD835\uDDF8\uD835\uDCF4\uD835\uDCC0'],\n    ['L', '\uD83C\uDD3B\uD801\uDC1B\u2CD0\uD835\uDC73\uD835\uDE7B\uD801\uDC43\uD835\uDCDB\u2CD1\uABAE\u13DE\uA4E1\uD83C\uDD7B\uD83C\uDD5B\uFE88\u2514\u24C1\u0582\uFF2C\u013F\u14AA\u4E5A\u0546\u029F\uA4F6\u03B9\u053C\u1D38\u02E1\u0139\u1228\u1E36\u2097\u0393\u056C\u013B\u1102\u216C\u2112\u2C62\u1967\u1968\u14BB\u14B6\u14B7\u1DAB\uFE8E\u14BA\u14B9\u14B8\u14AB\u23B3\u3125\u0141\u2C60\uFE84\u023D\uD83C\uDDF1'],\n    ['l', '\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u04C0\u2113\u1E3D\u1E3B\u0142\uFF9A\u026D\u019A\u026B\u2C61|\u0196\u24A7\u0285\u01C0\u05D5\u05DF\u0399\u0406\uFF5C\u1DA9\u04CF\uD835\uDCD8\uD835\uDD40\uD835\uDDA8\uD835\uDDDC\uD835\uDE10\uD835\uDC25\uD835\uDC59\uD835\uDC8D\uD835\uDCC1\uD835\uDD29\uD835\uDD5D\uD835\uDD91\uD835\uDDC5\uD835\uDDF9\uD835\uDE2D\uD835\uDE95\uD835\uDF24\uD835\uDF5E\u0131\uD835\uDEA4\u0269\u1FBE\uD835\uDECA\uD835\uDF04\uD835\uDF3E\uD835\uDFB2'],\n    ['M', '\uD83C\uDD3C\uD800\uDF11\uD800\uDEB0\uA4DF\u2C98\u13B7\uD83C\uDD7C\uD83C\uDD5C\u24C2\uFF2D\u043C\u1E42\u0D71\u15F0\u5DDE\u163B\u10DD\u0E53\u264F\u028D\u164F\u1D0D\u1D39\u1D50\u24A8\u1E3E\u041C\u1E40\u0BF1\u216F\u2133\u039C\u03FA\u16D6\u04CD\u04CE\uD835\uDC0C\uD835\uDC40\uD835\uDC74\uD835\uDCDC\uD835\uDD10\uD835\uDD44\uD835\uDD78\uD835\uDDAC\uD835\uDDE0\uD835\uDE14\uD835\uDE48\uD835\uDE7C\uD835\uDEB3\uD835\uDEED\uD835\uDF27\uD835\uDF61\uD835\uDF9B\uD83C\uDDF2'],\n    ['m', '\u20A5\u1D6F\uD835\uDD92\uD835\uDC26\uD835\uDDC6\uD835\uDD2A\uD835\uDD5E\uD835\uDCC2\u24DC\uFF4D\u0D28\u1662\u0D69\u1E3F\u1E41\u217F\u03FB\u1E43\u1320\u0271\u17F3\u1D86\uD835\uDE62\uD835\uDCF6\uD835\uDE96\uD835\uDC5A\uD835\uDDFA\u19D5\u19D7'],\n    ['N', '\uD83C\uDD3D\u2115\uA4E0\uD835\uDEEE\uD835\uDF62\uD835\uDE7D\uD835\uDEB4\uD835\uDC75\uD835\uDC41\u2C9A\uD835\uDC0D\uD835\uDCA9\uD835\uDF9C\uD835\uDDE1\uD835\uDE15\uD835\uDF28\uD835\uDCDD\uD835\uDDAD\uD83C\uDD7D\u20A6\uD83C\uDD5D\u0419\u040D\u24C3\u048B\u17F7\uFF2E\u1D0E\u0274\u019D\u144E\u51E0\u0438\u0548\u057C\u0418\u05D4\u041B\u03C0\u1D3A\u1DB0\u0143\u5200\u12AD\u1E44\u207F\u00D1\u041F\u039D\u1D28\u0578\u03D6\u01F8\u0147\u1E46\u0145\u1E4A\u1E48\u0E17\u014A\u04E2\u04E3\u04E4\u04E5\u045B\u045D\u0439\u1962\u048A\u1D3B\uD83C\uDDF3'],\n    ['n', '\u05D7\uD835\uDC8F\uD835\uDCF7\uD835\uDE63\uD835\uDC5B\uD835\uDD93\uD835\uDD2B\uD835\uDDC7\uD835\uDE97\uD835\uDDFB\u1952\u24DD\u03AE\uFF4E\u01F9\u1D12\u0144\u00F1\u1F97\u03B7\u1E45\u0148\u1E47\u0272\u0146\u1E4B\u1E49\u0572\u0E96\u054C\u019E\u014B\u24A9\u0E20\u0E01\u0273\u043F\u0149\u043B\u0509\u0220\u1F20\u1F21\u1FC3\u0564\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1FC4\u1FC6\u1FC7\u1FC2\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F74\u1F75\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u0235\uD835\uDEC8\uD835\uDF02\uD835\uDF3C\uD835\uDF76\uD835\uDFB0\uD835\uDD5F\uD835\uDE2F\uD835\uDC27\uD835\uDCC3\u1D87\u1D70\u1965\u2229'],\n    [\n        'O',\n        '\uA132\uD83C\uDD3E\uD800\uDE92\uD835\uDFEC\uA4F3\u2C9E\uD801\uDC04\uD800\uDEAB\uD801\uDCC2\uD835\uDF9E\uD83C\uDD5E\u2365\u25EF\u2D41\u2296\uFF10\u229D\uD835\uDF64\u0472\u03F4\uD835\uDEB6\uD835\uDF2A\u047A\u04E6\u04E8\u04EA\u038C\u0298\uD835\uDC0E\u01D1\u00D2\u014E\u00D3\u00D4\u00D5\u020C\u020E\u31FF\u274D\u24C4\uFF2F\u1F4B\u30ED\u2764\u0AE6\u2295\u00D8\u0424\u053E\u0398\u01A0\u1D3C\u1D52\u24AA\u0150\u00D6\u2092\u00A4\u25CA\u03A6\u3007\u039F\u041E\u0555\u0B20\u0D20\u0BE6\u05E1\u1ED2\u1ED0\u1ED6\u1ED4\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u022E\u0230\u022A\u1ECE\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u01FE\u019F\u2D54\u07C0\u17F0\u235C\u2394\u2395\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF\u29C0\u29C1\u29C2\u29C3\u1F48\u1F49\u1F4A\u1F4C\u1F4D',\n    ],\n    [\n        'o',\n        '\uD835\uDE98\uD835\uDED0\uD835\uDDC8\uD835\uDFBC\u101D\u2C9F\uD835\uDE64\u1040\uD801\uDC2C\uD835\uDD2C\uD801\uDCEA\uD835\uDCF8\uD83C\uDDF4\u2364\u25CB\u03D9\uD83C\uDD7E\uD835\uDCAA\uD835\uDDAE\uD835\uDFE2\uD835\uDFF6\uD835\uDE7E\uD835\uDE30\uD835\uDDFC\uD835\uDD60\uD835\uDF0A\uD835\uDC28\uD835\uDF7E\uD835\uDFB8\u1424\u24DE\u0473\u19D0\u1972\u00F0\uFF4F\u0C20\u199E\u0553\u00F2\u04E9\u04E7\u00F3\u00BA\u014D\u00F4\u01D2\u020F\u014F\u1ED3\u1ED1\u020D\u1ED7\u1ED5\u00F5\u03C3\u1E4D\u022D\u1E4F\u1F44\u1E51\u1E53\u022F\u022B\u0E4F\u1D0F\u0151\u00F6\u047B\u043E\u12D0\u01ED\u0231\u09E6\u0B66\u0665\u0C66\u0CE6\u0D66\u0E50\u0ED0\u03BF\u0585\u1D11\u0966\u0A66\u1ECF\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u00F8\u01FF\u0275\u056E\u1F40\u1F41\u03CC\u1F78\u1F79\u1F42\u1F43\u1F45',\n    ],\n    ['P', '\uD83C\uDD3F\uA4D1\uD835\uDEB8\uD835\uDE7F\uD835\uDFA0\uD835\uDE4B\uABB2\u2CA2\uD835\uDCAB\uD835\uDF66\uD835\uDC43\uD835\uDC77\uD835\uDDE3\uD835\uDC0F\uD800\uDE95\uD835\uDF2C\uD835\uDE17\uD835\uDCDF\uD835\uDDAF\uD835\uDEF2\u13E2\uD83C\uDD5F\u048E\uD83C\uDD7F\u24C5\uFF30\u01A4\u146D\u5C38\u1E56\u0580\u03C6\u0584\u1D18\u1D3E\u1D56\u24AB\u1E54\uFF71\u05E7\u0420\u12E8\u1D29\u2C63\u2119\u03A1\u1FEC\u1478\u1476\u1477\u1479\u146C\u146E\uD83C\uDDF5\u20B1'],\n    ['p', '\u048F\u2117\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\u1FE5\u03C1\u0440\u01BF\u01F7\u1FE4\u2374\uD835\uDCF9\uD835\uDCC5\uD835\uDC29\uD835\uDC5D\uD835\uDC91\uD835\uDD2D\uD835\uDD61\uD835\uDD95\uD835\uDDC9\uD835\uDDFD\uD835\uDE31\uD835\uDE65\uD835\uDE99\uD835\uDED2\uD835\uDF46\uD835\uDFBA\uD835\uDF0C\uD835\uDF80'],\n    ['Q', '\uD83C\uDD40\uD83C\uDD80\uD83C\uDD60\u24C6\uFF31\u211A\u2D55\u051A\uD835\uDC10\uD835\uDC44\uD835\uDC78\uD835\uDCAC\uD835\uDCE0\uD835\uDE80\uD835\uDE18\uD835\uDE4C\uD835\uDDB0\uD835\uDD7C\uD835\uDD14\uD835\uDDE4\uD83C\uDDF6'],\n    ['q', '\u24E0\uFF51\u0563\u24AC\u06F9\u0566\u146B\u024B\u024A\u051B\uD835\uDDCA\uD835\uDC5E\uD835\uDE32\uD835\uDD62\uD835\uDE9A\uD835\uDC92\uD835\uDD96\uD835\uDC2A\uD835\uDD2E\uD835\uDCFA\uD835\uDE66'],\n    ['R', '\u211E\u211F\uAB71\u13D2\uD801\uDCB4\uABA2\u13A1\uA4E3\uD83C\uDD81\uD83C\uDD61\u24C7\uFF32\u1D19\u0212\u0280\u1587\u044F\u5C3A\u0154\u042F\u0AB0\u01A6\u1D3F\u12EA\u1E5A\u024C\u0281\u211B\u211C\u211D\u1E58\u0158\u0210\u1E5C\u0156\u1E5E\u2C64\uD835\uDC11\uD835\uDC45\uD835\uDC79\uD835\uDCE1\uD835\uDD7D\uD835\uDDB1\uD835\uDDE5\uD835\uDE19\uD835\uDE4D\uD835\uDE81\u16B1\uD83C\uDDF7\u1D1A'],\n    ['r', '\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u0433\u0550\u027E\u196C\u1E5F\u024D\u02B3\u24AD\u027C\u0453\u1D26\u1D89\uD835\uDC2B\uD835\uDC5F\uD835\uDC93\uD835\uDCC7\uD835\uDCFB\uD835\uDD2F\uD835\uDD63\uD835\uDD97\uD835\uDDCB\uD835\uDDFF\uD835\uDE33\uD835\uDE67\u1D72\u0491\u1D63'],\n    ['S', '\uD83C\uDD42\uA1D9\uD835\uDCE2\uD835\uDDE6\u13DA\uD835\uDCAE\u13D5\uD835\uDE82\uD835\uDC12\uA4E2\uD835\uDDB2\uD835\uDD16\uD835\uDE4E\uD800\uDE96\uD835\uDD7E\uD801\uDC20\uD835\uDE1A\uD835\uDD4A\uD835\uDC46\uD835\uDC7A\uD83C\uDD82\uD83C\uDD62\u24C8\uFF33\u1E68\u015E\u0586\u054F\u0218\u02E2\u24AE\u0405\u1E60\u0160\u015A\u1E64\u015C\u1E66\u1E62\u0D1F\u1515\u1516\u1522\u1521\u1523\u1524'],\n    ['s', '\u24E2\uA731\uD801\uDC48\uABAA\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u0282\u1E63\u1E69\u0455\u015F\u0219\u023F\u1D8A\u0C15\uD835\uDC2C\uD835\uDC60\uD835\uDC94\uD835\uDCC8\uD835\uDCFC\uD835\uDD30\uD835\uDD64\uD835\uDD98\uD835\uDDCC\uD835\uDE00\uD835\uDE34\uD835\uDE68\uD835\uDE9C\u078E\uD83C\uDDF8'],\n    ['T', '\uD83C\uDD43\uD83C\uDD83\uD800\uDF15\uD835\uDEBB\uD835\uDEF5\uD835\uDD4B\uD835\uDD7F\uD835\uDC7B\uD800\uDEB1\uD800\uDE97\uD835\uDDB3\uD835\uDE4F\uD83D\uDF68\uD835\uDF69\uD835\uDFA3\uD835\uDE83\uD835\uDE1B\uD835\uDC47\uA4D4\u27D9\uD835\uDC13\u2CA6\uD835\uDDE7\u22A4\uD835\uDD17\u13A2\uAB72\uD835\uDCAF\uD83C\uDD63\u23C7\u23C9\u24C9\uFF34\u0442\u04AC\u04AD\u01AC\u30A4\u0166\u0535\u03C4\u1D1B\u1D40\uFF72\u1355\u03EE\u0164\u22A5\u01AE\u03A4\u0422\u4E0B\u1E6A\u1E6C\u021A\u0162\u1E70\u1E6E\u4E05\u4E01\u142A\uD835\uDED5\uD835\uDF0F\uD835\uDF49\uD835\uDF83\uD835\uDFBD\uD835\uDCE3\u3112\uD83C\uDDF9\u1325'],\n    ['t', '\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0236\u0A6E\u0567\u0287\u2020\u0163\u1E71\u1E6F\u01AD\u0167\u1D57\u24AF\u0288\u0565\u01AB\uD835\uDC2D\uD835\uDC61\uD835\uDC95\uD835\uDCC9\uD835\uDCFD\uD835\uDD31\uD835\uDD65\uD835\uDD99\uD835\uDDCD\uD835\uDE01\uD835\uDE35\uD835\uDE69\uD835\uDE9D\u30CA'],\n    ['U', '\uD83C\uDD44\uA4F4\uD801\uDCCE\uA4A4\uD83C\uDD84\uD83C\uDD64\u0168\u016C\u016E\u1457\u1458\u01D3\u01D5\u01D7\u01D9\u24CA\uFF35\u0216\u144C\u51F5\u01B1\u0574\u0531\uA4F5\u0426\u016A\u0544\u01B2\u1640\u1D41\u1D58\u24B0\u0170\u0AAA\u00DC\u054D\u00D9\u00DA\u00DB\u1E78\u1E7A\u01DB\u1EE6\u0214\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244\u1969\u1467\u222A\u162E\u22C3\uD835\uDC14\uD835\uDC48\uD835\uDC7C\uD835\uDCB0\uD835\uDCE4\uD835\uDD18\uD835\uDD4C\uD835\uDD80\uD835\uDDB4\uD835\uDDE8\uD835\uDE1C\uD835\uDE50\uD835\uDE84\uD83C\uDDFA'],\n    ['u', '\u1F7A\u1F7B\u24E4\uFF55\u00F9\u0169\u016B\u1EEB\u1E77\u1E79\u016D\u01D6\u1EEF\u1959\u01DA\u01DC\u1F57\u03C5\u03B0\u0E19\u057D\u028A\u01D8\u01D4\u00FA\u016F\u1D1C\u0171\u0173\u0E22\u00FB\u1E7B\u0446\u1201\u00FC\u1D7E\u1D64\u00B5\u028B\u1EE7\u0215\u0217\u01B0\u1EE9\u1EED\u1EF1\u1EE5\u1E73\u1E75\u0289\u1FE0\u1FE1\u1FE2\u1FE3\u1FE6\u1FE7\u1F50\u1F51\u03CB\u03CD\u1F52\u1F53\u1F54\u1F55\u1F56\u1954\uD835\uDC2E\uD835\uDC62\uD835\uDC96\uD835\uDCCA\uD835\uDCFE\uD835\uDD32\uD835\uDD66\uD835\uDD9A\uD835\uDDCE\u1D99'],\n    ['V', '\uD83C\uDD45\uA4E6\uD835\uDC7D\uD835\uDDB5\uD835\uDE1D\u13D9\uD835\uDE85\uD835\uDE51\uD835\uDC15\uD83C\uDD85\uD83C\uDD65\u24CB\uFF36\u142F\u0474\u1D5B\u24B1\u06F7\u1E7E\u2174\u2164\u1E7C\u0667\u2D38\u0476\u143A\u143B\uD83C\uDDFB\uD835\uDCE5'],\n    ['v', '\u1200\u24E5\uFF56\uD835\uDF10\uD835\uDF4A\u1E7D\u1E7F\u0C6E\u0E07\u0475\u05E2\u1D20\u03BD\u05D8\u1D65\u0477\u17F4\u1601\uD835\uDE6B\uD835\uDE9F\uD835\uDECE\uD835\uDF08\uD835\uDF42\uD835\uDF7C\uD835\uDFB6\uD835\uDE37\uD835\uDE03\uD835\uDCFF'],\n    ['W', '\uD83C\uDD46\u13D4\u13B3\uD835\uDC7E\uA4EA\uD835\uDCB2\uD835\uDE1E\uD83C\uDD86\u24CC\uD83C\uDD66\uFF57\uFF37\u1E82\u1FA7\u15EF\u1955\u5C71\u0460\u0E9F\u0C1A\u0561\u0429\u0428\u03CE\u0449\u0E2C\u0448\u164E\u1D42\u02B7\u24B2\u0E1D\u1220\u1E84\u051C\u1E80\u0174\u1E86\u1E88\u0D27\u163A\u047F\u1661\u019C\u20A9\uD83C\uDDFC'],\n    ['w', '\u1E81\uAB83\u1E83\u24E6\u2375\u0175\u1E87\u1E85\u1E98\u1E89\u2C73\u1F7C\u1F60\u1F61\u1F62\u1F63\u03C9\u1F64\u1F65\u1F66\u1F67\u1FF2\u1FF3\u1FF4\u1FF6\u1FF7\u2C72\u0461\u051D\u1D21\u1F7D\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u026F\uD835\uDF55\uD835\uDFC9\uD835\uDF8F'],\n    ['X', '\uD83D\uDFA8\uD83D\uDFA9\uD83D\uDFAA\uD83C\uDD47\uD83D\uDFAB\uD83D\uDFAC\uD800\uDF17\u2CAC\uA4EB\uD835\uDD83\uD835\uDFA6\uD835\uDE1F\uD800\uDE90\uD835\uDEBE\uD835\uDF6C\uD835\uDF32\uA7B3\uD800\uDF22\uD835\uDDB7\uD835\uDC4B\uD835\uDD4F\uD835\uDD1B\uD800\uDEB4\uD835\uDDEB\uD83C\uDD87\uD83C\uDD67\u274C\u24CD\uD835\uDCE7\uFF38\u1E8A\u166D\u03C7\u3128\uD835\uDCB3\u04FE\u10EF\u04FC\u04B3\u0416\u03A7\u04B2\u1D61\u02E3\u24B3\u05D0\u1238\u1E8C\uA2BC\u2169\u0425\u2573\u166E\u1541\u157D\u2179\u16B7\u2D5D\uD835\uDE53\uD835\uDE87\u4E42\uD835\uDC17\uD83C\uDDFD'],\n    ['x', '\u24E7\uFF58\u0445\u1E8B\u00D7\u2093\u292B\u292C\u2A2F\u1E8D\u1D8D\uD835\uDE6D\u04FD\uD835\uDE39\uD835\uDC31\uD835\uDEA1\u2A30\uFF92\uD835\uDD01'],\n    ['Y', '\u2CA8\uD835\uDE88\uD835\uDC4C\uD835\uDDEC\uD835\uDC18\uA4EC\uD835\uDC80\uD835\uDF30\uD800\uDEB2\uD83C\uDD88\uD83C\uDD68\u24CE\uFF39\u1F5B\u01B3\u311A\u028F\u2144\u03D4\uFFE5\u00A5\u054E\u03D3\u03B3\u05E5\u04F2\u0427\u040E\u1203\u0178\u024E\u03E4\u03A5\u03D2\u04AE\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u1EF6\u1EF4\u1FE8\u1FE9\u1FEA\u1FEB\u1F59\u1F5D\u1F5F\u03AB\u038E\u04EE\u04F0\u04B0\u04B1\uD835\uDD50\uD83C\uDDFE'],\n    ['y', '\uD83C\uDD48\u13BD\u13A9\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u0443\u10E7\u1E99\u1EF5\u01B4\u024F\u1D5E\u0263\u02B8\u1D8C\u04AF\u24B4\u04F3\u04F1\u04EF\u045E\u0423\u028E'],\n    ['Z', '\uD83C\uDD49\uA4DC\uD835\uDDED\uD835\uDC19\u2621\u13C3\uD835\uDE21\uD83C\uDD89\uD83C\uDD69\u24CF\uFF3A\u1E94\u01B5\u4E59\u1E90\u0224\u1DBB\u24B5\u0179\u2124\u0396\u017B\u017D\u1E92\u2C6B\uD83C\uDDFF'],\n    ['z', '\uAB93\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u1D22\u130A\u0290\u2C6C\u1D8E\u0291\u1646'],\n]);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveConfusablesTransformer = void 0;\nconst remap_characters_1 = require(\"../remap-characters\");\nconst confusables_1 = require(\"./confusables\");\n/**\n * Creates a transformer that maps confusable Unicode characters to their\n * normalized equivalent. For example, `\u24F5`, `\u278A`, and `\u2474` become `1` when using\n * this transformer.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the start of the\n * transformer chain.\n *\n * @example\n * ```typescript\n * const transformer = resolveConfusablesTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction resolveConfusablesTransformer() {\n    return (0, remap_characters_1.remapCharactersTransformer)(confusables_1.confusables);\n}\nexports.resolveConfusablesTransformer = resolveConfusablesTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dictionary = void 0;\nexports.dictionary = new Map([\n    ['a', '@4'],\n    ['c', '('],\n    ['e', '3'],\n    ['i', '1|!'],\n    ['g', '6'],\n    ['o', '0'],\n    ['s', '$5'],\n    ['t', '7'],\n    ['z', '2'],\n]);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveLeetSpeakTransformer = void 0;\nconst remap_characters_1 = require(\"../remap-characters\");\nconst dictionary_1 = require(\"./dictionary\");\n/**\n * Creates a transformer that maps leet-speak characters to their normalized\n * equivalent. For example, `$` becomes `s` when using this transformer.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the start of the\n * transformer chain, but after similar transformers that map characters to\n * other characters, such as the [[resolveConfusablesTransformer | transformer\n * that resolves confusable Unicode characters]].\n *\n * @example\n * ```typescript\n * const transformer = resolveLeetSpeakTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction resolveLeetSpeakTransformer() {\n    return (0, remap_characters_1.remapCharactersTransformer)(dictionary_1.dictionary);\n}\nexports.resolveLeetSpeakTransformer = resolveLeetSpeakTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toAsciiLowerCaseTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Transformers_1 = require(\"../Transformers\");\n/**\n * Creates a transformer that changes all ASCII alphabet characters to\n * lower-case, leaving other characters unchanged.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the end of the\n * transformer chain. Using it before other transformers may have the effect of\n * making its changes useless as transformers applied after produce characters\n * of varying cases.\n *\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction toAsciiLowerCaseTransformer() {\n    return (0, Transformers_1.createSimpleTransformer)((c) => ((0, Char_1.isUpperCase)(c) ? (0, Char_1.invertCaseOfAlphabeticChar)(c) : c));\n}\nexports.toAsciiLowerCaseTransformer = toAsciiLowerCaseTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.englishDataset = exports.englishRecommendedTransformers = exports.englishRecommendedWhitelistMatcherTransformers = exports.englishRecommendedBlacklistMatcherTransformers = void 0;\nconst DataSet_1 = require(\"../dataset/DataSet\");\nconst Pattern_1 = require(\"../pattern/Pattern\");\nconst collapse_duplicates_1 = require(\"../transformer/collapse-duplicates\");\nconst resolve_confusables_1 = require(\"../transformer/resolve-confusables\");\nconst resolve_leetspeak_1 = require(\"../transformer/resolve-leetspeak\");\nconst to_ascii_lowercase_1 = require(\"../transformer/to-ascii-lowercase\");\n/**\n * A set of transformers to be used when matching blacklisted patterns with the\n * [[englishDataset | english word dataset]].\n */\nexports.englishRecommendedBlacklistMatcherTransformers = [\n    (0, resolve_confusables_1.resolveConfusablesTransformer)(),\n    (0, resolve_leetspeak_1.resolveLeetSpeakTransformer)(),\n    (0, to_ascii_lowercase_1.toAsciiLowerCaseTransformer)(),\n    // See #23 and #46.\n    // skipNonAlphabeticTransformer(),\n    (0, collapse_duplicates_1.collapseDuplicatesTransformer)({\n        defaultThreshold: 1,\n        customThresholds: new Map([\n            ['b', 2],\n            ['e', 2],\n            ['o', 2],\n            ['l', 2],\n            ['s', 2],\n            ['g', 2], // ni_gg_er\n        ]),\n    }),\n];\n/**\n * A set of transformers to be used when matching whitelisted terms with the\n * [[englishDataset | english word dataset]].\n */\nexports.englishRecommendedWhitelistMatcherTransformers = [\n    (0, to_ascii_lowercase_1.toAsciiLowerCaseTransformer)(),\n    (0, collapse_duplicates_1.collapseDuplicatesTransformer)({\n        defaultThreshold: Number.POSITIVE_INFINITY,\n        customThresholds: new Map([[' ', 1]]), // collapse spaces\n    }),\n];\n/**\n * Recommended transformers to be used with the [[englishDataset | english word\n * dataset]] and the [[RegExpMatcher]].\n */\nexports.englishRecommendedTransformers = {\n    blacklistMatcherTransformers: exports.englishRecommendedBlacklistMatcherTransformers,\n    whitelistMatcherTransformers: exports.englishRecommendedWhitelistMatcherTransformers,\n};\n/**\n * A dataset of profane English words.\n *\n * @example\n * ```typescript\n * const matcher = new RegExpMatcher({\n * \t...englishDataset.build(),\n * \t...englishRecommendedTransformers,\n * });\n * ```\n * @example\n * ```typescript\n * // Extending the data-set by adding a new word and removing an existing one.\n * const myDataset = new DataSet()\n * \t.addAll(englishDataset)\n * \t.removePhrasesIf((phrase) => phrase.metadata.originalWord === 'vagina')\n * \t.addPhrase((phrase) => phrase.addPattern(pattern`|balls|`));\n * ```\n * @copyright\n * The words are taken from the [cuss](https://github.com/words/cuss) project,\n * with some modifications.\n *\n * ```text\n * (The MIT License)\n *\n * Copyright (c) 2016 Titus Wormer <tituswormer@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ```\n */\nexports.englishDataset = new DataSet_1.DataSet()\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'abo' }).addPattern((0, Pattern_1.pattern) `|ab[b]o[s]|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'abeed' }).addPattern((0, Pattern_1.pattern) `ab[b]eed`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'africoon' }).addPattern((0, Pattern_1.pattern) `africoon`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'anal' })\n    .addPattern((0, Pattern_1.pattern) `|anal`)\n    .addWhitelistedTerm('analabos')\n    .addWhitelistedTerm('analagous')\n    .addWhitelistedTerm('analav')\n    .addWhitelistedTerm('analy')\n    .addWhitelistedTerm('analog')\n    .addWhitelistedTerm('an al')\n    .addPattern((0, Pattern_1.pattern) `danal`)\n    .addPattern((0, Pattern_1.pattern) `eanal`)\n    .addPattern((0, Pattern_1.pattern) `fanal`)\n    .addWhitelistedTerm('fan al')\n    .addPattern((0, Pattern_1.pattern) `ganal`)\n    .addWhitelistedTerm('gan al')\n    .addPattern((0, Pattern_1.pattern) `ianal`)\n    .addWhitelistedTerm('ian al')\n    .addPattern((0, Pattern_1.pattern) `janal`)\n    .addWhitelistedTerm('trojan al')\n    .addPattern((0, Pattern_1.pattern) `kanal`)\n    .addPattern((0, Pattern_1.pattern) `lanal`)\n    .addWhitelistedTerm('lan al')\n    .addPattern((0, Pattern_1.pattern) `lanal`)\n    .addWhitelistedTerm('lan al')\n    .addPattern((0, Pattern_1.pattern) `oanal|`)\n    .addPattern((0, Pattern_1.pattern) `panal`)\n    .addWhitelistedTerm('pan al')\n    .addPattern((0, Pattern_1.pattern) `qanal`)\n    .addPattern((0, Pattern_1.pattern) `ranal`)\n    .addPattern((0, Pattern_1.pattern) `sanal`)\n    .addPattern((0, Pattern_1.pattern) `tanal`)\n    .addWhitelistedTerm('tan al')\n    .addPattern((0, Pattern_1.pattern) `uanal`)\n    .addWhitelistedTerm('uan al')\n    .addPattern((0, Pattern_1.pattern) `vanal`)\n    .addWhitelistedTerm('van al')\n    .addPattern((0, Pattern_1.pattern) `wanal`)\n    .addPattern((0, Pattern_1.pattern) `xanal`)\n    .addWhitelistedTerm('texan al')\n    .addPattern((0, Pattern_1.pattern) `yanal`)\n    .addPattern((0, Pattern_1.pattern) `zanal`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'anus' })\n    .addPattern((0, Pattern_1.pattern) `anus`)\n    .addWhitelistedTerm('an us')\n    .addWhitelistedTerm('tetanus')\n    .addWhitelistedTerm('uranus')\n    .addWhitelistedTerm('janus')\n    .addWhitelistedTerm('manus'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'arabush' }).addPattern((0, Pattern_1.pattern) `arab[b]ush`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'arse' })\n    .addPattern((0, Pattern_1.pattern) `|ars[s]e`)\n    .addWhitelistedTerm('arsen'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'ass' })\n    .addPattern((0, Pattern_1.pattern) `|ass`)\n    .addWhitelistedTerm('assa')\n    .addWhitelistedTerm('assem')\n    .addWhitelistedTerm('assen')\n    .addWhitelistedTerm('asser')\n    .addWhitelistedTerm('asset')\n    .addWhitelistedTerm('assev')\n    .addWhitelistedTerm('assi')\n    .addWhitelistedTerm('assoc')\n    .addWhitelistedTerm('assoi')\n    .addWhitelistedTerm('assu'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'bastard' }).addPattern((0, Pattern_1.pattern) `bas[s]tard`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'bestiality' }).addPattern((0, Pattern_1.pattern) `be[e][a]s[s]tial`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'bitch' })\n    .addPattern((0, Pattern_1.pattern) `bitch`)\n    .addPattern((0, Pattern_1.pattern) `bich|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'blowjob' }).addPattern((0, Pattern_1.pattern) `b[b]l[l][o]wj[o]b`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'bollocks' }).addPattern((0, Pattern_1.pattern) `bol[l]ock`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'boob' }).addPattern((0, Pattern_1.pattern) `boob`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'boonga' })\n    .addPattern((0, Pattern_1.pattern) `boonga`)\n    .addWhitelistedTerm('baboon ga'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'buttplug' }).addPattern((0, Pattern_1.pattern) `buttplug`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'chingchong' }).addPattern((0, Pattern_1.pattern) `chingchong`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'chink' })\n    .addPattern((0, Pattern_1.pattern) `chink`)\n    .addWhitelistedTerm('chin k'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cock' })\n    .addPattern((0, Pattern_1.pattern) `|cock|`)\n    .addPattern((0, Pattern_1.pattern) `|cocks`)\n    .addPattern((0, Pattern_1.pattern) `|cockp`)\n    .addPattern((0, Pattern_1.pattern) `|cocke[e]|`)\n    .addWhitelistedTerm('cockney'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cuck' })\n    .addPattern((0, Pattern_1.pattern) `cuck`)\n    .addWhitelistedTerm('cuckoo'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cum' })\n    .addPattern((0, Pattern_1.pattern) `|cum`)\n    .addWhitelistedTerm('cumu')\n    .addWhitelistedTerm('cumb'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'cunt' })\n    .addPattern((0, Pattern_1.pattern) `|cunt`)\n    .addPattern((0, Pattern_1.pattern) `cunt|`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'deepthroat' })\n    .addPattern((0, Pattern_1.pattern) `deepthro[o]at`)\n    .addPattern((0, Pattern_1.pattern) `deepthro[o]t`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'dick' })\n    .addPattern((0, Pattern_1.pattern) `|dck|`)\n    .addPattern((0, Pattern_1.pattern) `dick`)\n    .addWhitelistedTerm('benedick')\n    .addWhitelistedTerm('dickens'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'dildo' }).addPattern((0, Pattern_1.pattern) `dildo`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'doggystyle' }).addPattern((0, Pattern_1.pattern) `d[o]g[g]ys[s]t[y]l[l]`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'double penetration' }).addPattern((0, Pattern_1.pattern) `double penetra`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'dyke' })\n    .addPattern((0, Pattern_1.pattern) `dyke`)\n    .addWhitelistedTerm('van dyke'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'ejaculate' })\n    .addPattern((0, Pattern_1.pattern) `e[e]jacul`)\n    .addPattern((0, Pattern_1.pattern) `e[e]jakul`)\n    .addPattern((0, Pattern_1.pattern) `e[e]acul[l]ate`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'fag' })\n    .addPattern((0, Pattern_1.pattern) `|fag`)\n    .addPattern((0, Pattern_1.pattern) `fggot`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'felch' }).addPattern((0, Pattern_1.pattern) `fe[e]l[l]ch`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'fellatio' }).addPattern((0, Pattern_1.pattern) `f[e][e]llat`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'finger bang' }).addPattern((0, Pattern_1.pattern) `fingerbang`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'fisting' }).addPattern((0, Pattern_1.pattern) `fistin`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'fuck' })\n    .addPattern((0, Pattern_1.pattern) `f[?]ck`)\n    .addPattern((0, Pattern_1.pattern) `|fk`)\n    .addPattern((0, Pattern_1.pattern) `|fu|`)\n    .addPattern((0, Pattern_1.pattern) `|fuk`)\n    .addWhitelistedTerm('fick')\n    .addWhitelistedTerm('kung-fu')\n    .addWhitelistedTerm('kung fu'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'gangbang' }).addPattern((0, Pattern_1.pattern) `g[?]ngbang`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'handjob' }).addPattern((0, Pattern_1.pattern) `h[?]ndjob`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'hentai' }).addPattern((0, Pattern_1.pattern) `h[e][e]ntai`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'hooker' }).addPattern((0, Pattern_1.pattern) `hooker`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'incest' }).addPattern((0, Pattern_1.pattern) `incest`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'jerk off' }).addPattern((0, Pattern_1.pattern) `jerkoff`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'jizz' }).addPattern((0, Pattern_1.pattern) `jizz`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'kike' }).addPattern((0, Pattern_1.pattern) `kike`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'lubejob' }).addPattern((0, Pattern_1.pattern) `lubejob`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'masturbate' })\n    .addPattern((0, Pattern_1.pattern) `m[?]sturbate`)\n    .addPattern((0, Pattern_1.pattern) `masterbate`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'negro' })\n    .addPattern((0, Pattern_1.pattern) `negro`)\n    .addWhitelistedTerm('montenegro')\n    .addWhitelistedTerm('negron')\n    .addWhitelistedTerm('stoneground')\n    .addWhitelistedTerm('winegrow'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'nigger' })\n    .addPattern((0, Pattern_1.pattern) `n[i]gger`)\n    .addPattern((0, Pattern_1.pattern) `n[i]gga`)\n    .addPattern((0, Pattern_1.pattern) `|nig|`)\n    .addPattern((0, Pattern_1.pattern) `|nigs|`)\n    .addWhitelistedTerm('snigger'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'orgasm' })\n    .addPattern((0, Pattern_1.pattern) `[or]gasm`)\n    .addWhitelistedTerm('gasma'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'orgy' })\n    .addPattern((0, Pattern_1.pattern) `orgy`)\n    .addPattern((0, Pattern_1.pattern) `orgies`)\n    .addWhitelistedTerm('porgy'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'penis' })\n    .addPattern((0, Pattern_1.pattern) `pe[e]nis`)\n    .addPattern((0, Pattern_1.pattern) `|pnis`)\n    .addWhitelistedTerm('pen is'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'piss' }).addPattern((0, Pattern_1.pattern) `|piss`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'porn' })\n    .addPattern((0, Pattern_1.pattern) `|prn|`)\n    .addPattern((0, Pattern_1.pattern) `porn`)\n    .addWhitelistedTerm('p orna'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'prick' }).addPattern((0, Pattern_1.pattern) `|prick[s]|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'pussy' }).addPattern((0, Pattern_1.pattern) `p[u]ssy`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'rape' })\n    .addPattern((0, Pattern_1.pattern) `|rape`)\n    .addPattern((0, Pattern_1.pattern) `|rapis[s]t`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'retard' }).addPattern((0, Pattern_1.pattern) `retard`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'scat' }).addPattern((0, Pattern_1.pattern) `|s[s]cat|`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'semen' }).addPattern((0, Pattern_1.pattern) `|s[s]e[e]me[e]n`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'sex' })\n    .addPattern((0, Pattern_1.pattern) `|s[s]e[e]x|`)\n    .addPattern((0, Pattern_1.pattern) `|s[s]e[e]xy|`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'shit' })\n    .addPattern((0, Pattern_1.pattern) `|shit`)\n    .addPattern((0, Pattern_1.pattern) `shit|`)\n    .addWhitelistedTerm('s hit')\n    .addWhitelistedTerm('sh it')\n    .addWhitelistedTerm('shi t')\n    .addWhitelistedTerm('shitake'))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'slut' }).addPattern((0, Pattern_1.pattern) `s[s]lut`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'spastic' }).addPattern((0, Pattern_1.pattern) `|spastic`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'tit' })\n    .addPattern((0, Pattern_1.pattern) `|tit|`)\n    .addPattern((0, Pattern_1.pattern) `|tits|`)\n    .addPattern((0, Pattern_1.pattern) `|titt`)\n    .addPattern((0, Pattern_1.pattern) `|tiddies`)\n    .addPattern((0, Pattern_1.pattern) `|tities`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'tranny' }).addPattern((0, Pattern_1.pattern) `tranny`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'turd' })\n    .addPattern((0, Pattern_1.pattern) `|turd`)\n    .addWhitelistedTerm('turducken'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'twat' })\n    .addPattern((0, Pattern_1.pattern) `|twat`)\n    .addWhitelistedTerm('twattle'))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'vagina' })\n    .addPattern((0, Pattern_1.pattern) `vagina`)\n    .addPattern((0, Pattern_1.pattern) `|v[?]gina`))\n    .addPhrase((phrase) => phrase.setMetadata({ originalWord: 'wank' }).addPattern((0, Pattern_1.pattern) `|wank`))\n    .addPhrase((phrase) => phrase\n    .setMetadata({ originalWord: 'whore' })\n    .addPattern((0, Pattern_1.pattern) `|wh[o]re|`)\n    .addPattern((0, Pattern_1.pattern) `|who[o]res[s]|`)\n    .addWhitelistedTerm(\"who're\"));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.skipNonAlphabeticTransformer = void 0;\nconst Char_1 = require(\"../../util/Char\");\nconst Transformers_1 = require(\"../Transformers\");\n/**\n * Creates a transformer that skips non-alphabetic characters (`a`-`z`,\n * `A`-`Z`). This is useful when matching text on patterns that are solely\n * comprised of alphabetic characters (the pattern `hello` does not match\n * `h.e.l.l.o` by default, but does with this transformer).\n *\n * **Warning**\n *\n * This transformation is not part of the default set of transformations, as\n * there are some known rough edges with false negatives; see\n * [#23](https://github.com/jo3-l/obscenity/issues/23) and\n * [#46](https://github.com/jo3-l/obscenity/issues/46) on the GitHub issue\n * tracker.\n *\n * **Application order**\n *\n * It is recommended that this transformer be applied near the end of the\n * transformer chain, if at all.\n *\n * @example\n * ```typescript\n * const transformer = skipNonAlphabeticTransformer();\n * const matcher = new RegExpMatcher({ ..., blacklistMatcherTransformers: [transformer] });\n * ```\n * @returns A container holding the transformer, which can then be passed to the\n * [[RegExpMatcher]].\n */\nfunction skipNonAlphabeticTransformer() {\n    return (0, Transformers_1.createSimpleTransformer)((c) => ((0, Char_1.isAlphabetic)(c) ? c : undefined));\n}\nexports.skipNonAlphabeticTransformer = skipNonAlphabeticTransformer;\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./censor/BuiltinStrategies\"), exports);\n__exportStar(require(\"./censor/TextCensor\"), exports);\n__exportStar(require(\"./dataset/DataSet\"), exports);\n__exportStar(require(\"./matcher/regexp/RegExpMatcher\"), exports);\n__exportStar(require(\"./matcher/BlacklistedTerm\"), exports);\n__exportStar(require(\"./matcher/MatchPayload\"), exports);\n__exportStar(require(\"./matcher/Matcher\"), exports);\n__exportStar(require(\"./pattern/Nodes\"), exports);\n__exportStar(require(\"./pattern/ParserError\"), exports);\n__exportStar(require(\"./pattern/Pattern\"), exports);\n__exportStar(require(\"./preset/english\"), exports);\n__exportStar(require(\"./transformer/collapse-duplicates\"), exports);\n__exportStar(require(\"./transformer/remap-characters\"), exports);\n__exportStar(require(\"./transformer/resolve-confusables\"), exports);\n__exportStar(require(\"./transformer/resolve-leetspeak\"), exports);\n__exportStar(require(\"./transformer/skip-non-alphabetic\"), exports);\n__exportStar(require(\"./transformer/to-ascii-lowercase\"), exports);\n", "import mod from \"./index.js\";\n\nexport default mod;\nexport const DataSet = mod.DataSet;\nexport const ParserError = mod.ParserError;\nexport const PhraseBuilder = mod.PhraseBuilder;\nexport const RegExpMatcher = mod.RegExpMatcher;\nexport const SyntaxKind = mod.SyntaxKind;\nexport const TextCensor = mod.TextCensor;\nexport const assignIncrementingIds = mod.assignIncrementingIds;\nexport const asteriskCensorStrategy = mod.asteriskCensorStrategy;\nexport const collapseDuplicatesTransformer = mod.collapseDuplicatesTransformer;\nexport const compareMatchByPositionAndId = mod.compareMatchByPositionAndId;\nexport const englishDataset = mod.englishDataset;\nexport const englishRecommendedBlacklistMatcherTransformers = mod.englishRecommendedBlacklistMatcherTransformers;\nexport const englishRecommendedTransformers = mod.englishRecommendedTransformers;\nexport const englishRecommendedWhitelistMatcherTransformers = mod.englishRecommendedWhitelistMatcherTransformers;\nexport const fixedCharCensorStrategy = mod.fixedCharCensorStrategy;\nexport const fixedPhraseCensorStrategy = mod.fixedPhraseCensorStrategy;\nexport const grawlixCensorStrategy = mod.grawlixCensorStrategy;\nexport const keepEndCensorStrategy = mod.keepEndCensorStrategy;\nexport const keepStartCensorStrategy = mod.keepStartCensorStrategy;\nexport const parseRawPattern = mod.parseRawPattern;\nexport const pattern = mod.pattern;\nexport const randomCharFromSetCensorStrategy = mod.randomCharFromSetCensorStrategy;\nexport const remapCharactersTransformer = mod.remapCharactersTransformer;\nexport const resolveConfusablesTransformer = mod.resolveConfusablesTransformer;\nexport const resolveLeetSpeakTransformer = mod.resolveLeetSpeakTransformer;\nexport const skipNonAlphabeticTransformer = mod.skipNonAlphabeticTransformer;\nexport const toAsciiLowerCaseTransformer = mod.toAsciiLowerCaseTransformer;\n", "import Utilities from \"../core/Utilities\";\r\nimport IFile from \"./IFile\";\r\nimport IFolder from \"./IFolder\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport { RegExpMatcher, englishDataset, englishRecommendedTransformers } from \"obscenity\";\r\n\r\n/**\r\n * Maximum number of files allowed in shared content\r\n */\r\nexport const MAX_SHARED_FILES = 100;\r\n\r\n/**\r\n * Maximum total size of shared content in bytes (1MB)\r\n */\r\nexport const MAX_SHARED_TOTAL_SIZE = 1024 * 1024;\r\n\r\n/**\r\n * Allowed path patterns for shareable content.\r\n * Only files within these paths can be shared.\r\n */\r\nexport const ALLOWED_SHARE_PATHS: RegExp[] = [\r\n  /^\\/scripts\\//i, // Scripts folder\r\n  /^\\/behavior_packs?\\//i, // Behavior packs\r\n  /^\\/resource_packs?\\//i, // Resource packs\r\n  /^\\/texts\\//i, // Localization\r\n  /^\\/functions\\//i, // mcfunction files folder\r\n  /^\\/items\\//i, // Items folder\r\n  /^\\/entities\\//i, // Entities folder\r\n  /^\\/blocks\\//i, // Blocks folder\r\n  /^\\/recipes\\//i, // Recipes folder\r\n  /^\\/loot_tables\\//i, // Loot tables\r\n  /^\\/trading\\//i, // Trading tables\r\n  /^\\/spawn_rules\\//i, // Spawn rules\r\n  /^\\/animations?\\//i, // Animations\r\n  /^\\/animation_controllers?\\//i, // Animation controllers\r\n  /^\\/models?\\//i, // Models (geometry)\r\n  /^\\/render_controllers?\\//i, // Render controllers\r\n  /^\\/attachables?\\//i, // Attachables\r\n  /^\\/biomes?\\//i, // Biomes\r\n  /^\\/features?\\//i, // Features\r\n  /^\\/feature_rules?\\//i, // Feature rules\r\n  /^\\/structures?\\//i, // Structures\r\n];\r\n\r\n/**\r\n * Dangerous code patterns that should not be allowed in shared TypeScript/JavaScript files.\r\n * These patterns could enable code execution, file system access, or other security risks.\r\n */\r\nexport const DANGEROUS_CODE_PATTERNS: { pattern: RegExp; description: string }[] = [\r\n  { pattern: /import\\s+.*from\\s+['\"]child_process['\"]/i, description: \"child_process import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]child_process['\"]\\s*\\)/i, description: \"child_process require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]fs['\"]/i, description: \"fs module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]fs['\"]\\s*\\)/i, description: \"fs module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]path['\"]/i, description: \"path module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]path['\"]\\s*\\)/i, description: \"path module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]os['\"]/i, description: \"os module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]os['\"]\\s*\\)/i, description: \"os module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]net['\"]/i, description: \"net module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]net['\"]\\s*\\)/i, description: \"net module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]dgram['\"]/i, description: \"dgram module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]dgram['\"]\\s*\\)/i, description: \"dgram module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]cluster['\"]/i, description: \"cluster module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]cluster['\"]\\s*\\)/i, description: \"cluster module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]vm['\"]/i, description: \"vm module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]vm['\"]\\s*\\)/i, description: \"vm module require\" },\r\n  { pattern: /import\\s+.*from\\s+['\"]worker_threads['\"]/i, description: \"worker_threads module import\" },\r\n  { pattern: /require\\s*\\(\\s*['\"]worker_threads['\"]\\s*\\)/i, description: \"worker_threads module require\" },\r\n  { pattern: /\\beval\\s*\\(/i, description: \"eval() call\" },\r\n  { pattern: /\\bFunction\\s*\\(\\s*['\"`]/i, description: \"Function constructor with string\" },\r\n  { pattern: /\\bexec\\s*\\(/i, description: \"exec() call\" },\r\n  { pattern: /\\bexecSync\\s*\\(/i, description: \"execSync() call\" },\r\n  { pattern: /\\bspawn\\s*\\(/i, description: \"spawn() call\" },\r\n  { pattern: /\\bspawnSync\\s*\\(/i, description: \"spawnSync() call\" },\r\n  { pattern: /\\bfork\\s*\\(/i, description: \"fork() call\" },\r\n  { pattern: /process\\.exit/i, description: \"process.exit call\" },\r\n  { pattern: /process\\.env/i, description: \"process.env access\" },\r\n  { pattern: /process\\.cwd/i, description: \"process.cwd access\" },\r\n  { pattern: /__dirname/i, description: \"__dirname access\" },\r\n  { pattern: /__filename/i, description: \"__filename access\" },\r\n  { pattern: /import\\s*\\(\\s*[^)]*\\+/i, description: \"dynamic import with concatenation\" },\r\n  { pattern: /require\\s*\\(\\s*[^)]*\\+/i, description: \"dynamic require with concatenation\" },\r\n  { pattern: /globalThis\\s*\\[/i, description: \"globalThis bracket access\" },\r\n  { pattern: /global\\s*\\[/i, description: \"global bracket access\" },\r\n  { pattern: /window\\s*\\[/i, description: \"window bracket access\" },\r\n];\r\n\r\nexport class BasicValidators {\r\n  private static contentMatcher: RegExpMatcher | undefined = undefined;\r\n\r\n  /**\r\n   * Checks if a file's content contains dangerous code patterns that could pose security risks.\r\n   * This is used to validate shared TypeScript/JavaScript files.\r\n   * @param content The file content to check\r\n   * @returns An object with isUnsafe boolean and matched patterns, or undefined if safe\r\n   */\r\n  public static hasUnsafeCodePatterns(content: string): { isUnsafe: boolean; matches: string[] } | undefined {\r\n    if (!content || typeof content !== \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    const matches: string[] = [];\r\n\r\n    for (const { pattern, description } of DANGEROUS_CODE_PATTERNS) {\r\n      if (pattern.test(content)) {\r\n        matches.push(description);\r\n      }\r\n    }\r\n\r\n    if (matches.length > 0) {\r\n      return { isUnsafe: true, matches };\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Validates if a file path is within the allowed shareable paths.\r\n   * @param filePath The storage-relative path to validate\r\n   * @returns true if the path is allowed for sharing, false otherwise\r\n   */\r\n  public static isPathAllowedForSharing(filePath: string): boolean {\r\n    if (!filePath) {\r\n      return false;\r\n    }\r\n\r\n    // Normalize path\r\n    const normalizedPath = filePath.replace(/\\\\/g, \"/\");\r\n\r\n    // Check against allowed patterns\r\n    return ALLOWED_SHARE_PATHS.some((pattern) => pattern.test(normalizedPath));\r\n  }\r\n\r\n  static async isFolderSharingValid(\r\n    folder: IFolder,\r\n    isChildFolder?: boolean,\r\n    stats?: { fileCount: number; totalSize: number }\r\n  ): Promise<string | undefined> {\r\n    // Initialize stats on first call\r\n    if (!stats) {\r\n      stats = { fileCount: 0, totalSize: 0 };\r\n    }\r\n\r\n    if (!this.isFolderNameOKForSharing(folder.name)) {\r\n      return folder.name + \" is an unsupported folder name.\";\r\n    }\r\n\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    if (!isChildFolder && folder.fileCount > 0) {\r\n      return \"Folder that contains files at the root.\";\r\n    }\r\n\r\n    for (const childFileName in folder.files) {\r\n      const childFile = folder.files[childFileName];\r\n\r\n      if (childFile) {\r\n        // Check file count limit\r\n        stats.fileCount++;\r\n        if (stats.fileCount > MAX_SHARED_FILES) {\r\n          return `Too many files in shared content (limit: ${MAX_SHARED_FILES}).`;\r\n        }\r\n\r\n        const result = this.isFileNameOKForSharing(childFile.name);\r\n\r\n        if (!result) {\r\n          return childFile.name + \" is an unsupported file name.\";\r\n        }\r\n\r\n        // Load content to check for strong language and unsafe patterns\r\n        if (!childFile.isContentLoaded) {\r\n          await childFile.loadContent();\r\n        }\r\n\r\n        // Check total size\r\n        if (childFile.content && typeof childFile.content === \"string\") {\r\n          stats.totalSize += childFile.content.length;\r\n          if (stats.totalSize > MAX_SHARED_TOTAL_SIZE) {\r\n            return `Total shared content size exceeds limit (${MAX_SHARED_TOTAL_SIZE} bytes).`;\r\n          }\r\n        }\r\n\r\n        const res = await this.hasStrongLanguageContent(childFile);\r\n\r\n        if (res) {\r\n          return childFile.name + \" has unsupported content.\";\r\n        }\r\n\r\n        // Check for unsafe code patterns in TypeScript/JavaScript files\r\n        const ext = StorageUtilities.getTypeFromName(childFile.name);\r\n        if (ext === \"ts\" || ext === \"js\") {\r\n          if (childFile.content && typeof childFile.content === \"string\") {\r\n            const unsafeResult = this.hasUnsafeCodePatterns(childFile.content);\r\n            if (unsafeResult && unsafeResult.isUnsafe) {\r\n              return `${childFile.name} contains potentially unsafe code patterns: ${unsafeResult.matches.join(\", \")}.`;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const childFolderName in folder.folders) {\r\n      const childFolder = folder.folders[childFolderName];\r\n\r\n      if (childFolder) {\r\n        const result = await this.isFolderSharingValid(childFolder, true, stats);\r\n\r\n        if (result) {\r\n          return result;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static isFileNameOKForSharing(fileName: string) {\r\n    fileName = fileName.toLowerCase();\r\n\r\n    const ext = StorageUtilities.getTypeFromName(fileName);\r\n\r\n    if (ext !== \"ts\" && ext !== \"json\" && ext !== \"lang\") {\r\n      return false;\r\n    }\r\n\r\n    if (\r\n      fileName.startsWith(\".\") ||\r\n      fileName.startsWith(\"just.config\") ||\r\n      fileName.endsWith(\".config.ts\") ||\r\n      fileName.endsWith(\".config.js\") ||\r\n      (fileName.startsWith(\"manifest\") && fileName.endsWith(\"json\")) ||\r\n      (fileName.startsWith(\"package\") && fileName.endsWith(\"json\"))\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(fileName)) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static isFolderNameOKForSharing(folderName: string) {\r\n    if (\r\n      folderName.startsWith(\".\") ||\r\n      folderName === \"lib\" ||\r\n      folderName === \"node_modules\" ||\r\n      folderName === \".git\" ||\r\n      folderName === \"dist\" ||\r\n      folderName === \"build\"\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static async hasStrongLanguageContent(file: IFile) {\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    if (file.isBinary) {\r\n      return undefined;\r\n    }\r\n\r\n    const str = file.content;\r\n\r\n    if (!str) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof str !== \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    if (str.length < 1) {\r\n      return undefined;\r\n    }\r\n\r\n    const content = str.toLowerCase();\r\n\r\n    if (this.contentMatcher === undefined) {\r\n      this.contentMatcher = new RegExpMatcher({\r\n        ...englishDataset.build(),\r\n        ...englishRecommendedTransformers,\r\n      });\r\n    }\r\n\r\n    if (this.contentMatcher.hasMatch(content)) {\r\n      const matches = this.contentMatcher.getAllMatches(content);\r\n      let strMatches: string[] = [];\r\n      const strMatchesSet = new Set<string>();\r\n\r\n      for (let i = 0; i < matches.length && i < 100; i++) {\r\n        const match = matches[i];\r\n\r\n        if (match) {\r\n          const result = content.substring(match.startIndex, match.endIndex + 1);\r\n\r\n          if (!strMatchesSet.has(result)) {\r\n            strMatches.push(result);\r\n            strMatchesSet.add(result);\r\n          }\r\n        }\r\n      }\r\n\r\n      return strMatches.join(\", \");\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport DifferenceSet from \"./DifferenceSet\";\r\nimport { FolderDifferenceType } from \"./IFolderDifference\";\r\nimport { FileDifferenceType } from \"./IFileDifference\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ZipStorage from \"./ZipStorage\";\r\nimport Log from \"../core/Log\";\r\nimport IStorage, { StorageErrorStatus } from \"./IStorage\";\r\nimport Storage from \"./Storage\";\r\nimport { BasicValidators } from \"./BasicValidators\";\r\nimport IVersionContent from \"./IVersionContent\";\r\nimport JsonUtilities from \"../core/JsonUtilities\";\r\nexport const MaxShareableContentStringLength = 65536;\r\n\r\nexport const VersionCoalescingTimeThresholdMs = 10000;\r\nexport const VersionCoalescingSizeThresholdBytes = 1024;\r\nexport const VersionCoalescingVersionsToConsider = 100;\r\n\r\nexport const PackContainerFolderHints = [\r\n  \"bps\",\r\n  \"rps\",\r\n  \"content/resource_packs\",\r\n  \"content/behavior_packs\",\r\n  \"resource packs\",\r\n  \"behavior packs\",\r\n  \"behavior_packs\",\r\n  \"resource_packs\",\r\n  \"skin pack\",\r\n  \"skin packs\",\r\n  \"content/skin_packs\",\r\n  \"content/world_templates\",\r\n  \"world_template\",\r\n  \"worlds\",\r\n  \"world_templates\",\r\n];\r\n\r\nexport const PackFolderHints = [\r\n  \"behavior pack\",\r\n  \"resource pack\",\r\n  \"resource_pack\",\r\n  \"behavior_pack\",\r\n  \"skin_pack\",\r\n  \"world\",\r\n  \"world_template\",\r\n  \"rp\",\r\n  \"bp\",\r\n];\r\n\r\n// part of security/reliability and defense in depth is to only allow our file functions to work with files from an allow list\r\n// this list is also replicated in /public/preload.js\r\nexport const AllowedExtensionsSet = new Set([\r\n  \"js\",\r\n  \"ts\",\r\n  \"json\",\r\n  \"md\",\r\n  \"png\",\r\n  \"css\",\r\n  \"woff\",\r\n  \"ttf\",\r\n  \"woff2\",\r\n  \"jpg\",\r\n  \"gitignore\",\r\n  \"jpeg\",\r\n  \"gif\",\r\n  \"lang\",\r\n  \"fsb\",\r\n  \"map\",\r\n  \"yml\",\r\n  \"ico\",\r\n  \"ogg\",\r\n  \"flac\",\r\n  \"psd\",\r\n  \"nojekyll\",\r\n  \"mjs\",\r\n  \"env\",\r\n  \"wav\",\r\n  \"tga\",\r\n  \"old\",\r\n  \"mc\",\r\n  \"\",\r\n  \"zip\",\r\n  \"wlist\",\r\n  \"brarchive\",\r\n  \"nbt\",\r\n  \"webm\",\r\n  \"svg\",\r\n  \"otf\",\r\n  \"ttf\",\r\n  \"bin\",\r\n  \"obj\",\r\n  \"pdn\",\r\n  \"py\",\r\n  \"hdr\",\r\n  \"h\",\r\n  \"fontdata\",\r\n  \"mcstructure\",\r\n  \"mcworld\",\r\n  \"mcproject\",\r\n  \"material\",\r\n  \"vertex\",\r\n  \"md\",\r\n  \"geometry\",\r\n  \"fragment\",\r\n  \"map\",\r\n  \"js.map\",\r\n  \"mctemplate\",\r\n  \"mcfunction\",\r\n  \"mcaddon\",\r\n  \"mcpack\",\r\n  \"html\",\r\n  \"dat\",\r\n  \"dat_old\",\r\n  \"txt\",\r\n  \"ldb\",\r\n  \"log\",\r\n  \"in\",\r\n  \"cmake\",\r\n]);\r\n\r\nconst IgnoreExtensionsSet = new Set([\"ds_store\", \"brarchive\"]);\r\n\r\nconst IgnoreFileNames = new Set([\"thumbs.db\", \"desktop.ini\"]);\r\n\r\nconst IgnoreFolders = [\r\n  \"__MACOSX\",\r\n  \"credits\",\r\n  \"shaders\",\r\n  \"hbui\",\r\n  \"ray_tracing\",\r\n  \"node_modules\",\r\n  \"test\",\r\n  \"__brarchive\",\r\n  \"metadata\",\r\n];\r\n\r\nconst _minecraftProjectFolderNames = [\r\n  \"behavior_packs\",\r\n  \"resource_packs\",\r\n  \"worlds\",\r\n  \"world\",\r\n  \"world_template\",\r\n  \"skin_pack\",\r\n  \"scripts\",\r\n  \"content\",\r\n  \"marketing art\",\r\n  \"store art\",\r\n  \"db\",\r\n  \"texts\",\r\n  \"animation_controllers\",\r\n  \"blocks\",\r\n  \"structures\",\r\n  \"entities\",\r\n  \"functions\",\r\n  \"items\",\r\n  \"dialogue\",\r\n  \"animations\",\r\n  \"entity\",\r\n  \"materials\",\r\n  \"models\",\r\n  \"textures\",\r\n  \"fogs\",\r\n  \"materials\",\r\n  \"particles\",\r\n  \"ui\",\r\n];\r\n\r\nexport enum EncodingType {\r\n  ByteBuffer,\r\n  Utf8String,\r\n}\r\n\r\nexport default class StorageUtilities {\r\n  public static standardFolderDelimiter = \"/\";\r\n  private static textEncoder = new TextEncoder();\r\n\r\n  /**\r\n   * Debug flag: When true, getJsonObjectWithComments will use regular JSON.parse\r\n   * instead of comment-json to help isolate memory issues. Set via environment\r\n   * variable MCT_BYPASS_COMMENT_JSON=1 or programmatically.\r\n   */\r\n  public static bypassCommentJson =\r\n    typeof process !== \"undefined\" && process.env && process.env.MCT_BYPASS_COMMENT_JSON === \"1\";\r\n\r\n  /**\r\n   * Counter for tracking how many times comment-json parsing is invoked.\r\n   * Useful for debugging memory issues.\r\n   */\r\n  public static commentJsonParseCount = 0;\r\n\r\n  /**\r\n   * Log every Nth comment-json parse call (0 = disabled)\r\n   */\r\n  public static commentJsonLogFrequency = 0;\r\n\r\n  public static isUsableFile(path: string) {\r\n    const extension = StorageUtilities.getTypeFromName(path);\r\n\r\n    return AllowedExtensionsSet.has(extension);\r\n  }\r\n\r\n  public static canIgnoreFileName(fileName: string) {\r\n    return IgnoreFileNames.has(fileName.toLowerCase());\r\n  }\r\n\r\n  public static canIgnoreFileExtension(extension: string) {\r\n    return IgnoreExtensionsSet.has(extension);\r\n  }\r\n\r\n  public static isIgnorableFolder(folderName: string) {\r\n    const folderNameLower = folderName.toLowerCase();\r\n    return (\r\n      (folderNameLower.startsWith(\".\") && folderNameLower !== \".mcp\" && folderNameLower !== \".vscode\") ||\r\n      IgnoreFolders.includes(folderNameLower)\r\n    );\r\n  }\r\n\r\n  public static getSerializationOfChangeList(versionContentList: IVersionContent[]) {\r\n    let str = \"\";\r\n\r\n    for (const versionContent of versionContentList) {\r\n      str += \"|\" + versionContent.file.extendedPath + \"\\n\";\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  public static getEncodingByFileName(name: string): EncodingType {\r\n    const fileType = this.getTypeFromName(name);\r\n    const nameLow = name.toLowerCase();\r\n\r\n    switch (fileType) {\r\n      case \"mcstructure\":\r\n      case \"zip\":\r\n      case \"dat\":\r\n      case \"dat_old\":\r\n      case \"ldb\":\r\n      case \"ico\":\r\n      case \"tga\":\r\n      case \"hdr\":\r\n      case \"ogg\":\r\n      case \"flac\":\r\n      case \"wav\":\r\n      case \"gif\":\r\n      case \"jpeg\":\r\n      case \"jpg\":\r\n      case \"png\":\r\n      case \"psd\":\r\n      case \"mp3\":\r\n      case \"fsb\":\r\n      case \"woff\":\r\n      case \"woff2\":\r\n      case \"ttf\":\r\n      case \"pdb\":\r\n      case \"exe\":\r\n      case \"nbt\":\r\n      case \"mcworld\":\r\n      case \"mcproject\":\r\n      case \"mctemplate\":\r\n      case \"mcpack\":\r\n      case \"mcaddon\":\r\n        return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    if (fileType === \"\" && nameLow.startsWith(\"manifest-\")) {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB CURRENT file (no extension)\r\n    if (fileType === \"\" && nameLow === \"current\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB LOG file (no extension, write-ahead log)\r\n    if (fileType === \"\" && (nameLow === \"log\" || nameLow === \"lock\")) {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // Linux executables (no extension)\r\n    if (fileType === \"\" && nameLow === \"bedrock_server\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB LOG.old file\r\n    if (nameLow === \"log.old\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    // LevelDB LOG files (e.g., 000003.log) - all .log files in LevelDB are binary\r\n    if (fileType === \"log\") {\r\n      return EncodingType.ByteBuffer;\r\n    }\r\n\r\n    return EncodingType.Utf8String;\r\n  }\r\n\r\n  public static absolutize(path: string) {\r\n    if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = StorageUtilities.standardFolderDelimiter + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static stripExtension(path: string) {\r\n    const lastPeriodEnd = path.lastIndexOf(\".\");\r\n\r\n    if (lastPeriodEnd >= 0) {\r\n      path = path.substring(0, lastPeriodEnd);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getUniqueChildFolderName(name: string, folder: IFolder) {\r\n    let num = 1;\r\n    let nameCand = name;\r\n    let isUnique = false;\r\n\r\n    while (!isUnique) {\r\n      isUnique = true;\r\n      for (const childFolderName in folder.folders) {\r\n        if (StorageUtilities.canonicalizeName(childFolderName) === StorageUtilities.canonicalizeName(nameCand)) {\r\n          isUnique = false;\r\n        }\r\n      }\r\n\r\n      if (!isUnique) {\r\n        nameCand = name + \" \" + num;\r\n        num++;\r\n      }\r\n    }\r\n\r\n    return nameCand;\r\n  }\r\n\r\n  public static ensureEndsDelimited(path: string) {\r\n    if (!path.endsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = path + StorageUtilities.standardFolderDelimiter;\r\n    }\r\n\r\n    if (path.startsWith(\".\" + StorageUtilities.standardFolderDelimiter)) {\r\n      path = path.substring(1);\r\n    } else if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = StorageUtilities.standardFolderDelimiter + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static ensureEndsWithDelimiter(path: string) {\r\n    if (!path.endsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = path + StorageUtilities.standardFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  /***\r\n   * returns true if IFile argument is a .json file\r\n   */\r\n  public static isJsonFile(file?: IFile | null): file is IFile {\r\n    return !!file && file.fullPath.endsWith(\".json\");\r\n  }\r\n\r\n  /***\r\n   * Checks binary file contents for a UTF8 Byte Order Mark\r\n   *\r\n   * falsey contents will return false\r\n   */\r\n  public static hasUTF8ByteOrderMark(bytes?: Uint8Array | null) {\r\n    if (!bytes) {\r\n      return false;\r\n    }\r\n\r\n    return bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf;\r\n  }\r\n\r\n  /***\r\n   * Normalizes file contents by converting non-binary contents into binary\r\n   *\r\n   * falsey content will return as null\r\n   */\r\n  public static getContentsAsBinary(file: IFile): Uint8Array | null {\r\n    if (!file || !file.content) return null;\r\n    if (typeof file.content === \"string\") {\r\n      return StorageUtilities.textEncoder.encode(file.content);\r\n    }\r\n\r\n    return file.content as Uint8Array;\r\n  }\r\n\r\n  public static ensureStartsWithDelimiter(path: string) {\r\n    if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = StorageUtilities.standardFolderDelimiter + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static ensureNotStartsWithDelimiter(path: string) {\r\n    if (path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      path = path.substring(1);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getRootAndFocusPathFromInputPath(path: string) {\r\n    path = StorageUtilities.canonicalizePath(path);\r\n\r\n    let pathSegs = path.split(\"/\");\r\n\r\n    let i = pathSegs.length - 1;\r\n    let splitPoint = i;\r\n\r\n    // subtract out the file part of the path\r\n    if (pathSegs[i].indexOf(\".\") >= 0) {\r\n      i--;\r\n      splitPoint = i;\r\n    }\r\n\r\n    for (; i >= 1; i--) {\r\n      const seg = pathSegs[i];\r\n\r\n      if (seg === \"static-assets\" && i > 2) {\r\n        splitPoint = i - 2;\r\n        break;\r\n      }\r\n\r\n      if (PackContainerFolderHints.includes(seg)) {\r\n        splitPoint = i;\r\n        break;\r\n      }\r\n    }\r\n\r\n    let basePath = pathSegs.slice(0, splitPoint).join(\"/\").trim();\r\n\r\n    if (!basePath.endsWith(\"/\")) {\r\n      basePath += \"/\";\r\n    }\r\n\r\n    let focusPath: string | undefined = pathSegs.slice(splitPoint).join(\"/\").trim();\r\n\r\n    if (focusPath.length > 2) {\r\n      if (!focusPath.startsWith(\"/\")) {\r\n        focusPath = \"/\" + focusPath;\r\n      }\r\n    } else {\r\n      focusPath = undefined;\r\n    }\r\n\r\n    return {\r\n      basePath: basePath,\r\n      focusPath: focusPath,\r\n    };\r\n  }\r\n\r\n  public static joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(StorageUtilities.standardFolderDelimiter)) {\r\n      fullPath += StorageUtilities.standardFolderDelimiter;\r\n    }\r\n\r\n    if (pathB.startsWith(\"/\")) {\r\n      fullPath += pathB.substring(1, pathB.length);\r\n    } else {\r\n      fullPath += pathB;\r\n    }\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getMimeTypeFromName(name: string): string {\r\n    switch (StorageUtilities.getTypeFromName(name)) {\r\n      case \"js\":\r\n        return \"application/javascript\";\r\n\r\n      case \"ts\":\r\n        return \"application/typescript\";\r\n\r\n      case \"json\":\r\n        return \"application/json\";\r\n\r\n      case \"mcworld\":\r\n      case \"mctemplate\":\r\n      case \"mcproject\":\r\n      case \"mcaddon\":\r\n      case \"mcpack\":\r\n      case \"zip\":\r\n        return \"application/zip\";\r\n\r\n      case \"mcstucture\":\r\n      case \"hdr\":\r\n      case \"fsb\":\r\n        return \"application/octet-stream\";\r\n\r\n      case \"mcfunction\":\r\n      case \"material\":\r\n      case \"env\":\r\n      case \"lang\":\r\n        return \"text/plain\";\r\n\r\n      case \"wav\":\r\n        return \"audio/wav\";\r\n\r\n      case \"mp3\":\r\n        return \"audio/mp3\";\r\n      case \"ogg\":\r\n        return \"audio/ogg\";\r\n      case \"flac\":\r\n        return \"audio/flac\";\r\n\r\n      case \"psd\":\r\n        return \"image/vnd.adobe.photoshop\";\r\n\r\n      case \"jpg\":\r\n      case \"jpeg\":\r\n        return \"image/jpeg\";\r\n\r\n      case \"png\":\r\n        return \"image/png\";\r\n\r\n      case \"gif\":\r\n        return \"image/gif\";\r\n\r\n      case \"webp\":\r\n        return \"image/webp\";\r\n\r\n      case \"svg\":\r\n        return \"image/svg+xml\";\r\n\r\n      case \"bmp\":\r\n        return \"image/bmp\";\r\n\r\n      case \"ico\":\r\n        return \"image/x-icon\";\r\n\r\n      case \"tiff\":\r\n      case \"tga\":\r\n        return \"image/tiff\";\r\n\r\n      case \"md\":\r\n        return \"text/markdown\";\r\n\r\n      case \"html\":\r\n      case \"htm\":\r\n        return \"text/html\";\r\n\r\n      case \"css\":\r\n        return \"text/css\";\r\n\r\n      case \"xml\":\r\n        return \"application/xml\";\r\n\r\n      case \"yaml\":\r\n      case \"yml\":\r\n        return \"application/yaml\";\r\n\r\n      default:\r\n        return \"application/octet-stream\";\r\n    }\r\n  }\r\n\r\n  static getMimeType(file: IFile): string {\r\n    return StorageUtilities.getMimeTypeFromName(file.name);\r\n  }\r\n\r\n  static isImageMimeType(mimeType: string): boolean {\r\n    return mimeType.startsWith(\"image/\");\r\n  }\r\n\r\n  public static getContentAsString(file: IFile) {\r\n    if (typeof file.content === \"string\") {\r\n      return file.content;\r\n    } else if (file.content instanceof Uint8Array) {\r\n      return \"data:\" + StorageUtilities.getMimeType(file) + \";base64,\" + Utilities.uint8ArrayToBase64(file.content);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static sortChangeList(changeList: IVersionContent[]) {\r\n    changeList.sort((a: IVersionContent, b: IVersionContent) => {\r\n      if (!a.versionTime && !b.versionTime) {\r\n        return 0;\r\n      }\r\n\r\n      if (!a.versionTime) {\r\n        return -1;\r\n      }\r\n      if (!b.versionTime) {\r\n        return 1;\r\n      }\r\n\r\n      return a.versionTime.getTime() - b.versionTime.getTime();\r\n    });\r\n  }\r\n\r\n  // We don't want a new version every time the user hits a key stroke, so, look to see if it makes sense to\r\n  // remove \"trivial\" versions compared to the latest update\r\n  public static coalesceVersions(versionList: IVersionContent[]) {\r\n    const latestUpdate = versionList[versionList.length - 1];\r\n    let removingVersion = false;\r\n\r\n    if (!latestUpdate.versionTime || !latestUpdate.content) {\r\n      return versionList;\r\n    }\r\n\r\n    let latestVersionTime = latestUpdate.versionTime.getTime();\r\n    let latestVersionSize = latestUpdate.content.length;\r\n\r\n    const contentUpdatesToRemove: { [key: string]: boolean } = {};\r\n    const firstInstanceOfFile: { [key: string]: string } = {};\r\n\r\n    if (versionList.length >= 2) {\r\n      // get to the first instance of a particular file we're going to deal with\r\n      for (\r\n        let i = versionList.length - 2;\r\n        i >= Math.max(0, versionList.length - VersionCoalescingVersionsToConsider);\r\n        i--\r\n      ) {\r\n        const current = versionList[i];\r\n        if (current && current.file) {\r\n          firstInstanceOfFile[current.file.extendedPath] = current.id;\r\n        }\r\n      }\r\n\r\n      // moving backwards over the version list - considering a max set of VersionCoalescingVersionsToConsider,\r\n      // coalesce versions that are semantically similar enough to the latest version by essentially removing minor\r\n      // from the version list\r\n      // note that we are only considering coalescing into the latest version (lastestUpdate)\r\n      for (\r\n        let i = versionList.length - 2;\r\n        i >= Math.max(0, versionList.length - VersionCoalescingVersionsToConsider);\r\n        i--\r\n      ) {\r\n        const current = versionList[i];\r\n\r\n        if (current.file === latestUpdate.file) {\r\n          // is this change \"minor\" compared to the latest version\r\n          if (\r\n            firstInstanceOfFile[current.file.extendedPath] !== current.id &&\r\n            current.versionTime &&\r\n            latestVersionTime - current.versionTime.getTime() < VersionCoalescingTimeThresholdMs &&\r\n            current.content &&\r\n            Math.abs(latestVersionSize - current.content.length) < VersionCoalescingSizeThresholdBytes\r\n          ) {\r\n            contentUpdatesToRemove[current.id] = true;\r\n            removingVersion = true;\r\n            if (\r\n              !latestUpdate.startVersionTime ||\r\n              current.versionTime.getTime() < latestUpdate.startVersionTime.getTime()\r\n            ) {\r\n              latestUpdate.startVersionTime = current.versionTime;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!removingVersion) {\r\n      return versionList;\r\n    }\r\n\r\n    const newList: IVersionContent[] = [];\r\n    let previousMajorUpdate: IVersionContent | undefined = undefined;\r\n\r\n    for (const version of versionList) {\r\n      if (!contentUpdatesToRemove[version.id]) {\r\n        newList.push(version);\r\n\r\n        if (version.file === latestUpdate.file) {\r\n          if (previousMajorUpdate !== undefined) {\r\n            if (previousMajorUpdate.content && version.content) {\r\n              const byteDiff = version.content.length - previousMajorUpdate.content.length;\r\n\r\n              if (byteDiff > 0) {\r\n                version.description = \"+\" + byteDiff;\r\n              } else if (byteDiff < 0) {\r\n                version.description = \"-\" + Math.abs(byteDiff);\r\n              }\r\n            }\r\n          }\r\n          previousMajorUpdate = version;\r\n        }\r\n      }\r\n    }\r\n\r\n    // remove trivial versions from the per-file list too\r\n    const newPerFileList: IVersionContent[] = [];\r\n\r\n    for (const version of latestUpdate.file.priorVersions) {\r\n      if (!contentUpdatesToRemove[version.id]) {\r\n        newPerFileList.push(version);\r\n      }\r\n    }\r\n\r\n    latestUpdate.file.priorVersions = newPerFileList;\r\n\r\n    return newList;\r\n  }\r\n\r\n  public static getAvailableFolderName(folder: IFolder) {\r\n    // if we're inside of an MCPack or zip, the folder is \"/\" but the name of the mcpack file potentially\r\n    // provides hints, so scoop out the name of the parent zip\r\n    let basePathName = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if ((basePathName === \"/\" || basePathName === \"\") && folder.extendedPath.length > 1) {\r\n      let hashIndex = folder.extendedPath.indexOf(\"#\");\r\n\r\n      if (hashIndex > 0) {\r\n        basePathName = folder.extendedPath.substring(0, hashIndex);\r\n\r\n        let lastPeriod = basePathName.lastIndexOf(\".\");\r\n\r\n        if (lastPeriod > 0) {\r\n          basePathName = basePathName.substring(0, lastPeriod);\r\n        }\r\n        let lastSlash = basePathName.lastIndexOf(\"/\");\r\n\r\n        if (lastSlash >= 0 && lastSlash < basePathName.length - 1) {\r\n          basePathName = basePathName.substring(lastSlash + 1);\r\n        }\r\n      }\r\n    }\r\n\r\n    return basePathName;\r\n  }\r\n\r\n  public static async getFileStorageFolder(file: IFile): Promise<IFolder | undefined | string> {\r\n    let zipStorage: IStorage | null | undefined = file.fileContainerStorage;\r\n\r\n    if (!zipStorage) {\r\n      zipStorage = await ZipStorage.loadFromFile(file);\r\n\r\n      if (!zipStorage) {\r\n        return undefined;\r\n      }\r\n\r\n      if (zipStorage.errorStatus === StorageErrorStatus.unprocessable) {\r\n        file.errorStateMessage = zipStorage.errorMessage;\r\n        return file.errorStateMessage;\r\n      }\r\n\r\n      file.fileContainerStorage = zipStorage;\r\n      file.fileContainerStorage.storagePath = file.storageRelativePath + \"#\";\r\n    }\r\n\r\n    return zipStorage.rootFolder;\r\n  }\r\n\r\n  public static getContaineredFileLeafPath(path: string | null | undefined) {\r\n    if (!path) {\r\n      return;\r\n    }\r\n    const lastHash = path.lastIndexOf(\"#\");\r\n\r\n    if (lastHash >= 0) {\r\n      path = path.substring(lastHash + 1);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static isMinecraftInternalFolder(folder: IFolder) {\r\n    const nameCanon = folder.name.toLowerCase();\r\n\r\n    return _minecraftProjectFolderNames.includes(nameCanon);\r\n  }\r\n\r\n  public static isContainerFile(path: string) {\r\n    const extension = StorageUtilities.getTypeFromName(path);\r\n\r\n    if (\r\n      extension === \"zip\" ||\r\n      extension === \"mcworld\" ||\r\n      extension === \"mcproject\" ||\r\n      extension === \"mctemplate\" ||\r\n      extension === \"mcpack\" ||\r\n      extension === \"mcaddon\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static isFileStorageItem(file: IFile) {\r\n    return this.isContainerFile(file.name);\r\n  }\r\n\r\n  public static canonicalizeName(name: string): string {\r\n    name = name.trim(); //.toLowerCase();\r\n\r\n    if (name.startsWith(\"/\") || name.startsWith(\"\\\\\")) {\r\n      name = name.substring(1, name.length);\r\n    }\r\n\r\n    if (name.endsWith(\"/\") || name.endsWith(\"\\\\\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    // constructor is a keyword that will cause array existence checks to fail in interesting ways\r\n    if (name === \"constructor\") {\r\n      name = \"__constructor\";\r\n    }\r\n\r\n    name = name.replace(/%20/g, \" \");\r\n    name = name.replace(/%28/g, \"(\");\r\n    name = name.replace(/%29/g, \")\");\r\n\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      name = \"named_\" + name;\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  public static isPathEqual(pathA: string, pathB: string) {\r\n    return StorageUtilities.canonicalizePath(pathA) === StorageUtilities.canonicalizePath(pathB);\r\n  }\r\n\r\n  public static canonicalizePath(path: string): string {\r\n    path = path.trim(); //  .toLowerCase();\r\n    path = path.replace(/\\\\/g, \"/\");\r\n    path = path.replace(/%20/g, \" \");\r\n    path = path.replace(/%28/g, \"(\");\r\n    path = path.replace(/%29/g, \")\");\r\n\r\n    return path;\r\n  }\r\n\r\n  public static canonicalizePathAsFileName(path: string): string {\r\n    let result = path.trim().toLowerCase();\r\n\r\n    path = path.replace(/%20/g, \" \");\r\n    path = path.replace(/%28/g, \"(\");\r\n    path = path.replace(/%29/g, \")\");\r\n\r\n    result = result.replace(/:/g, \"_\");\r\n    result = result.replace(/\\//g, \"-\");\r\n    result = result.replace(/\\\\/g, \"-\");\r\n    result = result.replace(/%/g, \"-\");\r\n    result = result.replace(/--/g, \"-\");\r\n    result = result.replace(/--/g, \"-\");\r\n\r\n    result = result.replace(/\\?/g, \"-\");\r\n    result = result.replace(/\\|/g, \"-\");\r\n\r\n    return result;\r\n  }\r\n\r\n  public static ensureFileNameIsSafe(path: string): string {\r\n    let result = path.trim().toLowerCase();\r\n\r\n    path = path.replace(/%20/g, \" \");\r\n    path = path.replace(/%28/g, \"(\");\r\n    path = path.replace(/%29/g, \")\");\r\n\r\n    result = result.replace(/:/g, \"_\");\r\n    result = result.replace(/\\//g, \"-\");\r\n    result = result.replace(/\\\\/g, \"-\");\r\n    result = result.replace(/%/g, \"-\");\r\n    result = result.replace(/--/g, \"-\");\r\n    result = result.replace(/`/g, \"-\");\r\n    result = result.replace(/'/g, \"-\");\r\n    result = result.replace(/\u2013/g, \"-\");\r\n\r\n    return result;\r\n  }\r\n\r\n  public static hasPathSeparator(path: string): boolean {\r\n    if (!path) {\r\n      return false;\r\n    }\r\n    let lastSlash = path.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      return true;\r\n    }\r\n\r\n    lastSlash = path.lastIndexOf(\"\\\\\", path.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static getLeafName(path: string): string {\r\n    let name = path;\r\n\r\n    if (name.endsWith(\"/\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    if (name.endsWith(\"\\\\\")) {\r\n      name = name.substring(0, name.length - 1);\r\n    }\r\n\r\n    let lastSlash = name.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      name = name.substring(lastSlash + 1, name.length);\r\n    }\r\n\r\n    lastSlash = name.lastIndexOf(\"\\\\\", name.length - 1);\r\n\r\n    if (lastSlash >= 0) {\r\n      name = name.substring(lastSlash + 1, name.length);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  public static getFolderPath(path: string): string {\r\n    let lastSlash = path.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n      path = path.substring(0, lastSlash + 1);\r\n    } else {\r\n      lastSlash = path.lastIndexOf(\"\\\\\", path.length - 1);\r\n\r\n      if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n        path = path.substring(0, lastSlash + 1);\r\n      }\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getParentFolderNameFromPath(path: string): string | undefined {\r\n    let lastSlash = path.lastIndexOf(\"/\", path.length - 1);\r\n\r\n    if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n      const nextLastSlash = path.lastIndexOf(\"/\", lastSlash - 1);\r\n\r\n      return path.substring(nextLastSlash + 1, lastSlash);\r\n    } else {\r\n      lastSlash = path.lastIndexOf(\"\\\\\", path.length - 1);\r\n\r\n      if (lastSlash >= 0 && lastSlash < path.length - 1) {\r\n        const nextLastSlash = path.lastIndexOf(\"/\", lastSlash - 1);\r\n\r\n        return path.substring(nextLastSlash + 1, lastSlash);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static removeContainerExtension(name: string): string {\r\n    let nameW = name.trim();\r\n\r\n    if (nameW.endsWith(\".zip\")) {\r\n      nameW = nameW.substring(0, nameW.length - 4);\r\n    }\r\n    return nameW;\r\n  }\r\n\r\n  // returns path relative to folder, with the file extension removed, as is commonly used in Minecraft resource references\r\n  public static getBaseRelativePath(file: IFile, folder: IFolder) {\r\n    let relativePath = file.getFolderRelativePath(folder);\r\n\r\n    if (relativePath) {\r\n      relativePath = StorageUtilities.getBaseFromName(relativePath).toLowerCase();\r\n\r\n      relativePath = StorageUtilities.ensureNotStartsWithDelimiter(relativePath);\r\n    }\r\n\r\n    return relativePath;\r\n  }\r\n\r\n  public static getBaseFromName(name: string): string {\r\n    const nameW = name.trim();\r\n\r\n    const lastPeriod = nameW.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod < 0) {\r\n      return nameW;\r\n    }\r\n\r\n    return nameW.substring(0, lastPeriod);\r\n  }\r\n\r\n  public static convertFolderPlaceholders(path: string) {\r\n    return this.convertFolderPlaceholdersPartial(path, 0);\r\n  }\r\n\r\n  public static convertFolderPlaceholdersPartial(path: string, startIndex?: number) {\r\n    if (startIndex === undefined) {\r\n      startIndex = 4; // default is to ignore the <pt_ at the start.\r\n    }\r\n\r\n    let pathTokenStart = path.indexOf(\"<pt_\", startIndex);\r\n\r\n    while (pathTokenStart >= startIndex) {\r\n      let pathTokenEnd = path.indexOf(\">\", pathTokenStart + 4);\r\n\r\n      if (pathTokenEnd > pathTokenStart) {\r\n        path =\r\n          path.substring(0, pathTokenStart) +\r\n          path.substring(pathTokenStart + 4, pathTokenEnd) +\r\n          path.substring(pathTokenEnd + 1);\r\n\r\n        pathTokenStart = path.indexOf(\"<pt_\", pathTokenStart);\r\n      } else {\r\n        pathTokenStart = path.indexOf(\"<pt_\", pathTokenStart + 1);\r\n      }\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  /**\r\n   * Well-known path token prefixes used in Electron for folder abstraction.\r\n   * Maps the token prefix (e.g., \"DOCP\") to a user-friendly display name.\r\n   */\r\n  private static readonly _friendlyTokenNames: { [token: string]: string } = {\r\n    DOCP: \"documents\",\r\n    BDRK: \"Minecraft\",\r\n    BDPV: \"Minecraft Preview\",\r\n    EDUR: \"Minecraft Education\",\r\n    EDUP: \"Minecraft Education Preview\",\r\n    MCPE: \"Minecraft PE\",\r\n  };\r\n\r\n  /**\r\n   * Strips the trailing random suffix (dash + 6 lowercase chars) that is appended\r\n   * to Electron path tokens for uniqueness. For example, \"base-packs-4kp0sp\" becomes \"base-packs\".\r\n   */\r\n  private static _stripTokenSuffix(tokenContent: string): string {\r\n    const lastDash = tokenContent.lastIndexOf(\"-\");\r\n\r\n    if (lastDash >= 1 && lastDash === tokenContent.length - 7) {\r\n      // Verify the suffix is all lowercase alphanumeric (the random ID format)\r\n      const suffix = tokenContent.substring(lastDash + 1);\r\n      if (/^[a-z0-9]{6}$/.test(suffix)) {\r\n        return tokenContent.substring(0, lastDash);\r\n      }\r\n    }\r\n\r\n    return tokenContent;\r\n  }\r\n\r\n  /**\r\n   * Converts a path or name containing Electron folder tokens into a user-friendly\r\n   * display string. Handles both `<pt_name-random>` project tokens (stripping the\r\n   * `<pt_>` wrapper and random suffix) and well-known tokens like `<DOCP>`, `<BDRK>`, etc.\r\n   *\r\n   * Examples:\r\n   *   \"<pt_base-packs-4kp0sp>\" -> \"base-packs\"\r\n   *   \"<DOCP>\" -> \"documents\"\r\n   *   \"<DOCP>/my-project/\" -> \"documents/my-project/\"\r\n   *   \"Opening <pt_my-addon-ab12cd>...\" -> \"Opening my-addon...\"\r\n   */\r\n  public static getFriendlyDisplayName(path: string): string {\r\n    // First, replace well-known tokens like <DOCP>, <BDRK>, etc.\r\n    for (const token in this._friendlyTokenNames) {\r\n      const tokenTag = \"<\" + token + \">\";\r\n      while (path.indexOf(tokenTag) >= 0) {\r\n        path = path.replace(tokenTag, this._friendlyTokenNames[token]);\r\n      }\r\n    }\r\n\r\n    // Then, replace <pt_...> tokens, stripping the random suffix\r\n    let ptStart = path.indexOf(\"<pt_\");\r\n    while (ptStart >= 0) {\r\n      const ptEnd = path.indexOf(\">\", ptStart + 4);\r\n      if (ptEnd > ptStart) {\r\n        const tokenContent = path.substring(ptStart + 4, ptEnd);\r\n        const friendlyName = this._stripTokenSuffix(tokenContent);\r\n        path = path.substring(0, ptStart) + friendlyName + path.substring(ptEnd + 1);\r\n        ptStart = path.indexOf(\"<pt_\", ptStart);\r\n      } else {\r\n        ptStart = path.indexOf(\"<pt_\", ptStart + 1);\r\n      }\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static getCoreBaseFromName(name: string): string {\r\n    const nameW = name.trim();\r\n\r\n    let firstPeriod = nameW.indexOf(\".\");\r\n\r\n    if (firstPeriod < 0) {\r\n      return name;\r\n    }\r\n\r\n    return nameW.substring(0, firstPeriod);\r\n  }\r\n\r\n  public static getTypeFromName(name: string): string {\r\n    const nameW = name.trim().toLowerCase();\r\n\r\n    const lastPeriod = nameW.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod < 0) {\r\n      return \"\";\r\n    }\r\n\r\n    return nameW.substring(lastPeriod + 1, nameW.length);\r\n  }\r\n\r\n  public static async folderContentsEqual(\r\n    folderA: IFolder | undefined,\r\n    folderB: IFolder | undefined,\r\n    excludingFilesOrFolders?: string[],\r\n    whitespaceAgnostic?: boolean,\r\n    ignoreAttributes?: string[],\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ): Promise<{ result: boolean; reason: string }> {\r\n    if (folderA === undefined && folderB === undefined) {\r\n      return { result: true, reason: \"Both folders are undefined.\" };\r\n    }\r\n\r\n    if (folderA === undefined) {\r\n      return { result: false, reason: \"First folder is undefined.\" };\r\n    }\r\n\r\n    if (folderB === undefined) {\r\n      return { result: false, reason: \"Second folder is undefined.\" };\r\n    }\r\n\r\n    await folderA.load(false);\r\n    await folderB.load(false);\r\n\r\n    if (folderA.fileCount !== folderB.fileCount) {\r\n      return {\r\n        result: false,\r\n        reason:\r\n          \"Folder '\" +\r\n          folderA.fullPath +\r\n          \"' has \" +\r\n          folderA.fileCount +\r\n          \" files; folder '\" +\r\n          folderB.fullPath +\r\n          \"' has \" +\r\n          folderB.fileCount +\r\n          \" files.\",\r\n      };\r\n    }\r\n\r\n    for (const fileName in folderA.files) {\r\n      const fileA = folderA.files[fileName];\r\n      const fileB = folderB.files[fileName];\r\n\r\n      if (fileA === undefined) {\r\n        return { result: false, reason: \"Unexpected file '\" + fileName + \"' undefined.\" };\r\n      }\r\n\r\n      if (fileB === undefined) {\r\n        return { result: false, reason: \"File '\" + fileName + \"' does not exist in '\" + folderB.fullPath + \"'\" };\r\n      }\r\n\r\n      let processFile = true;\r\n\r\n      if (excludingFilesOrFolders) {\r\n        if (excludingFilesOrFolders.includes(fileA.name)) {\r\n          processFile = false;\r\n        }\r\n\r\n        for (const excludeExt of excludingFilesOrFolders) {\r\n          if (fileA.name.toLowerCase().endsWith(excludeExt.toLowerCase())) {\r\n            processFile = false;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (processFile) {\r\n        const result = await StorageUtilities.fileContentsEqual(\r\n          fileA,\r\n          fileB,\r\n          whitespaceAgnostic,\r\n          ignoreAttributes,\r\n          volatilePatterns\r\n        );\r\n\r\n        if (!result) {\r\n          return {\r\n            result: false,\r\n            reason:\r\n              \"File '\" +\r\n              fileA.fullPath +\r\n              \"' (size: \" +\r\n              fileA.content?.length +\r\n              (fileA.isBinary ? \"B\" : \"C\") +\r\n              \") contents does not match '\" +\r\n              fileB.fullPath +\r\n              \"' (size: \" +\r\n              fileB.content?.length +\r\n              (fileB.isBinary ? \"B\" : \"C\") +\r\n              \")\",\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in folderA.folders) {\r\n      const childFolderA = folderA.folders[folderName];\r\n      const childFolderB = folderB.folders[folderName];\r\n\r\n      if (childFolderA === undefined) {\r\n        return { result: false, reason: \"Unexpected folder undefined. \" };\r\n      }\r\n\r\n      // Check if this folder should be excluded\r\n      let excludeFolder = false;\r\n      if (excludingFilesOrFolders) {\r\n        if (excludingFilesOrFolders.includes(folderName)) {\r\n          excludeFolder = true;\r\n        }\r\n      }\r\n\r\n      if (excludeFolder) {\r\n        continue;\r\n      }\r\n\r\n      if (childFolderB === undefined) {\r\n        return { result: false, reason: \"Folder '\" + folderName + \"' does not exist in '\" + folderB.fullPath + \"'\" };\r\n      }\r\n\r\n      const result = await StorageUtilities.folderContentsEqual(\r\n        childFolderA,\r\n        childFolderB,\r\n        excludingFilesOrFolders,\r\n        whitespaceAgnostic,\r\n        ignoreAttributes,\r\n        volatilePatterns\r\n      );\r\n\r\n      if (!result.result) {\r\n        return result;\r\n      }\r\n    }\r\n\r\n    return { result: true, reason: \"Folders are equal\" };\r\n  }\r\n\r\n  public static async fileContentsEqual(\r\n    fileA: IFile | undefined,\r\n    fileB: IFile | undefined,\r\n    whitespaceAgnostic?: boolean,\r\n    ignoreAttributes?: string[],\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ) {\r\n    if (fileA === undefined && fileB === undefined) {\r\n      return true;\r\n    }\r\n\r\n    if (fileA === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (fileB === undefined) {\r\n      return false;\r\n    }\r\n\r\n    const fileAExists = await fileA.exists();\r\n\r\n    if (!fileAExists) {\r\n      return false;\r\n    }\r\n\r\n    const fileBExists = await fileB.exists();\r\n\r\n    if (fileAExists && !fileBExists) {\r\n      return false;\r\n    }\r\n\r\n    await fileA.loadContent(false);\r\n    await fileB.loadContent(false);\r\n\r\n    if (fileA.content === undefined && fileB.content === undefined) {\r\n      return true;\r\n    }\r\n\r\n    const extA = StorageUtilities.getTypeFromName(fileA.name);\r\n    const extB = StorageUtilities.getTypeFromName(fileB.name);\r\n\r\n    let contentA = fileA.content;\r\n    let contentB = fileB.content;\r\n\r\n    if (contentA === null && contentB === null) {\r\n      return true;\r\n    }\r\n\r\n    if (contentA === null || contentB === null) {\r\n      return false;\r\n    }\r\n\r\n    if (extA === \"json\" && extB === \"json\" && typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      return this.jsonContentsAreEqualIgnoreWhitespace(contentA, contentB, ignoreAttributes, volatilePatterns);\r\n    } else if (whitespaceAgnostic) {\r\n      return StorageUtilities.contentsAreEqualIgnoreWhitespace(contentA, contentB, volatilePatterns);\r\n    }\r\n\r\n    return StorageUtilities.contentsAreEqual(contentA, contentB);\r\n  }\r\n\r\n  public static jsonContentsAreEqualIgnoreWhitespace(\r\n    contentA: string,\r\n    contentB: string,\r\n    ignoreAttributes?: string[],\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ) {\r\n    try {\r\n      let objA = JSON.parse(contentA);\r\n      let objB = JSON.parse(contentB);\r\n\r\n      if (ignoreAttributes && objA) {\r\n        objA = StorageUtilities.removeAttributesFromObject(objA, ignoreAttributes);\r\n      }\r\n\r\n      if (ignoreAttributes && objB) {\r\n        objB = StorageUtilities.removeAttributesFromObject(objB, ignoreAttributes);\r\n      }\r\n\r\n      // Apply volatile patterns to normalize dynamic content in strings\r\n      if (volatilePatterns) {\r\n        objA = StorageUtilities.applyVolatilePatternsToObject(objA, volatilePatterns);\r\n        objB = StorageUtilities.applyVolatilePatternsToObject(objB, volatilePatterns);\r\n      }\r\n\r\n      return Utilities.consistentStringifyTrimmed(objA) === Utilities.consistentStringifyTrimmed(objB);\r\n    } catch (e) {\r\n      Log.debug(\"Error parsing JSON for comparison: \" + e);\r\n    }\r\n\r\n    if (ignoreAttributes && typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      for (const ignoreLine of ignoreAttributes) {\r\n        contentA = Utilities.stripLinesContaining(contentA, '\"' + ignoreLine + '\":');\r\n        contentB = Utilities.stripLinesContaining(contentB, \"'\" + ignoreLine + \"':\");\r\n      }\r\n    }\r\n\r\n    // Apply volatile patterns to raw content as fallback\r\n    if (volatilePatterns && typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      for (const { pattern, replacement } of volatilePatterns) {\r\n        contentA = contentA.replace(pattern, replacement);\r\n        contentB = contentB.replace(pattern, replacement);\r\n      }\r\n    }\r\n\r\n    contentA = this.stripWhitespace(contentA);\r\n    contentB = this.stripWhitespace(contentB);\r\n\r\n    return contentA === contentB;\r\n  }\r\n\r\n  /**\r\n   * Recursively applies volatile patterns to normalize dynamic content within string values\r\n   * @param obj The object to process\r\n   * @param patterns Array of regex patterns and their replacements\r\n   * @returns A new object with patterns applied to string values\r\n   */\r\n  public static applyVolatilePatternsToObject(\r\n    obj: any,\r\n    patterns: Array<{ pattern: RegExp; replacement: string }>\r\n  ): any {\r\n    if (obj === null || obj === undefined) {\r\n      return obj;\r\n    }\r\n\r\n    // Handle strings - apply all patterns\r\n    if (typeof obj === \"string\") {\r\n      let result = obj;\r\n      for (const { pattern, replacement } of patterns) {\r\n        result = result.replace(pattern, replacement);\r\n      }\r\n      return result;\r\n    }\r\n\r\n    // Handle arrays\r\n    if (Array.isArray(obj)) {\r\n      return obj.map((item) => this.applyVolatilePatternsToObject(item, patterns));\r\n    }\r\n\r\n    // Handle objects\r\n    if (typeof obj === \"object\") {\r\n      const result: any = {};\r\n      for (const key in obj) {\r\n        if (obj.hasOwnProperty(key)) {\r\n          result[key] = this.applyVolatilePatternsToObject(obj[key], patterns);\r\n        }\r\n      }\r\n      return result;\r\n    }\r\n\r\n    // Handle other primitives\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Recursively sets attributes to undefined in a JSON object if they match any of the provided attribute names\r\n   * @param obj The object to process\r\n   * @param attributeNames Array of attribute names to set to undefined\r\n   * @returns A new object with specified attributes set to undefined\r\n   */\r\n  public static removeAttributesFromObject(obj: any, attributeNames: string[]): any {\r\n    if (obj === null || obj === undefined) {\r\n      return obj;\r\n    }\r\n\r\n    // Handle arrays\r\n    if (Array.isArray(obj)) {\r\n      return obj.map((item) => this.removeAttributesFromObject(item, attributeNames));\r\n    }\r\n\r\n    // Handle objects\r\n    if (typeof obj === \"object\") {\r\n      const result: any = {};\r\n\r\n      for (const key in obj) {\r\n        if (obj.hasOwnProperty(key)) {\r\n          if (attributeNames.includes(key)) {\r\n            // Skip this key entirely (don't add to result)\r\n            continue;\r\n          } else {\r\n            result[key] = this.removeAttributesFromObject(obj[key], attributeNames);\r\n          }\r\n        }\r\n      }\r\n\r\n      return result;\r\n    }\r\n\r\n    // Handle primitives\r\n    return obj;\r\n  }\r\n\r\n  public static stripWhitespace(content: string) {\r\n    content = content.trim();\r\n\r\n    content = content.replace(/ /gi, \"\");\r\n    content = content.replace(/\\r/gi, \"\");\r\n    content = content.replace(/\\n/gi, \"\");\r\n    content = content.replace(/\\t/gi, \"\");\r\n\r\n    return content;\r\n  }\r\n\r\n  public static contentsAreEqual(contentA: string | Uint8Array | null, contentB: string | Uint8Array | null) {\r\n    if (contentA === null && contentB === null) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      return contentA === contentB;\r\n    }\r\n\r\n    if (contentA instanceof Uint8Array && contentB instanceof Uint8Array) {\r\n      return Utilities.uint8ArraysAreEqual(contentA, contentB);\r\n    }\r\n\r\n    return false;\r\n  }\r\n  public static contentsAreEqualIgnoreWhitespace(\r\n    contentA: string | Uint8Array | null,\r\n    contentB: string | Uint8Array | null,\r\n    volatilePatterns?: Array<{ pattern: RegExp; replacement: string }>\r\n  ) {\r\n    if (contentA === null && contentB === null) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof contentA === \"string\" && typeof contentB === \"string\") {\r\n      let strA = contentA;\r\n      let strB = contentB;\r\n\r\n      // Apply volatile patterns to normalize dynamic content\r\n      if (volatilePatterns) {\r\n        for (const { pattern, replacement } of volatilePatterns) {\r\n          strA = strA.replace(pattern, replacement);\r\n          strB = strB.replace(pattern, replacement);\r\n        }\r\n      }\r\n\r\n      return this.stripWhitespace(strA) === this.stripWhitespace(strB);\r\n    }\r\n\r\n    if (contentA instanceof Uint8Array && contentB instanceof Uint8Array) {\r\n      return Utilities.uint8ArraysAreEqual(contentA, contentB);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static async getDifferences(\r\n    original: IFolder,\r\n    updated: IFolder,\r\n    includeDeletions: boolean,\r\n    matchSingleChildFolders: boolean\r\n  ) {\r\n    // matchSingleChildFolders: for project template starters, where they have a structure like:\r\n    //     resource_packs/template_name\r\n    // that gets renamed to\r\n    //     resource_packs/mikesfooproject\r\n    // then -- if there is one folder in the original and one folder in the updated,\r\n    // we want to match them up irrespective of the name\r\n\r\n    const data = new DifferenceSet();\r\n\r\n    await this.addDifferences(data, original, updated, includeDeletions, matchSingleChildFolders);\r\n\r\n    return data;\r\n  }\r\n\r\n  public static getFirstFile(folder: IFolder): IFile | undefined {\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file && !file.canIgnore) {\r\n        return file;\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const subFolder = folder.folders[folderName];\r\n\r\n      if (subFolder) {\r\n        const file = this.getFirstFile(subFolder);\r\n\r\n        if (file && !file.canIgnore) {\r\n          return file;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public static async addDifferences(\r\n    differences: DifferenceSet,\r\n    original: IFolder,\r\n    updated: IFolder,\r\n    includeDeletions: boolean,\r\n    matchSingleFolders: boolean\r\n  ): Promise<FolderDifferenceType> {\r\n    await original.load(false);\r\n\r\n    await updated.load(false);\r\n\r\n    let result: FolderDifferenceType = FolderDifferenceType.none;\r\n\r\n    // get a list of existing files and folders in the target\r\n    const updatedFilesToConsider: { [id: string]: boolean } = {};\r\n    const updatedFoldersToConsider: { [id: string]: boolean } = {};\r\n\r\n    for (const updatedFileName in updated.files) {\r\n      if (BasicValidators.isFileNameOKForSharing(updatedFileName)) {\r\n        updatedFilesToConsider[updatedFileName] = true;\r\n      }\r\n    }\r\n\r\n    for (const updatedFolderName in updated.folders) {\r\n      if (BasicValidators.isFolderNameOKForSharing(updatedFolderName)) {\r\n        updatedFoldersToConsider[updatedFolderName] = true;\r\n      }\r\n    }\r\n\r\n    for (const originalFileName in original.files) {\r\n      if (BasicValidators.isFileNameOKForSharing(originalFileName)) {\r\n        const originalFile = original.files[originalFileName];\r\n\r\n        if (originalFile !== undefined) {\r\n          updatedFilesToConsider[originalFileName] = false;\r\n\r\n          if (updated.fileExists(originalFileName)) {\r\n            const updatedFile = updated.files[originalFileName];\r\n\r\n            const areEqual = await StorageUtilities.fileContentsEqual(originalFile, updatedFile);\r\n\r\n            if (!areEqual) {\r\n              if ((result & FolderDifferenceType.fileContentsDifferent) === 0) {\r\n                result += FolderDifferenceType.fileContentsDifferent;\r\n              }\r\n\r\n              differences.fileDifferences.push({\r\n                type: FileDifferenceType.contentsDifferent,\r\n                path: originalFile.storageRelativePath,\r\n                original: originalFile,\r\n                updated: updatedFile,\r\n              });\r\n            }\r\n          } else if (includeDeletions) {\r\n            if ((result & FolderDifferenceType.fileListDifferent) === 0) {\r\n              result += FolderDifferenceType.fileListDifferent;\r\n            }\r\n\r\n            differences.fileDifferences.push({\r\n              type: FileDifferenceType.fileDeleted,\r\n              path: originalFile.storageRelativePath,\r\n              original: originalFile,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const originalFolderName in original.folders) {\r\n      if (BasicValidators.isFolderNameOKForSharing(originalFolderName)) {\r\n        const originalChildFolder = original.folders[originalFolderName];\r\n\r\n        if (originalChildFolder !== undefined) {\r\n          updatedFoldersToConsider[originalFolderName] = false;\r\n\r\n          if (\r\n            updated.folderExists(originalFolderName) ||\r\n            (matchSingleFolders && updated.folderCount === 1 && original.folderCount === 1)\r\n          ) {\r\n            let updatedChildFolder = updated.folders[originalFolderName];\r\n\r\n            if (matchSingleFolders && updated.folderCount && original.folderCount && !updatedChildFolder) {\r\n              updatedChildFolder = updated.getFolderByIndex(0);\r\n            }\r\n\r\n            if (updatedChildFolder !== undefined) {\r\n              updatedFoldersToConsider[updatedChildFolder.name] = false;\r\n\r\n              const childResult = await StorageUtilities.addDifferences(\r\n                differences,\r\n                originalChildFolder,\r\n                updatedChildFolder,\r\n                includeDeletions,\r\n                matchSingleFolders\r\n              );\r\n\r\n              if (childResult !== FolderDifferenceType.none) {\r\n                result = result | childResult;\r\n              }\r\n            }\r\n          } else if (includeDeletions) {\r\n            if ((result & FolderDifferenceType.folderDeleted) === 0) {\r\n              result += FolderDifferenceType.folderDeleted;\r\n            }\r\n\r\n            this.addDifferencesAsFolderDelete(differences, originalChildFolder);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const updatedFileName in updatedFilesToConsider) {\r\n      if (updatedFilesToConsider[updatedFileName] === true) {\r\n        const updatedFile = updated.files[updatedFileName];\r\n\r\n        if (updatedFile !== undefined) {\r\n          if ((result & FolderDifferenceType.fileListDifferent) === 0) {\r\n            result += FolderDifferenceType.fileListDifferent;\r\n          }\r\n\r\n          if (updatedFile.content !== undefined && updatedFile.content !== null) {\r\n            differences.fileDifferences.push({\r\n              type: FileDifferenceType.fileAdded,\r\n              path: StorageUtilities.relativizePathToOriginal(original, updated, updatedFile.storageRelativePath),\r\n              updated: updatedFile,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const updatedFolderName in updatedFoldersToConsider) {\r\n      if (updatedFoldersToConsider[updatedFolderName] === true) {\r\n        const updatedFolder = updated.folders[updatedFolderName];\r\n\r\n        if (updatedFolder !== undefined) {\r\n          if ((result & FolderDifferenceType.folderAdded) === 0) {\r\n            result += FolderDifferenceType.folderAdded;\r\n          }\r\n\r\n          this.addDifferencesAsFolderAdd(differences, updatedFolder, original, updated);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (result !== FolderDifferenceType.none) {\r\n      differences.folderDifferences.push({\r\n        type: result,\r\n        path: original.storageRelativePath,\r\n        original: original,\r\n        updated: updated,\r\n      });\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  public static relativizePathToOriginal(original: IFolder, updated: IFolder, path: string) {\r\n    const folders = original.storageRelativePath.split(StorageUtilities.standardFolderDelimiter);\r\n\r\n    for (let i = folders.length - 1; i >= 0; i--) {\r\n      const lastIndexOfInPath = path.lastIndexOf(\"/\" + folders[i] + \"/\");\r\n      const lastIndexOfInSource = original.storageRelativePath.lastIndexOf(\"/\" + folders[i] + \"/\");\r\n\r\n      if (lastIndexOfInPath >= 0 && lastIndexOfInSource >= 0) {\r\n        return original.storageRelativePath.substring(0, lastIndexOfInSource) + path.substring(lastIndexOfInPath);\r\n      }\r\n    }\r\n\r\n    const originalPathLength = original.storageRelativePath.length;\r\n    const updatedPathLength = updated.storageRelativePath.length;\r\n\r\n    if (updatedPathLength > originalPathLength) {\r\n      path = path.substring(updatedPathLength - originalPathLength, path.length);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  public static async addDifferencesAsFolderAdd(\r\n    differences: DifferenceSet,\r\n    childUpdated: IFolder,\r\n    original: IFolder,\r\n    updated: IFolder\r\n  ) {\r\n    await childUpdated.load(false);\r\n\r\n    differences.folderDifferences.push({\r\n      type: FolderDifferenceType.folderAdded,\r\n      path: StorageUtilities.relativizePathToOriginal(original, updated, childUpdated.storageRelativePath),\r\n      updated: childUpdated,\r\n    });\r\n\r\n    for (const updatedFileName in childUpdated.files) {\r\n      const updatedFile = childUpdated.files[updatedFileName];\r\n\r\n      if (updatedFile !== undefined) {\r\n        differences.fileDifferences.push({\r\n          type: FileDifferenceType.fileAdded,\r\n          path: StorageUtilities.relativizePathToOriginal(original, updated, updatedFile.storageRelativePath),\r\n          updated: updatedFile,\r\n        });\r\n      }\r\n    }\r\n\r\n    for (const updatedFolderName in childUpdated.folders) {\r\n      const updatedFolder = childUpdated.folders[updatedFolderName];\r\n\r\n      if (updatedFolder !== undefined) {\r\n        this.addDifferencesAsFolderAdd(differences, updatedFolder, original, updated);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static async addDifferencesAsFolderDelete(differences: DifferenceSet, original: IFolder) {\r\n    await original.load(false);\r\n\r\n    differences.folderDifferences.push({\r\n      type: FolderDifferenceType.folderDeleted,\r\n      path: original.storageRelativePath,\r\n      updated: original,\r\n    });\r\n\r\n    for (const originalFileName in original.files) {\r\n      const originalFile = original.files[originalFileName];\r\n\r\n      if (originalFile !== undefined) {\r\n        differences.fileDifferences.push({\r\n          type: FileDifferenceType.fileDeleted,\r\n          path: originalFile.storageRelativePath,\r\n          original: originalFile,\r\n        });\r\n      }\r\n    }\r\n\r\n    for (const originalFolderName in original.folders) {\r\n      const originalFolder = original.folders[originalFolderName];\r\n\r\n      if (originalFolder !== undefined) {\r\n        this.addDifferencesAsFolderDelete(differences, originalFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static isPathRiskyForDelete(path: string) {\r\n    path = path.toLowerCase().trim();\r\n\r\n    if (path.indexOf(\"system32\") >= 0 || path.indexOf(\"program files\") >= 0 || path.indexOf(\"programdata\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    // a very crude way to ensure this code never removes c:\\ or c:\\my documents or whatever or something elemental.\r\n    return Utilities.countChar(path, \"/\") + Utilities.countChar(path, \"\\\\\") < 4;\r\n  }\r\n\r\n  public static getParentOfParentFolderNamed(folderName: string, folder: IFolder) {\r\n    let ancestorFolder = undefined;\r\n\r\n    while (folder.name !== folderName && folder.parentFolder) {\r\n      folder = folder.parentFolder;\r\n    }\r\n\r\n    if (folder.parentFolder) {\r\n      ancestorFolder = folder.parentFolder;\r\n    }\r\n\r\n    return ancestorFolder;\r\n  }\r\n\r\n  public static getJsonObject(file: IFile): any | undefined {\r\n    if (!file.content) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!(typeof file.content === \"string\")) {\r\n      return undefined;\r\n    }\r\n\r\n    let jsonObject = undefined;\r\n    let didFailToParse = false;\r\n    let contents = file.content;\r\n\r\n    contents = Utilities.fixJsonContent(contents);\r\n\r\n    try {\r\n      jsonObject = JSON.parse(contents);\r\n    } catch (e: any) {\r\n      file.isInErrorState = true;\r\n      file.errorStateMessage = e.message;\r\n      didFailToParse = true;\r\n      // Log.fail(\"Could not parse JSON from '\" + file.fullPath + \"': \" + e.message);\r\n    }\r\n\r\n    if (file.isInErrorState && !didFailToParse && contents.length > 0) {\r\n      file.isInErrorState = false;\r\n      file.errorStateMessage = undefined;\r\n    }\r\n\r\n    return jsonObject;\r\n  }\r\n\r\n  /**\r\n   * Gets the JSON object from a file, preserving any C-style comments (// and /* *\\/).\r\n   * The returned object contains comment metadata as Symbol properties that will be\r\n   * preserved when serializing back with JsonUtilities.stringifyJsonWithComments().\r\n   *\r\n   * Use this instead of getJsonObject() when you want to preserve comments through\r\n   * read/edit/save cycles.\r\n   *\r\n   * @param file The file to parse\r\n   * @returns The parsed JSON object with comment metadata, or undefined if parsing failed\r\n   */\r\n  public static getJsonObjectWithComments(file: IFile): any | undefined {\r\n    if (!file.content) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!(typeof file.content === \"string\")) {\r\n      return undefined;\r\n    }\r\n\r\n    // Return cached version if available\r\n    if (file.commentJsonCache !== undefined) {\r\n      return file.commentJsonCache;\r\n    }\r\n\r\n    // Track parse count for debugging\r\n    StorageUtilities.commentJsonParseCount++;\r\n    if (\r\n      StorageUtilities.commentJsonLogFrequency > 0 &&\r\n      StorageUtilities.commentJsonParseCount % StorageUtilities.commentJsonLogFrequency === 0\r\n    ) {\r\n      Log.debug(\r\n        `[comment-json] Parse #${StorageUtilities.commentJsonParseCount}: ${file.fullPath} (${file.content.length} bytes)`\r\n      );\r\n    }\r\n\r\n    let jsonObject = undefined;\r\n    let didFailToParse = false;\r\n    let contents = file.content;\r\n\r\n    // Debug mode: bypass comment-json entirely to isolate memory issues\r\n    if (StorageUtilities.bypassCommentJson) {\r\n      try {\r\n        // Use regular JSON.parse with basic content fixing\r\n        contents = Utilities.fixJsonContent(contents);\r\n        jsonObject = JSON.parse(contents);\r\n        file.commentJsonCache = jsonObject;\r\n      } catch (e: any) {\r\n        file.isInErrorState = true;\r\n        file.errorStateMessage = e.message;\r\n        didFailToParse = true;\r\n      }\r\n    } else {\r\n      // Fix trailing commas and control characters but preserve comments\r\n      contents = Utilities.fixJsonContentForCommentJson(contents);\r\n\r\n      try {\r\n        // Pass fixContent=false since we already fixed the content above\r\n        jsonObject = JsonUtilities.parseJsonWithComments(contents, false);\r\n        // Cache the parsed object on the file for reuse\r\n        file.commentJsonCache = jsonObject;\r\n      } catch (e: any) {\r\n        file.isInErrorState = true;\r\n        file.errorStateMessage = e.message;\r\n        didFailToParse = true;\r\n        // Log.fail(\"Could not parse JSON from '\" + file.fullPath + \"': \" + e.message);\r\n      }\r\n    }\r\n\r\n    if (file.isInErrorState && !didFailToParse && contents.length > 0) {\r\n      file.isInErrorState = false;\r\n      file.errorStateMessage = undefined;\r\n    }\r\n\r\n    return jsonObject;\r\n  }\r\n\r\n  public static async getUniqueFileName(baseName: string, extension: string, folder: IFolder) {\r\n    let candFileName = baseName + \".\" + extension;\r\n\r\n    let exists = folder.fileExists(candFileName);\r\n    let increment = 0;\r\n\r\n    while (exists && increment < 99) {\r\n      increment++;\r\n\r\n      candFileName = baseName + \" \" + String(increment) + \".\" + extension;\r\n\r\n      exists = folder.fileExists(candFileName);\r\n    }\r\n\r\n    return candFileName;\r\n  }\r\n\r\n  /**\r\n   * Write a file to a folder only if it doesn't already exist (prevents overwriting).\r\n   * Logs a debug message and returns false when the file is already present.\r\n   */\r\n  static writeFileIfNew(folder: IFolder, fileName: string, content: string | Uint8Array): boolean {\r\n    if (folder.fileExists(fileName)) {\r\n      Log.debug(`Skipping \"${fileName}\" \u2014 file already exists in ${folder.fullPath}`);\r\n      return false;\r\n    }\r\n\r\n    const file = folder.ensureFile(fileName);\r\n    file.setContent(content);\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Recursively deep-merges two plain JSON-compatible objects. Values in `override`\r\n   * take precedence over `base` for scalar and array keys; nested plain objects are\r\n   * merged recursively. Not suitable for Date, RegExp, class instances, etc.\r\n   */\r\n  static deepMergeJsonObjects(base: any, override: any): any {\r\n    const result = { ...base };\r\n\r\n    for (const key of Object.keys(override)) {\r\n      if (\r\n        typeof result[key] === \"object\" &&\r\n        result[key] !== null &&\r\n        !Array.isArray(result[key]) &&\r\n        typeof override[key] === \"object\" &&\r\n        override[key] !== null &&\r\n        !Array.isArray(override[key])\r\n      ) {\r\n        result[key] = StorageUtilities.deepMergeJsonObjects(result[key], override[key]);\r\n      } else {\r\n        result[key] = override[key];\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static async ensureFilesFromJson(\r\n    storage: IStorage,\r\n    json: string | { [name: string]: object | string }\r\n  ): Promise<string | undefined> {\r\n    if (typeof json === \"string\") {\r\n      try {\r\n        json = JSON.parse(json);\r\n      } catch (e: any) {\r\n        return e.toString();\r\n      }\r\n    }\r\n\r\n    if (typeof json === \"object\") {\r\n      for (let path in json) {\r\n        let data = json[path];\r\n\r\n        if (!path.startsWith(StorageUtilities.standardFolderDelimiter)) {\r\n          path = StorageUtilities.standardFolderDelimiter + path;\r\n        }\r\n\r\n        const file = await storage.rootFolder.ensureFileFromRelativePath(path);\r\n\r\n        if (!file) {\r\n          return \"Could not create file '\" + path + \"'.\";\r\n        }\r\n\r\n        if (file.isBinary) {\r\n          return \"Could not create file '\" + path + \"'; it is a binary file.\";\r\n        }\r\n\r\n        if (typeof data === \"object\") {\r\n          try {\r\n            data = JSON.stringify(data, null, 2);\r\n          } catch (e: any) {\r\n            return e.toString();\r\n          }\r\n        }\r\n\r\n        file.setContent(data);\r\n      }\r\n    }\r\n\r\n    return;\r\n  }\r\n\r\n  public static async createStorageFromString(content: string): Promise<string | IStorage> {\r\n    let storage: IStorage | undefined = undefined;\r\n\r\n    try {\r\n      content = content.trim();\r\n\r\n      if (content.length < 1) {\r\n        return \"No content provided.\";\r\n      }\r\n\r\n      if (content.startsWith(\"{\") || content.startsWith(\"[\")) {\r\n        storage = new Storage();\r\n\r\n        const result = await StorageUtilities.ensureFilesFromJson(storage, content);\r\n\r\n        if (result) {\r\n          return result;\r\n        }\r\n      } else {\r\n        const contentUnbase64 = Utilities.base64ToUint8Array(content);\r\n\r\n        if (contentUnbase64.length < 2) {\r\n          return \"Invalid base64 content provided.\";\r\n        }\r\n\r\n        if (contentUnbase64[0] === \"{\".charCodeAt(0)) {\r\n          const jsonStr = new TextDecoder(\"utf-8\").decode(contentUnbase64);\r\n\r\n          storage = new Storage();\r\n\r\n          const result = await StorageUtilities.ensureFilesFromJson(storage, jsonStr);\r\n\r\n          if (!result && typeof result === \"string\") {\r\n            return result;\r\n          }\r\n        } else {\r\n          storage = new ZipStorage();\r\n\r\n          await (storage as ZipStorage).loadFromBase64(content);\r\n        }\r\n      }\r\n\r\n      if (storage.errorStatus) {\r\n        return \"Error processing content.\" + (storage.errorMessage ? \"Details: \" + storage.errorMessage : \"\");\r\n      }\r\n    } catch (e: any) {\r\n      return \"Unexpected error processing content.\";\r\n    }\r\n\r\n    return storage;\r\n  }\r\n\r\n  public static async createStorageFromUntrustedString(untrustedContent: string): Promise<string | IStorage> {\r\n    if (untrustedContent.length > MaxShareableContentStringLength) {\r\n      return (\r\n        \"Shared content are too large to include in the URL (\" +\r\n        untrustedContent.length +\r\n        \" > \" +\r\n        MaxShareableContentStringLength +\r\n        \").\"\r\n      );\r\n    }\r\n\r\n    const result = await StorageUtilities.createStorageFromString(untrustedContent);\r\n\r\n    if (!result || typeof result === \"string\") {\r\n      return result;\r\n    }\r\n\r\n    const valResult = await BasicValidators.isFolderSharingValid(result.rootFolder);\r\n\r\n    if (valResult !== undefined) {\r\n      return valResult;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  public static async syncFolderTo(\r\n    source: IFolder,\r\n    target: IFolder,\r\n    forceFolders: boolean,\r\n    forceFileUpdates: boolean,\r\n    removeOnTarget: boolean,\r\n    exclude?: string[],\r\n    include?: string[],\r\n    messageUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean,\r\n    skipFilesAtRoot?: boolean,\r\n    extractContainers?: boolean\r\n  ): Promise<number> {\r\n    let modifiedFileCount = 0;\r\n    // Log.debug(\"Syncing folder '\" + source.storageRelativePath + \"' to '\" + target.storageRelativePath + \"'\");\r\n\r\n    if (StorageUtilities.isIgnorableFolder(source.name)) {\r\n      return 0;\r\n    }\r\n\r\n    // Security: Validate source and target paths\r\n    // Note: Import SecurityUtilities at the top of file if not already imported\r\n    // if (!SecurityUtilities.validatePath(source.storageRelativePath) ||\r\n    //     !SecurityUtilities.validatePath(target.storageRelativePath)) {\r\n    //   Log.fail(\"Invalid path detected in syncFolderTo: \" + source.storageRelativePath + \" -> \" + target.storageRelativePath);\r\n    //   return 0;\r\n    // }\r\n    /*\r\n    if (messageUpdater) {\r\n      await messageUpdater(\r\n        \"Syncing folder from '\" + source.storageRelativePath + \"' to '\" + target.storageRelativePath + \"'.\"\r\n      );\r\n    }*/\r\n\r\n    if (forceFolders || !source.isLoaded) {\r\n      await source.load(forceFolders);\r\n    }\r\n\r\n    if (forceFolders || !target.isLoaded) {\r\n      await target.load(forceFolders);\r\n    }\r\n\r\n    // get a list of existing files and folders in the target\r\n    let targetFiles: { [id: string]: boolean } = {};\r\n    let targetFolders: { [id: string]: boolean } = {};\r\n\r\n    for (const targetFileName in target.files) {\r\n      if (target.files[targetFileName] !== undefined) {\r\n        targetFiles[targetFileName] = true;\r\n      }\r\n    }\r\n\r\n    if (!skipFilesAtRoot) {\r\n      for (const targetFolderName in target.folders) {\r\n        if (target.folders[targetFolderName] !== undefined && !StorageUtilities.isIgnorableFolder(targetFolderName)) {\r\n          targetFolders[targetFolderName] = true;\r\n        }\r\n      }\r\n\r\n      for (const sourceFileName in source.files) {\r\n        const sourceFile = source.files[sourceFileName];\r\n\r\n        let process = true;\r\n\r\n        if (exclude !== undefined && StorageUtilities.matchesList(sourceFileName, exclude)) {\r\n          process = false;\r\n        }\r\n\r\n        if (include !== undefined && !StorageUtilities.matchesList(sourceFileName, include)) {\r\n          process = false;\r\n        }\r\n\r\n        if (sourceFile !== undefined) {\r\n          if (process) {\r\n            targetFiles[sourceFileName] = false;\r\n\r\n            if (extractContainers && StorageUtilities.isContainerFile(sourceFile.name)) {\r\n              const sourceFileContainerFolder = await StorageUtilities.getFileStorageFolder(sourceFile);\r\n\r\n              if (sourceFileContainerFolder && typeof sourceFileContainerFolder !== \"string\") {\r\n                const targetExtractedFolder = target.ensureFolder(StorageUtilities.getBaseFromName(sourceFile.name));\r\n\r\n                await StorageUtilities.syncFolderTo(\r\n                  sourceFileContainerFolder,\r\n                  targetExtractedFolder,\r\n                  forceFolders,\r\n                  forceFileUpdates,\r\n                  removeOnTarget,\r\n                  exclude,\r\n                  include,\r\n                  messageUpdater,\r\n                  dontOverwriteExistingFiles,\r\n                  false,\r\n                  true\r\n                );\r\n              }\r\n            } else {\r\n              const targetFile = target.ensureFile(sourceFile.name);\r\n\r\n              let updateFile = true;\r\n              if (dontOverwriteExistingFiles) {\r\n                if (await targetFile.exists()) {\r\n                  updateFile = false;\r\n                  if (messageUpdater) {\r\n                    messageUpdater(\"Not updating '\" + targetFile.fullPath + \"' as it already exists.\");\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (updateFile) {\r\n                const wasUpdated = await this.syncFileTo(sourceFile, targetFile, forceFileUpdates, messageUpdater);\r\n\r\n                if (wasUpdated) {\r\n                  modifiedFileCount++;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const sourceFolderName in source.folders) {\r\n      if (!StorageUtilities.isIgnorableFolder(sourceFolderName)) {\r\n        const sourceChildFolder = source.folders[sourceFolderName];\r\n        let process = true;\r\n\r\n        if (exclude !== undefined && StorageUtilities.matchesList(\"/\" + sourceFolderName, exclude)) {\r\n          process = false;\r\n        }\r\n\r\n        if (sourceChildFolder !== undefined) {\r\n          if (process) {\r\n            targetFolders[sourceFolderName] = false;\r\n\r\n            const targetChildFolder = target.ensureFolder(sourceChildFolder.name);\r\n\r\n            await targetChildFolder.ensureExists();\r\n\r\n            const subfolderFilesUpdated = await this.syncFolderTo(\r\n              sourceChildFolder,\r\n              targetChildFolder,\r\n              forceFolders,\r\n              forceFileUpdates,\r\n              removeOnTarget,\r\n              exclude,\r\n              include,\r\n              messageUpdater,\r\n              dontOverwriteExistingFiles\r\n            );\r\n\r\n            modifiedFileCount += subfolderFilesUpdated;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (removeOnTarget) {\r\n      for (const targetFileName in targetFiles) {\r\n        let process = true;\r\n\r\n        /*\r\n        If a file matches the exclude list, ignore it, don't remove it. But commenting this out so that excluded files get removed on target.\r\n        if (exclude !== undefined && StorageUtilities.matchesList(targetFileName, exclude)) {\r\n          process = false;\r\n        }*/\r\n\r\n        if (process && targetFiles[targetFileName] === true) {\r\n          if (messageUpdater) {\r\n            await messageUpdater(\"Removing file '\" + target.fullPath + \"' (\" + targetFileName + \")\");\r\n          }\r\n\r\n          await target.deleteFile(targetFileName);\r\n          modifiedFileCount++;\r\n        }\r\n      }\r\n    }\r\n\r\n    return modifiedFileCount;\r\n  }\r\n\r\n  public static matchesList(name: string, list: string[]) {\r\n    name = StorageUtilities.canonicalizeName(name);\r\n    let nameMinusSlash = name;\r\n\r\n    if (nameMinusSlash.startsWith(\"/\")) {\r\n      nameMinusSlash = nameMinusSlash.substring(1, nameMinusSlash.length);\r\n    }\r\n\r\n    for (let i = 0; i < list.length; i++) {\r\n      const listC = StorageUtilities.canonicalizeName(list[i]);\r\n\r\n      if (name === listC) {\r\n        return true;\r\n      }\r\n\r\n      if (!listC.startsWith(\"/\")) {\r\n        if (nameMinusSlash === listC) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      if (listC.length > 2 && listC.startsWith(\"*\") && listC.endsWith(\"*\")) {\r\n        if (name.indexOf(listC.substring(1, listC.length - 1)) >= 0) {\r\n          return true;\r\n        }\r\n      } else if (listC.length > 2 && listC.startsWith(\"*\") && !listC.endsWith(\"*\")) {\r\n        if (name.endsWith(listC.substring(1))) {\r\n          return true;\r\n        }\r\n      } else if (listC.length > 2 && !listC.startsWith(\"*\") && listC.endsWith(\"*\")) {\r\n        if (name.startsWith(listC.substring(0, listC.length - 1))) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static sanitizePathBasic(path: string) {\r\n    // Note: For proper security, use SecurityUtilities.sanitizePath() instead\r\n    path = path.replace(/</gi, \"_\");\r\n    path = path.replace(/>/gi, \"_\");\r\n    path = path.replace(/ /gi, \"_\");\r\n    path = path.replace(/\"/gi, \"_\");\r\n    path = path.replace(/'/gi, \"_\");\r\n    path = path.replace(/::/gi, \"_\");\r\n    path = path.replace(/,/gi, \"_\");\r\n    path = path.replace(/:/gi, \"_\");\r\n    path = path.replace(/\\r/gi, \"_\");\r\n    path = path.replace(/\\n/gi, \"_\");\r\n    path = path.replace(/__/gi, \"_\");\r\n    path = path.replace(/__/gi, \"_\");\r\n\r\n    while (path.length > 1 && path.startsWith(\"_\")) {\r\n      path = path.substring(1, path.length);\r\n    }\r\n\r\n    while (path.length > 1 && path.endsWith(\"_\")) {\r\n      path = path.substring(0, path.length - 1);\r\n    }\r\n\r\n    path = path.trim();\r\n\r\n    return path;\r\n  }\r\n\r\n  public static sanitizePath(path: string) {\r\n    // Security note: This function is deprecated for security-critical paths\r\n    // Use SecurityUtilities.sanitizePath() for proper path traversal prevention\r\n    if (Utilities.isAlphaNumeric(path)) {\r\n      return path;\r\n    }\r\n\r\n    let utf8Encode = new TextEncoder();\r\n\r\n    const base64 = Utilities.arrayBufferToBase64((utf8Encode as any).encode(path))\r\n      .replace(/\\//gi, \" \")\r\n      .replace(/=/gi, \"_\");\r\n\r\n    return base64;\r\n  }\r\n\r\n  public static async syncFileTo(\r\n    source: IFile,\r\n    target: IFile,\r\n    force: boolean,\r\n    messageUpdater?: (message: string) => Promise<void>\r\n  ) {\r\n    // Log.debug(\"Syncing file content '\" + source.fullPath + \"'\");\r\n\r\n    await source.loadContent(true);\r\n\r\n    if (source.content == null) {\r\n      Log.debug(\"No content for file \" + source.storageRelativePath);\r\n      return;\r\n    }\r\n\r\n    if (!force) {\r\n      if (await target.exists()) {\r\n        if (!target.isContentLoaded) {\r\n          await target.loadContent(false);\r\n        }\r\n\r\n        if (StorageUtilities.contentsAreEqual(source.content, target.content)) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (messageUpdater) {\r\n      let targetPath = target.fullPath;\r\n\r\n      targetPath = targetPath.replace(\"fs.mctprojects/root/\", \"\");\r\n\r\n      let mess = \"Updating file: \" + targetPath;\r\n\r\n      if (source.content) {\r\n        mess += \" (size: \" + source.content.length + \")\";\r\n      }\r\n\r\n      await messageUpdater(mess);\r\n    }\r\n\r\n    // Log.debug(\"Copying file \" + source.storageRelativePath + \" to \" + target.storageRelativePath);\r\n\r\n    target.setContent(source.content, FileUpdateType.versionlessEdit);\r\n    return true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ScriptGen {\r\n  static getClassName(name: string) {\r\n    if (name.length < 2) {\r\n      return \"untitled\";\r\n    }\r\n\r\n    name = name[0].toUpperCase() + name.substring(1, name.length);\r\n\r\n    name = name.replace(/:/gi, \"\");\r\n\r\n    return name;\r\n  }\r\n\r\n  static getInstanceName(name: string) {\r\n    if (name.length < 2) {\r\n      return \"untitled\";\r\n    }\r\n\r\n    name = Utilities.lowerCaseStartOfString(name);\r\n\r\n    return name;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IComponent from \"./IComponent\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { IComponentContainer } from \"./IComponentDataItem\";\r\nimport IProperty from \"../dataform/IProperty\";\r\n\r\nexport class ManagedComponent implements IManagedComponent {\r\n  private _data: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n  private _parent: IComponentContainer;\r\n  private _uniqueId: string;\r\n  id: string;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<ManagedComponent, string>();\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  constructor(\r\n    parent: IComponentContainer,\r\n    id: string,\r\n    data: IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._parent = parent;\r\n    this._data = data;\r\n    this.id = id;\r\n    this._uniqueId = Utilities.createRandomLowerId(8);\r\n    this.handlePropertyChanged = this.handlePropertyChanged.bind(this);\r\n  }\r\n\r\n  getData() {\r\n    return this._data;\r\n  }\r\n\r\n  getBaseValue() {\r\n    return this._data;\r\n  }\r\n\r\n  setData(newData: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    if (Utilities.isUsableAsObjectKey(this.id)) {\r\n      this._parent[this.id] = newData;\r\n    }\r\n    this._data = newData;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    this._parent[this.id] = value;\r\n    this._data = value;\r\n  }\r\n\r\n  handlePropertyChanged(props: any, property: IProperty, newValue: any, updatedObject?: object | undefined) {\r\n    if (updatedObject) {\r\n      this.setData(updatedObject as any);\r\n    }\r\n  }\r\n\r\n  getProperty(id: string) {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return (this._data as any)[id] as any;\r\n  }\r\n\r\n  setProperty(propertyId: string, value: any) {\r\n    if (\r\n      typeof this._data === \"string\" ||\r\n      typeof this._data === \"number\" ||\r\n      typeof this._data === \"boolean\" ||\r\n      Array.isArray(this._data)\r\n    ) {\r\n      if (typeof this._data === typeof value || typeof value === \"object\") {\r\n        this.setData(value);\r\n        return;\r\n      } else {\r\n        this.setData({\r\n          value: this._data,\r\n        });\r\n      }\r\n    }\r\n\r\n    if (this._data && Utilities.isUsableAsObjectKey(propertyId)) {\r\n      (this._data as any)[propertyId] = value;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IComponentGroup from \"./IComponentGroup\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport IComponent from \"./IComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ManagedComponentGroup implements IManagedComponentSetItem {\r\n  _data?: IComponentGroup;\r\n  _managed?: { [id: string]: IManagedComponent | undefined };\r\n\r\n  id: string;\r\n\r\n  private _onComponentAdded = new EventDispatcher<ManagedComponentGroup, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ManagedComponentGroup, string>();\r\n  private _onComponentChanged = new EventDispatcher<ManagedComponentGroup, IManagedComponent>();\r\n\r\n  public constructor(data: IComponentGroup, id: string) {\r\n    this._data = data;\r\n\r\n    this._managed = {};\r\n\r\n    this.id = id;\r\n  }\r\n\r\n  getData() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    if (!this._data) {\r\n      this._data = {};\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(this._data, id, componentOrData);\r\n\r\n    if (Utilities.isUsableAsObjectKey(mc.id)) {\r\n      this._data[mc.id] = mc.getData();\r\n      this._managed[mc.id] = mc;\r\n    }\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (!this._data || !Utilities.isUsableAsObjectKey(id)) {\r\n      return;\r\n    }\r\n\r\n    this._data[id] = undefined;\r\n\r\n    if (this._managed) {\r\n      this._managed[id] = undefined;\r\n    }\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const data = this._data[id];\r\n      if (data) {\r\n        this._managed[id] = new ManagedComponent(this._data, id, data);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    if (!this._data) {\r\n      return [];\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    const comparr: IManagedComponent[] = [];\r\n\r\n    for (const c in this._data) {\r\n      const comp = this._data[c];\r\n\r\n      if (!this._managed[c] && comp) {\r\n        this._managed[c] = new ManagedComponent(this._data, c, comp);\r\n      }\r\n\r\n      const mc = this._managed[c];\r\n\r\n      if (mc) {\r\n        comparr.push(mc);\r\n      }\r\n    }\r\n\r\n    return comparr;\r\n  }\r\n\r\n  notifyComponentUpdated(id: string): void {\r\n    if (!this._managed) {\r\n      return;\r\n    }\r\n\r\n    const comp = this._managed[id];\r\n\r\n    if (comp) {\r\n      this._onComponentChanged.dispatch(this, comp);\r\n    }\r\n  }\r\n}\r\n", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return (\n    val !== null &&\n    !isUndefined(val) &&\n    val.constructor !== null &&\n    !isUndefined(val.constructor) &&\n    isFunction(val.constructor.isBuffer) &&\n    val.constructor.isBuffer(val)\n  );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (\n    (prototype === null ||\n      prototype === Object.prototype ||\n      Object.getPrototypeOf(prototype) === null) &&\n    !(toStringTag in val) &&\n    !(iterator in val)\n  );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a React Native Blob\n * React Native \"blob\": an object with a `uri` attribute. Optionally, it can\n * also have a `name` and `type` attribute to specify filename and content type\n *\n * @see https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/Libraries/Network/FormData.js#L68-L71\n * \n * @param {*} value The value to test\n * \n * @returns {boolean} True if value is a React Native Blob, otherwise false\n */\nconst isReactNativeBlob = (value) => {\n  return !!(value && typeof value.uri !== 'undefined');\n}\n\n/**\n * Determine if environment is React Native\n * ReactNative `FormData` has a non-standard `getParts()` method\n * \n * @param {*} formData The formData to test\n * \n * @returns {boolean} True if environment is React Native, otherwise false\n */\nconst isReactNative = (formData) => formData && typeof formData.getParts !== 'undefined';\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') return globalThis;\n  if (typeof self !== 'undefined') return self;\n  if (typeof window !== 'undefined') return window;\n  if (typeof global !== 'undefined') return global;\n  return {};\n}\n\nconst G = getGlobal();\nconst FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;\n\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (FormDataCtor && thing instanceof FormDataCtor) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n  'ReadableStream',\n  'Request',\n  'Response',\n  'Headers',\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => {\n  return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\n/**\n * Finds a key in an object, case-insensitive, returning the actual key name.\n * Returns null if the object is a Buffer or if no match is found.\n *\n * @param {Object} obj - The object to search.\n * @param {string} key - The key to find (case-insensitive).\n * @returns {?string} The actual key name if found, otherwise null.\n */\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== 'undefined') return globalThis;\n  return typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : global;\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    // Skip dangerous property names to prevent prototype pollution\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return;\n    }\n\n    const targetKey = (caseless && findKey(result, key)) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    },\n    { allOwnKeys }\n  );\n  return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xfeff) {\n    content = content.slice(1);\n  }\n  return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  Object.defineProperty(constructor.prototype, 'constructor', {\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype,\n  });\n  props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n  // eslint-disable-next-line func-names\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = (str) => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n    return p1.toUpperCase() + p2;\n  });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n  ({ hasOwnProperty }) =>\n  (obj, prop) =>\n    hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\n\n/**\n * Converts an array or a delimited string into an object set with values as keys and true as values.\n * Useful for fast membership checks.\n *\n * @param {Array|string} arrayOrString - The array or string to convert.\n * @param {string} delimiter - The delimiter to use if input is a string.\n * @returns {Object} An object with keys from the array or string, values set to true.\n */\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite((value = +value)) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(\n    thing &&\n    isFunction(thing.append) &&\n    thing[toStringTag] === 'FormData' &&\n    thing[iterator]\n  );\n}\n\n/**\n * Recursively converts an object to a JSON-compatible object, handling circular references and Buffers.\n *\n * @param {Object} obj - The object to convert.\n * @returns {Object} The JSON-compatible object.\n */\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if (!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  };\n\n  return visit(obj, 0);\n};\n\n/**\n * Determines if a value is an async function.\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is an async function, otherwise false.\n */\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\n/**\n * Determines if a value is thenable (has then and catch methods).\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is thenable, otherwise false.\n */\nconst isThenable = (thing) =>\n  thing &&\n  (isObject(thing) || isFunction(thing)) &&\n  isFunction(thing.then) &&\n  isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\n/**\n * Provides a cross-platform setImmediate implementation.\n * Uses native setImmediate if available, otherwise falls back to postMessage or setTimeout.\n *\n * @param {boolean} setImmediateSupported - Whether setImmediate is supported.\n * @param {boolean} postMessageSupported - Whether postMessage is supported.\n * @returns {Function} A function to schedule a callback asynchronously.\n */\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported\n    ? ((token, callbacks) => {\n        _global.addEventListener(\n          'message',\n          ({ source, data }) => {\n            if (source === _global && data === token) {\n              callbacks.length && callbacks.shift()();\n            }\n          },\n          false\n        );\n\n        return (cb) => {\n          callbacks.push(cb);\n          _global.postMessage(token, '*');\n        };\n      })(`axios@${Math.random()}`, [])\n    : (cb) => setTimeout(cb);\n})(typeof setImmediate === 'function', isFunction(_global.postMessage));\n\n/**\n * Schedules a microtask or asynchronous callback as soon as possible.\n * Uses queueMicrotask if available, otherwise falls back to process.nextTick or _setImmediate.\n *\n * @type {Function}\n */\nconst asap =\n  typeof queueMicrotask !== 'undefined'\n    ? queueMicrotask.bind(_global)\n    : (typeof process !== 'undefined' && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isReactNativeBlob,\n  isReactNative,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n  static from(error, code, config, request, response, customProps) {\n    const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n    axiosError.cause = error;\n    axiosError.name = error.name;\n\n    // Preserve status from the original error if not already set from response\n    if (error.status != null && axiosError.status == null) {\n      axiosError.status = error.status;\n    }\n\n    customProps && Object.assign(axiosError, customProps);\n    return axiosError;\n  }\n\n    /**\n     * Create an Error with the specified message, config, error code, request and response.\n     *\n     * @param {string} message The error message.\n     * @param {string} [code] The error code (for example, 'ECONNABORTED').\n     * @param {Object} [config] The config.\n     * @param {Object} [request] The request.\n     * @param {Object} [response] The response.\n     *\n     * @returns {Error} The created error.\n     */\n    constructor(message, code, config, request, response) {\n      super(message);\n      \n      // Make message enumerable to maintain backward compatibility\n      // The native Error constructor sets message as non-enumerable,\n      // but axios < v1.13.3 had it as enumerable\n      Object.defineProperty(this, 'message', {\n          value: message,\n          enumerable: true,\n          writable: true,\n          configurable: true\n      });\n      \n      this.name = 'AxiosError';\n      this.isAxiosError = true;\n      code && (this.code = code);\n      config && (this.config = config);\n      request && (this.request = request);\n      if (response) {\n          this.response = response;\n          this.status = response.status;\n      }\n    }\n\n  toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status,\n    };\n  }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n", "var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n  this.source = null;\n  this.dataSize = 0;\n  this.maxDataSize = 1024 * 1024;\n  this.pauseStream = true;\n\n  this._maxDataSizeExceeded = false;\n  this._released = false;\n  this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n  var delayedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    delayedStream[option] = options[option];\n  }\n\n  delayedStream.source = source;\n\n  var realEmit = source.emit;\n  source.emit = function() {\n    delayedStream._handleEmit(arguments);\n    return realEmit.apply(source, arguments);\n  };\n\n  source.on('error', function() {});\n  if (delayedStream.pauseStream) {\n    source.pause();\n  }\n\n  return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n  configurable: true,\n  enumerable: true,\n  get: function() {\n    return this.source.readable;\n  }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n  return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n  if (!this._released) {\n    this.release();\n  }\n\n  this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n  this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n  this._released = true;\n\n  this._bufferedEvents.forEach(function(args) {\n    this.emit.apply(this, args);\n  }.bind(this));\n  this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n  var r = Stream.prototype.pipe.apply(this, arguments);\n  this.resume();\n  return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n  if (this._released) {\n    this.emit.apply(this, args);\n    return;\n  }\n\n  if (args[0] === 'data') {\n    this.dataSize += args[1].length;\n    this._checkIfMaxDataSizeExceeded();\n  }\n\n  this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n  if (this._maxDataSizeExceeded) {\n    return;\n  }\n\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  this._maxDataSizeExceeded = true;\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n  this.emit('error', new Error(message));\n};\n", "var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n  this.writable = false;\n  this.readable = true;\n  this.dataSize = 0;\n  this.maxDataSize = 2 * 1024 * 1024;\n  this.pauseStreams = true;\n\n  this._released = false;\n  this._streams = [];\n  this._currentStream = null;\n  this._insideLoop = false;\n  this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n  var combinedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    combinedStream[option] = options[option];\n  }\n\n  return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n  return (typeof stream !== 'function')\n    && (typeof stream !== 'string')\n    && (typeof stream !== 'boolean')\n    && (typeof stream !== 'number')\n    && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n\n  if (isStreamLike) {\n    if (!(stream instanceof DelayedStream)) {\n      var newStream = DelayedStream.create(stream, {\n        maxDataSize: Infinity,\n        pauseStream: this.pauseStreams,\n      });\n      stream.on('data', this._checkDataSize.bind(this));\n      stream = newStream;\n    }\n\n    this._handleErrors(stream);\n\n    if (this.pauseStreams) {\n      stream.pause();\n    }\n  }\n\n  this._streams.push(stream);\n  return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n  Stream.prototype.pipe.call(this, dest, options);\n  this.resume();\n  return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n  this._currentStream = null;\n\n  if (this._insideLoop) {\n    this._pendingNext = true;\n    return; // defer call\n  }\n\n  this._insideLoop = true;\n  try {\n    do {\n      this._pendingNext = false;\n      this._realGetNext();\n    } while (this._pendingNext);\n  } finally {\n    this._insideLoop = false;\n  }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n  var stream = this._streams.shift();\n\n\n  if (typeof stream == 'undefined') {\n    this.end();\n    return;\n  }\n\n  if (typeof stream !== 'function') {\n    this._pipeNext(stream);\n    return;\n  }\n\n  var getStream = stream;\n  getStream(function(stream) {\n    var isStreamLike = CombinedStream.isStreamLike(stream);\n    if (isStreamLike) {\n      stream.on('data', this._checkDataSize.bind(this));\n      this._handleErrors(stream);\n    }\n\n    this._pipeNext(stream);\n  }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n  this._currentStream = stream;\n\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n  if (isStreamLike) {\n    stream.on('end', this._getNext.bind(this));\n    stream.pipe(this, {end: false});\n    return;\n  }\n\n  var value = stream;\n  this.write(value);\n  this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n  var self = this;\n  stream.on('error', function(err) {\n    self._emitError(err);\n  });\n};\n\nCombinedStream.prototype.write = function(data) {\n  this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n  if (!this.pauseStreams) {\n    return;\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n  this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n  if (!this._released) {\n    this._released = true;\n    this.writable = true;\n    this._getNext();\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n  this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n  this._reset();\n  this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n  this._reset();\n  this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n  this.writable = false;\n  this._streams = [];\n  this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n  this._updateDataSize();\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n  this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n  this.dataSize = 0;\n\n  var self = this;\n  this._streams.forEach(function(stream) {\n    if (!stream.dataSize) {\n      return;\n    }\n\n    self.dataSize += stream.dataSize;\n  });\n\n  if (this._currentStream && this._currentStream.dataSize) {\n    this.dataSize += this._currentStream.dataSize;\n  }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n  this._reset();\n  this.emit('error', err);\n};\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es\",\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hl7cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/hsj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hsj2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\"\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n", "module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n  var nextTick = typeof setImmediate == 'function'\n    ? setImmediate\n    : (\n      typeof process == 'object' && typeof process.nextTick == 'function'\n      ? process.nextTick\n      : null\n    );\n\n  if (nextTick)\n  {\n    nextTick(fn);\n  }\n  else\n  {\n    setTimeout(fn, 0);\n  }\n}\n", "var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param   {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n  var isAsync = false;\n\n  // check if async happened\n  defer(function() { isAsync = true; });\n\n  return function async_callback(err, result)\n  {\n    if (isAsync)\n    {\n      callback(err, result);\n    }\n    else\n    {\n      defer(function nextTick_callback()\n      {\n        callback(err, result);\n      });\n    }\n  };\n}\n", "// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n  Object.keys(state.jobs).forEach(clean.bind(state));\n\n  // reset leftover jobs\n  state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this  state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n  if (typeof this.jobs[key] == 'function')\n  {\n    this.jobs[key]();\n  }\n}\n", "var async = require('./async.js')\n  , abort = require('./abort.js')\n  ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n  // store current index\n  var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n  state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n  {\n    // don't repeat yourself\n    // skip secondary callbacks\n    if (!(key in state.jobs))\n    {\n      return;\n    }\n\n    // clean up jobs\n    delete state.jobs[key];\n\n    if (error)\n    {\n      // don't process rest of the results\n      // stop still active jobs\n      // and reset the list\n      abort(state);\n    }\n    else\n    {\n      state.results[key] = output;\n    }\n\n    // return salvaged results\n    callback(error, state.results);\n  });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param   {function} iterator - iterator to invoke\n * @param   {string|number} key - key/index of the element in the list of jobs\n * @param   {mixed} item - job description\n * @param   {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n  var aborter;\n\n  // allow shortcut if iterator expects only two arguments\n  if (iterator.length == 2)\n  {\n    aborter = iterator(item, async(callback));\n  }\n  // otherwise go with full three arguments\n  else\n  {\n    aborter = iterator(item, key, async(callback));\n  }\n\n  return aborter;\n}\n", "// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param   {array|object} list - list to iterate over\n * @param   {function|null} sortMethod - function to use for keys sort,\n *                                     or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n  var isNamedList = !Array.isArray(list)\n    , initState =\n    {\n      index    : 0,\n      keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n      jobs     : {},\n      results  : isNamedList ? {} : [],\n      size     : isNamedList ? Object.keys(list).length : list.length\n    }\n    ;\n\n  if (sortMethod)\n  {\n    // sort array keys based on it's values\n    // sort object's keys just on own merit\n    initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n    {\n      return sortMethod(list[a], list[b]);\n    });\n  }\n\n  return initState;\n}\n", "var abort = require('./abort.js')\n  , async = require('./async.js')\n  ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this  AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n  if (!Object.keys(this.jobs).length)\n  {\n    return;\n  }\n\n  // fast forward iteration index\n  this.index = this.size;\n\n  // abort jobs\n  abort(this);\n\n  // send back results we have so far\n  async(callback)(null, this.results);\n}\n", "var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n  var state = initState(list);\n\n  while (state.index < (state['keyedList'] || list).length)\n  {\n    iterate(list, iterator, state, function(error, result)\n    {\n      if (error)\n      {\n        callback(error, result);\n        return;\n      }\n\n      // looks like it's the last one\n      if (Object.keys(state.jobs).length === 0)\n      {\n        callback(null, state.results);\n        return;\n      }\n    });\n\n    state.index++;\n  }\n\n  return terminator.bind(state, callback);\n}\n", "var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending  = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} sortMethod - custom sort function\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n  var state = initState(list, sortMethod);\n\n  iterate(list, iterator, state, function iteratorHandler(error, result)\n  {\n    if (error)\n    {\n      callback(error, result);\n      return;\n    }\n\n    state.index++;\n\n    // are we there yet?\n    if (state.index < (state['keyedList'] || list).length)\n    {\n      iterate(list, iterator, state, iteratorHandler);\n      return;\n    }\n\n    // done here\n    callback(null, state.results);\n  });\n\n  return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n  return -1 * ascending(a, b);\n}\n", "var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n  return serialOrdered(list, iterator, null, callback);\n}\n", "module.exports =\n{\n  parallel      : require('./parallel.js'),\n  serial        : require('./serial.js'),\n  serialOrdered : require('./serialOrdered.js')\n};\n", "'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar $TypeError = require('es-errors/type');\n\nvar toStringTag = hasToStringTag ? Symbol.toStringTag : null;\n\n/** @type {import('.')} */\nmodule.exports = function setToStringTag(object, value) {\n\tvar overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n\tvar nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n\tif (\n\t\t(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')\n\t\t|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')\n\t) {\n\t\tthrow new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');\n\t}\n\tif (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(object, toStringTag, {\n\t\t\t\tconfigurable: !nonConfigurable,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: value,\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tobject[toStringTag] = value; // eslint-disable-line no-param-reassign\n\t\t}\n\t}\n};\n", "'use strict';\n\n// populates missing values\nmodule.exports = function (dst, src) {\n  Object.keys(src).forEach(function (prop) {\n    dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign\n  });\n\n  return dst;\n};\n", "'use strict';\n\nvar CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar crypto = require('crypto');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar setToStringTag = require('es-set-tostringtag');\nvar hasOwn = require('hasown');\nvar populate = require('./populate.js');\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n  if (!(this instanceof FormData)) {\n    return new FormData(options);\n  }\n\n  this._overheadLength = 0;\n  this._valueLength = 0;\n  this._valuesToMeasure = [];\n\n  CombinedStream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n  for (var option in options) { // eslint-disable-line no-restricted-syntax\n    this[option] = options[option];\n  }\n}\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function (field, value, options) {\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // allow filename as single option\n  if (typeof options === 'string') {\n    options = { filename: options }; // eslint-disable-line no-param-reassign\n  }\n\n  var append = CombinedStream.prototype.append.bind(this);\n\n  // all that streamy business can't handle numbers\n  if (typeof value === 'number' || value == null) {\n    value = String(value); // eslint-disable-line no-param-reassign\n  }\n\n  // https://github.com/felixge/node-form-data/issues/38\n  if (Array.isArray(value)) {\n    /*\n     * Please convert your array into string\n     * the way web server expects it\n     */\n    this._error(new Error('Arrays are not supported.'));\n    return;\n  }\n\n  var header = this._multiPartHeader(field, value, options);\n  var footer = this._multiPartFooter();\n\n  append(header);\n  append(value);\n  append(footer);\n\n  // pass along options.knownLength\n  this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function (header, value, options) {\n  var valueLength = 0;\n\n  /*\n   * used w/ getLengthSync(), when length is known.\n   * e.g. for streaming directly from a remote server,\n   * w/ a known file a size, and not wanting to wait for\n   * incoming file to finish to get its size.\n   */\n  if (options.knownLength != null) {\n    valueLength += Number(options.knownLength);\n  } else if (Buffer.isBuffer(value)) {\n    valueLength = value.length;\n  } else if (typeof value === 'string') {\n    valueLength = Buffer.byteLength(value);\n  }\n\n  this._valueLength += valueLength;\n\n  // @check why add CRLF? does this account for custom/multiple CRLFs?\n  this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length;\n\n  // empty or either doesn't have path or not an http response or not a stream\n  if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) {\n    return;\n  }\n\n  // no need to bother with the length\n  if (!options.knownLength) {\n    this._valuesToMeasure.push(value);\n  }\n};\n\nFormData.prototype._lengthRetriever = function (value, callback) {\n  if (hasOwn(value, 'fd')) {\n    // take read range into a account\n    // `end` = Infinity \u2013> read file till the end\n    //\n    // TODO: Looks like there is bug in Node fs.createReadStream\n    // it doesn't respect `end` options without `start` options\n    // Fix it when node fixes it.\n    // https://github.com/joyent/node/issues/7819\n    if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n      // when end specified\n      // no need to calculate range\n      // inclusive, starts with 0\n      callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return\n\n      // not that fast snoopy\n    } else {\n      // still need to fetch file size from fs\n      fs.stat(value.path, function (err, stat) {\n        if (err) {\n          callback(err);\n          return;\n        }\n\n        // update final size based on the range options\n        var fileSize = stat.size - (value.start ? value.start : 0);\n        callback(null, fileSize);\n      });\n    }\n\n    // or http response\n  } else if (hasOwn(value, 'httpVersion')) {\n    callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return\n\n    // or request stream http://github.com/mikeal/request\n  } else if (hasOwn(value, 'httpModule')) {\n    // wait till response come back\n    value.on('response', function (response) {\n      value.pause();\n      callback(null, Number(response.headers['content-length']));\n    });\n    value.resume();\n\n    // something else\n  } else {\n    callback('Unknown stream'); // eslint-disable-line callback-return\n  }\n};\n\nFormData.prototype._multiPartHeader = function (field, value, options) {\n  /*\n   * custom header specified (as string)?\n   * it becomes responsible for boundary\n   * (e.g. to handle extra CRLFs on .NET servers)\n   */\n  if (typeof options.header === 'string') {\n    return options.header;\n  }\n\n  var contentDisposition = this._getContentDisposition(value, options);\n  var contentType = this._getContentType(value, options);\n\n  var contents = '';\n  var headers = {\n    // add custom disposition as third element or keep it two elements if not\n    'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n    // if no content type. allow it to be empty array\n    'Content-Type': [].concat(contentType || [])\n  };\n\n  // allow custom headers.\n  if (typeof options.header === 'object') {\n    populate(headers, options.header);\n  }\n\n  var header;\n  for (var prop in headers) { // eslint-disable-line no-restricted-syntax\n    if (hasOwn(headers, prop)) {\n      header = headers[prop];\n\n      // skip nullish headers.\n      if (header == null) {\n        continue; // eslint-disable-line no-restricted-syntax, no-continue\n      }\n\n      // convert all headers to arrays.\n      if (!Array.isArray(header)) {\n        header = [header];\n      }\n\n      // add non-empty headers.\n      if (header.length) {\n        contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n      }\n    }\n  }\n\n  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return\n  var filename;\n\n  if (typeof options.filepath === 'string') {\n    // custom filepath for relative paths\n    filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n  } else if (options.filename || (value && (value.name || value.path))) {\n    /*\n     * custom filename take precedence\n     * formidable and the browser add a name property\n     * fs- and request- streams have path property\n     */\n    filename = path.basename(options.filename || (value && (value.name || value.path)));\n  } else if (value && value.readable && hasOwn(value, 'httpVersion')) {\n    // or try http response\n    filename = path.basename(value.client._httpMessage.path || '');\n  }\n\n  if (filename) {\n    return 'filename=\"' + filename + '\"';\n  }\n};\n\nFormData.prototype._getContentType = function (value, options) {\n  // use custom content-type above all\n  var contentType = options.contentType;\n\n  // or try `name` from formidable, browser\n  if (!contentType && value && value.name) {\n    contentType = mime.lookup(value.name);\n  }\n\n  // or try `path` from fs-, request- streams\n  if (!contentType && value && value.path) {\n    contentType = mime.lookup(value.path);\n  }\n\n  // or if it's http-reponse\n  if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) {\n    contentType = value.headers['content-type'];\n  }\n\n  // or guess it from the filepath or filename\n  if (!contentType && (options.filepath || options.filename)) {\n    contentType = mime.lookup(options.filepath || options.filename);\n  }\n\n  // fallback to the default content type if `value` is not simple value\n  if (!contentType && value && typeof value === 'object') {\n    contentType = FormData.DEFAULT_CONTENT_TYPE;\n  }\n\n  return contentType;\n};\n\nFormData.prototype._multiPartFooter = function () {\n  return function (next) {\n    var footer = FormData.LINE_BREAK;\n\n    var lastPart = this._streams.length === 0;\n    if (lastPart) {\n      footer += this._lastBoundary();\n    }\n\n    next(footer);\n  }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function () {\n  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function (userHeaders) {\n  var header;\n  var formHeaders = {\n    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n  };\n\n  for (header in userHeaders) { // eslint-disable-line no-restricted-syntax\n    if (hasOwn(userHeaders, header)) {\n      formHeaders[header.toLowerCase()] = userHeaders[header];\n    }\n  }\n\n  return formHeaders;\n};\n\nFormData.prototype.setBoundary = function (boundary) {\n  if (typeof boundary !== 'string') {\n    throw new TypeError('FormData boundary must be a string');\n  }\n  this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function () {\n  if (!this._boundary) {\n    this._generateBoundary();\n  }\n\n  return this._boundary;\n};\n\nFormData.prototype.getBuffer = function () {\n  var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap\n  var boundary = this.getBoundary();\n\n  // Create the form content. Add Line breaks to the end of data.\n  for (var i = 0, len = this._streams.length; i < len; i++) {\n    if (typeof this._streams[i] !== 'function') {\n      // Add content to the buffer.\n      if (Buffer.isBuffer(this._streams[i])) {\n        dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);\n      } else {\n        dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);\n      }\n\n      // Add break after content.\n      if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) {\n        dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]);\n      }\n    }\n  }\n\n  // Add the footer and return the Buffer object.\n  return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);\n};\n\nFormData.prototype._generateBoundary = function () {\n  // This generates a 50 character boundary similar to those used by Firefox.\n\n  // They are optimized for boyer-moore parsing.\n  this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex');\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually and add it as knownLength option\nFormData.prototype.getLengthSync = function () {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  // Don't get confused, there are 3 \"internal\" streams for each keyval pair so it basically checks if there is any value added to the form\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  // https://github.com/form-data/form-data/issues/40\n  if (!this.hasKnownLength()) {\n    /*\n     * Some async length retrievers are present\n     * therefore synchronous length calculation is false.\n     * Please use getLength(callback) to get proper length\n     */\n    this._error(new Error('Cannot calculate proper length in synchronous way.'));\n  }\n\n  return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function () {\n  var hasKnownLength = true;\n\n  if (this._valuesToMeasure.length) {\n    hasKnownLength = false;\n  }\n\n  return hasKnownLength;\n};\n\nFormData.prototype.getLength = function (cb) {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  if (!this._valuesToMeasure.length) {\n    process.nextTick(cb.bind(this, null, knownLength));\n    return;\n  }\n\n  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) {\n    if (err) {\n      cb(err);\n      return;\n    }\n\n    values.forEach(function (length) {\n      knownLength += length;\n    });\n\n    cb(null, knownLength);\n  });\n};\n\nFormData.prototype.submit = function (params, cb) {\n  var request;\n  var options;\n  var defaults = { method: 'post' };\n\n  // parse provided url if it's string or treat it as options object\n  if (typeof params === 'string') {\n    params = parseUrl(params); // eslint-disable-line no-param-reassign\n    /* eslint sort-keys: 0 */\n    options = populate({\n      port: params.port,\n      path: params.pathname,\n      host: params.hostname,\n      protocol: params.protocol\n    }, defaults);\n  } else { // use custom params\n    options = populate(params, defaults);\n    // if no port provided use default one\n    if (!options.port) {\n      options.port = options.protocol === 'https:' ? 443 : 80;\n    }\n  }\n\n  // put that good code in getHeaders to some use\n  options.headers = this.getHeaders(params.headers);\n\n  // https if specified, fallback to http in any other case\n  if (options.protocol === 'https:') {\n    request = https.request(options);\n  } else {\n    request = http.request(options);\n  }\n\n  // get content length and fire away\n  this.getLength(function (err, length) {\n    if (err && err !== 'Unknown stream') {\n      this._error(err);\n      return;\n    }\n\n    // add content length\n    if (length) {\n      request.setHeader('Content-Length', length);\n    }\n\n    this.pipe(request);\n    if (cb) {\n      var onResponse;\n\n      var callback = function (error, responce) {\n        request.removeListener('error', callback);\n        request.removeListener('response', onResponse);\n\n        return cb.call(this, error, responce);\n      };\n\n      onResponse = callback.bind(this, null);\n\n      request.on('error', callback);\n      request.on('response', onResponse);\n    }\n  }.bind(this));\n\n  return request;\n};\n\nFormData.prototype._error = function (err) {\n  if (!this.error) {\n    this.error = err;\n    this.pause();\n    this.emit('error', err);\n  }\n};\n\nFormData.prototype.toString = function () {\n  return '[object FormData]';\n};\nsetToStringTag(FormData.prototype, 'FormData');\n\n// Public API\nmodule.exports = FormData;\n", "import FormData from 'form-data';\n\nexport default FormData;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path\n    .concat(key)\n    .map(function each(token, i) {\n      // eslint-disable-next-line no-param-reassign\n      token = removeBrackets(token);\n      return !dots && i ? '[' + token + ']' : token;\n    })\n    .join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(\n    options,\n    {\n      metaTokens: true,\n      dots: false,\n      indexes: false,\n    },\n    false,\n    function defined(option, source) {\n      // eslint-disable-next-line no-eq-null,eqeqeq\n      return !utils.isUndefined(source[option]);\n    }\n  );\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || (typeof Blob !== 'undefined' && Blob);\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (utils.isReactNative(formData) && utils.isReactNativeBlob(value)) {\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)))\n      ) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) &&\n            formData.append(\n              // eslint-disable-next-line no-nested-ternary\n              indexes === true\n                ? renderKey([key], index, dots)\n                : indexes === null\n                  ? key\n                  : key + '[]',\n              convertValue(el)\n            );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable,\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result =\n        !(utils.isUndefined(el) || el === null) &&\n        visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00',\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder\n    ? function (value) {\n        return encoder.call(this, value, encode);\n      }\n    : encode;\n\n  return this._pairs\n    .map(function each(pair) {\n      return _encode(pair[0]) + '=' + _encode(pair[1]);\n    }, '')\n    .join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces URL-encoded forms of `:`, `$`, `,`, and spaces with\n * their plain counterparts (`:`, `$`, `,`, `+`).\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val)\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  if (!params) {\n    return url;\n  }\n\n  const _encode = (options && options.encode) || encode;\n\n  const _options = utils.isFunction(options)\n    ? {\n        serialize: options,\n      }\n    : options;\n\n  const serializeFn = _options && _options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params)\n      ? params.toString()\n      : new AxiosURLSearchParams(params, _options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf('#');\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null,\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true,\n};\n", "'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n", "import crypto from 'crypto';\nimport URLSearchParams from './classes/URLSearchParams.js';\nimport FormData from './classes/FormData.js';\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz';\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n  DIGIT,\n  ALPHA,\n  ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT,\n};\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n  let str = '';\n  const { length } = alphabet;\n  const randomValues = new Uint32Array(size);\n  crypto.randomFillSync(randomValues);\n  for (let i = 0; i < size; i++) {\n    str += alphabet[randomValues[i] % length];\n  }\n\n  return str;\n};\n\nexport default {\n  isNode: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob: (typeof Blob !== 'undefined' && Blob) || null,\n  },\n  ALPHABET,\n  generateString,\n  protocols: ['http', 'https', 'file', 'data'],\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = (typeof navigator === 'object' && navigator) || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv =\n  hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = (hasBrowserEnv && window.location.href) || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin,\n};\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function (value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options,\n  });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map((match) => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [\n    function transformRequest(data, headers) {\n      const contentType = headers.getContentType() || '';\n      const hasJSONContentType = contentType.indexOf('application/json') > -1;\n      const isObjectPayload = utils.isObject(data);\n\n      if (isObjectPayload && utils.isHTMLForm(data)) {\n        data = new FormData(data);\n      }\n\n      const isFormData = utils.isFormData(data);\n\n      if (isFormData) {\n        return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n      }\n\n      if (\n        utils.isArrayBuffer(data) ||\n        utils.isBuffer(data) ||\n        utils.isStream(data) ||\n        utils.isFile(data) ||\n        utils.isBlob(data) ||\n        utils.isReadableStream(data)\n      ) {\n        return data;\n      }\n      if (utils.isArrayBufferView(data)) {\n        return data.buffer;\n      }\n      if (utils.isURLSearchParams(data)) {\n        headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n        return data.toString();\n      }\n\n      let isFileList;\n\n      if (isObjectPayload) {\n        if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n          return toURLEncodedForm(data, this.formSerializer).toString();\n        }\n\n        if (\n          (isFileList = utils.isFileList(data)) ||\n          contentType.indexOf('multipart/form-data') > -1\n        ) {\n          const _FormData = this.env && this.env.FormData;\n\n          return toFormData(\n            isFileList ? { 'files[]': data } : data,\n            _FormData && new _FormData(),\n            this.formSerializer\n          );\n        }\n      }\n\n      if (isObjectPayload || hasJSONContentType) {\n        headers.setContentType('application/json', false);\n        return stringifySafely(data);\n      }\n\n      return data;\n    },\n  ],\n\n  transformResponse: [\n    function transformResponse(data) {\n      const transitional = this.transitional || defaults.transitional;\n      const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n      const JSONRequested = this.responseType === 'json';\n\n      if (utils.isResponse(data) || utils.isReadableStream(data)) {\n        return data;\n      }\n\n      if (\n        data &&\n        utils.isString(data) &&\n        ((forcedJSONParsing && !this.responseType) || JSONRequested)\n      ) {\n        const silentJSONParsing = transitional && transitional.silentJSONParsing;\n        const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n        try {\n          return JSON.parse(data, this.parseReviver);\n        } catch (e) {\n          if (strictJSONParsing) {\n            if (e.name === 'SyntaxError') {\n              throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n            }\n            throw e;\n          }\n        }\n      }\n\n      return data;\n    },\n  ],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob,\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      Accept: 'application/json, text/plain, */*',\n      'Content-Type': undefined,\n    },\n  },\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age',\n  'authorization',\n  'content-length',\n  'content-type',\n  'etag',\n  'expires',\n  'from',\n  'host',\n  'if-modified-since',\n  'if-unmodified-since',\n  'last-modified',\n  'location',\n  'max-forwards',\n  'proxy-authorization',\n  'referer',\n  'retry-after',\n  'user-agent',\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default (rawHeaders) => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders &&\n    rawHeaders.split('\\n').forEach(function parser(line) {\n      i = line.indexOf(':');\n      key = line.substring(0, i).trim().toLowerCase();\n      val = line.substring(i + 1).trim();\n\n      if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n        return;\n      }\n\n      if (key === 'set-cookie') {\n        if (parsed[key]) {\n          parsed[key].push(val);\n        } else {\n          parsed[key] = [val];\n        }\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    });\n\n  return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nconst isValidHeaderValue = (value) => !/[\\r\\n]/.test(value);\n\nfunction assertValidHeaderValue(value, header) {\n  if (value === false || value == null) {\n    return;\n  }\n\n  if (utils.isArray(value)) {\n    value.forEach((v) => assertValidHeaderValue(v, header));\n    return;\n  }\n\n  if (!isValidHeaderValue(String(value))) {\n    throw new Error(`Invalid character in header content [\"${header}\"]`);\n  }\n}\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction stripTrailingCRLF(str) {\n  let end = str.length;\n\n  while (end > 0) {\n    const charCode = str.charCodeAt(end - 1);\n\n    if (charCode !== 10 && charCode !== 13) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return end === str.length ? str : str.slice(0, end);\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : stripTrailingCRLF(String(value));\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header\n    .trim()\n    .toLowerCase()\n    .replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach((methodName) => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function (arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true,\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if (\n        !key ||\n        self[key] === undefined ||\n        _rewrite === true ||\n        (_rewrite === undefined && self[key] !== false)\n      ) {\n        assertValidHeaderValue(_value, _header);\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite);\n    } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isIterable(header)) {\n      let obj = {},\n        dest,\n        key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw TypeError('Object iterator must return a key-value pair');\n        }\n\n        obj[(key = entry[0])] = (dest = obj[key])\n          ? utils.isArray(dest)\n            ? [...dest, entry[1]]\n            : [dest, entry[1]]\n          : entry[1];\n      }\n\n      setHeaders(obj, valueOrRewrite);\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(\n        key &&\n        this[key] !== undefined &&\n        (!matcher || matchHeaderValue(this, this[key], key, matcher))\n      );\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null &&\n        value !== false &&\n        (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON())\n      .map(([header, value]) => header + ': ' + value)\n      .join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get('set-cookie') || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals =\n      (this[$internals] =\n      this[$internals] =\n        {\n          accessors: {},\n        });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor([\n  'Content-Type',\n  'Content-Length',\n  'Accept',\n  'Accept-Encoding',\n  'User-Agent',\n  'Authorization',\n]);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    },\n  };\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n    this.name = 'CanceledError';\n    this.__CANCEL__ = true;\n  }\n}\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(\n      new AxiosError(\n        'Request failed with status code ' + response.status,\n        [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][\n          Math.floor(response.status / 100) - 4\n        ],\n        response.config,\n        response.request,\n        response\n      )\n    );\n  }\n}\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  if (typeof url !== 'string') {\n    return false;\n  }\n\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n", "'use strict';\n\nvar DEFAULT_PORTS = {\n  ftp: 21,\n  gopher: 70,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443,\n};\n\nfunction parseUrl(urlString) {\n  try {\n    return new URL(urlString);\n  } catch {\n    return null;\n  }\n}\n\n/**\n * @param {string|object|URL} url - The URL as a string or URL instance, or a\n *   compatible object (such as the result from legacy url.parse).\n * @return {string} The URL of the proxy that should handle the request to the\n *  given URL. If no proxy is set, this will be an empty string.\n */\nexport function getProxyForUrl(url) {\n  var parsedUrl = (typeof url === 'string' ? parseUrl(url) : url) || {};\n  var proto = parsedUrl.protocol;\n  var hostname = parsedUrl.host;\n  var port = parsedUrl.port;\n  if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n    return '';  // Don't proxy URLs without a valid scheme or host.\n  }\n\n  proto = proto.split(':', 1)[0];\n  // Stripping ports in this way instead of using parsedUrl.hostname to make\n  // sure that the brackets around IPv6 addresses are kept.\n  hostname = hostname.replace(/:\\d*$/, '');\n  port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n  if (!shouldProxy(hostname, port)) {\n    return '';  // Don't proxy URLs that match NO_PROXY.\n  }\n\n  var proxy = getEnv(proto + '_proxy') || getEnv('all_proxy');\n  if (proxy && proxy.indexOf('://') === -1) {\n    // Missing scheme in proxy, default to the requested URL's scheme.\n    proxy = proto + '://' + proxy;\n  }\n  return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n  var NO_PROXY = getEnv('no_proxy').toLowerCase();\n  if (!NO_PROXY) {\n    return true;  // Always proxy if NO_PROXY is not set.\n  }\n  if (NO_PROXY === '*') {\n    return false;  // Never proxy if wildcard is set.\n  }\n\n  return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n    if (!proxy) {\n      return true;  // Skip zero-length hosts.\n    }\n    var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n    var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n    var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n    if (parsedProxyPort && parsedProxyPort !== port) {\n      return true;  // Skip if ports don't match.\n    }\n\n    if (!/^[.*]/.test(parsedProxyHostname)) {\n      // No wildcards, so stop proxying if there is an exact match.\n      return hostname !== parsedProxyHostname;\n    }\n\n    if (parsedProxyHostname.charAt(0) === '*') {\n      // Remove leading wildcard.\n      parsedProxyHostname = parsedProxyHostname.slice(1);\n    }\n    // Stop proxying if the hostname ends with the no_proxy host.\n    return !hostname.endsWith(parsedProxyHostname);\n  });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n  return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "var debug;\n\nmodule.exports = function () {\n  if (!debug) {\n    try {\n      /* eslint global-require: off */\n      debug = require(\"debug\")(\"follow-redirects\");\n    }\n    catch (error) { /* */ }\n    if (typeof debug !== \"function\") {\n      debug = function () { /* */ };\n    }\n  }\n  debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n  var looksLikeNode = typeof process !== \"undefined\";\n  var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n  var looksLikeV8 = isFunction(Error.captureStackTrace);\n  if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n    console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n  }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n  assert(new URL(\"\"));\n}\ncatch (error) {\n  useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n  \"auth\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"path\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"query\",\n  \"search\",\n  \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n  eventHandlers[event] = function (arg1, arg2, arg3) {\n    this._redirectable.emit(event, arg1, arg2, arg3);\n  };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n  \"ERR_INVALID_URL\",\n  \"Invalid URL\",\n  TypeError\n);\nvar RedirectionError = createErrorType(\n  \"ERR_FR_REDIRECTION_FAILURE\",\n  \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n  \"ERR_FR_TOO_MANY_REDIRECTS\",\n  \"Maximum number of redirects exceeded\",\n  RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n  \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n  \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n  \"ERR_STREAM_WRITE_AFTER_END\",\n  \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n  // Initialize the request\n  Writable.call(this);\n  this._sanitizeOptions(options);\n  this._options = options;\n  this._ended = false;\n  this._ending = false;\n  this._redirectCount = 0;\n  this._redirects = [];\n  this._requestBodyLength = 0;\n  this._requestBodyBuffers = [];\n\n  // Attach a callback if passed\n  if (responseCallback) {\n    this.on(\"response\", responseCallback);\n  }\n\n  // React to responses of native requests\n  var self = this;\n  this._onNativeResponse = function (response) {\n    try {\n      self._processResponse(response);\n    }\n    catch (cause) {\n      self.emit(\"error\", cause instanceof RedirectionError ?\n        cause : new RedirectionError({ cause: cause }));\n    }\n  };\n\n  // Perform the first request\n  this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n  destroyRequest(this._currentRequest);\n  this._currentRequest.abort();\n  this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n  destroyRequest(this._currentRequest, error);\n  destroy.call(this, error);\n  return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n  // Writing is not allowed if end has been called\n  if (this._ending) {\n    throw new WriteAfterEndError();\n  }\n\n  // Validate input and shift parameters if necessary\n  if (!isString(data) && !isBuffer(data)) {\n    throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n  }\n  if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Ignore empty buffers, since writing them doesn't invoke the callback\n  // https://github.com/nodejs/node/issues/22066\n  if (data.length === 0) {\n    if (callback) {\n      callback();\n    }\n    return;\n  }\n  // Only write when we don't exceed the maximum body length\n  if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n    this._requestBodyLength += data.length;\n    this._requestBodyBuffers.push({ data: data, encoding: encoding });\n    this._currentRequest.write(data, encoding, callback);\n  }\n  // Error when we exceed the maximum body length\n  else {\n    this.emit(\"error\", new MaxBodyLengthExceededError());\n    this.abort();\n  }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n  // Shift parameters if necessary\n  if (isFunction(data)) {\n    callback = data;\n    data = encoding = null;\n  }\n  else if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Write data if needed and end\n  if (!data) {\n    this._ended = this._ending = true;\n    this._currentRequest.end(null, null, callback);\n  }\n  else {\n    var self = this;\n    var currentRequest = this._currentRequest;\n    this.write(data, encoding, function () {\n      self._ended = true;\n      currentRequest.end(null, null, callback);\n    });\n    this._ending = true;\n  }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n  this._options.headers[name] = value;\n  this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n  delete this._options.headers[name];\n  this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n  var self = this;\n\n  // Destroys the socket on timeout\n  function destroyOnTimeout(socket) {\n    socket.setTimeout(msecs);\n    socket.removeListener(\"timeout\", socket.destroy);\n    socket.addListener(\"timeout\", socket.destroy);\n  }\n\n  // Sets up a timer to trigger a timeout event\n  function startTimer(socket) {\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n    }\n    self._timeout = setTimeout(function () {\n      self.emit(\"timeout\");\n      clearTimer();\n    }, msecs);\n    destroyOnTimeout(socket);\n  }\n\n  // Stops a timeout from triggering\n  function clearTimer() {\n    // Clear the timeout\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n      self._timeout = null;\n    }\n\n    // Clean up all attached listeners\n    self.removeListener(\"abort\", clearTimer);\n    self.removeListener(\"error\", clearTimer);\n    self.removeListener(\"response\", clearTimer);\n    self.removeListener(\"close\", clearTimer);\n    if (callback) {\n      self.removeListener(\"timeout\", callback);\n    }\n    if (!self.socket) {\n      self._currentRequest.removeListener(\"socket\", startTimer);\n    }\n  }\n\n  // Attach callback if passed\n  if (callback) {\n    this.on(\"timeout\", callback);\n  }\n\n  // Start the timer if or when the socket is opened\n  if (this.socket) {\n    startTimer(this.socket);\n  }\n  else {\n    this._currentRequest.once(\"socket\", startTimer);\n  }\n\n  // Clean up on events\n  this.on(\"socket\", destroyOnTimeout);\n  this.on(\"abort\", clearTimer);\n  this.on(\"error\", clearTimer);\n  this.on(\"response\", clearTimer);\n  this.on(\"close\", clearTimer);\n\n  return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n  \"flushHeaders\", \"getHeader\",\n  \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n  RedirectableRequest.prototype[method] = function (a, b) {\n    return this._currentRequest[method](a, b);\n  };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n  Object.defineProperty(RedirectableRequest.prototype, property, {\n    get: function () { return this._currentRequest[property]; },\n  });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n  // Ensure headers are always present\n  if (!options.headers) {\n    options.headers = {};\n  }\n\n  // Since http.request treats host as an alias of hostname,\n  // but the url module interprets host as hostname plus port,\n  // eliminate the host property to avoid confusion.\n  if (options.host) {\n    // Use hostname if set, because it has precedence\n    if (!options.hostname) {\n      options.hostname = options.host;\n    }\n    delete options.host;\n  }\n\n  // Complete the URL object when necessary\n  if (!options.pathname && options.path) {\n    var searchPos = options.path.indexOf(\"?\");\n    if (searchPos < 0) {\n      options.pathname = options.path;\n    }\n    else {\n      options.pathname = options.path.substring(0, searchPos);\n      options.search = options.path.substring(searchPos);\n    }\n  }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n  // Load the native protocol\n  var protocol = this._options.protocol;\n  var nativeProtocol = this._options.nativeProtocols[protocol];\n  if (!nativeProtocol) {\n    throw new TypeError(\"Unsupported protocol \" + protocol);\n  }\n\n  // If specified, use the agent corresponding to the protocol\n  // (HTTP and HTTPS use different types of agents)\n  if (this._options.agents) {\n    var scheme = protocol.slice(0, -1);\n    this._options.agent = this._options.agents[scheme];\n  }\n\n  // Create the native request and set up its event handlers\n  var request = this._currentRequest =\n        nativeProtocol.request(this._options, this._onNativeResponse);\n  request._redirectable = this;\n  for (var event of events) {\n    request.on(event, eventHandlers[event]);\n  }\n\n  // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n  // a client MUST send only the absolute path [\u2026] as the request-target.\n  this._currentUrl = /^\\//.test(this._options.path) ?\n    url.format(this._options) :\n    // When making a request to a proxy, [\u2026]\n    // a client MUST send the target URI in absolute-form [\u2026].\n    this._options.path;\n\n  // End a redirected request\n  // (The first request must be ended explicitly with RedirectableRequest#end)\n  if (this._isRedirect) {\n    // Write the request entity and end\n    var i = 0;\n    var self = this;\n    var buffers = this._requestBodyBuffers;\n    (function writeNext(error) {\n      // Only write if this request has not been redirected yet\n      // istanbul ignore else\n      if (request === self._currentRequest) {\n        // Report any write errors\n        // istanbul ignore if\n        if (error) {\n          self.emit(\"error\", error);\n        }\n        // Write the next buffer if there are still left\n        else if (i < buffers.length) {\n          var buffer = buffers[i++];\n          // istanbul ignore else\n          if (!request.finished) {\n            request.write(buffer.data, buffer.encoding, writeNext);\n          }\n        }\n        // End the request if `end` has been called on us\n        else if (self._ended) {\n          request.end();\n        }\n      }\n    }());\n  }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n  // Store the redirected response\n  var statusCode = response.statusCode;\n  if (this._options.trackRedirects) {\n    this._redirects.push({\n      url: this._currentUrl,\n      headers: response.headers,\n      statusCode: statusCode,\n    });\n  }\n\n  // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n  // that further action needs to be taken by the user agent in order to\n  // fulfill the request. If a Location header field is provided,\n  // the user agent MAY automatically redirect its request to the URI\n  // referenced by the Location field value,\n  // even if the specific status code is not understood.\n\n  // If the response is not a redirect; return it as-is\n  var location = response.headers.location;\n  if (!location || this._options.followRedirects === false ||\n      statusCode < 300 || statusCode >= 400) {\n    response.responseUrl = this._currentUrl;\n    response.redirects = this._redirects;\n    this.emit(\"response\", response);\n\n    // Clean up\n    this._requestBodyBuffers = [];\n    return;\n  }\n\n  // The response is a redirect, so abort the current request\n  destroyRequest(this._currentRequest);\n  // Discard the remainder of the response to avoid waiting for data\n  response.destroy();\n\n  // RFC7231\u00A76.4: A client SHOULD detect and intervene\n  // in cyclical redirections (i.e., \"infinite\" redirection loops).\n  if (++this._redirectCount > this._options.maxRedirects) {\n    throw new TooManyRedirectsError();\n  }\n\n  // Store the request headers if applicable\n  var requestHeaders;\n  var beforeRedirect = this._options.beforeRedirect;\n  if (beforeRedirect) {\n    requestHeaders = Object.assign({\n      // The Host header was set by nativeProtocol.request\n      Host: response.req.getHeader(\"host\"),\n    }, this._options.headers);\n  }\n\n  // RFC7231\u00A76.4: Automatic redirection needs to done with\n  // care for methods not known to be safe, [\u2026]\n  // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n  // the request method from POST to GET for the subsequent request.\n  var method = this._options.method;\n  if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n      // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n      // the server is redirecting the user agent to a different resource [\u2026]\n      // A user agent can perform a retrieval request targeting that URI\n      // (a GET or HEAD request if using HTTP) [\u2026]\n      (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n    this._options.method = \"GET\";\n    // Drop a possible entity and headers related to it\n    this._requestBodyBuffers = [];\n    removeMatchingHeaders(/^content-/i, this._options.headers);\n  }\n\n  // Drop the Host header, as the redirect might lead to a different host\n  var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n  // If the redirect is relative, carry over the host of the last request\n  var currentUrlParts = parseUrl(this._currentUrl);\n  var currentHost = currentHostHeader || currentUrlParts.host;\n  var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n    url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n  // Create the redirected request\n  var redirectUrl = resolveUrl(location, currentUrl);\n  debug(\"redirecting to\", redirectUrl.href);\n  this._isRedirect = true;\n  spreadUrlObject(redirectUrl, this._options);\n\n  // Drop confidential headers when redirecting to a less secure protocol\n  // or to a different domain that is not a superdomain\n  if (redirectUrl.protocol !== currentUrlParts.protocol &&\n     redirectUrl.protocol !== \"https:\" ||\n     redirectUrl.host !== currentHost &&\n     !isSubdomain(redirectUrl.host, currentHost)) {\n    removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n  }\n\n  // Evaluate the beforeRedirect callback\n  if (isFunction(beforeRedirect)) {\n    var responseDetails = {\n      headers: response.headers,\n      statusCode: statusCode,\n    };\n    var requestDetails = {\n      url: currentUrl,\n      method: method,\n      headers: requestHeaders,\n    };\n    beforeRedirect(this._options, responseDetails, requestDetails);\n    this._sanitizeOptions(this._options);\n  }\n\n  // Perform the redirected request\n  this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n  // Default settings\n  var exports = {\n    maxRedirects: 21,\n    maxBodyLength: 10 * 1024 * 1024,\n  };\n\n  // Wrap each protocol\n  var nativeProtocols = {};\n  Object.keys(protocols).forEach(function (scheme) {\n    var protocol = scheme + \":\";\n    var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n    var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n    // Executes a request, following redirects\n    function request(input, options, callback) {\n      // Parse parameters, ensuring that input is an object\n      if (isURL(input)) {\n        input = spreadUrlObject(input);\n      }\n      else if (isString(input)) {\n        input = spreadUrlObject(parseUrl(input));\n      }\n      else {\n        callback = options;\n        options = validateUrl(input);\n        input = { protocol: protocol };\n      }\n      if (isFunction(options)) {\n        callback = options;\n        options = null;\n      }\n\n      // Set defaults\n      options = Object.assign({\n        maxRedirects: exports.maxRedirects,\n        maxBodyLength: exports.maxBodyLength,\n      }, input, options);\n      options.nativeProtocols = nativeProtocols;\n      if (!isString(options.host) && !isString(options.hostname)) {\n        options.hostname = \"::1\";\n      }\n\n      assert.equal(options.protocol, protocol, \"protocol mismatch\");\n      debug(\"options\", options);\n      return new RedirectableRequest(options, callback);\n    }\n\n    // Executes a GET request, following redirects\n    function get(input, options, callback) {\n      var wrappedRequest = wrappedProtocol.request(input, options, callback);\n      wrappedRequest.end();\n      return wrappedRequest;\n    }\n\n    // Expose the properties on the wrapped protocol\n    Object.defineProperties(wrappedProtocol, {\n      request: { value: request, configurable: true, enumerable: true, writable: true },\n      get: { value: get, configurable: true, enumerable: true, writable: true },\n    });\n  });\n  return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n  var parsed;\n  // istanbul ignore else\n  if (useNativeURL) {\n    parsed = new URL(input);\n  }\n  else {\n    // Ensure the URL is valid and absolute\n    parsed = validateUrl(url.parse(input));\n    if (!isString(parsed.protocol)) {\n      throw new InvalidUrlError({ input });\n    }\n  }\n  return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n  // istanbul ignore next\n  return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n  if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n  var spread = target || {};\n  for (var key of preservedUrlFields) {\n    spread[key] = urlObject[key];\n  }\n\n  // Fix IPv6 hostname\n  if (spread.hostname.startsWith(\"[\")) {\n    spread.hostname = spread.hostname.slice(1, -1);\n  }\n  // Ensure port is a number\n  if (spread.port !== \"\") {\n    spread.port = Number(spread.port);\n  }\n  // Concatenate path\n  spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n  return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n  var lastValue;\n  for (var header in headers) {\n    if (regex.test(header)) {\n      lastValue = headers[header];\n      delete headers[header];\n    }\n  }\n  return (lastValue === null || typeof lastValue === \"undefined\") ?\n    undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n  // Create constructor\n  function CustomError(properties) {\n    // istanbul ignore else\n    if (isFunction(Error.captureStackTrace)) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    Object.assign(this, properties || {});\n    this.code = code;\n    this.message = this.cause ? message + \": \" + this.cause.message : message;\n  }\n\n  // Attach constructor and set default properties\n  CustomError.prototype = new (baseClass || Error)();\n  Object.defineProperties(CustomError.prototype, {\n    constructor: {\n      value: CustomError,\n      enumerable: false,\n    },\n    name: {\n      value: \"Error [\" + code + \"]\",\n      enumerable: false,\n    },\n  });\n  return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n  for (var event of events) {\n    request.removeListener(event, eventHandlers[event]);\n  }\n  request.on(\"error\", noop);\n  request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n  assert(isString(subdomain) && isString(domain));\n  var dot = subdomain.length - domain.length - 1;\n  return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n  return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n  return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n  return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "export const VERSION = \"1.15.0\";", "'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return (match && match[1]) || '';\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n  const _Blob = (options && options.Blob) || platform.classes.Blob;\n  const protocol = parseProtocol(uri);\n\n  if (asBlob === undefined && _Blob) {\n    asBlob = true;\n  }\n\n  if (protocol === 'data') {\n    uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n    const match = DATA_URL_PATTERN.exec(uri);\n\n    if (!match) {\n      throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n    }\n\n    const mime = match[1];\n    const isBase64 = match[2];\n    const body = match[3];\n    const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n    if (asBlob) {\n      if (!_Blob) {\n        throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n      }\n\n      return new _Blob([buffer], { type: mime });\n    }\n\n    return buffer;\n  }\n\n  throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n", "'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform {\n  constructor(options) {\n    options = utils.toFlatObject(\n      options,\n      {\n        maxRate: 0,\n        chunkSize: 64 * 1024,\n        minChunkSize: 100,\n        timeWindow: 500,\n        ticksRate: 2,\n        samplesCount: 15,\n      },\n      null,\n      (prop, source) => {\n        return !utils.isUndefined(source[prop]);\n      }\n    );\n\n    super({\n      readableHighWaterMark: options.chunkSize,\n    });\n\n    const internals = (this[kInternals] = {\n      timeWindow: options.timeWindow,\n      chunkSize: options.chunkSize,\n      maxRate: options.maxRate,\n      minChunkSize: options.minChunkSize,\n      bytesSeen: 0,\n      isCaptured: false,\n      notifiedBytesLoaded: 0,\n      ts: Date.now(),\n      bytes: 0,\n      onReadCallback: null,\n    });\n\n    this.on('newListener', (event) => {\n      if (event === 'progress') {\n        if (!internals.isCaptured) {\n          internals.isCaptured = true;\n        }\n      }\n    });\n  }\n\n  _read(size) {\n    const internals = this[kInternals];\n\n    if (internals.onReadCallback) {\n      internals.onReadCallback();\n    }\n\n    return super._read(size);\n  }\n\n  _transform(chunk, encoding, callback) {\n    const internals = this[kInternals];\n    const maxRate = internals.maxRate;\n\n    const readableHighWaterMark = this.readableHighWaterMark;\n\n    const timeWindow = internals.timeWindow;\n\n    const divider = 1000 / timeWindow;\n    const bytesThreshold = maxRate / divider;\n    const minChunkSize =\n      internals.minChunkSize !== false\n        ? Math.max(internals.minChunkSize, bytesThreshold * 0.01)\n        : 0;\n\n    const pushChunk = (_chunk, _callback) => {\n      const bytes = Buffer.byteLength(_chunk);\n      internals.bytesSeen += bytes;\n      internals.bytes += bytes;\n\n      internals.isCaptured && this.emit('progress', internals.bytesSeen);\n\n      if (this.push(_chunk)) {\n        process.nextTick(_callback);\n      } else {\n        internals.onReadCallback = () => {\n          internals.onReadCallback = null;\n          process.nextTick(_callback);\n        };\n      }\n    };\n\n    const transformChunk = (_chunk, _callback) => {\n      const chunkSize = Buffer.byteLength(_chunk);\n      let chunkRemainder = null;\n      let maxChunkSize = readableHighWaterMark;\n      let bytesLeft;\n      let passed = 0;\n\n      if (maxRate) {\n        const now = Date.now();\n\n        if (!internals.ts || (passed = now - internals.ts) >= timeWindow) {\n          internals.ts = now;\n          bytesLeft = bytesThreshold - internals.bytes;\n          internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n          passed = 0;\n        }\n\n        bytesLeft = bytesThreshold - internals.bytes;\n      }\n\n      if (maxRate) {\n        if (bytesLeft <= 0) {\n          // next time window\n          return setTimeout(() => {\n            _callback(null, _chunk);\n          }, timeWindow - passed);\n        }\n\n        if (bytesLeft < maxChunkSize) {\n          maxChunkSize = bytesLeft;\n        }\n      }\n\n      if (maxChunkSize && chunkSize > maxChunkSize && chunkSize - maxChunkSize > minChunkSize) {\n        chunkRemainder = _chunk.subarray(maxChunkSize);\n        _chunk = _chunk.subarray(0, maxChunkSize);\n      }\n\n      pushChunk(\n        _chunk,\n        chunkRemainder\n          ? () => {\n              process.nextTick(_callback, null, chunkRemainder);\n            }\n          : _callback\n      );\n    };\n\n    transformChunk(chunk, function transformNextChunk(err, _chunk) {\n      if (err) {\n        return callback(err);\n      }\n\n      if (_chunk) {\n        transformChunk(_chunk, transformNextChunk);\n      } else {\n        callback(null);\n      }\n    });\n  }\n}\n\nexport default AxiosTransformStream;\n", "const { asyncIterator } = Symbol;\n\nconst readBlob = async function* (blob) {\n  if (blob.stream) {\n    yield* blob.stream();\n  } else if (blob.arrayBuffer) {\n    yield await blob.arrayBuffer();\n  } else if (blob[asyncIterator]) {\n    yield* blob[asyncIterator]();\n  } else {\n    yield blob;\n  }\n};\n\nexport default readBlob;\n", "import util from 'util';\nimport { Readable } from 'stream';\nimport utils from '../utils.js';\nimport readBlob from './readBlob.js';\nimport platform from '../platform/index.js';\n\nconst BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n  constructor(name, value) {\n    const { escapeName } = this.constructor;\n    const isStringValue = utils.isString(value);\n\n    let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n      !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n    }${CRLF}`;\n\n    if (isStringValue) {\n      value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n    } else {\n      headers += `Content-Type: ${value.type || 'application/octet-stream'}${CRLF}`;\n    }\n\n    this.headers = textEncoder.encode(headers + CRLF);\n\n    this.contentLength = isStringValue ? value.byteLength : value.size;\n\n    this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n    this.name = name;\n    this.value = value;\n  }\n\n  async *encode() {\n    yield this.headers;\n\n    const { value } = this;\n\n    if (utils.isTypedArray(value)) {\n      yield value;\n    } else {\n      yield* readBlob(value);\n    }\n\n    yield CRLF_BYTES;\n  }\n\n  static escapeName(name) {\n    return String(name).replace(\n      /[\\r\\n\"]/g,\n      (match) =>\n        ({\n          '\\r': '%0D',\n          '\\n': '%0A',\n          '\"': '%22',\n        })[match]\n    );\n  }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n  const {\n    tag = 'form-data-boundary',\n    size = 25,\n    boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET),\n  } = options || {};\n\n  if (!utils.isFormData(form)) {\n    throw TypeError('FormData instance required');\n  }\n\n  if (boundary.length < 1 || boundary.length > 70) {\n    throw Error('boundary must be 10-70 characters long');\n  }\n\n  const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n  const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF);\n  let contentLength = footerBytes.byteLength;\n\n  const parts = Array.from(form.entries()).map(([name, value]) => {\n    const part = new FormDataPart(name, value);\n    contentLength += part.size;\n    return part;\n  });\n\n  contentLength += boundaryBytes.byteLength * parts.length;\n\n  contentLength = utils.toFiniteNumber(contentLength);\n\n  const computedHeaders = {\n    'Content-Type': `multipart/form-data; boundary=${boundary}`,\n  };\n\n  if (Number.isFinite(contentLength)) {\n    computedHeaders['Content-Length'] = contentLength;\n  }\n\n  headersHandler && headersHandler(computedHeaders);\n\n  return Readable.from(\n    (async function* () {\n      for (const part of parts) {\n        yield boundaryBytes;\n        yield* part.encode();\n      }\n\n      yield footerBytes;\n    })()\n  );\n};\n\nexport default formDataToStream;\n", "'use strict';\n\nimport stream from 'stream';\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n  __transform(chunk, encoding, callback) {\n    this.push(chunk);\n    callback();\n  }\n\n  _transform(chunk, encoding, callback) {\n    if (chunk.length !== 0) {\n      this._transform = this.__transform;\n\n      // Add Default Compression headers if no zlib headers are present\n      if (chunk[0] !== 120) {\n        // Hex: 78\n        const header = Buffer.alloc(2);\n        header[0] = 120; // Hex: 78\n        header[1] = 156; // Hex: 9C\n        this.push(header, encoding);\n      }\n    }\n\n    this.__transform(chunk, encoding, callback);\n  }\n}\n\nexport default ZlibHeaderTransformStream;\n", "import utils from '../utils.js';\n\nconst callbackify = (fn, reducer) => {\n  return utils.isAsyncFn(fn)\n    ? function (...args) {\n        const cb = args.pop();\n        fn.apply(this, args).then((value) => {\n          try {\n            reducer ? cb(null, ...reducer(value)) : cb(null, value);\n          } catch (err) {\n            cb(err);\n          }\n        }, cb);\n      }\n    : fn;\n};\n\nexport default callbackify;\n", "const DEFAULT_PORTS = {\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443,\n  ftp: 21,\n};\n\nconst parseNoProxyEntry = (entry) => {\n  let entryHost = entry;\n  let entryPort = 0;\n\n  if (entryHost.charAt(0) === '[') {\n    const bracketIndex = entryHost.indexOf(']');\n\n    if (bracketIndex !== -1) {\n      const host = entryHost.slice(1, bracketIndex);\n      const rest = entryHost.slice(bracketIndex + 1);\n\n      if (rest.charAt(0) === ':' && /^\\d+$/.test(rest.slice(1))) {\n        entryPort = Number.parseInt(rest.slice(1), 10);\n      }\n\n      return [host, entryPort];\n    }\n  }\n\n  const firstColon = entryHost.indexOf(':');\n  const lastColon = entryHost.lastIndexOf(':');\n\n  if (\n    firstColon !== -1 &&\n    firstColon === lastColon &&\n    /^\\d+$/.test(entryHost.slice(lastColon + 1))\n  ) {\n    entryPort = Number.parseInt(entryHost.slice(lastColon + 1), 10);\n    entryHost = entryHost.slice(0, lastColon);\n  }\n\n  return [entryHost, entryPort];\n};\n\nconst normalizeNoProxyHost = (hostname) => {\n  if (!hostname) {\n    return hostname;\n  }\n\n  if (hostname.charAt(0) === '[' && hostname.charAt(hostname.length - 1) === ']') {\n    hostname = hostname.slice(1, -1);\n  }\n\n  return hostname.replace(/\\.+$/, '');\n};\n\nexport default function shouldBypassProxy(location) {\n  let parsed;\n\n  try {\n    parsed = new URL(location);\n  } catch (_err) {\n    return false;\n  }\n\n  const noProxy = (process.env.no_proxy || process.env.NO_PROXY || '').toLowerCase();\n\n  if (!noProxy) {\n    return false;\n  }\n\n  if (noProxy === '*') {\n    return true;\n  }\n\n  const port =\n    Number.parseInt(parsed.port, 10) || DEFAULT_PORTS[parsed.protocol.split(':', 1)[0]] || 0;\n\n  const hostname = normalizeNoProxyHost(parsed.hostname.toLowerCase());\n\n  return noProxy.split(/[\\s,]+/).some((entry) => {\n    if (!entry) {\n      return false;\n    }\n\n    let [entryHost, entryPort] = parseNoProxyEntry(entry);\n\n    entryHost = normalizeNoProxyHost(entryHost);\n\n    if (!entryHost) {\n      return false;\n    }\n\n    if (entryPort && entryPort !== port) {\n      return false;\n    }\n\n    if (entryHost.charAt(0) === '*') {\n      entryHost = entryHost.slice(1);\n    }\n\n    if (entryHost.charAt(0) === '.') {\n      return hostname.endsWith(entryHost);\n    }\n\n    return hostname === entryHost;\n  });\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round((bytesCount * 1000) / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  };\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if (passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs);\n        }, threshold - passed);\n      }\n    }\n  };\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n", "import speedometer from './speedometer.js';\nimport throttle from './throttle.js';\nimport utils from '../utils.js';\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle((e) => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? loaded / total : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true,\n    };\n\n    listener(data);\n  }, freq);\n};\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [\n    (loaded) =>\n      throttled[0]({\n        lengthComputable,\n        total,\n        loaded,\n      }),\n    throttled[1],\n  ];\n};\n\nexport const asyncDecorator =\n  (fn) =>\n  (...args) =>\n    utils.asap(() => fn(...args));\n", "/**\n * Estimate decoded byte length of a data:// URL *without* allocating large buffers.\n * - For base64: compute exact decoded size using length and padding;\n *               handle %XX at the character-count level (no string allocation).\n * - For non-base64: use UTF-8 byteLength of the encoded body as a safe upper bound.\n *\n * @param {string} url\n * @returns {number}\n */\nexport default function estimateDataURLDecodedBytes(url) {\n  if (!url || typeof url !== 'string') return 0;\n  if (!url.startsWith('data:')) return 0;\n\n  const comma = url.indexOf(',');\n  if (comma < 0) return 0;\n\n  const meta = url.slice(5, comma);\n  const body = url.slice(comma + 1);\n  const isBase64 = /;base64/i.test(meta);\n\n  if (isBase64) {\n    let effectiveLen = body.length;\n    const len = body.length; // cache length\n\n    for (let i = 0; i < len; i++) {\n      if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) {\n        const a = body.charCodeAt(i + 1);\n        const b = body.charCodeAt(i + 2);\n        const isHex =\n          ((a >= 48 && a <= 57) || (a >= 65 && a <= 70) || (a >= 97 && a <= 102)) &&\n          ((b >= 48 && b <= 57) || (b >= 65 && b <= 70) || (b >= 97 && b <= 102));\n\n        if (isHex) {\n          effectiveLen -= 2;\n          i += 2;\n        }\n      }\n    }\n\n    let pad = 0;\n    let idx = len - 1;\n\n    const tailIsPct3D = (j) =>\n      j >= 2 &&\n      body.charCodeAt(j - 2) === 37 && // '%'\n      body.charCodeAt(j - 1) === 51 && // '3'\n      (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100); // 'D' or 'd'\n\n    if (idx >= 0) {\n      if (body.charCodeAt(idx) === 61 /* '=' */) {\n        pad++;\n        idx--;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n        idx -= 3;\n      }\n    }\n\n    if (pad === 1 && idx >= 0) {\n      if (body.charCodeAt(idx) === 61 /* '=' */) {\n        pad++;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n      }\n    }\n\n    const groups = Math.floor(effectiveLen / 4);\n    const bytes = groups * 3 - (pad || 0);\n    return bytes > 0 ? bytes : 0;\n  }\n\n  return Buffer.byteLength(body, 'utf8');\n}\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from '../helpers/buildURL.js';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport http2 from 'http2';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport { VERSION } from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport { EventEmitter } from 'events';\nimport formDataToStream from '../helpers/formDataToStream.js';\nimport readBlob from '../helpers/readBlob.js';\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from '../helpers/callbackify.js';\nimport shouldBypassProxy from '../helpers/shouldBypassProxy.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';\n\nconst zlibOptions = {\n  flush: zlib.constants.Z_SYNC_FLUSH,\n  finishFlush: zlib.constants.Z_SYNC_FLUSH,\n};\n\nconst brotliOptions = {\n  flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n  finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,\n};\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst { http: httpFollow, https: httpsFollow } = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map((protocol) => {\n  return protocol + ':';\n});\n\nconst flushOnFinish = (stream, [throttled, flush]) => {\n  stream.on('end', flush).on('error', flush);\n\n  return throttled;\n};\n\nclass Http2Sessions {\n  constructor() {\n    this.sessions = Object.create(null);\n  }\n\n  getSession(authority, options) {\n    options = Object.assign(\n      {\n        sessionTimeout: 1000,\n      },\n      options\n    );\n\n    let authoritySessions = this.sessions[authority];\n\n    if (authoritySessions) {\n      let len = authoritySessions.length;\n\n      for (let i = 0; i < len; i++) {\n        const [sessionHandle, sessionOptions] = authoritySessions[i];\n        if (\n          !sessionHandle.destroyed &&\n          !sessionHandle.closed &&\n          util.isDeepStrictEqual(sessionOptions, options)\n        ) {\n          return sessionHandle;\n        }\n      }\n    }\n\n    const session = http2.connect(authority, options);\n\n    let removed;\n\n    const removeSession = () => {\n      if (removed) {\n        return;\n      }\n\n      removed = true;\n\n      let entries = authoritySessions,\n        len = entries.length,\n        i = len;\n\n      while (i--) {\n        if (entries[i][0] === session) {\n          if (len === 1) {\n            delete this.sessions[authority];\n          } else {\n            entries.splice(i, 1);\n          }\n          if (!session.closed) {\n            session.close();\n          }\n          return;\n        }\n      }\n    };\n\n    const originalRequestFn = session.request;\n\n    const { sessionTimeout } = options;\n\n    if (sessionTimeout != null) {\n      let timer;\n      let streamsCount = 0;\n\n      session.request = function () {\n        const stream = originalRequestFn.apply(this, arguments);\n\n        streamsCount++;\n\n        if (timer) {\n          clearTimeout(timer);\n          timer = null;\n        }\n\n        stream.once('close', () => {\n          if (!--streamsCount) {\n            timer = setTimeout(() => {\n              timer = null;\n              removeSession();\n            }, sessionTimeout);\n          }\n        });\n\n        return stream;\n      };\n    }\n\n    session.once('close', removeSession);\n\n    let entry = [session, options];\n\n    authoritySessions\n      ? authoritySessions.push(entry)\n      : (authoritySessions = this.sessions[authority] = [entry]);\n\n    return session;\n  }\n}\n\nconst http2Sessions = new Http2Sessions();\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object<string, any>} options - The options object that was passed to the request.\n *\n * @returns {Object<string, any>}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n  if (options.beforeRedirects.proxy) {\n    options.beforeRedirects.proxy(options);\n  }\n  if (options.beforeRedirects.config) {\n    options.beforeRedirects.config(options, responseDetails);\n  }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n  let proxy = configProxy;\n  if (!proxy && proxy !== false) {\n    const proxyUrl = getProxyForUrl(location);\n    if (proxyUrl) {\n      if (!shouldBypassProxy(location)) {\n        proxy = new URL(proxyUrl);\n      }\n    }\n  }\n  if (proxy) {\n    // Basic proxy authorization\n    if (proxy.username) {\n      proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n    }\n\n    if (proxy.auth) {\n      // Support proxy auth object form\n      const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password);\n\n      if (validProxyAuth) {\n        proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n      } else if (typeof proxy.auth === 'object') {\n        throw new AxiosError('Invalid proxy authorization', AxiosError.ERR_BAD_OPTION, { proxy });\n      }\n\n      const base64 = Buffer.from(proxy.auth, 'utf8').toString('base64');\n\n      options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n    }\n\n    options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n    const proxyHost = proxy.hostname || proxy.host;\n    options.hostname = proxyHost;\n    // Replace 'host' since options is not a URL object\n    options.host = proxyHost;\n    options.port = proxy.port;\n    options.path = location;\n    if (proxy.protocol) {\n      options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n    }\n  }\n\n  options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n    // Configure proxy for redirected request, passing the original config proxy to apply\n    // the exact same logic as if the redirected request was performed by axios directly.\n    setProxy(redirectOptions, configProxy, redirectOptions.href);\n  };\n}\n\nconst isHttpAdapterSupported =\n  typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n  return new Promise((resolve, reject) => {\n    let onDone;\n    let isDone;\n\n    const done = (value, isRejected) => {\n      if (isDone) return;\n      isDone = true;\n      onDone && onDone(value, isRejected);\n    };\n\n    const _resolve = (value) => {\n      done(value);\n      resolve(value);\n    };\n\n    const _reject = (reason) => {\n      done(reason, true);\n      reject(reason);\n    };\n\n    asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n  });\n};\n\nconst resolveFamily = ({ address, family }) => {\n  if (!utils.isString(address)) {\n    throw TypeError('address must be a string');\n  }\n  return {\n    address,\n    family: family || (address.indexOf('.') < 0 ? 6 : 4),\n  };\n};\n\nconst buildAddressEntry = (address, family) =>\n  resolveFamily(utils.isObject(address) ? address : { address, family });\n\nconst http2Transport = {\n  request(options, cb) {\n    const authority =\n      options.protocol +\n      '//' +\n      options.hostname +\n      ':' +\n      (options.port || (options.protocol === 'https:' ? 443 : 80));\n\n    const { http2Options, headers } = options;\n\n    const session = http2Sessions.getSession(authority, http2Options);\n\n    const { HTTP2_HEADER_SCHEME, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_STATUS } =\n      http2.constants;\n\n    const http2Headers = {\n      [HTTP2_HEADER_SCHEME]: options.protocol.replace(':', ''),\n      [HTTP2_HEADER_METHOD]: options.method,\n      [HTTP2_HEADER_PATH]: options.path,\n    };\n\n    utils.forEach(headers, (header, name) => {\n      name.charAt(0) !== ':' && (http2Headers[name] = header);\n    });\n\n    const req = session.request(http2Headers);\n\n    req.once('response', (responseHeaders) => {\n      const response = req; //duplex\n\n      responseHeaders = Object.assign({}, responseHeaders);\n\n      const status = responseHeaders[HTTP2_HEADER_STATUS];\n\n      delete responseHeaders[HTTP2_HEADER_STATUS];\n\n      response.headers = responseHeaders;\n\n      response.statusCode = +status;\n\n      cb(response);\n    });\n\n    return req;\n  },\n};\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported &&\n  function httpAdapter(config) {\n    return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n      let { data, lookup, family, httpVersion = 1, http2Options } = config;\n      const { responseType, responseEncoding } = config;\n      const method = config.method.toUpperCase();\n      let isDone;\n      let rejected = false;\n      let req;\n\n      httpVersion = +httpVersion;\n\n      if (Number.isNaN(httpVersion)) {\n        throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`);\n      }\n\n      if (httpVersion !== 1 && httpVersion !== 2) {\n        throw TypeError(`Unsupported protocol version '${httpVersion}'`);\n      }\n\n      const isHttp2 = httpVersion === 2;\n\n      if (lookup) {\n        const _lookup = callbackify(lookup, (value) => (utils.isArray(value) ? value : [value]));\n        // hotfix to support opt.all option which is required for node 20.x\n        lookup = (hostname, opt, cb) => {\n          _lookup(hostname, opt, (err, arg0, arg1) => {\n            if (err) {\n              return cb(err);\n            }\n\n            const addresses = utils.isArray(arg0)\n              ? arg0.map((addr) => buildAddressEntry(addr))\n              : [buildAddressEntry(arg0, arg1)];\n\n            opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n          });\n        };\n      }\n\n      const abortEmitter = new EventEmitter();\n\n      function abort(reason) {\n        try {\n          abortEmitter.emit(\n            'abort',\n            !reason || reason.type ? new CanceledError(null, config, req) : reason\n          );\n        } catch (err) {\n          console.warn('emit error', err);\n        }\n      }\n\n      abortEmitter.once('abort', reject);\n\n      const onFinished = () => {\n        if (config.cancelToken) {\n          config.cancelToken.unsubscribe(abort);\n        }\n\n        if (config.signal) {\n          config.signal.removeEventListener('abort', abort);\n        }\n\n        abortEmitter.removeAllListeners();\n      };\n\n      if (config.cancelToken || config.signal) {\n        config.cancelToken && config.cancelToken.subscribe(abort);\n        if (config.signal) {\n          config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n        }\n      }\n\n      onDone((response, isRejected) => {\n        isDone = true;\n\n        if (isRejected) {\n          rejected = true;\n          onFinished();\n          return;\n        }\n\n        const { data } = response;\n\n        if (data instanceof stream.Readable || data instanceof stream.Duplex) {\n          const offListeners = stream.finished(data, () => {\n            offListeners();\n            onFinished();\n          });\n        } else {\n          onFinished();\n        }\n      });\n\n      // Parse url\n      const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n      const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined);\n      const protocol = parsed.protocol || supportedProtocols[0];\n\n      if (protocol === 'data:') {\n        // Apply the same semantics as HTTP: only enforce if a finite, non-negative cap is set.\n        if (config.maxContentLength > -1) {\n          // Use the exact string passed to fromDataURI (config.url); fall back to fullPath if needed.\n          const dataUrl = String(config.url || fullPath || '');\n          const estimated = estimateDataURLDecodedBytes(dataUrl);\n\n          if (estimated > config.maxContentLength) {\n            return reject(\n              new AxiosError(\n                'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n                AxiosError.ERR_BAD_RESPONSE,\n                config\n              )\n            );\n          }\n        }\n\n        let convertedData;\n\n        if (method !== 'GET') {\n          return settle(resolve, reject, {\n            status: 405,\n            statusText: 'method not allowed',\n            headers: {},\n            config,\n          });\n        }\n\n        try {\n          convertedData = fromDataURI(config.url, responseType === 'blob', {\n            Blob: config.env && config.env.Blob,\n          });\n        } catch (err) {\n          throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n        }\n\n        if (responseType === 'text') {\n          convertedData = convertedData.toString(responseEncoding);\n\n          if (!responseEncoding || responseEncoding === 'utf8') {\n            convertedData = utils.stripBOM(convertedData);\n          }\n        } else if (responseType === 'stream') {\n          convertedData = stream.Readable.from(convertedData);\n        }\n\n        return settle(resolve, reject, {\n          data: convertedData,\n          status: 200,\n          statusText: 'OK',\n          headers: new AxiosHeaders(),\n          config,\n        });\n      }\n\n      if (supportedProtocols.indexOf(protocol) === -1) {\n        return reject(\n          new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_BAD_REQUEST, config)\n        );\n      }\n\n      const headers = AxiosHeaders.from(config.headers).normalize();\n\n      // Set User-Agent (required by some servers)\n      // See https://github.com/axios/axios/issues/69\n      // User-Agent is specified; handle case where no UA header is desired\n      // Only set header if it hasn't been set in config\n      headers.set('User-Agent', 'axios/' + VERSION, false);\n\n      const { onUploadProgress, onDownloadProgress } = config;\n      const maxRate = config.maxRate;\n      let maxUploadRate = undefined;\n      let maxDownloadRate = undefined;\n\n      // support for spec compliant FormData objects\n      if (utils.isSpecCompliantForm(data)) {\n        const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n        data = formDataToStream(\n          data,\n          (formHeaders) => {\n            headers.set(formHeaders);\n          },\n          {\n            tag: `axios-${VERSION}-boundary`,\n            boundary: (userBoundary && userBoundary[1]) || undefined,\n          }\n        );\n        // support for https://www.npmjs.com/package/form-data api\n      } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n        headers.set(data.getHeaders());\n\n        if (!headers.hasContentLength()) {\n          try {\n            const knownLength = await util.promisify(data.getLength).call(data);\n            Number.isFinite(knownLength) &&\n              knownLength >= 0 &&\n              headers.setContentLength(knownLength);\n            /*eslint no-empty:0*/\n          } catch (e) {}\n        }\n      } else if (utils.isBlob(data) || utils.isFile(data)) {\n        data.size && headers.setContentType(data.type || 'application/octet-stream');\n        headers.setContentLength(data.size || 0);\n        data = stream.Readable.from(readBlob(data));\n      } else if (data && !utils.isStream(data)) {\n        if (Buffer.isBuffer(data)) {\n          // Nothing to do...\n        } else if (utils.isArrayBuffer(data)) {\n          data = Buffer.from(new Uint8Array(data));\n        } else if (utils.isString(data)) {\n          data = Buffer.from(data, 'utf-8');\n        } else {\n          return reject(\n            new AxiosError(\n              'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n              AxiosError.ERR_BAD_REQUEST,\n              config\n            )\n          );\n        }\n\n        // Add Content-Length header if data exists\n        headers.setContentLength(data.length, false);\n\n        if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n          return reject(\n            new AxiosError(\n              'Request body larger than maxBodyLength limit',\n              AxiosError.ERR_BAD_REQUEST,\n              config\n            )\n          );\n        }\n      }\n\n      const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n      if (utils.isArray(maxRate)) {\n        maxUploadRate = maxRate[0];\n        maxDownloadRate = maxRate[1];\n      } else {\n        maxUploadRate = maxDownloadRate = maxRate;\n      }\n\n      if (data && (onUploadProgress || maxUploadRate)) {\n        if (!utils.isStream(data)) {\n          data = stream.Readable.from(data, { objectMode: false });\n        }\n\n        data = stream.pipeline(\n          [\n            data,\n            new AxiosTransformStream({\n              maxRate: utils.toFiniteNumber(maxUploadRate),\n            }),\n          ],\n          utils.noop\n        );\n\n        onUploadProgress &&\n          data.on(\n            'progress',\n            flushOnFinish(\n              data,\n              progressEventDecorator(\n                contentLength,\n                progressEventReducer(asyncDecorator(onUploadProgress), false, 3)\n              )\n            )\n          );\n      }\n\n      // HTTP basic authentication\n      let auth = undefined;\n      if (config.auth) {\n        const username = config.auth.username || '';\n        const password = config.auth.password || '';\n        auth = username + ':' + password;\n      }\n\n      if (!auth && parsed.username) {\n        const urlUsername = parsed.username;\n        const urlPassword = parsed.password;\n        auth = urlUsername + ':' + urlPassword;\n      }\n\n      auth && headers.delete('authorization');\n\n      let path;\n\n      try {\n        path = buildURL(\n          parsed.pathname + parsed.search,\n          config.params,\n          config.paramsSerializer\n        ).replace(/^\\?/, '');\n      } catch (err) {\n        const customErr = new Error(err.message);\n        customErr.config = config;\n        customErr.url = config.url;\n        customErr.exists = true;\n        return reject(customErr);\n      }\n\n      headers.set(\n        'Accept-Encoding',\n        'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''),\n        false\n      );\n\n      const options = {\n        path,\n        method: method,\n        headers: headers.toJSON(),\n        agents: { http: config.httpAgent, https: config.httpsAgent },\n        auth,\n        protocol,\n        family,\n        beforeRedirect: dispatchBeforeRedirect,\n        beforeRedirects: {},\n        http2Options,\n      };\n\n      // cacheable-lookup integration hotfix\n      !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n      if (config.socketPath) {\n        options.socketPath = config.socketPath;\n      } else {\n        options.hostname = parsed.hostname.startsWith('[')\n          ? parsed.hostname.slice(1, -1)\n          : parsed.hostname;\n        options.port = parsed.port;\n        setProxy(\n          options,\n          config.proxy,\n          protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path\n        );\n      }\n      let transport;\n      const isHttpsRequest = isHttps.test(options.protocol);\n      options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n\n      if (isHttp2) {\n        transport = http2Transport;\n      } else {\n        if (config.transport) {\n          transport = config.transport;\n        } else if (config.maxRedirects === 0) {\n          transport = isHttpsRequest ? https : http;\n        } else {\n          if (config.maxRedirects) {\n            options.maxRedirects = config.maxRedirects;\n          }\n          if (config.beforeRedirect) {\n            options.beforeRedirects.config = config.beforeRedirect;\n          }\n          transport = isHttpsRequest ? httpsFollow : httpFollow;\n        }\n      }\n\n      if (config.maxBodyLength > -1) {\n        options.maxBodyLength = config.maxBodyLength;\n      } else {\n        // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n        options.maxBodyLength = Infinity;\n      }\n\n      if (config.insecureHTTPParser) {\n        options.insecureHTTPParser = config.insecureHTTPParser;\n      }\n\n      // Create the request\n      req = transport.request(options, function handleResponse(res) {\n        if (req.destroyed) return;\n\n        const streams = [res];\n\n        const responseLength = utils.toFiniteNumber(res.headers['content-length']);\n\n        if (onDownloadProgress || maxDownloadRate) {\n          const transformStream = new AxiosTransformStream({\n            maxRate: utils.toFiniteNumber(maxDownloadRate),\n          });\n\n          onDownloadProgress &&\n            transformStream.on(\n              'progress',\n              flushOnFinish(\n                transformStream,\n                progressEventDecorator(\n                  responseLength,\n                  progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)\n                )\n              )\n            );\n\n          streams.push(transformStream);\n        }\n\n        // decompress the response body transparently if required\n        let responseStream = res;\n\n        // return the last request in case of redirects\n        const lastRequest = res.req || req;\n\n        // if decompress disabled we should not decompress\n        if (config.decompress !== false && res.headers['content-encoding']) {\n          // if no content, but headers still say that it is encoded,\n          // remove the header not confuse downstream operations\n          if (method === 'HEAD' || res.statusCode === 204) {\n            delete res.headers['content-encoding'];\n          }\n\n          switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n            /*eslint default-case:0*/\n            case 'gzip':\n            case 'x-gzip':\n            case 'compress':\n            case 'x-compress':\n              // add the unzipper to the body stream processing pipeline\n              streams.push(zlib.createUnzip(zlibOptions));\n\n              // remove the content-encoding in order to not confuse downstream operations\n              delete res.headers['content-encoding'];\n              break;\n            case 'deflate':\n              streams.push(new ZlibHeaderTransformStream());\n\n              // add the unzipper to the body stream processing pipeline\n              streams.push(zlib.createUnzip(zlibOptions));\n\n              // remove the content-encoding in order to not confuse downstream operations\n              delete res.headers['content-encoding'];\n              break;\n            case 'br':\n              if (isBrotliSupported) {\n                streams.push(zlib.createBrotliDecompress(brotliOptions));\n                delete res.headers['content-encoding'];\n              }\n          }\n        }\n\n        responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n        const response = {\n          status: res.statusCode,\n          statusText: res.statusMessage,\n          headers: new AxiosHeaders(res.headers),\n          config,\n          request: lastRequest,\n        };\n\n        if (responseType === 'stream') {\n          response.data = responseStream;\n          settle(resolve, reject, response);\n        } else {\n          const responseBuffer = [];\n          let totalResponseBytes = 0;\n\n          responseStream.on('data', function handleStreamData(chunk) {\n            responseBuffer.push(chunk);\n            totalResponseBytes += chunk.length;\n\n            // make sure the content length is not over the maxContentLength if specified\n            if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n              // stream.destroy() emit aborted event before calling reject() on Node.js v16\n              rejected = true;\n              responseStream.destroy();\n              abort(\n                new AxiosError(\n                  'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n                  AxiosError.ERR_BAD_RESPONSE,\n                  config,\n                  lastRequest\n                )\n              );\n            }\n          });\n\n          responseStream.on('aborted', function handlerStreamAborted() {\n            if (rejected) {\n              return;\n            }\n\n            const err = new AxiosError(\n              'stream has been aborted',\n              AxiosError.ERR_BAD_RESPONSE,\n              config,\n              lastRequest\n            );\n            responseStream.destroy(err);\n            reject(err);\n          });\n\n          responseStream.on('error', function handleStreamError(err) {\n            if (req.destroyed) return;\n            reject(AxiosError.from(err, null, config, lastRequest));\n          });\n\n          responseStream.on('end', function handleStreamEnd() {\n            try {\n              let responseData =\n                responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n              if (responseType !== 'arraybuffer') {\n                responseData = responseData.toString(responseEncoding);\n                if (!responseEncoding || responseEncoding === 'utf8') {\n                  responseData = utils.stripBOM(responseData);\n                }\n              }\n              response.data = responseData;\n            } catch (err) {\n              return reject(AxiosError.from(err, null, config, response.request, response));\n            }\n            settle(resolve, reject, response);\n          });\n        }\n\n        abortEmitter.once('abort', (err) => {\n          if (!responseStream.destroyed) {\n            responseStream.emit('error', err);\n            responseStream.destroy();\n          }\n        });\n      });\n\n      abortEmitter.once('abort', (err) => {\n        if (req.close) {\n          req.close();\n        } else {\n          req.destroy(err);\n        }\n      });\n\n      // Handle errors\n      req.on('error', function handleRequestError(err) {\n        reject(AxiosError.from(err, null, config, req));\n      });\n\n      // set tcp keep alive to prevent drop connection by peer\n      req.on('socket', function handleRequestSocket(socket) {\n        // default interval of sending ack packet is 1 minute\n        socket.setKeepAlive(true, 1000 * 60);\n      });\n\n      // Handle request timeout\n      if (config.timeout) {\n        // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n        const timeout = parseInt(config.timeout, 10);\n\n        if (Number.isNaN(timeout)) {\n          abort(\n            new AxiosError(\n              'error trying to parse `config.timeout` to int',\n              AxiosError.ERR_BAD_OPTION_VALUE,\n              config,\n              req\n            )\n          );\n\n          return;\n        }\n\n        // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n        // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n        // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n        // And then these socket which be hang up will devouring CPU little by little.\n        // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n        req.setTimeout(timeout, function handleRequestTimeout() {\n          if (isDone) return;\n          let timeoutErrorMessage = config.timeout\n            ? 'timeout of ' + config.timeout + 'ms exceeded'\n            : 'timeout exceeded';\n          const transitional = config.transitional || transitionalDefaults;\n          if (config.timeoutErrorMessage) {\n            timeoutErrorMessage = config.timeoutErrorMessage;\n          }\n          abort(\n            new AxiosError(\n              timeoutErrorMessage,\n              transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n              config,\n              req\n            )\n          );\n        });\n      } else {\n        // explicitly reset the socket timeout value for a possible `keep-alive` request\n        req.setTimeout(0);\n      }\n\n      // Send the request\n      if (utils.isStream(data)) {\n        let ended = false;\n        let errored = false;\n\n        data.on('end', () => {\n          ended = true;\n        });\n\n        data.once('error', (err) => {\n          errored = true;\n          req.destroy(err);\n        });\n\n        data.on('close', () => {\n          if (!ended && !errored) {\n            abort(new CanceledError('Request stream has been aborted', config, req));\n          }\n        });\n\n        data.pipe(req);\n      } else {\n        data && req.write(data);\n        req.end();\n      }\n    });\n  };\n\nexport const __setProxy = setProxy;\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? ((origin, isMSIE) => (url) => {\n      url = new URL(url, platform.origin);\n\n      return (\n        origin.protocol === url.protocol &&\n        origin.host === url.host &&\n        (isMSIE || origin.port === url.port)\n      );\n    })(\n      new URL(platform.origin),\n      platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n    )\n  : () => true;\n", "import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? // Standard browser envs support document.cookie\n    {\n      write(name, value, expires, path, domain, secure, sameSite) {\n        if (typeof document === 'undefined') return;\n\n        const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n        if (utils.isNumber(expires)) {\n          cookie.push(`expires=${new Date(expires).toUTCString()}`);\n        }\n        if (utils.isString(path)) {\n          cookie.push(`path=${path}`);\n        }\n        if (utils.isString(domain)) {\n          cookie.push(`domain=${domain}`);\n        }\n        if (secure === true) {\n          cookie.push('secure');\n        }\n        if (utils.isString(sameSite)) {\n          cookie.push(`SameSite=${sameSite}`);\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read(name) {\n        if (typeof document === 'undefined') return null;\n        const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n        return match ? decodeURIComponent(match[1]) : null;\n      },\n\n      remove(name) {\n        this.write(name, '', Date.now() - 86400000, '/');\n      },\n    }\n  : // Non-standard browser env (web workers, react-native) lack needed support.\n    {\n      write() {},\n      read() {\n        return null;\n      },\n      remove() {},\n    };\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst headersToObject = (thing) => (thing instanceof AxiosHeaders ? { ...thing } : thing);\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({ caseless }, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) =>\n      mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n  };\n\n  utils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n    if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;\n    const merge = utils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport isURLSameOrigin from './isURLSameOrigin.js';\nimport cookies from './cookies.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport mergeConfig from '../core/mergeConfig.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport buildURL from './buildURL.js';\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(\n    buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls),\n    config.params,\n    config.paramsSerializer\n  );\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set(\n      'Authorization',\n      'Basic ' +\n        btoa(\n          (auth.username || '') +\n            ':' +\n            (auth.password ? unescape(encodeURIComponent(auth.password)) : '')\n        )\n    );\n  }\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // browser handles it\n    } else if (utils.isFunction(data.getHeaders)) {\n      // Node.js FormData (like form-data package)\n      const formHeaders = data.getHeaders();\n      // Only set safe headers to avoid overwriting security headers\n      const allowedHeaders = ['content-type', 'content-length'];\n      Object.entries(formHeaders).forEach(([key, val]) => {\n        if (allowedHeaders.includes(key.toLowerCase())) {\n          headers.set(key, val);\n        }\n      });\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n};\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport { progressEventReducer } from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported &&\n  function (config) {\n    return new Promise(function dispatchXhrRequest(resolve, reject) {\n      const _config = resolveConfig(config);\n      let requestData = _config.data;\n      const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n      let { responseType, onUploadProgress, onDownloadProgress } = _config;\n      let onCanceled;\n      let uploadThrottled, downloadThrottled;\n      let flushUpload, flushDownload;\n\n      function done() {\n        flushUpload && flushUpload(); // flush events\n        flushDownload && flushDownload(); // flush events\n\n        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n        _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n      }\n\n      let request = new XMLHttpRequest();\n\n      request.open(_config.method.toUpperCase(), _config.url, true);\n\n      // Set the request timeout in MS\n      request.timeout = _config.timeout;\n\n      function onloadend() {\n        if (!request) {\n          return;\n        }\n        // Prepare the response\n        const responseHeaders = AxiosHeaders.from(\n          'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n        );\n        const responseData =\n          !responseType || responseType === 'text' || responseType === 'json'\n            ? request.responseText\n            : request.response;\n        const response = {\n          data: responseData,\n          status: request.status,\n          statusText: request.statusText,\n          headers: responseHeaders,\n          config,\n          request,\n        };\n\n        settle(\n          function _resolve(value) {\n            resolve(value);\n            done();\n          },\n          function _reject(err) {\n            reject(err);\n            done();\n          },\n          response\n        );\n\n        // Clean up request\n        request = null;\n      }\n\n      if ('onloadend' in request) {\n        // Use onloadend if available\n        request.onloadend = onloadend;\n      } else {\n        // Listen for ready state to emulate onloadend\n        request.onreadystatechange = function handleLoad() {\n          if (!request || request.readyState !== 4) {\n            return;\n          }\n\n          // The request errored out and we didn't get a response, this will be\n          // handled by onerror instead\n          // With one exception: request that using file: protocol, most browsers\n          // will return status as 0 even though it's a successful request\n          if (\n            request.status === 0 &&\n            !(request.responseURL && request.responseURL.indexOf('file:') === 0)\n          ) {\n            return;\n          }\n          // readystate handler is calling before onerror or ontimeout handlers,\n          // so we should call onloadend on the next 'tick'\n          setTimeout(onloadend);\n        };\n      }\n\n      // Handle browser request cancellation (as opposed to a manual cancellation)\n      request.onabort = function handleAbort() {\n        if (!request) {\n          return;\n        }\n\n        reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n        // Clean up request\n        request = null;\n      };\n\n      // Handle low level network errors\n      request.onerror = function handleError(event) {\n        // Browsers deliver a ProgressEvent in XHR onerror\n        // (message may be empty; when present, surface it)\n        // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n        const msg = event && event.message ? event.message : 'Network Error';\n        const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n        // attach the underlying event for consumers who want details\n        err.event = event || null;\n        reject(err);\n        request = null;\n      };\n\n      // Handle timeout\n      request.ontimeout = function handleTimeout() {\n        let timeoutErrorMessage = _config.timeout\n          ? 'timeout of ' + _config.timeout + 'ms exceeded'\n          : 'timeout exceeded';\n        const transitional = _config.transitional || transitionalDefaults;\n        if (_config.timeoutErrorMessage) {\n          timeoutErrorMessage = _config.timeoutErrorMessage;\n        }\n        reject(\n          new AxiosError(\n            timeoutErrorMessage,\n            transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n            config,\n            request\n          )\n        );\n\n        // Clean up request\n        request = null;\n      };\n\n      // Remove Content-Type if data is undefined\n      requestData === undefined && requestHeaders.setContentType(null);\n\n      // Add headers to the request\n      if ('setRequestHeader' in request) {\n        utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n          request.setRequestHeader(key, val);\n        });\n      }\n\n      // Add withCredentials to request if needed\n      if (!utils.isUndefined(_config.withCredentials)) {\n        request.withCredentials = !!_config.withCredentials;\n      }\n\n      // Add responseType to request if needed\n      if (responseType && responseType !== 'json') {\n        request.responseType = _config.responseType;\n      }\n\n      // Handle progress if needed\n      if (onDownloadProgress) {\n        [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);\n        request.addEventListener('progress', downloadThrottled);\n      }\n\n      // Not all browsers support upload events\n      if (onUploadProgress && request.upload) {\n        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n\n        request.upload.addEventListener('progress', uploadThrottled);\n\n        request.upload.addEventListener('loadend', flushUpload);\n      }\n\n      if (_config.cancelToken || _config.signal) {\n        // Handle cancellation\n        // eslint-disable-next-line func-names\n        onCanceled = (cancel) => {\n          if (!request) {\n            return;\n          }\n          reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n          request.abort();\n          request = null;\n        };\n\n        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n        if (_config.signal) {\n          _config.signal.aborted\n            ? onCanceled()\n            : _config.signal.addEventListener('abort', onCanceled);\n        }\n      }\n\n      const protocol = parseProtocol(_config.url);\n\n      if (protocol && platform.protocols.indexOf(protocol) === -1) {\n        reject(\n          new AxiosError(\n            'Unsupported protocol ' + protocol + ':',\n            AxiosError.ERR_BAD_REQUEST,\n            config\n          )\n        );\n        return;\n      }\n\n      // Send the request\n      request.send(requestData || null);\n    });\n  };\n", "import CanceledError from '../cancel/CanceledError.js';\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const { length } = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(\n          err instanceof AxiosError\n            ? err\n            : new CanceledError(err instanceof Error ? err.message : err)\n        );\n      }\n    };\n\n    let timer =\n      timeout &&\n      setTimeout(() => {\n        timer = null;\n        onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT));\n      }, timeout);\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach((signal) => {\n          signal.unsubscribe\n            ? signal.unsubscribe(onabort)\n            : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    };\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const { signal } = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n};\n\nexport default composeSignals;\n", "export const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n};\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n};\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const { done, value } = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n};\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  };\n\n  return new ReadableStream(\n    {\n      async pull(controller) {\n        try {\n          const { done, value } = await iterator.next();\n\n          if (done) {\n            _onFinish();\n            controller.close();\n            return;\n          }\n\n          let len = value.byteLength;\n          if (onProgress) {\n            let loadedBytes = (bytes += len);\n            onProgress(loadedBytes);\n          }\n          controller.enqueue(new Uint8Array(value));\n        } catch (err) {\n          _onFinish(err);\n          throw err;\n        }\n      },\n      cancel(reason) {\n        _onFinish(reason);\n        return iterator.return();\n      },\n    },\n    {\n      highWaterMark: 2,\n    }\n  );\n};\n", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport composeSignals from '../helpers/composeSignals.js';\nimport { trackStream } from '../helpers/trackStream.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport settle from '../core/settle.js';\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst { isFunction } = utils;\n\nconst globalFetchAPI = (({ Request, Response }) => ({\n  Request,\n  Response,\n}))(utils.global);\n\nconst { ReadableStream, TextEncoder } = utils.global;\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false;\n  }\n};\n\nconst factory = (env) => {\n  env = utils.merge.call(\n    {\n      skipUndefined: true,\n    },\n    globalFetchAPI,\n    env\n  );\n\n  const { fetch: envFetch, Request, Response } = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText =\n    isFetchSupported &&\n    (typeof TextEncoder === 'function'\n      ? (\n          (encoder) => (str) =>\n            encoder.encode(str)\n        )(new TextEncoder())\n      : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n\n  const supportsRequestStream =\n    isRequestSupported &&\n    isReadableStreamSupported &&\n    test(() => {\n      let duplexAccessed = false;\n\n      const body = new ReadableStream();\n\n      const hasContentType = new Request(platform.origin, {\n        body,\n        method: 'POST',\n        get duplex() {\n          duplexAccessed = true;\n          return 'half';\n        },\n      }).headers.has('Content-Type');\n\n      body.cancel();\n\n      return duplexAccessed && !hasContentType;\n    });\n\n  const supportsResponseStream =\n    isResponseSupported &&\n    isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body),\n  };\n\n  isFetchSupported &&\n    (() => {\n      ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach((type) => {\n        !resolvers[type] &&\n          (resolvers[type] = (res, config) => {\n            let method = res && res[type];\n\n            if (method) {\n              return method.call(res);\n            }\n\n            throw new AxiosError(\n              `Response type '${type}' is not supported`,\n              AxiosError.ERR_NOT_SUPPORT,\n              config\n            );\n          });\n      });\n    })();\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  };\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  };\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions,\n    } = resolveConfig(config);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals(\n      [signal, cancelToken && cancelToken.toAbortSignal()],\n      timeout\n    );\n\n    let request = null;\n\n    const unsubscribe =\n      composedSignal &&\n      composedSignal.unsubscribe &&\n      (() => {\n        composedSignal.unsubscribe();\n      });\n\n    let requestContentLength;\n\n    try {\n      if (\n        onUploadProgress &&\n        supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head' &&\n        (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n      ) {\n        let _request = new Request(url, {\n          method: 'POST',\n          body: data,\n          duplex: 'half',\n        });\n\n        let contentTypeHeader;\n\n        if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n          headers.setContentType(contentTypeHeader);\n        }\n\n        if (_request.body) {\n          const [onProgress, flush] = progressEventDecorator(\n            requestContentLength,\n            progressEventReducer(asyncDecorator(onUploadProgress))\n          );\n\n          data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n        }\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;\n\n      const resolvedOptions = {\n        ...fetchOptions,\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: headers.normalize().toJSON(),\n        body: data,\n        duplex: 'half',\n        credentials: isCredentialsSupported ? withCredentials : undefined,\n      };\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported\n        ? _fetch(request, fetchOptions)\n        : _fetch(url, resolvedOptions));\n\n      const isStreamResponse =\n        supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach((prop) => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n        const [onProgress, flush] =\n          (onDownloadProgress &&\n            progressEventDecorator(\n              responseContentLength,\n              progressEventReducer(asyncDecorator(onDownloadProgress), true)\n            )) ||\n          [];\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](\n        response,\n        config\n      );\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request,\n        });\n      });\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        throw Object.assign(\n          new AxiosError(\n            'Network Error',\n            AxiosError.ERR_NETWORK,\n            config,\n            request,\n            err && err.response\n          ),\n          {\n            cause: err.cause || err,\n          }\n        );\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n    }\n  };\n};\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = (config && config.env) || {};\n  const { fetch, Request, Response } = env;\n  const seeds = [Request, Response, fetch];\n\n  let len = seeds.length,\n    i = len,\n    seed,\n    target,\n    map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, (target = i ? new Map() : factory(env)));\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from '../core/AxiosError.js';\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n *\n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  },\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', { value });\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', { value });\n  }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n *\n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n *\n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) =>\n  utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n *\n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n  adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter;\n\n  const rejectedReasons = {};\n\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n\n    adapter = nameOrAdapter;\n\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n      if (adapter === undefined) {\n        throw new AxiosError(`Unknown adapter '${id}'`);\n      }\n    }\n\n    if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n      break;\n    }\n\n    rejectedReasons[id || '#' + i] = adapter;\n  }\n\n  if (!adapter) {\n    const reasons = Object.entries(rejectedReasons).map(\n      ([id, state]) =>\n        `adapter ${id} ` +\n        (state === false ? 'is not supported by the environment' : 'is not available in the build')\n    );\n\n    let s = length\n      ? reasons.length > 1\n        ? 'since :\\n' + reasons.map(renderReason).join('\\n')\n        : ' ' + renderReason(reasons[0])\n      : 'as no adapter specified';\n\n    throw new AxiosError(\n      `There is no suitable adapter to dispatch the request ` + s,\n      'ERR_NOT_SUPPORT'\n    );\n  }\n\n  return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters,\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from '../adapters/adapters.js';\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(config, config.transformRequest);\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(\n    function onAdapterResolution(response) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      response.data = transformData.call(config, config.transformResponse, response);\n\n      response.headers = AxiosHeaders.from(response.headers);\n\n      return response;\n    },\n    function onAdapterRejection(reason) {\n      if (!isCancel(reason)) {\n        throwIfCancellationRequested(config);\n\n        // Transform response data\n        if (reason && reason.response) {\n          reason.response.data = transformData.call(\n            config,\n            config.transformResponse,\n            reason.response\n          );\n          reason.response.headers = AxiosHeaders.from(reason.response.headers);\n        }\n      }\n\n      return Promise.reject(reason);\n    }\n  );\n}\n", "'use strict';\n\nimport { VERSION } from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return (\n      '[Axios v' +\n      VERSION +\n      \"] Transitional option '\" +\n      opt +\n      \"'\" +\n      desc +\n      (message ? '. ' + message : '')\n    );\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError(\n          'option ' + opt + ' must be ' + result,\n          AxiosError.ERR_BAD_OPTION_VALUE\n        );\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager(),\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = (() => {\n          if (!dummy.stack) {\n            return '';\n          }\n\n          const firstNewlineIndex = dummy.stack.indexOf('\\n');\n\n          return firstNewlineIndex === -1 ? '' : dummy.stack.slice(firstNewlineIndex + 1);\n        })();\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack) {\n            const firstNewlineIndex = stack.indexOf('\\n');\n            const secondNewlineIndex =\n              firstNewlineIndex === -1 ? -1 : stack.indexOf('\\n', firstNewlineIndex + 1);\n            const stackWithoutTwoTopLines =\n              secondNewlineIndex === -1 ? '' : stack.slice(secondNewlineIndex + 1);\n\n            if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n              err.stack += '\\n' + stack;\n            }\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const { transitional, paramsSerializer, headers } = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(\n        transitional,\n        {\n          silentJSONParsing: validators.transitional(validators.boolean),\n          forcedJSONParsing: validators.transitional(validators.boolean),\n          clarifyTimeoutError: validators.transitional(validators.boolean),\n          legacyInterceptorReqResOrdering: validators.transitional(validators.boolean),\n        },\n        false\n      );\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer,\n        };\n      } else {\n        validator.assertOptions(\n          paramsSerializer,\n          {\n            encode: validators.function,\n            serialize: validators.function,\n          },\n          true\n        );\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(\n      config,\n      {\n        baseUrl: validators.spelling('baseURL'),\n        withXsrfToken: validators.spelling('withXSRFToken'),\n      },\n      true\n    );\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n\n    headers &&\n      utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], (method) => {\n        delete headers[method];\n      });\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      const transitional = config.transitional || transitionalDefaults;\n      const legacyInterceptorReqResOrdering =\n        transitional && transitional.legacyInterceptorReqResOrdering;\n\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function (url, config) {\n    return this.request(\n      mergeConfig(config || {}, {\n        method,\n        url,\n        data: (config || {}).data,\n      })\n    );\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          headers: isForm\n            ? {\n                'Content-Type': 'multipart/form-data',\n              }\n            : {},\n          url,\n          data,\n        })\n      );\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then((cancel) => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = (onfulfilled) => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise((resolve) => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel,\n    };\n  }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  const args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && payload.isAxiosError === true;\n}\n", "const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport { VERSION } from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from './core/AxiosHeaders.js';\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, { allOwnKeys: true });\n\n  // Copy context to instance\n  utils.extend(instance, context, null, { allOwnKeys: true });\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = (thing) => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios;\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n} = axios;\n\nexport {\n  axios as default,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum BlockRenderType {\r\n  Custom = 0, // custom rendering\r\n  BlockOneTexture = 1, // cobblestone is cobblestone\r\n  BlockLogSideTop = 2,\r\n  FrontBaseSideTop = 3,\r\n  DoorMaterialDoorUpperLower = 4, // e.g., door_acacia_lower, door_acacia_upper\r\n  SignMaterial = 5,\r\n  AnvilBaseTopDamaged = 6, // eg anvil has anvil_base, anvil_top_damaged_0, anvil_top_damaged_1, anvil_top_damaged_2\r\n  BlockSideTop = 7, // eg ancient_debris has ancient_debris_side and ancient_debris_top\r\n  StairsMaterial = 8, // stairs with a material\r\n  PressurePlateMaterial = 9, // pressure plate with a material\r\n  FenceGateMaterial = 10, // acacia_fence_gate => acacia_fence_gate\r\n  ButtonMaterial = 11, // acacia_button\r\n  WallSignMaterial = 12, // acacia wall sign\r\n  Stem = 13, // eg bamboo => bamboo_stem\r\n  BottomSideTopOpen = 14, // barrel => barrel_bottom, barrel_side, barrel_top, barrel_top_open\r\n  BedFeetHeadEndSideTop = 15, // bed => bed_feet_end, bed_feet_side, bed_feet_top\r\n  Honeyable = 16, // bee_nest => bee_nest_front, bee_nest_front_honey, bee_nest_side, bee_nest_end, bee_nest_top\r\n  PluralStages0to4 = 17, // beetroot => beetroots_stage_0, beetroots_stage_1, -> 4\r\n  BottomSideTop = 18, // bell => bell_bottom, bell_side, bell_top\r\n  Trapdoor = 19, // acacia_trapdoor\r\n  BaseTop = 20, // blackstone => blackstone, blackstone_top\r\n  DoubleSlabMaterial = 21, // blackstone_double_slab\r\n  SlabMaterial = 22, // blackstone_slab\r\n  WallMaterial = 23, // blackstone_wall\r\n  BlockSideTopFrontOffOn = 24, // blast_furnace => blast_furnace_front_off, blast_furnace_front_on, blast_furnace_side, blast_furnace_top\r\n  RemoveBlock = 25, // border_block => border\r\n  BaseBase = 26, // brewing_stand => brewing_stand, brewing_stand_base\r\n  TgaBottomSideTop = 27, // cactus => cactus_bottom.tga, cactus_side.tga, cactus_top.tga\r\n  ColumnDownInnerOuterUp = 28, // bubble_column\r\n  MaterialOneTexture = 29, // brown_mushroom => mushroom_brown\r\n  RemoveBlockMaterialOneTexture = 30, // brown_mushroom => mushroom_brown\r\n  BottomInnerSideTop = 31, // cake => cake_bottom, cake_inner, cake_side, cake_top\r\n  BackFrontSideTop = 32, // camera => camera_back, camera_front, camera_side, camera_top\r\n  BottomInnerSideTopWater = 33, // cauldron\r\n  NumberedSide = 34, // cartography_table => cartography_table_side1, cartography_table_side2, cartography_table_side3,cartography_table_top\r\n  FrontSideTop = 35,\r\n  BaseDead = 36, // chorus_flower\r\n  Stages0to2 = 37, // cocoa\r\n  CustomBase = 38, // command_block\r\n  Water = 39, // water\r\n}\r\n", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define(\"exifr\",[\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).exifr={})}(this,(function(e){\"use strict\";var t=\"undefined\"!=typeof self?self:global;const i=\"undefined\"!=typeof navigator,n=i&&\"undefined\"==typeof HTMLImageElement,s=!(\"undefined\"==typeof global||\"undefined\"==typeof process||!process.versions||!process.versions.node),r=t.Buffer,a=t.BigInt,o=!!r,l=e=>e;function h(e,t=l){if(s)try{return\"function\"==typeof require?Promise.resolve(t(require(e))):import(/* webpackIgnore: true */ e).then(t)}catch(t){console.warn(`Couldn't load ${e}`)}}let u=t.fetch;const c=e=>u=e;if(!t.fetch){const e=h(\"http\",(e=>e)),t=h(\"https\",(e=>e)),i=(n,{headers:s}={})=>new Promise((async(r,a)=>{let{port:o,hostname:l,pathname:h,protocol:u,search:c}=new URL(n);const f={method:\"GET\",hostname:l,path:encodeURI(h)+c,headers:s};\"\"!==o&&(f.port=Number(o));const d=(\"https:\"===u?await t:await e).request(f,(e=>{if(301===e.statusCode||302===e.statusCode){let t=new URL(e.headers.location,n).toString();return i(t,{headers:s}).then(r).catch(a)}r({status:e.statusCode,arrayBuffer:()=>new Promise((t=>{let i=[];e.on(\"data\",(e=>i.push(e))),e.on(\"end\",(()=>t(Buffer.concat(i))))}))})}));d.on(\"error\",a),d.end()}));c(i)}function f(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}const d=e=>g(e)?void 0:e,p=e=>void 0!==e;function g(e){return void 0===e||(e instanceof Map?0===e.size:0===Object.values(e).filter(p).length)}function m(e){let t=new Error(e);throw delete t.stack,t}function S(e){return\"\"===(e=function(e){for(;e.endsWith(\"\\0\");)e=e.slice(0,-1);return e}(e).trim())?void 0:e}function C(e){let t=function(e){let t=0;return e.ifd0.enabled&&(t+=1024),e.exif.enabled&&(t+=2048),e.makerNote&&(t+=2048),e.userComment&&(t+=1024),e.gps.enabled&&(t+=512),e.interop.enabled&&(t+=100),e.ifd1.enabled&&(t+=1024),t+2048}(e);return e.jfif.enabled&&(t+=50),e.xmp.enabled&&(t+=2e4),e.iptc.enabled&&(t+=14e3),e.icc.enabled&&(t+=6e3),t}const y=e=>String.fromCharCode.apply(null,e),b=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):void 0;function P(e){return b?b.decode(e):o?Buffer.from(e).toString(\"utf8\"):decodeURIComponent(escape(y(e)))}class I{static from(e,t){return e instanceof this&&e.le===t?e:new I(e,void 0,void 0,t)}constructor(e,t=0,i,n){if(\"boolean\"==typeof n&&(this.le=n),Array.isArray(e)&&(e=new Uint8Array(e)),0===e)this.byteOffset=0,this.byteLength=0;else if(e instanceof ArrayBuffer){void 0===i&&(i=e.byteLength-t);let n=new DataView(e,t,i);this._swapDataView(n)}else if(e instanceof Uint8Array||e instanceof DataView||e instanceof I){void 0===i&&(i=e.byteLength-t),(t+=e.byteOffset)+i>e.byteOffset+e.byteLength&&m(\"Creating view outside of available memory in ArrayBuffer\");let n=new DataView(e.buffer,t,i);this._swapDataView(n)}else if(\"number\"==typeof e){let t=new DataView(new ArrayBuffer(e));this._swapDataView(t)}else m(\"Invalid input argument for BufferView: \"+e)}_swapArrayBuffer(e){this._swapDataView(new DataView(e))}_swapBuffer(e){this._swapDataView(new DataView(e.buffer,e.byteOffset,e.byteLength))}_swapDataView(e){this.dataView=e,this.buffer=e.buffer,this.byteOffset=e.byteOffset,this.byteLength=e.byteLength}_lengthToEnd(e){return this.byteLength-e}set(e,t,i=I){return e instanceof DataView||e instanceof I?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||m(\"BufferView.set(): Invalid data argument.\"),this.toUint8().set(e,t),new i(this,t,e.byteLength)}subarray(e,t){return t=t||this._lengthToEnd(e),new I(this,e,t)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(e,t){return new Uint8Array(this.buffer,this.byteOffset+e,t)}getString(e=0,t=this.byteLength){return P(this.getUint8Array(e,t))}getLatin1String(e=0,t=this.byteLength){let i=this.getUint8Array(e,t);return y(i)}getUnicodeString(e=0,t=this.byteLength){const i=[];for(let n=0;n<t&&e+n<this.byteLength;n+=2)i.push(this.getUint16(e+n));return y(i)}getInt8(e){return this.dataView.getInt8(e)}getUint8(e){return this.dataView.getUint8(e)}getInt16(e,t=this.le){return this.dataView.getInt16(e,t)}getInt32(e,t=this.le){return this.dataView.getInt32(e,t)}getUint16(e,t=this.le){return this.dataView.getUint16(e,t)}getUint32(e,t=this.le){return this.dataView.getUint32(e,t)}getFloat32(e,t=this.le){return this.dataView.getFloat32(e,t)}getFloat64(e,t=this.le){return this.dataView.getFloat64(e,t)}getFloat(e,t=this.le){return this.dataView.getFloat32(e,t)}getDouble(e,t=this.le){return this.dataView.getFloat64(e,t)}getUintBytes(e,t,i){switch(t){case 1:return this.getUint8(e,i);case 2:return this.getUint16(e,i);case 4:return this.getUint32(e,i);case 8:return this.getUint64&&this.getUint64(e,i)}}getUint(e,t,i){switch(t){case 8:return this.getUint8(e,i);case 16:return this.getUint16(e,i);case 32:return this.getUint32(e,i);case 64:return this.getUint64&&this.getUint64(e,i)}}toString(e){return this.dataView.toString(e,this.constructor.name)}ensureChunk(){}}function k(e,t){m(`${e} '${t}' was not loaded, try using full build of exifr.`)}class w extends Map{constructor(e){super(),this.kind=e}get(e,t){return this.has(e)||k(this.kind,e),t&&(e in t||function(e,t){m(`Unknown ${e} '${t}'.`)}(this.kind,e),t[e].enabled||k(this.kind,e)),super.get(e)}keyList(){return Array.from(this.keys())}}var T=new w(\"file parser\"),A=new w(\"segment parser\"),D=new w(\"file reader\");const O=\"Invalid input argument\";function x(e,t){return\"string\"==typeof e?v(e,t):i&&!n&&e instanceof HTMLImageElement?v(e.src,t):e instanceof Uint8Array||e instanceof ArrayBuffer||e instanceof DataView?new I(e):i&&e instanceof Blob?M(e,t,\"blob\",U):void m(O)}function v(e,t){return(n=e).startsWith(\"data:\")||n.length>1e4?R(e,t,\"base64\"):s&&e.includes(\"://\")?M(e,t,\"url\",L):s?R(e,t,\"fs\"):i?M(e,t,\"url\",L):void m(O);var n}async function M(e,t,i,n){return D.has(i)?R(e,t,i):n?async function(e,t){let i=await t(e);return new I(i)}(e,n):void m(`Parser ${i} is not loaded`)}async function R(e,t,i){let n=new(D.get(i))(e,t);return await n.read(),n}const L=e=>u(e).then((e=>e.arrayBuffer())),U=e=>new Promise(((t,i)=>{let n=new FileReader;n.onloadend=()=>t(n.result||new ArrayBuffer),n.onerror=i,n.readAsArrayBuffer(e)}));class F extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function B(e,t,i){let n=new F;for(let[e,t]of i)n.set(e,t);if(Array.isArray(t))for(let i of t)e.set(i,n);else e.set(t,n);return n}function E(e,t,i){let n,s=e.get(t);for(n of i)s.set(n[0],n[1])}const N=new Map,G=new Map,V=new Map,z=37500,H=37510,j=700,W=33723,K=34675,X=34665,_=34853,Y=40965,$=[\"chunked\",\"firstChunkSize\",\"firstChunkSizeNode\",\"firstChunkSizeBrowser\",\"chunkSize\",\"chunkLimit\"],J=[\"jfif\",\"xmp\",\"icc\",\"iptc\",\"ihdr\"],q=[\"tiff\",...J],Q=[\"ifd0\",\"ifd1\",\"exif\",\"gps\",\"interop\"],Z=[...q,...Q],ee=[\"makerNote\",\"userComment\"],te=[\"translateKeys\",\"translateValues\",\"reviveValues\",\"multiSegment\"],ie=[...te,\"sanitize\",\"mergeOutput\",\"silentErrors\"];class ne{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class se extends ne{get needed(){return this.enabled||this.deps.size>0}constructor(e,t,i,n){if(super(),f(this,\"enabled\",!1),f(this,\"skip\",new Set),f(this,\"pick\",new Set),f(this,\"deps\",new Set),f(this,\"translateKeys\",!1),f(this,\"translateValues\",!1),f(this,\"reviveValues\",!1),this.key=e,this.enabled=t,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=Q.includes(e),this.canBeFiltered&&(this.dict=N.get(e)),void 0!==i)if(Array.isArray(i))this.parse=this.enabled=!0,this.canBeFiltered&&i.length>0&&this.translateTagSet(i,this.pick);else if(\"object\"==typeof i){if(this.enabled=!0,this.parse=!1!==i.parse,this.canBeFiltered){let{pick:e,skip:t}=i;e&&e.length>0&&this.translateTagSet(e,this.pick),t&&t.length>0&&this.translateTagSet(t,this.skip)}this.applyInheritables(i)}else!0===i||!1===i?this.parse=this.enabled=i:m(`Invalid options argument: ${i}`)}applyInheritables(e){let t,i;for(t of te)i=e[t],void 0!==i&&(this[t]=i)}translateTagSet(e,t){if(this.dict){let i,n,{tagKeys:s,tagValues:r}=this.dict;for(i of e)\"string\"==typeof i?(n=r.indexOf(i),-1===n&&(n=s.indexOf(Number(i))),-1!==n&&t.add(Number(s[n]))):t.add(i)}else for(let i of e)t.add(i)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,ue(this.pick,this.deps)):this.enabled&&this.pick.size>0&&ue(this.pick,this.deps)}}var re={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},ae=new Map;class oe extends ne{static useCached(e){let t=ae.get(e);return void 0!==t||(t=new this(e),ae.set(e,t)),t}constructor(e){super(),!0===e?this.setupFromTrue():void 0===e?this.setupFromUndefined():Array.isArray(e)?this.setupFromArray(e):\"object\"==typeof e?this.setupFromObject(e):m(`Invalid options argument ${e}`),void 0===this.firstChunkSize&&(this.firstChunkSize=i?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let e;for(e of $)this[e]=re[e];for(e of ie)this[e]=re[e];for(e of ee)this[e]=re[e];for(e of Z)this[e]=new se(e,re[e],void 0,this)}setupFromTrue(){let e;for(e of $)this[e]=re[e];for(e of ie)this[e]=re[e];for(e of ee)this[e]=!0;for(e of Z)this[e]=new se(e,!0,void 0,this)}setupFromArray(e){let t;for(t of $)this[t]=re[t];for(t of ie)this[t]=re[t];for(t of ee)this[t]=re[t];for(t of Z)this[t]=new se(t,!1,void 0,this);this.setupGlobalFilters(e,void 0,Q)}setupFromObject(e){let t;for(t of(Q.ifd0=Q.ifd0||Q.image,Q.ifd1=Q.ifd1||Q.thumbnail,Object.assign(this,e),$))this[t]=he(e[t],re[t]);for(t of ie)this[t]=he(e[t],re[t]);for(t of ee)this[t]=he(e[t],re[t]);for(t of q)this[t]=new se(t,re[t],e[t],this);for(t of Q)this[t]=new se(t,re[t],e[t],this.tiff);this.setupGlobalFilters(e.pick,e.skip,Q,Z),!0===e.tiff?this.batchEnableWithBool(Q,!0):!1===e.tiff?this.batchEnableWithUserValue(Q,e):Array.isArray(e.tiff)?this.setupGlobalFilters(e.tiff,void 0,Q):\"object\"==typeof e.tiff&&this.setupGlobalFilters(e.tiff.pick,e.tiff.skip,Q)}batchEnableWithBool(e,t){for(let i of e)this[i].enabled=t}batchEnableWithUserValue(e,t){for(let i of e){let e=t[i];this[i].enabled=!1!==e&&void 0!==e}}setupGlobalFilters(e,t,i,n=i){if(e&&e.length){for(let e of n)this[e].enabled=!1;let t=le(e,i);for(let[e,i]of t)ue(this[e].pick,i),this[e].enabled=!0}else if(t&&t.length){let e=le(t,i);for(let[t,i]of e)ue(this[t].skip,i)}}filterNestedSegmentTags(){let{ifd0:e,exif:t,xmp:i,iptc:n,icc:s}=this;this.makerNote?t.deps.add(z):t.skip.add(z),this.userComment?t.deps.add(H):t.skip.add(H),i.enabled||e.skip.add(j),n.enabled||e.skip.add(W),s.enabled||e.skip.add(K)}traverseTiffDependencyTree(){let{ifd0:e,exif:t,gps:i,interop:n}=this;n.needed&&(t.deps.add(Y),e.deps.add(Y)),t.needed&&e.deps.add(X),i.needed&&e.deps.add(_),this.tiff.enabled=Q.some((e=>!0===this[e].enabled))||this.makerNote||this.userComment;for(let e of Q)this[e].finalizeFilters()}get onlyTiff(){return!J.map((e=>this[e].enabled)).some((e=>!0===e))&&this.tiff.enabled}checkLoadedPlugins(){for(let e of q)this[e].enabled&&!A.has(e)&&k(\"segment parser\",e)}}function le(e,t){let i,n,s,r,a=[];for(s of t){for(r of(i=N.get(s),n=[],i))(e.includes(r[0])||e.includes(r[1]))&&n.push(r[0]);n.length&&a.push([s,n])}return a}function he(e,t){return void 0!==e?e:void 0!==t?t:void 0}function ue(e,t){for(let i of t)e.add(i)}f(oe,\"default\",re);class ce{constructor(e){f(this,\"parsers\",{}),f(this,\"output\",{}),f(this,\"errors\",[]),f(this,\"pushToErrors\",(e=>this.errors.push(e))),this.options=oe.useCached(e)}async read(e){this.file=await x(e,this.options)}setup(){if(this.fileParser)return;let{file:e}=this,t=e.getUint16(0);for(let[i,n]of T)if(n.canHandle(e,t))return this.fileParser=new n(this.options,this.file,this.parsers),e[i]=!0;this.file.close&&this.file.close(),m(\"Unknown file format\")}async parse(){let{output:e,errors:t}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),t.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&t.length>0&&(e.errors=t),d(e)}async executeParsers(){let{output:e}=this;await this.fileParser.parse();let t=Object.values(this.parsers).map((async t=>{let i=await t.parse();t.assignToOutput(e,i)}));this.options.silentErrors&&(t=t.map((e=>e.catch(this.pushToErrors)))),await Promise.all(t)}async extractThumbnail(){this.setup();let{options:e,file:t}=this,i=A.get(\"tiff\",e);var n;if(t.tiff?n={start:0,type:\"tiff\"}:t.jpeg&&(n=await this.fileParser.getOrFindSegment(\"tiff\")),void 0===n)return;let s=await this.fileParser.ensureSegmentChunk(n),r=this.parsers.tiff=new i(s,e,t),a=await r.extractThumbnail();return t.close&&t.close(),a}}async function fe(e,t){let i=new ce(t);return await i.read(e),i.parse()}var de=Object.freeze({__proto__:null,parse:fe,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe});class pe{constructor(e,t,i){f(this,\"errors\",[]),f(this,\"ensureSegmentChunk\",(async e=>{let t=e.start,i=e.size||65536;if(this.file.chunked)if(this.file.available(t,i))e.chunk=this.file.subarray(t,i);else try{e.chunk=await this.file.readChunk(t,i)}catch(t){m(`Couldn't read segment: ${JSON.stringify(e)}. ${t.message}`)}else this.file.byteLength>t+i?e.chunk=this.file.subarray(t,i):void 0===e.size?e.chunk=this.file.subarray(t):m(\"Segment unreachable: \"+JSON.stringify(e));return e.chunk})),this.extendOptions&&this.extendOptions(e),this.options=e,this.file=t,this.parsers=i}injectSegment(e,t){this.options[e].enabled&&this.createParser(e,t)}createParser(e,t){let i=new(A.get(e))(t,this.options,this.file);return this.parsers[e]=i}createParsers(e){for(let t of e){let{type:e,chunk:i}=t,n=this.options[e];if(n&&n.enabled){let t=this.parsers[e];t&&t.append||t||this.createParser(e,i)}}}async readSegments(e){let t=e.map(this.ensureSegmentChunk);await Promise.all(t)}}class ge{static findPosition(e,t){let i=e.getUint16(t+2)+2,n=\"function\"==typeof this.headerLength?this.headerLength(e,t,i):this.headerLength,s=t+n,r=i-n;return{offset:t,length:i,headerLength:n,start:s,size:r,end:s+r}}static parse(e,t={}){return new this(e,new oe({[this.type]:t}),e).parse()}normalizeInput(e){return e instanceof I?e:new I(e)}constructor(e,t={},i){f(this,\"errors\",[]),f(this,\"raw\",new Map),f(this,\"handleError\",(e=>{if(!this.options.silentErrors)throw e;this.errors.push(e.message)})),this.chunk=this.normalizeInput(e),this.file=i,this.type=this.constructor.type,this.globalOptions=this.options=t,this.localOptions=t[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(e,t){let i=V.get(t),n=G.get(t),s=N.get(t),r=this.options[t],a=r.reviveValues&&!!i,o=r.translateValues&&!!n,l=r.translateKeys&&!!s,h={};for(let[t,r]of e)a&&i.has(t)?r=i.get(t)(r):o&&n.has(t)&&(r=this.translateValue(r,n.get(t))),l&&s.has(t)&&(t=s.get(t)||t),h[t]=r;return h}translateValue(e,t){return t[e]||t.DEFAULT||e}assignToOutput(e,t){this.assignObjectToOutput(e,this.constructor.type,t)}assignObjectToOutput(e,t,i){if(this.globalOptions.mergeOutput)return Object.assign(e,i);e[t]?Object.assign(e[t],i):e[t]=i}}f(ge,\"headerLength\",4),f(ge,\"type\",void 0),f(ge,\"multiSegment\",!1),f(ge,\"canHandle\",(()=>!1));function me(e){return 192===e||194===e||196===e||219===e||221===e||218===e||254===e}function Se(e){return e>=224&&e<=239}function Ce(e,t,i){for(let[n,s]of A)if(s.canHandle(e,t,i))return n}class ye extends pe{constructor(...e){super(...e),f(this,\"appSegments\",[]),f(this,\"jpegSegments\",[]),f(this,\"unknownSegments\",[])}static canHandle(e,t){return 65496===t}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(e){!0===e?(this.findAll=!0,this.wanted=new Set(A.keyList())):(e=void 0===e?A.keyList().filter((e=>this.options[e].enabled)):e.filter((e=>this.options[e].enabled&&A.has(e))),this.findAll=!1,this.remaining=new Set(e),this.wanted=new Set(e)),this.unfinishedMultiSegment=!1}async findAppSegments(e=0,t){this.setupSegmentFinderArgs(t);let{file:i,findAll:n,wanted:s,remaining:r}=this;if(!n&&this.file.chunked&&(n=Array.from(s).some((e=>{let t=A.get(e),i=this.options[e];return t.multiSegment&&i.multiSegment})),n&&await this.file.readWhole()),e=this.findAppSegmentsInRange(e,i.byteLength),!this.options.onlyTiff&&i.chunked){let t=!1;for(;r.size>0&&!t&&(i.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:n}=i,s=this.appSegments.some((e=>!this.file.available(e.offset||e.start,e.length||e.size)));if(t=e>n&&!s?!await i.readNextChunk(e):!await i.readNextChunk(n),void 0===(e=this.findAppSegmentsInRange(e,i.byteLength)))return}}}findAppSegmentsInRange(e,t){t-=2;let i,n,s,r,a,o,{file:l,findAll:h,wanted:u,remaining:c,options:f}=this;for(;e<t;e++)if(255===l.getUint8(e))if(i=l.getUint8(e+1),Se(i)){if(n=l.getUint16(e+2),s=Ce(l,e,n),s&&u.has(s)&&(r=A.get(s),a=r.findPosition(l,e),o=f[s],a.type=s,this.appSegments.push(a),!h&&(r.multiSegment&&o.multiSegment?(this.unfinishedMultiSegment=a.chunkNumber<a.chunkCount,this.unfinishedMultiSegment||c.delete(s)):c.delete(s),0===c.size)))break;f.recordUnknownSegments&&(a=ge.findPosition(l,e),a.marker=i,this.unknownSegments.push(a)),e+=n+1}else if(me(i)){if(n=l.getUint16(e+2),218===i&&!1!==f.stopAfterSos)return;f.recordJpegSegments&&this.jpegSegments.push({offset:e,length:n,marker:i}),e+=n+1}return e}mergeMultiSegments(){if(!this.appSegments.some((e=>e.multiSegment)))return;let e=function(e,t){let i,n,s,r=new Map;for(let a=0;a<e.length;a++)i=e[a],n=i[t],r.has(n)?s=r.get(n):r.set(n,s=[]),s.push(i);return Array.from(r)}(this.appSegments,\"type\");this.mergedAppSegments=e.map((([e,t])=>{let i=A.get(e,this.options);if(i.handleMultiSegments){return{type:e,chunk:i.handleMultiSegments(t)}}return t[0]}))}getSegment(e){return this.appSegments.find((t=>t.type===e))}async getOrFindSegment(e){let t=this.getSegment(e);return void 0===t&&(await this.findAppSegments(0,[e]),t=this.getSegment(e)),t}}f(ye,\"type\",\"jpeg\"),T.set(\"jpeg\",ye);const be=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class Pe extends ge{parseHeader(){var e=this.chunk.getUint16();18761===e?this.le=!0:19789===e&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(e,t,i=new Map){let{pick:n,skip:s}=this.options[t];n=new Set(n);let r=n.size>0,a=0===s.size,o=this.chunk.getUint16(e);e+=2;for(let l=0;l<o;l++){let o=this.chunk.getUint16(e);if(r){if(n.has(o)&&(i.set(o,this.parseTag(e,o,t)),n.delete(o),0===n.size))break}else!a&&s.has(o)||i.set(o,this.parseTag(e,o,t));e+=12}return i}parseTag(e,t,i){let{chunk:n}=this,s=n.getUint16(e+2),r=n.getUint32(e+4),a=be[s];if(a*r<=4?e+=8:e=n.getUint32(e+8),(s<1||s>13)&&m(`Invalid TIFF value type. block: ${i.toUpperCase()}, tag: ${t.toString(16)}, type: ${s}, offset ${e}`),e>n.byteLength&&m(`Invalid TIFF value offset. block: ${i.toUpperCase()}, tag: ${t.toString(16)}, type: ${s}, offset ${e} is outside of chunk size ${n.byteLength}`),1===s)return n.getUint8Array(e,r);if(2===s)return S(n.getString(e,r));if(7===s)return n.getUint8Array(e,r);if(1===r)return this.parseTagValue(s,e);{let t=new(function(e){switch(e){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(s))(r),i=a;for(let n=0;n<r;n++)t[n]=this.parseTagValue(s,e),e+=i;return t}}parseTagValue(e,t){let{chunk:i}=this;switch(e){case 1:return i.getUint8(t);case 3:return i.getUint16(t);case 4:return i.getUint32(t);case 5:return i.getUint32(t)/i.getUint32(t+4);case 6:return i.getInt8(t);case 8:return i.getInt16(t);case 9:return i.getInt32(t);case 10:return i.getInt32(t)/i.getInt32(t+4);case 11:return i.getFloat(t);case 12:return i.getDouble(t);case 13:return i.getUint32(t);default:m(`Invalid tiff type ${e}`)}}}class Ie extends Pe{static canHandle(e,t){return 225===e.getUint8(t+1)&&1165519206===e.getUint32(t+4)&&0===e.getUint16(t+8)}async parse(){this.parseHeader();let{options:e}=this;return e.ifd0.enabled&&await this.parseIfd0Block(),e.exif.enabled&&await this.safeParse(\"parseExifBlock\"),e.gps.enabled&&await this.safeParse(\"parseGpsBlock\"),e.interop.enabled&&await this.safeParse(\"parseInteropBlock\"),e.ifd1.enabled&&await this.safeParse(\"parseThumbnailBlock\"),this.createOutput()}safeParse(e){let t=this[e]();return void 0!==t.catch&&(t=t.catch(this.handleError)),t}findIfd0Offset(){void 0===this.ifd0Offset&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(void 0===this.ifd1Offset){this.findIfd0Offset();let e=this.chunk.getUint16(this.ifd0Offset),t=this.ifd0Offset+2+12*e;this.ifd1Offset=this.chunk.getUint32(t)}}parseBlock(e,t){let i=new Map;return this[t]=i,this.parseTags(e,t,i),i}async parseIfd0Block(){if(this.ifd0)return;let{file:e}=this;this.findIfd0Offset(),this.ifd0Offset<8&&m(\"Malformed EXIF data\"),!e.chunked&&this.ifd0Offset>e.byteLength&&m(`IFD0 offset points to outside of file.\\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e.byteLength}`),e.tiff&&await e.ensureChunk(this.ifd0Offset,C(this.options));let t=this.parseBlock(this.ifd0Offset,\"ifd0\");return 0!==t.size?(this.exifOffset=t.get(X),this.interopOffset=t.get(Y),this.gpsOffset=t.get(_),this.xmp=t.get(j),this.iptc=t.get(W),this.icc=t.get(K),this.options.sanitize&&(t.delete(X),t.delete(Y),t.delete(_),t.delete(j),t.delete(W),t.delete(K)),t):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,C(this.options));let e=this.parseBlock(this.exifOffset,\"exif\");return this.interopOffset||(this.interopOffset=e.get(Y)),this.makerNote=e.get(z),this.userComment=e.get(H),this.options.sanitize&&(e.delete(Y),e.delete(z),e.delete(H)),this.unpack(e,41728),this.unpack(e,41729),e}unpack(e,t){let i=e.get(t);i&&1===i.length&&e.set(t,i[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let e=this.parseBlock(this.gpsOffset,\"gps\");return e&&e.has(2)&&e.has(4)&&(e.set(\"latitude\",ke(...e.get(2),e.get(1))),e.set(\"longitude\",ke(...e.get(4),e.get(3)))),e}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,\"interop\")}async parseThumbnailBlock(e=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||e))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,\"ifd1\"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let e=this.ifd1.get(513),t=this.ifd1.get(514);return this.chunk.getUint8Array(e,t)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let e,t,i,n={};for(t of Q)if(e=this[t],!g(e))if(i=this.canTranslate?this.translateBlock(e,t):Object.fromEntries(e),this.options.mergeOutput){if(\"ifd1\"===t)continue;Object.assign(n,i)}else n[t]=i;return this.makerNote&&(n.makerNote=this.makerNote),this.userComment&&(n.userComment=this.userComment),n}assignToOutput(e,t){if(this.globalOptions.mergeOutput)Object.assign(e,t);else for(let[i,n]of Object.entries(t))this.assignObjectToOutput(e,i,n)}}function ke(e,t,i,n){var s=e+t/60+i/3600;return\"S\"!==n&&\"W\"!==n||(s*=-1),s}f(Ie,\"type\",\"tiff\"),f(Ie,\"headerLength\",10),A.set(\"tiff\",Ie);var we=Object.freeze({__proto__:null,default:de,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe,parse:fe});const Te={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},Ae=Object.assign({},Te,{firstChunkSize:4e4,gps:[1,2,3,4]});async function De(e){let t=new ce(Ae);await t.read(e);let i=await t.parse();if(i&&i.gps){let{latitude:e,longitude:t}=i.gps;return{latitude:e,longitude:t}}}const Oe=Object.assign({},Te,{tiff:!1,ifd1:!0,mergeOutput:!1});async function xe(e){let t=new ce(Oe);await t.read(e);let i=await t.extractThumbnail();return i&&o?r.from(i):i}async function ve(e){let t=await this.thumbnail(e);if(void 0!==t){let e=new Blob([t]);return URL.createObjectURL(e)}}const Me=Object.assign({},Te,{firstChunkSize:4e4,ifd0:[274]});async function Re(e){let t=new ce(Me);await t.read(e);let i=await t.parse();if(i&&i.ifd0)return i.ifd0[274]}const Le=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});if(e.rotateCanvas=!0,e.rotateCss=!0,\"object\"==typeof navigator){let t=navigator.userAgent;if(t.includes(\"iPad\")||t.includes(\"iPhone\")){let i=t.match(/OS (\\d+)_(\\d+)/);if(i){let[,t,n]=i,s=Number(t)+.1*Number(n);e.rotateCanvas=s<13.4,e.rotateCss=!1}}else if(t.includes(\"OS X 10\")){let[,i]=t.match(/OS X 10[_.](\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<15}if(t.includes(\"Chrome/\")){let[,i]=t.match(/Chrome\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<81}else if(t.includes(\"Firefox/\")){let[,i]=t.match(/Firefox\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<77}}async function Ue(t){let i=await Re(t);return Object.assign({canvas:e.rotateCanvas,css:e.rotateCss},Le[i])}class Fe extends I{constructor(...e){super(...e),f(this,\"ranges\",new Be),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(e,t,i){if(0===e&&0===this.byteLength&&i){let e=new DataView(i.buffer||i,i.byteOffset,i.byteLength);this._swapDataView(e)}else{let i=e+t;if(i>this.byteLength){let{dataView:e}=this._extend(i);this._swapDataView(e)}}}_extend(e){let t;t=o?r.allocUnsafe(e):new Uint8Array(e);let i=new DataView(t.buffer,t.byteOffset,t.byteLength);return t.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:t,dataView:i}}subarray(e,t,i=!1){return t=t||this._lengthToEnd(e),i&&this._tryExtend(e,t),this.ranges.add(e,t),super.subarray(e,t)}set(e,t,i=!1){i&&this._tryExtend(t,e.byteLength,e);let n=super.set(e,t);return this.ranges.add(t,n.byteLength),n}async ensureChunk(e,t){this.chunked&&(this.ranges.available(e,t)||await this.readChunk(e,t))}available(e,t){return this.ranges.available(e,t)}}class Be{constructor(){f(this,\"list\",[])}get length(){return this.list.length}add(e,t,i=0){let n=e+t,s=this.list.filter((t=>Ee(e,t.offset,n)||Ee(e,t.end,n)));if(s.length>0){e=Math.min(e,...s.map((e=>e.offset))),n=Math.max(n,...s.map((e=>e.end))),t=n-e;let i=s.shift();i.offset=e,i.length=t,i.end=n,this.list=this.list.filter((e=>!s.includes(e)))}else this.list.push({offset:e,length:t,end:n})}available(e,t){let i=e+t;return this.list.some((t=>t.offset<=e&&i<=t.end))}}function Ee(e,t,i){return e<=t&&t<=i}class Ne extends Fe{constructor(e,t){super(0),f(this,\"chunksRead\",0),this.input=e,this.options=t}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(e=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let t=this.options.chunkSize,i=await this.readChunk(e,t);return!!i&&i.byteLength===t}async readChunk(e,t){if(this.chunksRead++,0!==(t=this.safeWrapAddress(e,t)))return this._readChunk(e,t)}safeWrapAddress(e,t){return void 0!==this.size&&e+t>this.size?Math.max(0,this.size-e):t}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return void 0!==this.size&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}}D.set(\"blob\",class extends Ne{async readWhole(){this.chunked=!1;let e=await U(this.input);this._swapArrayBuffer(e)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}async _readChunk(e,t){let i=t?e+t:void 0,n=this.input.slice(e,i),s=await U(n);return this.set(s,e,!0)}});var Ge=Object.freeze({__proto__:null,default:we,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe,parse:fe,gpsOnlyOptions:Ae,gps:De,thumbnailOnlyOptions:Oe,thumbnail:xe,thumbnailUrl:ve,orientationOnlyOptions:Me,orientation:Re,rotations:Le,get rotateCanvas(){return e.rotateCanvas},get rotateCss(){return e.rotateCss},rotation:Ue});D.set(\"url\",class extends Ne{async readWhole(){this.chunked=!1;let e=await L(this.input);e instanceof ArrayBuffer?this._swapArrayBuffer(e):e instanceof Uint8Array&&this._swapBuffer(e)}async _readChunk(e,t){let i=t?e+t-1:void 0,n=this.options.httpHeaders||{};(e||i)&&(n.range=`bytes=${[e,i].join(\"-\")}`);let s=await u(this.input,{headers:n}),r=await s.arrayBuffer(),a=r.byteLength;if(416!==s.status)return a!==t&&(this.size=e+a),this.set(r,e,!0)}});I.prototype.getUint64=function(e){let t=this.getUint32(e),i=this.getUint32(e+4);return t<1048575?t<<32|i:void 0!==typeof a?(console.warn(\"Using BigInt because of type 64uint but JS can only handle 53b numbers.\"),a(t)<<a(32)|a(i)):void m(\"Trying to read 64b value but JS can only handle 53b numbers.\")};class Ve extends pe{parseBoxes(e=0){let t=[];for(;e<this.file.byteLength-4;){let i=this.parseBoxHead(e);if(t.push(i),0===i.length)break;e+=i.length}return t}parseSubBoxes(e){e.boxes=this.parseBoxes(e.start)}findBox(e,t){return void 0===e.boxes&&this.parseSubBoxes(e),e.boxes.find((e=>e.kind===t))}parseBoxHead(e){let t=this.file.getUint32(e),i=this.file.getString(e+4,4),n=e+8;return 1===t&&(t=this.file.getUint64(e+8),n+=8),{offset:e,length:t,kind:i,start:n}}parseBoxFullHead(e){if(void 0!==e.version)return;let t=this.file.getUint32(e.start);e.version=t>>24,e.start+=4}}class ze extends Ve{static canHandle(e,t){if(0!==t)return!1;let i=e.getUint16(2);if(i>50)return!1;let n=16,s=[];for(;n<i;)s.push(e.getString(n,4)),n+=4;return s.includes(this.type)}async parse(){let e=this.file.getUint32(0),t=this.parseBoxHead(e);for(;\"meta\"!==t.kind;)e+=t.length,await this.file.ensureChunk(e,16),t=this.parseBoxHead(e);await this.file.ensureChunk(t.offset,t.length),this.parseBoxFullHead(t),this.parseSubBoxes(t),this.options.icc.enabled&&await this.findIcc(t),this.options.tiff.enabled&&await this.findExif(t)}async registerSegment(e,t,i){await this.file.ensureChunk(t,i);let n=this.file.subarray(t,i);this.createParser(e,n)}async findIcc(e){let t=this.findBox(e,\"iprp\");if(void 0===t)return;let i=this.findBox(t,\"ipco\");if(void 0===i)return;let n=this.findBox(i,\"colr\");void 0!==n&&await this.registerSegment(\"icc\",n.offset+12,n.length)}async findExif(e){let t=this.findBox(e,\"iinf\");if(void 0===t)return;let i=this.findBox(e,\"iloc\");if(void 0===i)return;let n=this.findExifLocIdInIinf(t),s=this.findExtentInIloc(i,n);if(void 0===s)return;let[r,a]=s;await this.file.ensureChunk(r,a);let o=4+this.file.getUint32(r);r+=o,a-=o,await this.registerSegment(\"tiff\",r,a)}findExifLocIdInIinf(e){this.parseBoxFullHead(e);let t,i,n,s,r=e.start,a=this.file.getUint16(r);for(r+=2;a--;){if(t=this.parseBoxHead(r),this.parseBoxFullHead(t),i=t.start,t.version>=2&&(n=3===t.version?4:2,s=this.file.getString(i+n+2,4),\"Exif\"===s))return this.file.getUintBytes(i,n);r+=t.length}}get8bits(e){let t=this.file.getUint8(e);return[t>>4,15&t]}findExtentInIloc(e,t){this.parseBoxFullHead(e);let i=e.start,[n,s]=this.get8bits(i++),[r,a]=this.get8bits(i++),o=2===e.version?4:2,l=1===e.version||2===e.version?2:0,h=a+n+s,u=2===e.version?4:2,c=this.file.getUintBytes(i,u);for(i+=u;c--;){let e=this.file.getUintBytes(i,o);i+=o+l+2+r;let u=this.file.getUint16(i);if(i+=2,e===t)return u>1&&console.warn(\"ILOC box has more than one extent but we're only processing one\\nPlease create an issue at https://github.com/MikeKovarik/exifr with this file\"),[this.file.getUintBytes(i+a,n),this.file.getUintBytes(i+a+n,s)];i+=u*h}}}class He extends ze{}f(He,\"type\",\"heic\");class je extends ze{}f(je,\"type\",\"avif\"),T.set(\"heic\",He),T.set(\"avif\",je),B(N,[\"ifd0\",\"ifd1\"],[[256,\"ImageWidth\"],[257,\"ImageHeight\"],[258,\"BitsPerSample\"],[259,\"Compression\"],[262,\"PhotometricInterpretation\"],[270,\"ImageDescription\"],[271,\"Make\"],[272,\"Model\"],[273,\"StripOffsets\"],[274,\"Orientation\"],[277,\"SamplesPerPixel\"],[278,\"RowsPerStrip\"],[279,\"StripByteCounts\"],[282,\"XResolution\"],[283,\"YResolution\"],[284,\"PlanarConfiguration\"],[296,\"ResolutionUnit\"],[301,\"TransferFunction\"],[305,\"Software\"],[306,\"ModifyDate\"],[315,\"Artist\"],[316,\"HostComputer\"],[317,\"Predictor\"],[318,\"WhitePoint\"],[319,\"PrimaryChromaticities\"],[513,\"ThumbnailOffset\"],[514,\"ThumbnailLength\"],[529,\"YCbCrCoefficients\"],[530,\"YCbCrSubSampling\"],[531,\"YCbCrPositioning\"],[532,\"ReferenceBlackWhite\"],[700,\"ApplicationNotes\"],[33432,\"Copyright\"],[33723,\"IPTC\"],[34665,\"ExifIFD\"],[34675,\"ICC\"],[34853,\"GpsIFD\"],[330,\"SubIFD\"],[40965,\"InteropIFD\"],[40091,\"XPTitle\"],[40092,\"XPComment\"],[40093,\"XPAuthor\"],[40094,\"XPKeywords\"],[40095,\"XPSubject\"]]),B(N,\"exif\",[[33434,\"ExposureTime\"],[33437,\"FNumber\"],[34850,\"ExposureProgram\"],[34852,\"SpectralSensitivity\"],[34855,\"ISO\"],[34858,\"TimeZoneOffset\"],[34859,\"SelfTimerMode\"],[34864,\"SensitivityType\"],[34865,\"StandardOutputSensitivity\"],[34866,\"RecommendedExposureIndex\"],[34867,\"ISOSpeed\"],[34868,\"ISOSpeedLatitudeyyy\"],[34869,\"ISOSpeedLatitudezzz\"],[36864,\"ExifVersion\"],[36867,\"DateTimeOriginal\"],[36868,\"CreateDate\"],[36873,\"GooglePlusUploadCode\"],[36880,\"OffsetTime\"],[36881,\"OffsetTimeOriginal\"],[36882,\"OffsetTimeDigitized\"],[37121,\"ComponentsConfiguration\"],[37122,\"CompressedBitsPerPixel\"],[37377,\"ShutterSpeedValue\"],[37378,\"ApertureValue\"],[37379,\"BrightnessValue\"],[37380,\"ExposureCompensation\"],[37381,\"MaxApertureValue\"],[37382,\"SubjectDistance\"],[37383,\"MeteringMode\"],[37384,\"LightSource\"],[37385,\"Flash\"],[37386,\"FocalLength\"],[37393,\"ImageNumber\"],[37394,\"SecurityClassification\"],[37395,\"ImageHistory\"],[37396,\"SubjectArea\"],[37500,\"MakerNote\"],[37510,\"UserComment\"],[37520,\"SubSecTime\"],[37521,\"SubSecTimeOriginal\"],[37522,\"SubSecTimeDigitized\"],[37888,\"AmbientTemperature\"],[37889,\"Humidity\"],[37890,\"Pressure\"],[37891,\"WaterDepth\"],[37892,\"Acceleration\"],[37893,\"CameraElevationAngle\"],[40960,\"FlashpixVersion\"],[40961,\"ColorSpace\"],[40962,\"ExifImageWidth\"],[40963,\"ExifImageHeight\"],[40964,\"RelatedSoundFile\"],[41483,\"FlashEnergy\"],[41486,\"FocalPlaneXResolution\"],[41487,\"FocalPlaneYResolution\"],[41488,\"FocalPlaneResolutionUnit\"],[41492,\"SubjectLocation\"],[41493,\"ExposureIndex\"],[41495,\"SensingMethod\"],[41728,\"FileSource\"],[41729,\"SceneType\"],[41730,\"CFAPattern\"],[41985,\"CustomRendered\"],[41986,\"ExposureMode\"],[41987,\"WhiteBalance\"],[41988,\"DigitalZoomRatio\"],[41989,\"FocalLengthIn35mmFormat\"],[41990,\"SceneCaptureType\"],[41991,\"GainControl\"],[41992,\"Contrast\"],[41993,\"Saturation\"],[41994,\"Sharpness\"],[41996,\"SubjectDistanceRange\"],[42016,\"ImageUniqueID\"],[42032,\"OwnerName\"],[42033,\"SerialNumber\"],[42034,\"LensInfo\"],[42035,\"LensMake\"],[42036,\"LensModel\"],[42037,\"LensSerialNumber\"],[42080,\"CompositeImage\"],[42081,\"CompositeImageCount\"],[42082,\"CompositeImageExposureTimes\"],[42240,\"Gamma\"],[59932,\"Padding\"],[59933,\"OffsetSchema\"],[65e3,\"OwnerName\"],[65001,\"SerialNumber\"],[65002,\"Lens\"],[65100,\"RawFile\"],[65101,\"Converter\"],[65102,\"WhiteBalance\"],[65105,\"Exposure\"],[65106,\"Shadows\"],[65107,\"Brightness\"],[65108,\"Contrast\"],[65109,\"Saturation\"],[65110,\"Sharpness\"],[65111,\"Smoothness\"],[65112,\"MoireFilter\"],[40965,\"InteropIFD\"]]),B(N,\"gps\",[[0,\"GPSVersionID\"],[1,\"GPSLatitudeRef\"],[2,\"GPSLatitude\"],[3,\"GPSLongitudeRef\"],[4,\"GPSLongitude\"],[5,\"GPSAltitudeRef\"],[6,\"GPSAltitude\"],[7,\"GPSTimeStamp\"],[8,\"GPSSatellites\"],[9,\"GPSStatus\"],[10,\"GPSMeasureMode\"],[11,\"GPSDOP\"],[12,\"GPSSpeedRef\"],[13,\"GPSSpeed\"],[14,\"GPSTrackRef\"],[15,\"GPSTrack\"],[16,\"GPSImgDirectionRef\"],[17,\"GPSImgDirection\"],[18,\"GPSMapDatum\"],[19,\"GPSDestLatitudeRef\"],[20,\"GPSDestLatitude\"],[21,\"GPSDestLongitudeRef\"],[22,\"GPSDestLongitude\"],[23,\"GPSDestBearingRef\"],[24,\"GPSDestBearing\"],[25,\"GPSDestDistanceRef\"],[26,\"GPSDestDistance\"],[27,\"GPSProcessingMethod\"],[28,\"GPSAreaInformation\"],[29,\"GPSDateStamp\"],[30,\"GPSDifferential\"],[31,\"GPSHPositioningError\"]]),B(G,[\"ifd0\",\"ifd1\"],[[274,{1:\"Horizontal (normal)\",2:\"Mirror horizontal\",3:\"Rotate 180\",4:\"Mirror vertical\",5:\"Mirror horizontal and rotate 270 CW\",6:\"Rotate 90 CW\",7:\"Mirror horizontal and rotate 90 CW\",8:\"Rotate 270 CW\"}],[296,{1:\"None\",2:\"inches\",3:\"cm\"}]]);let We=B(G,\"exif\",[[34850,{0:\"Not defined\",1:\"Manual\",2:\"Normal program\",3:\"Aperture priority\",4:\"Shutter priority\",5:\"Creative program\",6:\"Action program\",7:\"Portrait mode\",8:\"Landscape mode\"}],[37121,{0:\"-\",1:\"Y\",2:\"Cb\",3:\"Cr\",4:\"R\",5:\"G\",6:\"B\"}],[37383,{0:\"Unknown\",1:\"Average\",2:\"CenterWeightedAverage\",3:\"Spot\",4:\"MultiSpot\",5:\"Pattern\",6:\"Partial\",255:\"Other\"}],[37384,{0:\"Unknown\",1:\"Daylight\",2:\"Fluorescent\",3:\"Tungsten (incandescent light)\",4:\"Flash\",9:\"Fine weather\",10:\"Cloudy weather\",11:\"Shade\",12:\"Daylight fluorescent (D 5700 - 7100K)\",13:\"Day white fluorescent (N 4600 - 5400K)\",14:\"Cool white fluorescent (W 3900 - 4500K)\",15:\"White fluorescent (WW 3200 - 3700K)\",17:\"Standard light A\",18:\"Standard light B\",19:\"Standard light C\",20:\"D55\",21:\"D65\",22:\"D75\",23:\"D50\",24:\"ISO studio tungsten\",255:\"Other\"}],[37385,{0:\"Flash did not fire\",1:\"Flash fired\",5:\"Strobe return light not detected\",7:\"Strobe return light detected\",9:\"Flash fired, compulsory flash mode\",13:\"Flash fired, compulsory flash mode, return light not detected\",15:\"Flash fired, compulsory flash mode, return light detected\",16:\"Flash did not fire, compulsory flash mode\",24:\"Flash did not fire, auto mode\",25:\"Flash fired, auto mode\",29:\"Flash fired, auto mode, return light not detected\",31:\"Flash fired, auto mode, return light detected\",32:\"No flash function\",65:\"Flash fired, red-eye reduction mode\",69:\"Flash fired, red-eye reduction mode, return light not detected\",71:\"Flash fired, red-eye reduction mode, return light detected\",73:\"Flash fired, compulsory flash mode, red-eye reduction mode\",77:\"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\",79:\"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\",89:\"Flash fired, auto mode, red-eye reduction mode\",93:\"Flash fired, auto mode, return light not detected, red-eye reduction mode\",95:\"Flash fired, auto mode, return light detected, red-eye reduction mode\"}],[41495,{1:\"Not defined\",2:\"One-chip color area sensor\",3:\"Two-chip color area sensor\",4:\"Three-chip color area sensor\",5:\"Color sequential area sensor\",7:\"Trilinear sensor\",8:\"Color sequential linear sensor\"}],[41728,{1:\"Film Scanner\",2:\"Reflection Print Scanner\",3:\"Digital Camera\"}],[41729,{1:\"Directly photographed\"}],[41985,{0:\"Normal\",1:\"Custom\",2:\"HDR (no original saved)\",3:\"HDR (original saved)\",4:\"Original (for HDR)\",6:\"Panorama\",7:\"Portrait HDR\",8:\"Portrait\"}],[41986,{0:\"Auto\",1:\"Manual\",2:\"Auto bracket\"}],[41987,{0:\"Auto\",1:\"Manual\"}],[41990,{0:\"Standard\",1:\"Landscape\",2:\"Portrait\",3:\"Night\",4:\"Other\"}],[41991,{0:\"None\",1:\"Low gain up\",2:\"High gain up\",3:\"Low gain down\",4:\"High gain down\"}],[41996,{0:\"Unknown\",1:\"Macro\",2:\"Close\",3:\"Distant\"}],[42080,{0:\"Unknown\",1:\"Not a Composite Image\",2:\"General Composite Image\",3:\"Composite Image Captured While Shooting\"}]]);const Ke={1:\"No absolute unit of measurement\",2:\"Inch\",3:\"Centimeter\"};We.set(37392,Ke),We.set(41488,Ke);const Xe={0:\"Normal\",1:\"Low\",2:\"High\"};function _e(e){return\"object\"==typeof e&&void 0!==e.length?e[0]:e}function Ye(e){let t=Array.from(e).slice(1);return t[1]>15&&(t=t.map((e=>String.fromCharCode(e)))),\"0\"!==t[2]&&0!==t[2]||t.pop(),t.join(\".\")}function $e(e){if(\"string\"==typeof e){var[t,i,n,s,r,a]=e.trim().split(/[-: ]/g).map(Number),o=new Date(t,i-1,n);return Number.isNaN(s)||Number.isNaN(r)||Number.isNaN(a)||(o.setHours(s),o.setMinutes(r),o.setSeconds(a)),Number.isNaN(+o)?e:o}}function Je(e){if(\"string\"==typeof e)return e;let t=[];if(0===e[1]&&0===e[e.length-1])for(let i=0;i<e.length;i+=2)t.push(qe(e[i+1],e[i]));else for(let i=0;i<e.length;i+=2)t.push(qe(e[i],e[i+1]));return S(String.fromCodePoint(...t))}function qe(e,t){return e<<8|t}We.set(41992,Xe),We.set(41993,Xe),We.set(41994,Xe),B(V,[\"ifd0\",\"ifd1\"],[[50827,function(e){return\"string\"!=typeof e?P(e):e}],[306,$e],[40091,Je],[40092,Je],[40093,Je],[40094,Je],[40095,Je]]),B(V,\"exif\",[[40960,Ye],[36864,Ye],[36867,$e],[36868,$e],[40962,_e],[40963,_e]]),B(V,\"gps\",[[0,e=>Array.from(e).join(\".\")],[7,e=>Array.from(e).join(\":\")]]);const Qe=\"http://ns.adobe.com/\",Ze=\"http://ns.adobe.com/xmp/extension/\";class et extends ge{static canHandle(e,t){return 225===e.getUint8(t+1)&&1752462448===e.getUint32(t+4)&&e.getString(t+4,Qe.length)===Qe}static headerLength(e,t){return e.getString(t+4,Ze.length)===Ze?79:4+\"http://ns.adobe.com/xap/1.0/\".length+1}static findPosition(e,t){let i=super.findPosition(e,t);return i.multiSegment=i.extended=79===i.headerLength,i.multiSegment?(i.chunkCount=e.getUint8(t+72),i.chunkNumber=e.getUint8(t+76),0!==e.getUint8(t+77)&&i.chunkNumber++):(i.chunkCount=1/0,i.chunkNumber=-1),i}static handleMultiSegments(e){return e.map((e=>e.chunk.getString())).join(\"\")}normalizeInput(e){return\"string\"==typeof e?e:I.from(e).getString()}parse(e=this.chunk){if(!this.localOptions.parse)return e;e=function(e){let t={},i={};for(let e of ut)t[e]=[],i[e]=0;return e.replace(ct,((e,n,s)=>{if(\"<\"===n){let n=++i[s];return t[s].push(n),`${e}#${n}`}return`${e}#${t[s].pop()}`}))}(e);let t=nt.findAll(e,\"rdf\",\"Description\");0===t.length&&t.push(new nt(\"rdf\",\"Description\",void 0,e));let i,n={};for(let e of t)for(let t of e.properties)i=ot(t.ns,n),st(t,i);return function(e){let t;for(let i in e)t=e[i]=d(e[i]),void 0===t&&delete e[i];return d(e)}(n)}assignToOutput(e,t){if(this.localOptions.parse)for(let[i,n]of Object.entries(t))switch(i){case\"tiff\":this.assignObjectToOutput(e,\"ifd0\",n);break;case\"exif\":this.assignObjectToOutput(e,\"exif\",n);break;case\"xmlns\":break;default:this.assignObjectToOutput(e,i,n)}else e.xmp=t}}f(et,\"type\",\"xmp\"),f(et,\"multiSegment\",!0),A.set(\"xmp\",et);class tt{static findAll(e){return lt(e,/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)=(\"[^\"]*\"|'[^']*')/gm).map(tt.unpackMatch)}static unpackMatch(e){let t=e[1],i=e[2],n=e[3].slice(1,-1);return n=ht(n),new tt(t,i,n)}constructor(e,t,i){this.ns=e,this.name=t,this.value=i}serialize(){return this.value}}const it=\"[\\\\w\\\\d-]+\";class nt{static findAll(e,t,i){if(void 0!==t||void 0!==i){t=t||it,i=i||it;var n=new RegExp(`<(${t}):(${i})(#\\\\d+)?((\\\\s+?[\\\\w\\\\d-:]+=(\"[^\"]*\"|'[^']*'))*\\\\s*)(\\\\/>|>([\\\\s\\\\S]*?)<\\\\/\\\\1:\\\\2\\\\3>)`,\"gm\")}else n=/<([\\w\\d-]+):([\\w\\d-]+)(#\\d+)?((\\s+?[\\w\\d-:]+=(\"[^\"]*\"|'[^']*'))*\\s*)(\\/>|>([\\s\\S]*?)<\\/\\1:\\2\\3>)/gm;return lt(e,n).map(nt.unpackMatch)}static unpackMatch(e){let t=e[1],i=e[2],n=e[4],s=e[8];return new nt(t,i,n,s)}constructor(e,t,i,n){this.ns=e,this.name=t,this.attrString=i,this.innerXml=n,this.attrs=tt.findAll(i),this.children=nt.findAll(n),this.value=0===this.children.length?ht(n):void 0,this.properties=[...this.attrs,...this.children]}get isPrimitive(){return void 0!==this.value&&0===this.attrs.length&&0===this.children.length}get isListContainer(){return 1===this.children.length&&this.children[0].isList}get isList(){let{ns:e,name:t}=this;return\"rdf\"===e&&(\"Seq\"===t||\"Bag\"===t||\"Alt\"===t)}get isListItem(){return\"rdf\"===this.ns&&\"li\"===this.name}serialize(){if(0===this.properties.length&&void 0===this.value)return;if(this.isPrimitive)return this.value;if(this.isListContainer)return this.children[0].serialize();if(this.isList)return at(this.children.map(rt));if(this.isListItem&&1===this.children.length&&0===this.attrs.length)return this.children[0].serialize();let e={};for(let t of this.properties)st(t,e);return void 0!==this.value&&(e.value=this.value),d(e)}}function st(e,t){let i=e.serialize();void 0!==i&&(t[e.name]=i)}var rt=e=>e.serialize(),at=e=>1===e.length?e[0]:e,ot=(e,t)=>t[e]?t[e]:t[e]={};function lt(e,t){let i,n=[];if(!e)return n;for(;null!==(i=t.exec(e));)n.push(i);return n}function ht(e){if(function(e){return null==e||\"null\"===e||\"undefined\"===e||\"\"===e||\"\"===e.trim()}(e))return;let t=Number(e);if(!Number.isNaN(t))return t;let i=e.toLowerCase();return\"true\"===i||\"false\"!==i&&e.trim()}const ut=[\"rdf:li\",\"rdf:Seq\",\"rdf:Bag\",\"rdf:Alt\",\"rdf:Description\"],ct=new RegExp(`(<|\\\\/)(${ut.join(\"|\")})`,\"g\");var ft=Object.freeze({__proto__:null,default:Ge,Exifr:ce,fileParsers:T,segmentParsers:A,fileReaders:D,tagKeys:N,tagValues:G,tagRevivers:V,createDictionary:B,extendDictionary:E,fetchUrlAsArrayBuffer:L,readBlobAsArrayBuffer:U,chunkedProps:$,otherSegments:J,segments:q,tiffBlocks:Q,segmentsAndBlocks:Z,tiffExtractables:ee,inheritables:te,allFormatters:ie,Options:oe,parse:fe,gpsOnlyOptions:Ae,gps:De,thumbnailOnlyOptions:Oe,thumbnail:xe,thumbnailUrl:ve,orientationOnlyOptions:Me,orientation:Re,rotations:Le,get rotateCanvas(){return e.rotateCanvas},get rotateCss(){return e.rotateCss},rotation:Ue});const dt=[\"xmp\",\"icc\",\"iptc\",\"tiff\"],pt=()=>{};async function gt(e,t,i){let n=i[e];return n.enabled=!0,n.parse=!0,A.get(e).parse(t,n)}let mt=h(\"fs\",(e=>e.promises));D.set(\"fs\",class extends Ne{async readWhole(){this.chunked=!1,this.fs=await mt;let e=await this.fs.readFile(this.input);this._swapBuffer(e)}async readChunked(){this.chunked=!0,this.fs=await mt,await this.open(),await this.readChunk(0,this.options.firstChunkSize)}async open(){void 0===this.fh&&(this.fh=await this.fs.open(this.input,\"r\"),this.size=(await this.fh.stat(this.input)).size)}async _readChunk(e,t){void 0===this.fh&&await this.open(),e+t>this.size&&(t=this.size-e);var i=this.subarray(e,t,!0);return await this.fh.read(i.dataView,0,t,e),i}async close(){if(this.fh){let e=this.fh;this.fh=void 0,await e.close()}}});D.set(\"base64\",class extends Ne{constructor(...e){super(...e),this.input=this.input.replace(/^data:([^;]+);base64,/gim,\"\"),this.size=this.input.length/4*3,this.input.endsWith(\"==\")?this.size-=2:this.input.endsWith(\"=\")&&(this.size-=1)}async _readChunk(e,t){let i,n,s=this.input;void 0===e?(e=0,i=0,n=0):(i=4*Math.floor(e/3),n=e-i/4*3),void 0===t&&(t=this.size);let a=e+t,l=i+4*Math.ceil(a/3);s=s.slice(i,l);let h=Math.min(t,this.size-e);if(o){let t=r.from(s,\"base64\").slice(n,n+h);return this.set(t,e,!0)}{let t=this.subarray(e,h,!0),i=atob(s),r=t.toUint8();for(let e=0;e<h;e++)r[e]=i.charCodeAt(n+e);return t}}});class St extends pe{static canHandle(e,t){return 18761===t||19789===t}extendOptions(e){let{ifd0:t,xmp:i,iptc:n,icc:s}=e;i.enabled&&t.deps.add(j),n.enabled&&t.deps.add(W),s.enabled&&t.deps.add(K),t.finalizeFilters()}async parse(){let{tiff:e,xmp:t,iptc:i,icc:n}=this.options;if(e.enabled||t.enabled||i.enabled||n.enabled){let e=Math.max(C(this.options),this.options.chunkSize);await this.file.ensureChunk(0,e),this.createParser(\"tiff\",this.file),this.parsers.tiff.parseHeader(),await this.parsers.tiff.parseIfd0Block(),this.adaptTiffPropAsSegment(\"xmp\"),this.adaptTiffPropAsSegment(\"iptc\"),this.adaptTiffPropAsSegment(\"icc\")}}adaptTiffPropAsSegment(e){if(this.parsers.tiff[e]){let t=this.parsers.tiff[e];this.injectSegment(e,t)}}}f(St,\"type\",\"tiff\"),T.set(\"tiff\",St);let Ct=h(\"zlib\");const yt=\"XML:com.adobe.xmp\",bt=\"ihdr\",Pt=\"iccp\",It=\"text\",kt=\"itxt\",wt=[bt,Pt,It,kt,\"exif\"];class Tt extends pe{constructor(...e){super(...e),f(this,\"catchError\",(e=>this.errors.push(e))),f(this,\"metaChunks\",[]),f(this,\"unknownChunks\",[])}static canHandle(e,t){return 35152===t&&2303741511===e.getUint32(0)&&218765834===e.getUint32(4)}async parse(){let{file:e}=this;await this.findPngChunksInRange(\"\u0089PNG\\r\\n\u001A\\n\".length,e.byteLength),await this.readSegments(this.metaChunks),this.findIhdr(),this.parseTextChunks(),await this.findExif().catch(this.catchError),await this.findXmp().catch(this.catchError),await this.findIcc().catch(this.catchError)}async findPngChunksInRange(e,t){let{file:i}=this;for(;e<t;){let t=i.getUint32(e),n=i.getUint32(e+4),s=i.getString(e+4,4).toLowerCase(),r=t+4+4+4,a={type:s,offset:e,length:r,start:e+4+4,size:t,marker:n};wt.includes(s)?this.metaChunks.push(a):this.unknownChunks.push(a),e+=r}}parseTextChunks(){let e=this.metaChunks.filter((e=>e.type===It));for(let t of e){let[e,i]=this.file.getString(t.start,t.size).split(\"\\0\");this.injectKeyValToIhdr(e,i)}}injectKeyValToIhdr(e,t){let i=this.parsers.ihdr;i&&i.raw.set(e,t)}findIhdr(){let e=this.metaChunks.find((e=>e.type===bt));e&&!1!==this.options.ihdr.enabled&&this.createParser(bt,e.chunk)}async findExif(){let e=this.metaChunks.find((e=>\"exif\"===e.type));e&&this.injectSegment(\"tiff\",e.chunk)}async findXmp(){let e=this.metaChunks.filter((e=>e.type===kt));for(let t of e){t.chunk.getString(0,yt.length)===yt&&this.injectSegment(\"xmp\",t.chunk)}}async findIcc(){let e=this.metaChunks.find((e=>e.type===Pt));if(!e)return;let{chunk:t}=e,i=t.getUint8Array(0,81),n=0;for(;n<80&&0!==i[n];)n++;let r=n+2,a=t.getString(0,n);if(this.injectKeyValToIhdr(\"ProfileName\",a),s){let e=await Ct,i=t.getUint8Array(r);i=e.inflateSync(i),this.injectSegment(\"icc\",i)}}}f(Tt,\"type\",\"png\"),T.set(\"png\",Tt),B(N,\"interop\",[[1,\"InteropIndex\"],[2,\"InteropVersion\"],[4096,\"RelatedImageFileFormat\"],[4097,\"RelatedImageWidth\"],[4098,\"RelatedImageHeight\"]]),E(N,\"ifd0\",[[11,\"ProcessingSoftware\"],[254,\"SubfileType\"],[255,\"OldSubfileType\"],[263,\"Thresholding\"],[264,\"CellWidth\"],[265,\"CellLength\"],[266,\"FillOrder\"],[269,\"DocumentName\"],[280,\"MinSampleValue\"],[281,\"MaxSampleValue\"],[285,\"PageName\"],[286,\"XPosition\"],[287,\"YPosition\"],[290,\"GrayResponseUnit\"],[297,\"PageNumber\"],[321,\"HalftoneHints\"],[322,\"TileWidth\"],[323,\"TileLength\"],[332,\"InkSet\"],[337,\"TargetPrinter\"],[18246,\"Rating\"],[18249,\"RatingPercent\"],[33550,\"PixelScale\"],[34264,\"ModelTransform\"],[34377,\"PhotoshopSettings\"],[50706,\"DNGVersion\"],[50707,\"DNGBackwardVersion\"],[50708,\"UniqueCameraModel\"],[50709,\"LocalizedCameraModel\"],[50736,\"DNGLensInfo\"],[50739,\"ShadowScale\"],[50740,\"DNGPrivateData\"],[33920,\"IntergraphMatrix\"],[33922,\"ModelTiePoint\"],[34118,\"SEMInfo\"],[34735,\"GeoTiffDirectory\"],[34736,\"GeoTiffDoubleParams\"],[34737,\"GeoTiffAsciiParams\"],[50341,\"PrintIM\"],[50721,\"ColorMatrix1\"],[50722,\"ColorMatrix2\"],[50723,\"CameraCalibration1\"],[50724,\"CameraCalibration2\"],[50725,\"ReductionMatrix1\"],[50726,\"ReductionMatrix2\"],[50727,\"AnalogBalance\"],[50728,\"AsShotNeutral\"],[50729,\"AsShotWhiteXY\"],[50730,\"BaselineExposure\"],[50731,\"BaselineNoise\"],[50732,\"BaselineSharpness\"],[50734,\"LinearResponseLimit\"],[50735,\"CameraSerialNumber\"],[50741,\"MakerNoteSafety\"],[50778,\"CalibrationIlluminant1\"],[50779,\"CalibrationIlluminant2\"],[50781,\"RawDataUniqueID\"],[50827,\"OriginalRawFileName\"],[50828,\"OriginalRawFileData\"],[50831,\"AsShotICCProfile\"],[50832,\"AsShotPreProfileMatrix\"],[50833,\"CurrentICCProfile\"],[50834,\"CurrentPreProfileMatrix\"],[50879,\"ColorimetricReference\"],[50885,\"SRawType\"],[50898,\"PanasonicTitle\"],[50899,\"PanasonicTitle2\"],[50931,\"CameraCalibrationSig\"],[50932,\"ProfileCalibrationSig\"],[50933,\"ProfileIFD\"],[50934,\"AsShotProfileName\"],[50936,\"ProfileName\"],[50937,\"ProfileHueSatMapDims\"],[50938,\"ProfileHueSatMapData1\"],[50939,\"ProfileHueSatMapData2\"],[50940,\"ProfileToneCurve\"],[50941,\"ProfileEmbedPolicy\"],[50942,\"ProfileCopyright\"],[50964,\"ForwardMatrix1\"],[50965,\"ForwardMatrix2\"],[50966,\"PreviewApplicationName\"],[50967,\"PreviewApplicationVersion\"],[50968,\"PreviewSettingsName\"],[50969,\"PreviewSettingsDigest\"],[50970,\"PreviewColorSpace\"],[50971,\"PreviewDateTime\"],[50972,\"RawImageDigest\"],[50973,\"OriginalRawFileDigest\"],[50981,\"ProfileLookTableDims\"],[50982,\"ProfileLookTableData\"],[51043,\"TimeCodes\"],[51044,\"FrameRate\"],[51058,\"TStop\"],[51081,\"ReelName\"],[51089,\"OriginalDefaultFinalSize\"],[51090,\"OriginalBestQualitySize\"],[51091,\"OriginalDefaultCropSize\"],[51105,\"CameraLabel\"],[51107,\"ProfileHueSatMapEncoding\"],[51108,\"ProfileLookTableEncoding\"],[51109,\"BaselineExposureOffset\"],[51110,\"DefaultBlackRender\"],[51111,\"NewRawImageDigest\"],[51112,\"RawToPreviewGain\"]]);let At=[[273,\"StripOffsets\"],[279,\"StripByteCounts\"],[288,\"FreeOffsets\"],[289,\"FreeByteCounts\"],[291,\"GrayResponseCurve\"],[292,\"T4Options\"],[293,\"T6Options\"],[300,\"ColorResponseUnit\"],[320,\"ColorMap\"],[324,\"TileOffsets\"],[325,\"TileByteCounts\"],[326,\"BadFaxLines\"],[327,\"CleanFaxData\"],[328,\"ConsecutiveBadFaxLines\"],[330,\"SubIFD\"],[333,\"InkNames\"],[334,\"NumberofInks\"],[336,\"DotRange\"],[338,\"ExtraSamples\"],[339,\"SampleFormat\"],[340,\"SMinSampleValue\"],[341,\"SMaxSampleValue\"],[342,\"TransferRange\"],[343,\"ClipPath\"],[344,\"XClipPathUnits\"],[345,\"YClipPathUnits\"],[346,\"Indexed\"],[347,\"JPEGTables\"],[351,\"OPIProxy\"],[400,\"GlobalParametersIFD\"],[401,\"ProfileType\"],[402,\"FaxProfile\"],[403,\"CodingMethods\"],[404,\"VersionYear\"],[405,\"ModeNumber\"],[433,\"Decode\"],[434,\"DefaultImageColor\"],[435,\"T82Options\"],[437,\"JPEGTables\"],[512,\"JPEGProc\"],[515,\"JPEGRestartInterval\"],[517,\"JPEGLosslessPredictors\"],[518,\"JPEGPointTransforms\"],[519,\"JPEGQTables\"],[520,\"JPEGDCTables\"],[521,\"JPEGACTables\"],[559,\"StripRowCounts\"],[999,\"USPTOMiscellaneous\"],[18247,\"XP_DIP_XML\"],[18248,\"StitchInfo\"],[28672,\"SonyRawFileType\"],[28688,\"SonyToneCurve\"],[28721,\"VignettingCorrection\"],[28722,\"VignettingCorrParams\"],[28724,\"ChromaticAberrationCorrection\"],[28725,\"ChromaticAberrationCorrParams\"],[28726,\"DistortionCorrection\"],[28727,\"DistortionCorrParams\"],[29895,\"SonyCropTopLeft\"],[29896,\"SonyCropSize\"],[32781,\"ImageID\"],[32931,\"WangTag1\"],[32932,\"WangAnnotation\"],[32933,\"WangTag3\"],[32934,\"WangTag4\"],[32953,\"ImageReferencePoints\"],[32954,\"RegionXformTackPoint\"],[32955,\"WarpQuadrilateral\"],[32956,\"AffineTransformMat\"],[32995,\"Matteing\"],[32996,\"DataType\"],[32997,\"ImageDepth\"],[32998,\"TileDepth\"],[33300,\"ImageFullWidth\"],[33301,\"ImageFullHeight\"],[33302,\"TextureFormat\"],[33303,\"WrapModes\"],[33304,\"FovCot\"],[33305,\"MatrixWorldToScreen\"],[33306,\"MatrixWorldToCamera\"],[33405,\"Model2\"],[33421,\"CFARepeatPatternDim\"],[33422,\"CFAPattern2\"],[33423,\"BatteryLevel\"],[33424,\"KodakIFD\"],[33445,\"MDFileTag\"],[33446,\"MDScalePixel\"],[33447,\"MDColorTable\"],[33448,\"MDLabName\"],[33449,\"MDSampleInfo\"],[33450,\"MDPrepDate\"],[33451,\"MDPrepTime\"],[33452,\"MDFileUnits\"],[33589,\"AdventScale\"],[33590,\"AdventRevision\"],[33628,\"UIC1Tag\"],[33629,\"UIC2Tag\"],[33630,\"UIC3Tag\"],[33631,\"UIC4Tag\"],[33918,\"IntergraphPacketData\"],[33919,\"IntergraphFlagRegisters\"],[33921,\"INGRReserved\"],[34016,\"Site\"],[34017,\"ColorSequence\"],[34018,\"IT8Header\"],[34019,\"RasterPadding\"],[34020,\"BitsPerRunLength\"],[34021,\"BitsPerExtendedRunLength\"],[34022,\"ColorTable\"],[34023,\"ImageColorIndicator\"],[34024,\"BackgroundColorIndicator\"],[34025,\"ImageColorValue\"],[34026,\"BackgroundColorValue\"],[34027,\"PixelIntensityRange\"],[34028,\"TransparencyIndicator\"],[34029,\"ColorCharacterization\"],[34030,\"HCUsage\"],[34031,\"TrapIndicator\"],[34032,\"CMYKEquivalent\"],[34152,\"AFCP_IPTC\"],[34232,\"PixelMagicJBIGOptions\"],[34263,\"JPLCartoIFD\"],[34306,\"WB_GRGBLevels\"],[34310,\"LeafData\"],[34687,\"TIFF_FXExtensions\"],[34688,\"MultiProfiles\"],[34689,\"SharedData\"],[34690,\"T88Options\"],[34732,\"ImageLayer\"],[34750,\"JBIGOptions\"],[34856,\"Opto-ElectricConvFactor\"],[34857,\"Interlace\"],[34908,\"FaxRecvParams\"],[34909,\"FaxSubAddress\"],[34910,\"FaxRecvTime\"],[34929,\"FedexEDR\"],[34954,\"LeafSubIFD\"],[37387,\"FlashEnergy\"],[37388,\"SpatialFrequencyResponse\"],[37389,\"Noise\"],[37390,\"FocalPlaneXResolution\"],[37391,\"FocalPlaneYResolution\"],[37392,\"FocalPlaneResolutionUnit\"],[37397,\"ExposureIndex\"],[37398,\"TIFF-EPStandardID\"],[37399,\"SensingMethod\"],[37434,\"CIP3DataFile\"],[37435,\"CIP3Sheet\"],[37436,\"CIP3Side\"],[37439,\"StoNits\"],[37679,\"MSDocumentText\"],[37680,\"MSPropertySetStorage\"],[37681,\"MSDocumentTextPosition\"],[37724,\"ImageSourceData\"],[40965,\"InteropIFD\"],[40976,\"SamsungRawPointersOffset\"],[40977,\"SamsungRawPointersLength\"],[41217,\"SamsungRawByteOrder\"],[41218,\"SamsungRawUnknown\"],[41484,\"SpatialFrequencyResponse\"],[41485,\"Noise\"],[41489,\"ImageNumber\"],[41490,\"SecurityClassification\"],[41491,\"ImageHistory\"],[41494,\"TIFF-EPStandardID\"],[41995,\"DeviceSettingDescription\"],[42112,\"GDALMetadata\"],[42113,\"GDALNoData\"],[44992,\"ExpandSoftware\"],[44993,\"ExpandLens\"],[44994,\"ExpandFilm\"],[44995,\"ExpandFilterLens\"],[44996,\"ExpandScanner\"],[44997,\"ExpandFlashLamp\"],[46275,\"HasselbladRawImage\"],[48129,\"PixelFormat\"],[48130,\"Transformation\"],[48131,\"Uncompressed\"],[48132,\"ImageType\"],[48256,\"ImageWidth\"],[48257,\"ImageHeight\"],[48258,\"WidthResolution\"],[48259,\"HeightResolution\"],[48320,\"ImageOffset\"],[48321,\"ImageByteCount\"],[48322,\"AlphaOffset\"],[48323,\"AlphaByteCount\"],[48324,\"ImageDataDiscard\"],[48325,\"AlphaDataDiscard\"],[50215,\"OceScanjobDesc\"],[50216,\"OceApplicationSelector\"],[50217,\"OceIDNumber\"],[50218,\"OceImageLogic\"],[50255,\"Annotations\"],[50459,\"HasselbladExif\"],[50547,\"OriginalFileName\"],[50560,\"USPTOOriginalContentType\"],[50656,\"CR2CFAPattern\"],[50710,\"CFAPlaneColor\"],[50711,\"CFALayout\"],[50712,\"LinearizationTable\"],[50713,\"BlackLevelRepeatDim\"],[50714,\"BlackLevel\"],[50715,\"BlackLevelDeltaH\"],[50716,\"BlackLevelDeltaV\"],[50717,\"WhiteLevel\"],[50718,\"DefaultScale\"],[50719,\"DefaultCropOrigin\"],[50720,\"DefaultCropSize\"],[50733,\"BayerGreenSplit\"],[50737,\"ChromaBlurRadius\"],[50738,\"AntiAliasStrength\"],[50752,\"RawImageSegmentation\"],[50780,\"BestQualityScale\"],[50784,\"AliasLayerMetadata\"],[50829,\"ActiveArea\"],[50830,\"MaskedAreas\"],[50935,\"NoiseReductionApplied\"],[50974,\"SubTileBlockSize\"],[50975,\"RowInterleaveFactor\"],[51008,\"OpcodeList1\"],[51009,\"OpcodeList2\"],[51022,\"OpcodeList3\"],[51041,\"NoiseProfile\"],[51114,\"CacheVersion\"],[51125,\"DefaultUserCrop\"],[51157,\"NikonNEFInfo\"],[65024,\"KdcIFD\"]];E(N,\"ifd0\",At),E(N,\"exif\",At),B(G,\"gps\",[[23,{M:\"Magnetic North\",T:\"True North\"}],[25,{K:\"Kilometers\",M:\"Miles\",N:\"Nautical Miles\"}]]);class Dt extends ge{static canHandle(e,t){return 224===e.getUint8(t+1)&&1246120262===e.getUint32(t+4)&&0===e.getUint8(t+8)}parse(){return this.parseTags(),this.translate(),this.output}parseTags(){this.raw=new Map([[0,this.chunk.getUint16(0)],[2,this.chunk.getUint8(2)],[3,this.chunk.getUint16(3)],[5,this.chunk.getUint16(5)],[7,this.chunk.getUint8(7)],[8,this.chunk.getUint8(8)]])}}f(Dt,\"type\",\"jfif\"),f(Dt,\"headerLength\",9),A.set(\"jfif\",Dt),B(N,\"jfif\",[[0,\"JFIFVersion\"],[2,\"ResolutionUnit\"],[3,\"XResolution\"],[5,\"YResolution\"],[7,\"ThumbnailWidth\"],[8,\"ThumbnailHeight\"]]);class Ot extends ge{parse(){return this.parseTags(),this.translate(),this.output}parseTags(){this.raw=new Map([[0,this.chunk.getUint32(0)],[4,this.chunk.getUint32(4)],[8,this.chunk.getUint8(8)],[9,this.chunk.getUint8(9)],[10,this.chunk.getUint8(10)],[11,this.chunk.getUint8(11)],[12,this.chunk.getUint8(12)],...Array.from(this.raw)])}}f(Ot,\"type\",\"ihdr\"),A.set(\"ihdr\",Ot),B(N,\"ihdr\",[[0,\"ImageWidth\"],[4,\"ImageHeight\"],[8,\"BitDepth\"],[9,\"ColorType\"],[10,\"Compression\"],[11,\"Filter\"],[12,\"Interlace\"]]),B(G,\"ihdr\",[[9,{0:\"Grayscale\",2:\"RGB\",3:\"Palette\",4:\"Grayscale with Alpha\",6:\"RGB with Alpha\",DEFAULT:\"Unknown\"}],[10,{0:\"Deflate/Inflate\",DEFAULT:\"Unknown\"}],[11,{0:\"Adaptive\",DEFAULT:\"Unknown\"}],[12,{0:\"Noninterlaced\",1:\"Adam7 Interlace\",DEFAULT:\"Unknown\"}]]);const xt=\"\\0\\0\\0\\0\";class vt extends ge{static canHandle(e,t){return 226===e.getUint8(t+1)&&1229144927===e.getUint32(t+4)}static findPosition(e,t){let i=super.findPosition(e,t);return i.chunkNumber=e.getUint8(t+16),i.chunkCount=e.getUint8(t+17),i.multiSegment=i.chunkCount>1,i}static handleMultiSegments(e){return function(e){let t=function(e){let t=e[0].constructor,i=0;for(let t of e)i+=t.length;let n=new t(i),s=0;for(let t of e)n.set(t,s),s+=t.length;return n}(e.map((e=>e.chunk.toUint8())));return new I(t)}(e)}parse(){return this.raw=new Map,this.parseHeader(),this.parseTags(),this.translate(),this.output}parseHeader(){let{raw:e}=this;this.chunk.byteLength<84&&m(\"ICC header is too short\");for(let[t,i]of Object.entries(Mt)){t=parseInt(t,10);let n=i(this.chunk,t);n!==xt&&e.set(t,n)}}parseTags(){let e,t,i,n,s,{raw:r}=this,a=this.chunk.getUint32(128),o=132,l=this.chunk.byteLength;for(;a--;){if(e=this.chunk.getString(o,4),t=this.chunk.getUint32(o+4),i=this.chunk.getUint32(o+8),n=this.chunk.getString(t,4),t+i>l)return void console.warn(\"reached the end of the first ICC chunk. Enable options.tiff.multiSegment to read all ICC segments.\");s=this.parseTag(n,t,i),void 0!==s&&s!==xt&&r.set(e,s),o+=12}}parseTag(e,t,i){switch(e){case\"desc\":return this.parseDesc(t);case\"mluc\":return this.parseMluc(t);case\"text\":return this.parseText(t,i);case\"sig \":return this.parseSig(t)}if(!(t+i>this.chunk.byteLength))return this.chunk.getUint8Array(t,i)}parseDesc(e){let t=this.chunk.getUint32(e+8)-1;return S(this.chunk.getString(e+12,t))}parseText(e,t){return S(this.chunk.getString(e+8,t-8))}parseSig(e){return S(this.chunk.getString(e+8,4))}parseMluc(e){let{chunk:t}=this,i=t.getUint32(e+8),n=t.getUint32(e+12),s=e+16,r=[];for(let a=0;a<i;a++){let i=t.getString(s+0,2),a=t.getString(s+2,2),o=t.getUint32(s+4),l=t.getUint32(s+8)+e,h=S(t.getUnicodeString(l,o));r.push({lang:i,country:a,text:h}),s+=n}return 1===i?r[0].text:r}translateValue(e,t){return\"string\"==typeof e?t[e]||t[e.toLowerCase()]||e:t[e]||e}}f(vt,\"type\",\"icc\"),f(vt,\"multiSegment\",!0),f(vt,\"headerLength\",18);const Mt={4:Rt,8:function(e,t){return[e.getUint8(t),e.getUint8(t+1)>>4,e.getUint8(t+1)%16].map((e=>e.toString(10))).join(\".\")},12:Rt,16:Rt,20:Rt,24:function(e,t){const i=e.getUint16(t),n=e.getUint16(t+2)-1,s=e.getUint16(t+4),r=e.getUint16(t+6),a=e.getUint16(t+8),o=e.getUint16(t+10);return new Date(Date.UTC(i,n,s,r,a,o))},36:Rt,40:Rt,48:Rt,52:Rt,64:(e,t)=>e.getUint32(t),80:Rt};function Rt(e,t){return S(e.getString(t,4))}A.set(\"icc\",vt),B(N,\"icc\",[[4,\"ProfileCMMType\"],[8,\"ProfileVersion\"],[12,\"ProfileClass\"],[16,\"ColorSpaceData\"],[20,\"ProfileConnectionSpace\"],[24,\"ProfileDateTime\"],[36,\"ProfileFileSignature\"],[40,\"PrimaryPlatform\"],[44,\"CMMFlags\"],[48,\"DeviceManufacturer\"],[52,\"DeviceModel\"],[56,\"DeviceAttributes\"],[64,\"RenderingIntent\"],[68,\"ConnectionSpaceIlluminant\"],[80,\"ProfileCreator\"],[84,\"ProfileID\"],[\"Header\",\"ProfileHeader\"],[\"MS00\",\"WCSProfiles\"],[\"bTRC\",\"BlueTRC\"],[\"bXYZ\",\"BlueMatrixColumn\"],[\"bfd\",\"UCRBG\"],[\"bkpt\",\"MediaBlackPoint\"],[\"calt\",\"CalibrationDateTime\"],[\"chad\",\"ChromaticAdaptation\"],[\"chrm\",\"Chromaticity\"],[\"ciis\",\"ColorimetricIntentImageState\"],[\"clot\",\"ColorantTableOut\"],[\"clro\",\"ColorantOrder\"],[\"clrt\",\"ColorantTable\"],[\"cprt\",\"ProfileCopyright\"],[\"crdi\",\"CRDInfo\"],[\"desc\",\"ProfileDescription\"],[\"devs\",\"DeviceSettings\"],[\"dmdd\",\"DeviceModelDesc\"],[\"dmnd\",\"DeviceMfgDesc\"],[\"dscm\",\"ProfileDescriptionML\"],[\"fpce\",\"FocalPlaneColorimetryEstimates\"],[\"gTRC\",\"GreenTRC\"],[\"gXYZ\",\"GreenMatrixColumn\"],[\"gamt\",\"Gamut\"],[\"kTRC\",\"GrayTRC\"],[\"lumi\",\"Luminance\"],[\"meas\",\"Measurement\"],[\"meta\",\"Metadata\"],[\"mmod\",\"MakeAndModel\"],[\"ncl2\",\"NamedColor2\"],[\"ncol\",\"NamedColor\"],[\"ndin\",\"NativeDisplayInfo\"],[\"pre0\",\"Preview0\"],[\"pre1\",\"Preview1\"],[\"pre2\",\"Preview2\"],[\"ps2i\",\"PS2RenderingIntent\"],[\"ps2s\",\"PostScript2CSA\"],[\"psd0\",\"PostScript2CRD0\"],[\"psd1\",\"PostScript2CRD1\"],[\"psd2\",\"PostScript2CRD2\"],[\"psd3\",\"PostScript2CRD3\"],[\"pseq\",\"ProfileSequenceDesc\"],[\"psid\",\"ProfileSequenceIdentifier\"],[\"psvm\",\"PS2CRDVMSize\"],[\"rTRC\",\"RedTRC\"],[\"rXYZ\",\"RedMatrixColumn\"],[\"resp\",\"OutputResponse\"],[\"rhoc\",\"ReflectionHardcopyOrigColorimetry\"],[\"rig0\",\"PerceptualRenderingIntentGamut\"],[\"rig2\",\"SaturationRenderingIntentGamut\"],[\"rpoc\",\"ReflectionPrintOutputColorimetry\"],[\"sape\",\"SceneAppearanceEstimates\"],[\"scoe\",\"SceneColorimetryEstimates\"],[\"scrd\",\"ScreeningDesc\"],[\"scrn\",\"Screening\"],[\"targ\",\"CharTarget\"],[\"tech\",\"Technology\"],[\"vcgt\",\"VideoCardGamma\"],[\"view\",\"ViewingConditions\"],[\"vued\",\"ViewingCondDesc\"],[\"wtpt\",\"MediaWhitePoint\"]]);const Lt={\"4d2p\":\"Erdt Systems\",AAMA:\"Aamazing Technologies\",ACER:\"Acer\",ACLT:\"Acolyte Color Research\",ACTI:\"Actix Sytems\",ADAR:\"Adara Technology\",ADBE:\"Adobe\",ADI:\"ADI Systems\",AGFA:\"Agfa Graphics\",ALMD:\"Alps Electric\",ALPS:\"Alps Electric\",ALWN:\"Alwan Color Expertise\",AMTI:\"Amiable Technologies\",AOC:\"AOC International\",APAG:\"Apago\",APPL:\"Apple Computer\",AST:\"AST\",\"AT&T\":\"AT&T\",BAEL:\"BARBIERI electronic\",BRCO:\"Barco NV\",BRKP:\"Breakpoint\",BROT:\"Brother\",BULL:\"Bull\",BUS:\"Bus Computer Systems\",\"C-IT\":\"C-Itoh\",CAMR:\"Intel\",CANO:\"Canon\",CARR:\"Carroll Touch\",CASI:\"Casio\",CBUS:\"Colorbus PL\",CEL:\"Crossfield\",CELx:\"Crossfield\",CGS:\"CGS Publishing Technologies International\",CHM:\"Rochester Robotics\",CIGL:\"Colour Imaging Group, London\",CITI:\"Citizen\",CL00:\"Candela\",CLIQ:\"Color IQ\",CMCO:\"Chromaco\",CMiX:\"CHROMiX\",COLO:\"Colorgraphic Communications\",COMP:\"Compaq\",COMp:\"Compeq/Focus Technology\",CONR:\"Conrac Display Products\",CORD:\"Cordata Technologies\",CPQ:\"Compaq\",CPRO:\"ColorPro\",CRN:\"Cornerstone\",CTX:\"CTX International\",CVIS:\"ColorVision\",CWC:\"Fujitsu Laboratories\",DARI:\"Darius Technology\",DATA:\"Dataproducts\",DCP:\"Dry Creek Photo\",DCRC:\"Digital Contents Resource Center, Chung-Ang University\",DELL:\"Dell Computer\",DIC:\"Dainippon Ink and Chemicals\",DICO:\"Diconix\",DIGI:\"Digital\",\"DL&C\":\"Digital Light & Color\",DPLG:\"Doppelganger\",DS:\"Dainippon Screen\",DSOL:\"DOOSOL\",DUPN:\"DuPont\",EPSO:\"Epson\",ESKO:\"Esko-Graphics\",ETRI:\"Electronics and Telecommunications Research Institute\",EVER:\"Everex Systems\",EXAC:\"ExactCODE\",Eizo:\"Eizo\",FALC:\"Falco Data Products\",FF:\"Fuji Photo Film\",FFEI:\"FujiFilm Electronic Imaging\",FNRD:\"Fnord Software\",FORA:\"Fora\",FORE:\"Forefront Technology\",FP:\"Fujitsu\",FPA:\"WayTech Development\",FUJI:\"Fujitsu\",FX:\"Fuji Xerox\",GCC:\"GCC Technologies\",GGSL:\"Global Graphics Software\",GMB:\"Gretagmacbeth\",GMG:\"GMG\",GOLD:\"GoldStar Technology\",GOOG:\"Google\",GPRT:\"Giantprint\",GTMB:\"Gretagmacbeth\",GVC:\"WayTech Development\",GW2K:\"Sony\",HCI:\"HCI\",HDM:\"Heidelberger Druckmaschinen\",HERM:\"Hermes\",HITA:\"Hitachi America\",HP:\"Hewlett-Packard\",HTC:\"Hitachi\",HiTi:\"HiTi Digital\",IBM:\"IBM\",IDNT:\"Scitex\",IEC:\"Hewlett-Packard\",IIYA:\"Iiyama North America\",IKEG:\"Ikegami Electronics\",IMAG:\"Image Systems\",IMI:\"Ingram Micro\",INTC:\"Intel\",INTL:\"N/A (INTL)\",INTR:\"Intra Electronics\",IOCO:\"Iocomm International Technology\",IPS:\"InfoPrint Solutions Company\",IRIS:\"Scitex\",ISL:\"Ichikawa Soft Laboratory\",ITNL:\"N/A (ITNL)\",IVM:\"IVM\",IWAT:\"Iwatsu Electric\",Idnt:\"Scitex\",Inca:\"Inca Digital Printers\",Iris:\"Scitex\",JPEG:\"Joint Photographic Experts Group\",JSFT:\"Jetsoft Development\",JVC:\"JVC Information Products\",KART:\"Scitex\",KFC:\"KFC Computek Components\",KLH:\"KLH Computers\",KMHD:\"Konica Minolta\",KNCA:\"Konica\",KODA:\"Kodak\",KYOC:\"Kyocera\",Kart:\"Scitex\",LCAG:\"Leica\",LCCD:\"Leeds Colour\",LDAK:\"Left Dakota\",LEAD:\"Leading Technology\",LEXM:\"Lexmark International\",LINK:\"Link Computer\",LINO:\"Linotronic\",LITE:\"Lite-On\",Leaf:\"Leaf\",Lino:\"Linotronic\",MAGC:\"Mag Computronic\",MAGI:\"MAG Innovision\",MANN:\"Mannesmann\",MICN:\"Micron Technology\",MICR:\"Microtek\",MICV:\"Microvitec\",MINO:\"Minolta\",MITS:\"Mitsubishi Electronics America\",MITs:\"Mitsuba\",MNLT:\"Minolta\",MODG:\"Modgraph\",MONI:\"Monitronix\",MONS:\"Monaco Systems\",MORS:\"Morse Technology\",MOTI:\"Motive Systems\",MSFT:\"Microsoft\",MUTO:\"MUTOH INDUSTRIES\",Mits:\"Mitsubishi Electric\",NANA:\"NANAO\",NEC:\"NEC\",NEXP:\"NexPress Solutions\",NISS:\"Nissei Sangyo America\",NKON:\"Nikon\",NONE:\"none\",OCE:\"Oce Technologies\",OCEC:\"OceColor\",OKI:\"Oki\",OKID:\"Okidata\",OKIP:\"Okidata\",OLIV:\"Olivetti\",OLYM:\"Olympus\",ONYX:\"Onyx Graphics\",OPTI:\"Optiquest\",PACK:\"Packard Bell\",PANA:\"Matsushita Electric Industrial\",PANT:\"Pantone\",PBN:\"Packard Bell\",PFU:\"PFU\",PHIL:\"Philips Consumer Electronics\",PNTX:\"HOYA\",POne:\"Phase One A/S\",PREM:\"Premier Computer Innovations\",PRIN:\"Princeton Graphic Systems\",PRIP:\"Princeton Publishing Labs\",QLUX:\"Hong Kong\",QMS:\"QMS\",QPCD:\"QPcard AB\",QUAD:\"QuadLaser\",QUME:\"Qume\",RADI:\"Radius\",RDDx:\"Integrated Color Solutions\",RDG:\"Roland DG\",REDM:\"REDMS Group\",RELI:\"Relisys\",RGMS:\"Rolf Gierling Multitools\",RICO:\"Ricoh\",RNLD:\"Edmund Ronald\",ROYA:\"Royal\",RPC:\"Ricoh Printing Systems\",RTL:\"Royal Information Electronics\",SAMP:\"Sampo\",SAMS:\"Samsung\",SANT:\"Jaime Santana Pomares\",SCIT:\"Scitex\",SCRN:\"Dainippon Screen\",SDP:\"Scitex\",SEC:\"Samsung\",SEIK:\"Seiko Instruments\",SEIk:\"Seikosha\",SGUY:\"ScanGuy.com\",SHAR:\"Sharp Laboratories\",SICC:\"International Color Consortium\",SONY:\"Sony\",SPCL:\"SpectraCal\",STAR:\"Star\",STC:\"Sampo Technology\",Scit:\"Scitex\",Sdp:\"Scitex\",Sony:\"Sony\",TALO:\"Talon Technology\",TAND:\"Tandy\",TATU:\"Tatung\",TAXA:\"TAXAN America\",TDS:\"Tokyo Denshi Sekei\",TECO:\"TECO Information Systems\",TEGR:\"Tegra\",TEKT:\"Tektronix\",TI:\"Texas Instruments\",TMKR:\"TypeMaker\",TOSB:\"Toshiba\",TOSH:\"Toshiba\",TOTK:\"TOTOKU ELECTRIC\",TRIU:\"Triumph\",TSBT:\"Toshiba\",TTX:\"TTX Computer Products\",TVM:\"TVM Professional Monitor\",TW:\"TW Casper\",ULSX:\"Ulead Systems\",UNIS:\"Unisys\",UTZF:\"Utz Fehlau & Sohn\",VARI:\"Varityper\",VIEW:\"Viewsonic\",VISL:\"Visual communication\",VIVO:\"Vivo Mobile Communication\",WANG:\"Wang\",WLBR:\"Wilbur Imaging\",WTG2:\"Ware To Go\",WYSE:\"WYSE Technology\",XERX:\"Xerox\",XRIT:\"X-Rite\",ZRAN:\"Zoran\",Zebr:\"Zebra Technologies\",appl:\"Apple Computer\",bICC:\"basICColor\",berg:\"bergdesign\",ceyd:\"Integrated Color Solutions\",clsp:\"MacDermid ColorSpan\",ds:\"Dainippon Screen\",dupn:\"DuPont\",ffei:\"FujiFilm Electronic Imaging\",flux:\"FluxData\",iris:\"Scitex\",kart:\"Scitex\",lcms:\"Little CMS\",lino:\"Linotronic\",none:\"none\",ob4d:\"Erdt Systems\",obic:\"Medigraph\",quby:\"Qubyx Sarl\",scit:\"Scitex\",scrn:\"Dainippon Screen\",sdp:\"Scitex\",siwi:\"SIWI GRAFIKA\",yxym:\"YxyMaster\"},Ut={scnr:\"Scanner\",mntr:\"Monitor\",prtr:\"Printer\",link:\"Device Link\",abst:\"Abstract\",spac:\"Color Space Conversion Profile\",nmcl:\"Named Color\",cenc:\"ColorEncodingSpace profile\",mid:\"MultiplexIdentification profile\",mlnk:\"MultiplexLink profile\",mvis:\"MultiplexVisualization profile\",nkpf:\"Nikon Input Device Profile (NON-STANDARD!)\"};B(G,\"icc\",[[4,Lt],[12,Ut],[40,Object.assign({},Lt,Ut)],[48,Lt],[80,Lt],[64,{0:\"Perceptual\",1:\"Relative Colorimetric\",2:\"Saturation\",3:\"Absolute Colorimetric\"}],[\"tech\",{amd:\"Active Matrix Display\",crt:\"Cathode Ray Tube Display\",kpcd:\"Photo CD\",pmd:\"Passive Matrix Display\",dcam:\"Digital Camera\",dcpj:\"Digital Cinema Projector\",dmpc:\"Digital Motion Picture Camera\",dsub:\"Dye Sublimation Printer\",epho:\"Electrophotographic Printer\",esta:\"Electrostatic Printer\",flex:\"Flexography\",fprn:\"Film Writer\",fscn:\"Film Scanner\",grav:\"Gravure\",ijet:\"Ink Jet Printer\",imgs:\"Photo Image Setter\",mpfr:\"Motion Picture Film Recorder\",mpfs:\"Motion Picture Film Scanner\",offs:\"Offset Lithography\",pjtv:\"Projection Television\",rpho:\"Photographic Paper Printer\",rscn:\"Reflective Scanner\",silk:\"Silkscreen\",twax:\"Thermal Wax Printer\",vidc:\"Video Camera\",vidm:\"Video Monitor\"}]]);class Ft extends ge{static canHandle(e,t,i){return 237===e.getUint8(t+1)&&\"Photoshop\"===e.getString(t+4,9)&&void 0!==this.containsIptc8bim(e,t,i)}static headerLength(e,t,i){let n,s=this.containsIptc8bim(e,t,i);if(void 0!==s)return n=e.getUint8(t+s+7),n%2!=0&&(n+=1),0===n&&(n=4),s+8+n}static containsIptc8bim(e,t,i){for(let n=0;n<i;n++)if(this.isIptcSegmentHead(e,t+n))return n}static isIptcSegmentHead(e,t){return 56===e.getUint8(t)&&943868237===e.getUint32(t)&&1028===e.getUint16(t+4)}parse(){let{raw:e}=this,t=this.chunk.byteLength-1,i=!1;for(let n=0;n<t;n++)if(28===this.chunk.getUint8(n)&&2===this.chunk.getUint8(n+1)){i=!0;let t=this.chunk.getUint16(n+3),s=this.chunk.getUint8(n+2),r=this.chunk.getLatin1String(n+5,t);e.set(s,this.pluralizeValue(e.get(s),r)),n+=4+t}else if(i)break;return this.translate(),this.output}pluralizeValue(e,t){return void 0!==e?e instanceof Array?(e.push(t),e):[e,t]:t}}f(Ft,\"type\",\"iptc\"),f(Ft,\"translateValues\",!1),f(Ft,\"reviveValues\",!1),A.set(\"iptc\",Ft),B(N,\"iptc\",[[0,\"ApplicationRecordVersion\"],[3,\"ObjectTypeReference\"],[4,\"ObjectAttributeReference\"],[5,\"ObjectName\"],[7,\"EditStatus\"],[8,\"EditorialUpdate\"],[10,\"Urgency\"],[12,\"SubjectReference\"],[15,\"Category\"],[20,\"SupplementalCategories\"],[22,\"FixtureIdentifier\"],[25,\"Keywords\"],[26,\"ContentLocationCode\"],[27,\"ContentLocationName\"],[30,\"ReleaseDate\"],[35,\"ReleaseTime\"],[37,\"ExpirationDate\"],[38,\"ExpirationTime\"],[40,\"SpecialInstructions\"],[42,\"ActionAdvised\"],[45,\"ReferenceService\"],[47,\"ReferenceDate\"],[50,\"ReferenceNumber\"],[55,\"DateCreated\"],[60,\"TimeCreated\"],[62,\"DigitalCreationDate\"],[63,\"DigitalCreationTime\"],[65,\"OriginatingProgram\"],[70,\"ProgramVersion\"],[75,\"ObjectCycle\"],[80,\"Byline\"],[85,\"BylineTitle\"],[90,\"City\"],[92,\"Sublocation\"],[95,\"State\"],[100,\"CountryCode\"],[101,\"Country\"],[103,\"OriginalTransmissionReference\"],[105,\"Headline\"],[110,\"Credit\"],[115,\"Source\"],[116,\"CopyrightNotice\"],[118,\"Contact\"],[120,\"Caption\"],[121,\"LocalCaption\"],[122,\"Writer\"],[125,\"RasterizedCaption\"],[130,\"ImageType\"],[131,\"ImageOrientation\"],[135,\"LanguageIdentifier\"],[150,\"AudioType\"],[151,\"AudioSamplingRate\"],[152,\"AudioSamplingResolution\"],[153,\"AudioDuration\"],[154,\"AudioOutcue\"],[184,\"JobID\"],[185,\"MasterDocumentID\"],[186,\"ShortDocumentID\"],[187,\"UniqueDocumentID\"],[188,\"OwnerID\"],[200,\"ObjectPreviewFileFormat\"],[201,\"ObjectPreviewFileVersion\"],[202,\"ObjectPreviewData\"],[221,\"Prefs\"],[225,\"ClassifyState\"],[228,\"SimilarityIndex\"],[230,\"DocumentNotes\"],[231,\"DocumentHistory\"],[232,\"ExifCameraInfo\"],[255,\"CatalogSets\"]]),B(G,\"iptc\",[[10,{0:\"0 (reserved)\",1:\"1 (most urgent)\",2:\"2\",3:\"3\",4:\"4\",5:\"5 (normal urgency)\",6:\"6\",7:\"7\",8:\"8 (least urgent)\",9:\"9 (user-defined priority)\"}],[75,{a:\"Morning\",b:\"Both Morning and Evening\",p:\"Evening\"}],[131,{L:\"Landscape\",P:\"Portrait\",S:\"Square\"}]]),e.Exifr=ce,e.Options=oe,e.allFormatters=ie,e.chunkedProps=$,e.createDictionary=B,e.default=ft,e.extendDictionary=E,e.fetchUrlAsArrayBuffer=L,e.fileParsers=T,e.fileReaders=D,e.gps=De,e.gpsOnlyOptions=Ae,e.inheritables=te,e.orientation=Re,e.orientationOnlyOptions=Me,e.otherSegments=J,e.parse=fe,e.readBlobAsArrayBuffer=U,e.rotation=Ue,e.rotations=Le,e.segmentParsers=A,e.segments=q,e.segmentsAndBlocks=Z,e.sidecar=async function(e,t,i){let n=new oe(t);n.chunked=!1,void 0===i&&\"string\"==typeof e&&(i=function(e){let t=e.toLowerCase().split(\".\").pop();if(function(e){return\"exif\"===e||\"tiff\"===e||\"tif\"===e}(t))return\"tiff\";if(dt.includes(t))return t}(e));let s=await x(e,n);if(i){if(dt.includes(i))return gt(i,s,n);m(\"Invalid segment type\")}else{if(function(e){let t=e.getString(0,50).trim();return t.includes(\"<?xpacket\")||t.includes(\"<x:\")}(s))return gt(\"xmp\",s,n);for(let[e]of A){if(!dt.includes(e))continue;let t=await gt(e,s,n).catch(pt);if(t)return t}m(\"Unknown file format\")}},e.tagKeys=N,e.tagRevivers=V,e.tagValues=G,e.thumbnail=xe,e.thumbnailOnlyOptions=Oe,e.thumbnailUrl=ve,e.tiffBlocks=Q,e.tiffExtractables=ee,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.handleWarning = exports.DecodeWarning = exports.DecodeError = void 0;\r\nclass DecodeError extends Error {\r\n    constructor(ctx, message, offset) {\r\n        super(message);\r\n        this.offset = offset;\r\n        this.partiallyDecodedImage = {\r\n            details: {\r\n                header: ctx.header,\r\n                footer: ctx.footer,\r\n                imageId: ctx.identificationField,\r\n                developerDirectory: ctx.developerDirectory,\r\n                extensionArea: ctx.extensionArea,\r\n            },\r\n            warnings: ctx.warnings\r\n        };\r\n    }\r\n}\r\nexports.DecodeError = DecodeError;\r\nclass DecodeWarning extends Error {\r\n    constructor(message, offset) {\r\n        super(message);\r\n        this.offset = offset;\r\n    }\r\n}\r\nexports.DecodeWarning = DecodeWarning;\r\nfunction handleWarning(ctx, warning) {\r\n    if (ctx.options.strictMode) {\r\n        throw warning;\r\n    }\r\n    ctx.warnings.push(warning);\r\n}\r\nexports.handleWarning = handleWarning;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ByteStreamReader = void 0;\r\nclass ByteStreamReader {\r\n    constructor(data, _le) {\r\n        this.data = data;\r\n        this._le = _le;\r\n        this.offset = 0;\r\n        this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n    }\r\n    readUint8() {\r\n        return this.view.getUint8(this.offset++);\r\n    }\r\n    readUint16() {\r\n        const value = this.view.getUint16(this.offset, this._le);\r\n        this.offset += 2;\r\n        return value;\r\n    }\r\n    readUint32() {\r\n        const value = this.view.getUint32(this.offset, this._le);\r\n        this.offset += 4;\r\n        return value;\r\n    }\r\n}\r\nexports.ByteStreamReader = ByteStreamReader;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.readText = void 0;\r\nconst assert_js_1 = require(\"./assert.js\");\r\nfunction readText(ctx, textDecoder, maxLength, isCompressed) {\r\n    const bytes = [];\r\n    let current = 0;\r\n    let i = 0;\r\n    const startOffset = ctx.reader.offset;\r\n    for (; i < maxLength; i++) {\r\n        try {\r\n            current = ctx.reader.view.getUint8(ctx.reader.offset);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof Error && e.message === 'Offset is outside the bounds of the DataView') {\r\n                (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('EOF while reading text', ctx.reader.offset));\r\n            }\r\n            throw e;\r\n        }\r\n        if (!isCompressed && current === 0) {\r\n            break;\r\n        }\r\n        ctx.reader.offset++;\r\n        bytes.push(current);\r\n    }\r\n    ctx.reader.offset = startOffset + maxLength;\r\n    if (textDecoder) {\r\n        return textDecoder.decode(new Uint8Array(bytes));\r\n    }\r\n    return String.fromCharCode(...bytes);\r\n}\r\nexports.readText = readText;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isValidBitDepth = exports.isValidColorMapDepth = exports.isValidImageType = void 0;\r\nfunction isValidImageType(imageType) {\r\n    return (imageType === 1 ||\r\n        imageType === 2 ||\r\n        imageType === 3 ||\r\n        imageType === 9 ||\r\n        imageType === 10 ||\r\n        imageType === 11);\r\n}\r\nexports.isValidImageType = isValidImageType;\r\nfunction isValidColorMapDepth(colorMapDepth) {\r\n    return (colorMapDepth === 15 ||\r\n        colorMapDepth === 16 ||\r\n        colorMapDepth === 24 ||\r\n        colorMapDepth === 32);\r\n}\r\nexports.isValidColorMapDepth = isValidColorMapDepth;\r\nfunction isValidBitDepth(bitDepth, imageType) {\r\n    if (imageType === 1 ||\r\n        imageType === 9) {\r\n        return bitDepth === 8;\r\n    }\r\n    if (imageType === 3 ||\r\n        imageType === 11) {\r\n        return bitDepth === 8 || bitDepth === 16;\r\n    }\r\n    return (bitDepth === 15 ||\r\n        bitDepth === 16 ||\r\n        bitDepth === 24 ||\r\n        bitDepth === 32);\r\n}\r\nexports.isValidBitDepth = isValidBitDepth;\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.decodeTga = void 0;\r\nconst assert_js_1 = require(\"./assert.js\");\r\nconst byteStreamReader_js_1 = require(\"./byteStreamReader.js\");\r\nconst text_js_1 = require(\"./text.js\");\r\nconst validate_js_1 = require(\"./validate.js\");\r\nasync function decodeTga(data, options = {}) {\r\n    const initialCtx = {\r\n        reader: new byteStreamReader_js_1.ByteStreamReader(data, true),\r\n        hasAlpha: false,\r\n        ambiguousAlpha: false,\r\n        options,\r\n        warnings: []\r\n    };\r\n    const header = parseHeader(initialCtx);\r\n    const ctx = {\r\n        ...initialCtx,\r\n        header\r\n    };\r\n    ctx.identificationField = (0, text_js_1.readText)(ctx, undefined, ctx.header.idLength);\r\n    const colorMapOffset = ctx.reader.offset;\r\n    ctx.footer = parseFooter(ctx);\r\n    ctx.extensionArea = parseExtensionArea(ctx);\r\n    ctx.developerDirectory = parseDeveloperDirectory(ctx);\r\n    ctx.reader.offset = colorMapOffset;\r\n    if (ctx.header.colorMap?.type === 1) {\r\n        ctx.colorMap = parseColorMap(ctx, ctx.header.colorMap);\r\n    }\r\n    ctx.hasAlpha = ((ctx.colorMap && ctx.header.colorMap?.depth === 32) || ((ctx.header.attributeBitsPerPixel > 0 ||\r\n        ctx.header.bitDepth === 32) && (ctx.extensionArea === undefined ||\r\n        ctx.extensionArea.attributesType > 2)));\r\n    ctx.ambiguousAlpha = ctx.hasAlpha && ctx.header.attributeBitsPerPixel === 0;\r\n    ctx.image = parseImageData(ctx, ctx.reader.offset);\r\n    return {\r\n        image: ctx.image,\r\n        details: {\r\n            header: ctx.header,\r\n            imageId: ctx.identificationField,\r\n            footer: ctx.footer,\r\n            extensionArea: ctx.extensionArea,\r\n            developerDirectory: ctx.developerDirectory,\r\n        },\r\n        warnings: ctx.warnings\r\n    };\r\n}\r\nexports.decodeTga = decodeTga;\r\nfunction parseHeader(ctx) {\r\n    const idLength = ctx.reader.readUint8();\r\n    const colorMapTypeRaw = ctx.reader.readUint8();\r\n    let colorMapType;\r\n    if (colorMapTypeRaw === 0 ||\r\n        colorMapTypeRaw === 1) {\r\n        colorMapType = colorMapTypeRaw;\r\n    }\r\n    else {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('Color map type unrecognized', ctx.reader.offset - 1));\r\n        colorMapType = 2;\r\n    }\r\n    const imageType = ctx.reader.readUint8();\r\n    if (!(0, validate_js_1.isValidImageType)(imageType)) {\r\n        throw new assert_js_1.DecodeError(ctx, `Invalid image type \"${imageType}\"`, ctx.reader.offset - 1);\r\n    }\r\n    if (colorMapType === 1 &&\r\n        imageType !== 1 &&\r\n        imageType !== 9) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Image type \"${imageType}\" cannot have a color map`, ctx.reader.offset - 2));\r\n    }\r\n    const colorMapOrigin = ctx.reader.readUint16();\r\n    const colorMapLength = ctx.reader.readUint16();\r\n    const colorMapDepth = ctx.reader.readUint8();\r\n    if (colorMapType === 1) {\r\n        if (colorMapOrigin >= colorMapLength) {\r\n            (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Color map origin \"${colorMapOrigin}\" is greater than color map length \"${colorMapLength}\"`, ctx.reader.offset - 5));\r\n        }\r\n        if (!(0, validate_js_1.isValidColorMapDepth)(colorMapDepth)) {\r\n            throw new assert_js_1.DecodeError(ctx, `Unsupported color map bit depth \"${colorMapDepth}\"`, ctx.reader.offset - 1);\r\n        }\r\n    }\r\n    const xOrigin = ctx.reader.readUint16();\r\n    const yOrigin = ctx.reader.readUint16();\r\n    const width = ctx.reader.readUint16();\r\n    const height = ctx.reader.readUint16();\r\n    const bitDepth = ctx.reader.readUint8();\r\n    if (!(0, validate_js_1.isValidBitDepth)(bitDepth, imageType)) {\r\n        throw new assert_js_1.DecodeError(ctx, `Unsupported TGA bit depth \"${bitDepth}\" with image type ${imageType}`, 0x10);\r\n    }\r\n    const imageDescriptor = ctx.reader.readUint8();\r\n    const attributeBitsPerPixel = (imageDescriptor & 15) >> 0;\r\n    const screenOrigin = ((imageDescriptor & 48) >> 4);\r\n    return {\r\n        idLength,\r\n        colorMap: colorMapType !== 0 ? {\r\n            type: colorMapType,\r\n            depth: colorMapDepth,\r\n            length: colorMapLength,\r\n            origin: colorMapOrigin\r\n        } : undefined,\r\n        imageType,\r\n        origin: {\r\n            x: xOrigin,\r\n            y: yOrigin,\r\n        },\r\n        width,\r\n        height,\r\n        bitDepth,\r\n        imageDescriptor,\r\n        attributeBitsPerPixel,\r\n        screenOrigin\r\n    };\r\n}\r\nfunction parseColorMap(ctx, colorMap) {\r\n    const colorMapOffset = ctx.reader.offset;\r\n    const bytesPerEntry = Math.ceil(colorMap.depth / 8);\r\n    ctx.reader.offset += colorMap.length * bytesPerEntry;\r\n    let readPixel;\r\n    switch (colorMap.depth) {\r\n        case 15:\r\n            readPixel = readPixel15Bit;\r\n            break;\r\n        case 16:\r\n            if (ctx.hasAlpha) {\r\n                readPixel = readPixel16Bit;\r\n            }\r\n            else {\r\n                readPixel = readPixel15Bit;\r\n            }\r\n            break;\r\n        case 24:\r\n            readPixel = readPixel24Bit;\r\n            break;\r\n        case 32:\r\n            readPixel = readPixel32Bit;\r\n            break;\r\n    }\r\n    return (imageData, imageOffset, view, viewOffset) => {\r\n        const colorIndex = view.getUint8(viewOffset);\r\n        readPixel(imageData, imageOffset, ctx.reader.view, colorMapOffset + colorIndex * bytesPerEntry);\r\n        return 1;\r\n    };\r\n}\r\nfunction parseImageData(ctx, offset) {\r\n    const image = {\r\n        width: ctx.header.width,\r\n        height: ctx.header.height,\r\n        data: new Uint8Array(ctx.header.width * ctx.header.height * 4)\r\n    };\r\n    let readPixel;\r\n    if (ctx.colorMap) {\r\n        readPixel = ctx.colorMap;\r\n    }\r\n    else {\r\n        switch (ctx.header.bitDepth) {\r\n            case 8:\r\n                readPixel = readPixel8BitGreyscale;\r\n                break;\r\n            case 15:\r\n                readPixel = readPixel15Bit;\r\n                break;\r\n            case 16:\r\n                if (ctx.header.imageType === 11 || ctx.header.imageType === 3) {\r\n                    readPixel = readPixel16BitGreyscale;\r\n                }\r\n                else {\r\n                    if (ctx.hasAlpha) {\r\n                        readPixel = readPixel16Bit;\r\n                    }\r\n                    else {\r\n                        readPixel = readPixel15Bit;\r\n                    }\r\n                }\r\n                break;\r\n            case 24:\r\n                readPixel = readPixel24Bit;\r\n                break;\r\n            case 32:\r\n                if (ctx.hasAlpha) {\r\n                    readPixel = readPixel32Bit;\r\n                }\r\n                else {\r\n                    readPixel = readPixel32BitNoAlpha;\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    let view = ctx.reader.view;\r\n    if (ctx.header.imageType & 8) {\r\n        const decoded = decodeRunLengthEncoding(ctx);\r\n        view = new DataView(decoded.buffer, decoded.byteOffset, decoded.length);\r\n        offset = 0;\r\n    }\r\n    if (ctx.header.screenOrigin === 2) {\r\n        let imageOffset = 0;\r\n        for (let y = 0; y < image.height; y++) {\r\n            for (let x = 0; x < image.width; x++) {\r\n                offset += readPixel(image.data, imageOffset, view, offset);\r\n                imageOffset += 4;\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        let imageOffset = 0;\r\n        for (let y = image.height - 1; y >= 0; y--) {\r\n            imageOffset = ctx.header.width * y * 4;\r\n            for (let x = 0; x < image.width; x++) {\r\n                offset += readPixel(image.data, imageOffset, view, offset);\r\n                imageOffset += 4;\r\n            }\r\n        }\r\n    }\r\n    if (ctx.ambiguousAlpha && !ctx.options.strictMode && ctx.options.detectAmbiguousAlphaChannel) {\r\n        let hasOpacity = false;\r\n        for (let i = 3; i < image.width * image.height * 4; i += 4) {\r\n            if (image.data[i] > 0) {\r\n                hasOpacity = true;\r\n            }\r\n        }\r\n        if (!hasOpacity) {\r\n            (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('Image has ambiguous alpha and is fully transparent, alpha has been disabled', -1));\r\n            for (let i = 3; i < image.width * image.height * 4; i += 4) {\r\n                image.data[i] = 255;\r\n            }\r\n        }\r\n    }\r\n    return image;\r\n}\r\nfunction decodeRunLengthEncoding(ctx) {\r\n    const bytesPerPixel = Math.ceil(ctx.header.bitDepth / 8);\r\n    const result = new Uint8Array(ctx.header.width * ctx.header.height * bytesPerPixel);\r\n    let byte = 0;\r\n    let count = 0;\r\n    let i = 0, j = 0, k = 0;\r\n    while (i < result.length - 1) {\r\n        byte = ctx.reader.readUint8();\r\n        count = (byte & 127) + 1;\r\n        if (byte & 128) {\r\n            for (j = 0; j < bytesPerPixel; j++) {\r\n                byte = ctx.reader.readUint8();\r\n                for (k = 0; k < count; k++) {\r\n                    result[i + k * bytesPerPixel + j] = byte;\r\n                }\r\n            }\r\n            i += count * bytesPerPixel;\r\n        }\r\n        else {\r\n            count *= bytesPerPixel;\r\n            for (let k = 0; k < count; k++) {\r\n                result[i++] = ctx.reader.readUint8();\r\n            }\r\n        }\r\n    }\r\n    return result;\r\n}\r\nfunction readPixel8BitGreyscale(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 1] = imageData[imageOffset];\r\n    imageData[imageOffset + 2] = imageData[imageOffset];\r\n    imageData[imageOffset + 3] = 255;\r\n    return 1;\r\n}\r\nfunction readPixel16BitGreyscale(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 1] = imageData[imageOffset];\r\n    imageData[imageOffset + 2] = imageData[imageOffset];\r\n    imageData[imageOffset + 3] = view.getUint8(viewOffset + 1);\r\n    return 2;\r\n}\r\nlet currentValue = 0;\r\nfunction readPixel15Bit(imageData, imageOffset, view, viewOffset) {\r\n    currentValue = view.getUint16(viewOffset, true);\r\n    imageData[imageOffset] = currentValue >> 10 & 0x1f;\r\n    imageData[imageOffset + 1] = currentValue >> 5 & 0x1f;\r\n    imageData[imageOffset + 2] = currentValue & 0x1f;\r\n    imageData[imageOffset] = (imageData[imageOffset] << 3) | (imageData[imageOffset] >> 2);\r\n    imageData[imageOffset + 1] = (imageData[imageOffset + 1] << 3) | (imageData[imageOffset + 1] >> 2);\r\n    imageData[imageOffset + 2] = (imageData[imageOffset + 2] << 3) | (imageData[imageOffset + 2] >> 2);\r\n    imageData[imageOffset + 3] = 255;\r\n    return 2;\r\n}\r\nfunction readPixel16Bit(imageData, imageOffset, view, viewOffset) {\r\n    currentValue = view.getUint16(viewOffset, true);\r\n    imageData[imageOffset] = currentValue >> 10 & 0x1f;\r\n    imageData[imageOffset + 1] = currentValue >> 5 & 0x1f;\r\n    imageData[imageOffset + 2] = currentValue & 0x1f;\r\n    imageData[imageOffset] = (imageData[imageOffset] << 3) | (imageData[imageOffset] >> 2);\r\n    imageData[imageOffset + 1] = (imageData[imageOffset + 1] << 3) | (imageData[imageOffset + 1] >> 2);\r\n    imageData[imageOffset + 2] = (imageData[imageOffset + 2] << 3) | (imageData[imageOffset + 2] >> 2);\r\n    imageData[imageOffset + 3] = (currentValue & 0x8000) ? 0 : 255;\r\n    return 2;\r\n}\r\nfunction readPixel24Bit(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset + 2);\r\n    imageData[imageOffset + 1] = view.getUint8(viewOffset + 1);\r\n    imageData[imageOffset + 2] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 3] = 255;\r\n    return 3;\r\n}\r\nfunction readPixel32Bit(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset + 2);\r\n    imageData[imageOffset + 1] = view.getUint8(viewOffset + 1);\r\n    imageData[imageOffset + 2] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 3] = view.getUint8(viewOffset + 3);\r\n    return 4;\r\n}\r\nfunction readPixel32BitNoAlpha(imageData, imageOffset, view, viewOffset) {\r\n    imageData[imageOffset] = view.getUint8(viewOffset + 2);\r\n    imageData[imageOffset + 1] = view.getUint8(viewOffset + 1);\r\n    imageData[imageOffset + 2] = view.getUint8(viewOffset);\r\n    imageData[imageOffset + 3] = 255;\r\n    return 4;\r\n}\r\nfunction parseExtensionArea(ctx) {\r\n    if (ctx.footer?.extensionAreaOffset === undefined || ctx.footer.extensionAreaOffset === 0) {\r\n        return undefined;\r\n    }\r\n    ctx.reader.offset = ctx.footer.extensionAreaOffset;\r\n    const extensionSize = ctx.reader.readUint16();\r\n    if (extensionSize !== 495) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning('TGA file is a version other than v2', ctx.reader.offset - 2));\r\n    }\r\n    const authorName = (0, text_js_1.readText)(ctx, undefined, 41).trim() || undefined;\r\n    const authorComments = (0, text_js_1.readText)(ctx, undefined, 324).trim() || undefined;\r\n    const dateTimestamp = readDateTimestamp(ctx);\r\n    const jobName = (0, text_js_1.readText)(ctx, undefined, 41).trim() || undefined;\r\n    const jobTime = readTimestamp(ctx);\r\n    const softwareId = (0, text_js_1.readText)(ctx, undefined, 41).trim() || undefined;\r\n    const softwareVersionNumber = ctx.reader.readUint8() / 100;\r\n    const softwareVersionLetter = (0, text_js_1.readText)(ctx, undefined, 2);\r\n    let softwareVersion;\r\n    if (softwareVersionNumber === 0 && (softwareVersionLetter === ' ' || softwareVersionLetter.length === 0)) {\r\n        softwareVersion = undefined;\r\n    }\r\n    else {\r\n        softwareVersion = `${softwareVersionNumber}${softwareVersionLetter}`;\r\n    }\r\n    const keyColorA = ctx.reader.readUint8();\r\n    const keyColorR = ctx.reader.readUint8();\r\n    const keyColorG = ctx.reader.readUint8();\r\n    const keyColorB = ctx.reader.readUint8();\r\n    let keyColor;\r\n    if (keyColorA === 0 && keyColorR === 0 && keyColorG === 0 && keyColorB === 0) {\r\n        keyColor = undefined;\r\n    }\r\n    else {\r\n        keyColor = new Uint8Array([keyColorR, keyColorG, keyColorB, keyColorA]);\r\n    }\r\n    const aspectRatioNumerator = ctx.reader.readUint16();\r\n    const aspectRatioDenominator = ctx.reader.readUint16();\r\n    let aspectRatio;\r\n    if (aspectRatioDenominator === 0) {\r\n        aspectRatio = undefined;\r\n    }\r\n    else {\r\n        aspectRatio = aspectRatioNumerator / aspectRatioDenominator;\r\n    }\r\n    const gammaNumerator = ctx.reader.readUint16();\r\n    const gammaDenominator = ctx.reader.readUint16();\r\n    let gamma;\r\n    if (gammaDenominator === 0) {\r\n        gamma = undefined;\r\n    }\r\n    else {\r\n        gamma = gammaNumerator / gammaDenominator;\r\n    }\r\n    const colorCorrectionOffset = ctx.reader.readUint32();\r\n    const postageStampOffset = ctx.reader.readUint32();\r\n    const scanLineOffset = ctx.reader.readUint32();\r\n    const attributesType = ctx.reader.readUint8();\r\n    return {\r\n        extensionSize,\r\n        authorName,\r\n        authorComments,\r\n        dateTimestamp,\r\n        jobName,\r\n        jobTime,\r\n        softwareId,\r\n        softwareVersion,\r\n        keyColor,\r\n        aspectRatio,\r\n        gamma,\r\n        colorCorrectionOffset,\r\n        postageStampOffset,\r\n        scanLineOffset,\r\n        attributesType,\r\n    };\r\n}\r\nfunction parseDeveloperDirectory(ctx) {\r\n    if (ctx.footer?.developerDirectoryOffset === undefined || ctx.footer.developerDirectoryOffset === 0) {\r\n        return [];\r\n    }\r\n    ctx.reader.offset = ctx.footer.developerDirectoryOffset;\r\n    const tagCount = ctx.reader.readUint16();\r\n    const directory = [];\r\n    for (let i = 0; i < tagCount; i++) {\r\n        const tag = ctx.reader.readUint16();\r\n        const offset = ctx.reader.readUint32();\r\n        const length = ctx.reader.readUint32();\r\n        directory.push({ tag, offset, length });\r\n    }\r\n    return directory;\r\n}\r\nfunction readDateTimestamp(ctx) {\r\n    const month = ctx.reader.readUint16();\r\n    const day = ctx.reader.readUint16();\r\n    const year = ctx.reader.readUint16();\r\n    const hour = ctx.reader.readUint16();\r\n    const minute = ctx.reader.readUint16();\r\n    const second = ctx.reader.readUint16();\r\n    if (month === 0 && day === 0 && year === 0 && hour === 0 && minute === 0 && second === 0) {\r\n        return undefined;\r\n    }\r\n    return new Date(year, month, day, hour, minute, second);\r\n}\r\nfunction readTimestamp(ctx) {\r\n    const hours = ctx.reader.readUint16();\r\n    const minutes = ctx.reader.readUint16();\r\n    const seconds = ctx.reader.readUint16();\r\n    if (hours === 0 && minutes === 0 && seconds === 0) {\r\n        return undefined;\r\n    }\r\n    return { hours, minutes, seconds };\r\n}\r\nfunction parseFooter(ctx) {\r\n    ctx.reader.offset = ctx.reader.view.byteLength - 26 + 8;\r\n    const signature = (0, text_js_1.readText)(ctx, undefined, 17);\r\n    if (signature !== 'TRUEVISION-XFILE.' || ctx.reader.readUint8() !== 0) {\r\n        return {\r\n            extensionAreaOffset: 0,\r\n            developerDirectoryOffset: 0\r\n        };\r\n    }\r\n    ctx.reader.offset = ctx.reader.view.byteLength - 26;\r\n    let extensionAreaOffset = ctx.reader.readUint32();\r\n    if (extensionAreaOffset >= ctx.reader.view.byteLength) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Extension area offset \"${extensionAreaOffset}\" is invalid`, ctx.reader.offset - 4));\r\n        extensionAreaOffset = 0;\r\n    }\r\n    let developerDirectoryOffset = ctx.reader.readUint32();\r\n    if (developerDirectoryOffset >= ctx.reader.view.byteLength) {\r\n        (0, assert_js_1.handleWarning)(ctx, new assert_js_1.DecodeWarning(`Developer directory offset \"${developerDirectoryOffset}\" is invalid`, ctx.reader.offset - 4));\r\n        developerDirectoryOffset = 0;\r\n    }\r\n    return {\r\n        extensionAreaOffset,\r\n        developerDirectoryOffset\r\n    };\r\n}\r\n", "\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.decodeTga = exports.DecodeWarning = exports.DecodeError = void 0;\r\nvar assert_js_1 = require(\"../decode/assert.js\");\r\nObject.defineProperty(exports, \"DecodeError\", { enumerable: true, get: function () { return assert_js_1.DecodeError; } });\r\nObject.defineProperty(exports, \"DecodeWarning\", { enumerable: true, get: function () { return assert_js_1.DecodeWarning; } });\r\nasync function decodeTga(data, options) {\r\n    return (await Promise.resolve().then(() => require('../decode/decoder.js'))).decodeTga(data, options);\r\n}\r\nexports.decodeTga = decodeTga;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n// ============================================================================\r\n// AMBIENT TYPE DECLARATIONS FOR BROWSER APIS\r\n// ============================================================================\r\n// These declarations allow TypeScript to understand browser APIs when compiling\r\n// for non-DOM environments (VS Code extension, Node.js). The runtime code uses\r\n// typeof checks to ensure these APIs are only called in browser contexts.\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\ndeclare const createImageBitmap: ((blob: Blob) => Promise<ImageBitmap>) | undefined;\r\ndeclare const document: { createElement(tagName: \"canvas\"): HTMLCanvasElement } | undefined;\r\n\r\ninterface ImageBitmap {\r\n  readonly width: number;\r\n  readonly height: number;\r\n  close(): void;\r\n}\r\n\r\ninterface ImageData {\r\n  readonly data: Uint8ClampedArray;\r\n  readonly width: number;\r\n  readonly height: number;\r\n}\r\n\r\ninterface CanvasRenderingContext2D {\r\n  drawImage(image: ImageBitmap, dx: number, dy: number): void;\r\n  getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;\r\n  createImageData(sw: number, sh: number): ImageData;\r\n  putImageData(imageData: ImageData, dx: number, dy: number): void;\r\n}\r\n\r\ninterface HTMLCanvasElement {\r\n  width: number;\r\n  height: number;\r\n  getContext(contextId: \"2d\"): CanvasRenderingContext2D | null;\r\n  toBlob(callback: (blob: Blob | null) => void, type?: string, quality?: number): void;\r\n}\r\n\r\ninterface OffscreenCanvasRenderingContext2D {\r\n  drawImage(image: ImageBitmap, dx: number, dy: number): void;\r\n  getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;\r\n  createImageData(sw: number, sh: number): ImageData;\r\n  putImageData(imageData: ImageData, dx: number, dy: number): void;\r\n}\r\n\r\ndeclare class OffscreenCanvas {\r\n  constructor(width: number, height: number);\r\n  width: number;\r\n  height: number;\r\n  getContext(contextId: \"2d\"): OffscreenCanvasRenderingContext2D | null;\r\n  convertToBlob(options?: { type?: string; quality?: number }): Promise<Blob>;\r\n}\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n/**\r\n * ImageCodec - Unified cross-platform image encoding/decoding utilities\r\n *\r\n * ARCHITECTURE NOTES:\r\n * ------------------\r\n * This module consolidates all image encoding/decoding logic that was previously\r\n * scattered across multiple files:\r\n *\r\n * - TGA decoding: Previously in TextureDefinition, Model2DRenderer, project.worker,\r\n *   ImageManager, ModelMeshFactory\r\n * - PNG decoding: Previously in Model2DRenderer, TextureDefinition, project.worker\r\n * - PNG encoding: Previously in ImageGenerationUtilities\r\n *\r\n * PLATFORM SUPPORT:\r\n * -----------------\r\n * This module supports three environments:\r\n *\r\n * 1. **Node.js** (CLI, server, VS Code extension host):\r\n *    - Uses pngjs for fast synchronous PNG encoding/decoding\r\n *    - Uses zlib for compression\r\n *    - Uses Buffer for binary data\r\n *    - Import: `import ImageCodec from \"../core/ImageCodec\"`\r\n *\r\n * 2. **Browser main thread** (web app, Electron renderer):\r\n *    - Uses Canvas/HTMLImageElement for PNG decoding\r\n *    - Uses createImageBitmap + canvas.toDataURL for encoding\r\n *    - Falls back to Pako for zlib if available\r\n *\r\n * 3. **Web Worker** (project.worker.ts):\r\n *    - Uses OffscreenCanvas + createImageBitmap\r\n *    - No DOM access\r\n *\r\n * ENVIRONMENT DETECTION:\r\n * ----------------------\r\n * The module auto-detects the environment using:\r\n * - `typeof Buffer !== \"undefined\"` for Node.js\r\n * - `typeof createImageBitmap !== \"undefined\"` for browser/worker\r\n * - `typeof OffscreenCanvas !== \"undefined\"` for web worker\r\n * - `typeof document !== \"undefined\"` for browser main thread\r\n *\r\n * For explicit control, use CreatorToolsHost.isNodeJs.\r\n *\r\n * USAGE:\r\n * ------\r\n * ```typescript\r\n * import ImageCodec, { IDecodedImage } from \"../core/ImageCodec\";\r\n *\r\n * // Decode any image type (auto-detects format)\r\n * const decoded = await ImageCodec.decodeAuto(data);\r\n *\r\n * // Decode specific format\r\n * const png = await ImageCodec.decodePng(data);\r\n * const tga = await ImageCodec.decodeTga(data);\r\n *\r\n * // Encode to PNG\r\n * const pngBytes = await ImageCodec.encodeToPng(pixels, width, height);\r\n *\r\n * // Convert TGA to PNG\r\n * const pngBytes = await ImageCodec.tgaToPng(tgaData);\r\n *\r\n * // Check format\r\n * if (ImageCodec.isTgaData(data)) { ... }\r\n *\r\n * // Get data URL\r\n * const dataUrl = ImageCodec.toDataUrl(pngBytes, \"image/png\");\r\n * ```\r\n *\r\n * NODE.JS ONLY USAGE:\r\n * -------------------\r\n * For Node.js-only code (tests, CLI), you can import ImageCodecNode directly\r\n * for synchronous operations:\r\n *\r\n * ```typescript\r\n * import ImageCodecNode from \"../local/ImageCodecNode\";\r\n * const decoded = ImageCodecNode.decodePng(data); // synchronous\r\n * ```\r\n *\r\n * Related files:\r\n * - ImageCodecNode.ts - Node.js-specific implementation (pngjs, zlib)\r\n * - ImageGenerationUtilities.ts - Higher-level image generation (SVG\u2192PNG, atlas)\r\n * - TextureDefinition.ts - Minecraft texture file wrapper\r\n * - Model2DRenderer.ts - 2D model rendering\r\n * - ModelMeshFactory.ts - 3D mesh creation\r\n */\r\n\r\nimport Log from \"./Log\";\r\nimport Utilities from \"./Utilities\";\r\nimport { decodeTga as decodeTgaCodec } from \"@lunapaint/tga-codec\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\n/**\r\n * Decoded image pixel data.\r\n * All decoders return this common format.\r\n */\r\nexport interface IDecodedImage {\r\n  /** Image width in pixels */\r\n  width: number;\r\n  /** Image height in pixels */\r\n  height: number;\r\n  /** RGBA pixel data (4 bytes per pixel: R, G, B, A) */\r\n  pixels: Uint8Array;\r\n}\r\n\r\n/**\r\n * Supported image formats for decoding\r\n */\r\nexport type ImageFormat = \"png\" | \"tga\" | \"jpg\" | \"jpeg\";\r\n\r\n/**\r\n * Check if we're in a browser environment with canvas support.\r\n */\r\nfunction isBrowserEnvironment(): boolean {\r\n  return typeof createImageBitmap !== \"undefined\" || typeof document !== \"undefined\";\r\n}\r\n\r\n/**\r\n * Check if we're in a web worker (OffscreenCanvas available, no document).\r\n */\r\nfunction isWebWorkerEnvironment(): boolean {\r\n  return typeof OffscreenCanvas !== \"undefined\" && typeof document === \"undefined\";\r\n}\r\n\r\n/**\r\n * Unified image encoding/decoding utilities.\r\n *\r\n * This is the main entry point for all image operations.\r\n * It automatically selects the best implementation for the current environment.\r\n */\r\nexport default class ImageCodec {\r\n  // Cached CRC32 table for PNG encoding (browser fallback)\r\n  private static _crc32Table: Uint32Array | undefined;\r\n\r\n  // ============================================================================\r\n  // TGA DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode TGA image data to RGBA pixels.\r\n   * Works in all environments (Node.js, browser, web worker).\r\n   *\r\n   * Uses @lunapaint/tga-codec which handles:\r\n   * - Uncompressed true-color (type 2)\r\n   * - Uncompressed grayscale (type 3)\r\n   * - RLE compressed (types 9, 10, 11)\r\n   * - Various bit depths (8, 16, 24, 32)\r\n   *\r\n   * @param data Raw TGA file bytes\r\n   * @returns Decoded image with RGBA pixels, or undefined if decoding fails\r\n   */\r\n  static async decodeTga(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    try {\r\n      // Use the statically imported decodeTga function\r\n      // This ensures the codec is bundled and works in web workers\r\n      const decoded = await decodeTgaCodec(data);\r\n      return {\r\n        width: decoded.image.width,\r\n        height: decoded.image.height,\r\n        pixels: new Uint8Array(decoded.image.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`TGA decode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode PNG image data to RGBA pixels.\r\n   * Automatically uses the best decoder for the current environment.\r\n   *\r\n   * - Node.js: Uses pngjs (synchronous, fast)\r\n   * - Browser: Uses createImageBitmap + Canvas (async)\r\n   * - Web Worker: Uses createImageBitmap + OffscreenCanvas (async)\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Decoded image with RGBA pixels, or undefined if decoding fails\r\n   */\r\n  static async decodePng(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    // Try Node.js decoder first via platform thunk (faster, synchronous)\r\n    if (CreatorToolsHost.decodePng) {\r\n      try {\r\n        const result = CreatorToolsHost.decodePng(data);\r\n        if (result) return result;\r\n      } catch (e) {\r\n        Log.debug(`Node PNG decode failed, falling back to browser: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Fall back to browser decoder\r\n    return this.decodePngBrowser(data);\r\n  }\r\n\r\n  /**\r\n   * Decode PNG using browser APIs (createImageBitmap + Canvas).\r\n   * Works in browser main thread and web workers.\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Decoded image, or undefined if not in browser or decoding fails\r\n   */\r\n  static async decodePngBrowser(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    if (typeof createImageBitmap === \"undefined\") {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      const blob = new Blob([data], { type: \"image/png\" });\r\n      const imageBitmap = await createImageBitmap(blob);\r\n\r\n      let canvas: OffscreenCanvas | HTMLCanvasElement;\r\n      let ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;\r\n\r\n      if (isWebWorkerEnvironment()) {\r\n        canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\r\n        ctx = canvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D | null;\r\n      } else if (typeof document !== \"undefined\") {\r\n        canvas = document.createElement(\"canvas\");\r\n        canvas.width = imageBitmap.width;\r\n        canvas.height = imageBitmap.height;\r\n        ctx = canvas.getContext(\"2d\");\r\n      } else {\r\n        return undefined;\r\n      }\r\n\r\n      if (!ctx) return undefined;\r\n\r\n      ctx.drawImage(imageBitmap, 0, 0);\r\n      const imageData = ctx.getImageData(0, 0, imageBitmap.width, imageBitmap.height);\r\n\r\n      return {\r\n        width: imageBitmap.width,\r\n        height: imageBitmap.height,\r\n        pixels: new Uint8Array(imageData.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`Browser PNG decode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // JPEG DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode JPEG image data to RGBA pixels.\r\n   * Only works in browser environments (uses createImageBitmap).\r\n   *\r\n   * @param data Raw JPEG file bytes\r\n   * @returns Decoded image with RGBA pixels, or undefined if decoding fails\r\n   */\r\n  static async decodeJpeg(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    if (!isBrowserEnvironment()) {\r\n      Log.debug(\"JPEG decoding requires browser environment\");\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      const blob = new Blob([data], { type: \"image/jpeg\" });\r\n      if (typeof createImageBitmap === \"undefined\") {\r\n        return undefined;\r\n      }\r\n      const imageBitmap = await createImageBitmap(blob);\r\n\r\n      let canvas: OffscreenCanvas | HTMLCanvasElement;\r\n      let ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;\r\n\r\n      if (isWebWorkerEnvironment()) {\r\n        canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\r\n        ctx = canvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D | null;\r\n      } else if (typeof document !== \"undefined\") {\r\n        canvas = document.createElement(\"canvas\");\r\n        canvas.width = imageBitmap.width;\r\n        canvas.height = imageBitmap.height;\r\n        ctx = canvas.getContext(\"2d\");\r\n      } else {\r\n        return undefined;\r\n      }\r\n\r\n      if (!ctx) return undefined;\r\n\r\n      ctx.drawImage(imageBitmap, 0, 0);\r\n      const imageData = ctx.getImageData(0, 0, imageBitmap.width, imageBitmap.height);\r\n\r\n      return {\r\n        width: imageBitmap.width,\r\n        height: imageBitmap.height,\r\n        pixels: new Uint8Array(imageData.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`JPEG decode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // UNIFIED DECODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode image data to RGBA pixels based on specified format.\r\n   *\r\n   * @param data Raw image file bytes\r\n   * @param format File format (\"png\", \"tga\", \"jpg\", \"jpeg\")\r\n   * @returns Decoded image, or undefined if decoding fails\r\n   */\r\n  static async decode(data: Uint8Array, format: ImageFormat | string): Promise<IDecodedImage | undefined> {\r\n    const normalizedFormat = format.toLowerCase().replace(\".\", \"\") as ImageFormat;\r\n\r\n    switch (normalizedFormat) {\r\n      case \"tga\":\r\n        return this.decodeTga(data);\r\n      case \"png\":\r\n        return this.decodePng(data);\r\n      case \"jpg\":\r\n      case \"jpeg\":\r\n        return this.decodeJpeg(data);\r\n      default:\r\n        Log.debug(`Unsupported image format: ${format}`);\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Decode image data, auto-detecting format from file header.\r\n   *\r\n   * @param data Raw image file bytes\r\n   * @returns Decoded image, or undefined if format unknown or decoding fails\r\n   */\r\n  static async decodeAuto(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    const format = this.detectFormat(data);\r\n    if (!format) {\r\n      Log.debug(\"Could not detect image format from file header\");\r\n      return undefined;\r\n    }\r\n    return this.decode(data, format);\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG ENCODING\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format.\r\n   * Automatically uses the best encoder for the current environment.\r\n   *\r\n   * - Node.js: Uses pngjs (synchronous, optimized)\r\n   * - Browser: Uses canvas.toBlob (async)\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG file bytes, or undefined if encoding fails\r\n   */\r\n  static async encodeToPng(pixels: Uint8Array, width: number, height: number): Promise<Uint8Array | undefined> {\r\n    // Try Node.js encoder first via platform thunk\r\n    if (CreatorToolsHost.encodeToPng) {\r\n      try {\r\n        const result = CreatorToolsHost.encodeToPng(pixels, width, height);\r\n        if (result) return result;\r\n      } catch (e) {\r\n        Log.debug(`Node PNG encode failed, falling back to browser: ${e}`);\r\n      }\r\n    }\r\n\r\n    // Fall back to browser encoder\r\n    return this.encodeToPngBrowser(pixels, width, height);\r\n  }\r\n\r\n  /**\r\n   * Synchronous PNG encoding (Node.js only).\r\n   * Use this when you need synchronous behavior and know you're in Node.js.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG file bytes, or undefined if not in Node.js or encoding fails\r\n   */\r\n  static encodeToPngSync(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    // Use platform thunk if available (Node.js environments)\r\n    if (CreatorToolsHost.encodeToPng) {\r\n      try {\r\n        return CreatorToolsHost.encodeToPng(pixels, width, height);\r\n      } catch (e) {\r\n        Log.debug(`Sync PNG encode failed: ${e}`);\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    // Not available in browser environments\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixels to PNG using browser Canvas API.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width in pixels\r\n   * @param height Image height in pixels\r\n   * @returns PNG file bytes, or undefined if not in browser or encoding fails\r\n   */\r\n  static async encodeToPngBrowser(pixels: Uint8Array, width: number, height: number): Promise<Uint8Array | undefined> {\r\n    try {\r\n      let offscreenCanvas: OffscreenCanvas | undefined;\r\n      let htmlCanvas: HTMLCanvasElement | undefined;\r\n      let ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;\r\n\r\n      if (isWebWorkerEnvironment()) {\r\n        offscreenCanvas = new OffscreenCanvas(width, height);\r\n        ctx = offscreenCanvas.getContext(\"2d\") as OffscreenCanvasRenderingContext2D | null;\r\n      } else if (typeof document !== \"undefined\") {\r\n        htmlCanvas = document.createElement(\"canvas\");\r\n        htmlCanvas.width = width;\r\n        htmlCanvas.height = height;\r\n        ctx = htmlCanvas.getContext(\"2d\");\r\n      } else {\r\n        return undefined;\r\n      }\r\n\r\n      if (!ctx) return undefined;\r\n\r\n      const imageData = ctx.createImageData(width, height);\r\n      imageData.data.set(pixels);\r\n      ctx.putImageData(imageData, 0, 0);\r\n\r\n      // Get PNG data\r\n      if (offscreenCanvas) {\r\n        const blob = await (offscreenCanvas as any).convertToBlob({ type: \"image/png\" });\r\n        const arrayBuffer = await blob.arrayBuffer();\r\n        return new Uint8Array(arrayBuffer);\r\n      } else if (htmlCanvas) {\r\n        return new Promise<Uint8Array | undefined>((resolve) => {\r\n          htmlCanvas!.toBlob(\r\n            async (blob) => {\r\n              if (!blob) {\r\n                resolve(undefined);\r\n                return;\r\n              }\r\n              const arrayBuffer = await blob.arrayBuffer();\r\n              resolve(new Uint8Array(arrayBuffer));\r\n            },\r\n            \"image/png\",\r\n            1.0\r\n          );\r\n        });\r\n      }\r\n      return undefined;\r\n    } catch (e) {\r\n      Log.debug(`Browser PNG encode failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // FORMAT DETECTION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Check if data is a PNG file (magic number: 0x89 0x50 0x4E 0x47).\r\n   */\r\n  static isPngData(data: Uint8Array): boolean {\r\n    return data.length >= 4 && data[0] === 0x89 && data[1] === 0x50 && data[2] === 0x4e && data[3] === 0x47;\r\n  }\r\n\r\n  /**\r\n   * Check if data is a JPEG file (magic number: 0xFF 0xD8 0xFF).\r\n   */\r\n  static isJpegData(data: Uint8Array): boolean {\r\n    return data.length >= 3 && data[0] === 0xff && data[1] === 0xd8 && data[2] === 0xff;\r\n  }\r\n\r\n  /**\r\n   * Check if data is a TGA file.\r\n   *\r\n   * TGA has no magic number, so we check:\r\n   * 1. It's NOT PNG or JPEG (which have magic numbers)\r\n   * 2. Byte 2 (image type) is a valid TGA type\r\n   *\r\n   * Valid TGA types:\r\n   * - 1: Uncompressed color-mapped\r\n   * - 2: Uncompressed true-color\r\n   * - 3: Uncompressed grayscale\r\n   * - 9: RLE color-mapped\r\n   * - 10: RLE true-color\r\n   * - 11: RLE grayscale\r\n   */\r\n  static isTgaData(data: Uint8Array): boolean {\r\n    if (data.length < 18) return false;\r\n    if (this.isPngData(data) || this.isJpegData(data)) return false;\r\n\r\n    const imageType = data[2];\r\n    return [1, 2, 3, 9, 10, 11].includes(imageType);\r\n  }\r\n\r\n  /**\r\n   * Detect image format from file header bytes.\r\n   *\r\n   * @param data Raw file bytes\r\n   * @returns Detected format, or undefined if unknown\r\n   */\r\n  static detectFormat(data: Uint8Array): ImageFormat | undefined {\r\n    if (this.isPngData(data)) return \"png\";\r\n    if (this.isJpegData(data)) return \"jpg\";\r\n    if (this.isTgaData(data)) return \"tga\";\r\n    return undefined;\r\n  }\r\n\r\n  // ============================================================================\r\n  // DATA URL CONVERSION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert raw image bytes to a data URL.\r\n   *\r\n   * @param data Image file bytes (PNG, JPEG, etc.)\r\n   * @param mimeType MIME type (e.g., \"image/png\")\r\n   * @returns Data URL string (data:image/png;base64,...)\r\n   */\r\n  static toDataUrl(data: Uint8Array, mimeType: string): string {\r\n    const base64 = Utilities.uint8ArrayToBase64(data);\r\n    return `data:${mimeType};base64,${base64}`;\r\n  }\r\n\r\n  /**\r\n   * Convert decoded image to PNG data URL.\r\n   *\r\n   * @param image Decoded image with RGBA pixels\r\n   * @returns PNG data URL, or undefined if encoding fails\r\n   */\r\n  static async toPngDataUrl(image: IDecodedImage): Promise<string | undefined> {\r\n    const pngData = await this.encodeToPng(image.pixels, image.width, image.height);\r\n    if (!pngData) return undefined;\r\n    return this.toDataUrl(pngData, \"image/png\");\r\n  }\r\n\r\n  // ============================================================================\r\n  // TGA TO PNG CONVERSION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert TGA data directly to PNG data.\r\n   *\r\n   * @param tgaData Raw TGA file bytes\r\n   * @returns PNG file bytes, or undefined if conversion fails\r\n   */\r\n  static async tgaToPng(tgaData: Uint8Array): Promise<Uint8Array | undefined> {\r\n    const decoded = await this.decodeTga(tgaData);\r\n    if (!decoded) return undefined;\r\n    return this.encodeToPng(decoded.pixels, decoded.width, decoded.height);\r\n  }\r\n\r\n  /**\r\n   * Convert TGA data to PNG data URL.\r\n   *\r\n   * @param tgaData Raw TGA file bytes\r\n   * @returns PNG data URL (data:image/png;base64,...), or undefined if fails\r\n   */\r\n  static async tgaToPngDataUrl(tgaData: Uint8Array): Promise<string | undefined> {\r\n    const pngData = await this.tgaToPng(tgaData);\r\n    if (!pngData) return undefined;\r\n    return this.toDataUrl(pngData, \"image/png\");\r\n  }\r\n\r\n  // ============================================================================\r\n  // PIXEL MANIPULATION UTILITIES\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert BGRA pixel data to RGBA.\r\n   * TGA files often store pixels in BGRA format.\r\n   *\r\n   * @param pixels BGRA pixel data (modified in place)\r\n   * @returns The same array with R and B swapped\r\n   */\r\n  static bgraToRgba(pixels: Uint8Array): Uint8Array {\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      const b = pixels[i];\r\n      pixels[i] = pixels[i + 2]; // R = B\r\n      pixels[i + 2] = b; // B = R\r\n    }\r\n    return pixels;\r\n  }\r\n\r\n  /**\r\n   * Create a solid color image.\r\n   *\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @param r Red component (0-255)\r\n   * @param g Green component (0-255)\r\n   * @param b Blue component (0-255)\r\n   * @param a Alpha component (0-255, default 255)\r\n   * @returns Decoded image with solid color\r\n   */\r\n  static createSolidColor(\r\n    width: number,\r\n    height: number,\r\n    r: number,\r\n    g: number,\r\n    b: number,\r\n    a: number = 255\r\n  ): IDecodedImage {\r\n    const pixels = new Uint8Array(width * height * 4);\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      pixels[i] = r;\r\n      pixels[i + 1] = g;\r\n      pixels[i + 2] = b;\r\n      pixels[i + 3] = a;\r\n    }\r\n    return { width, height, pixels };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities, { AllowedExtensionsSet } from \"../storage/StorageUtilities\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Project from \"../app/Project\";\r\nimport * as exifrModule from \"exifr\";\r\n// Handle CJS/ESM interop: esbuild wraps CJS default export, while ts-node uses named exports directly\r\nconst Exifr = (exifrModule as any).Exifr || (exifrModule as any).default?.Exifr;\r\nimport ImageCodec from \"../core/ImageCodec\";\r\n\r\nexport type ImageCoords = {\r\n  x1: number;\r\n  y1: number;\r\n  x2: number;\r\n  y2: number;\r\n};\r\n\r\nexport const VibrantVisualsFileExtensionVariants = [\r\n  \"_mer.png\",\r\n  \"_mer.tga\",\r\n  \"_mers.png\",\r\n  \"_mers.tga\",\r\n  // \"_normal.png\", <-- too many false positives\r\n  // \"_normal.tga\",\r\n  \".texture_set.json\",\r\n];\r\n\r\nexport default class TextureDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _isContentProcessed: boolean = false;\r\n  private _width: number | undefined;\r\n  private _height: number | undefined;\r\n  private _errorMessage: string | undefined;\r\n  private _errorProcessing: boolean | undefined;\r\n  private _imageData: Uint8Array | undefined;\r\n\r\n  private _onLoaded = new EventDispatcher<TextureDefinition, TextureDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get width() {\r\n    return this._width;\r\n  }\r\n\r\n  public get height() {\r\n    return this._height;\r\n  }\r\n\r\n  public get errorMessage() {\r\n    return this._errorMessage;\r\n  }\r\n\r\n  public get errorProcessing() {\r\n    return this._errorProcessing;\r\n  }\r\n\r\n  public get imageData() {\r\n    return this._imageData;\r\n  }\r\n\r\n  public get data() {\r\n    if (!this._file || !this._file.content || typeof this._file.content === \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    return this._file.content;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  getPixel(x: number, y: number) {\r\n    if (!this._imageData) {\r\n      throw new Error(\"Image data is not available.\");\r\n    }\r\n\r\n    const width = this._width ?? 0;\r\n    const height = this._height ?? 0;\r\n\r\n    if (x < 0 || x >= width || y < 0 || y >= height) {\r\n      throw new Error(\"Invalid pixel coordinates.\");\r\n    }\r\n\r\n    const index = (y * width + x) * 4;\r\n    return {\r\n      r: this._imageData[index],\r\n      g: this._imageData[index + 1],\r\n      b: this._imageData[index + 2],\r\n      a: this._imageData[index + 3],\r\n    };\r\n  }\r\n\r\n  get isContentProcessed() {\r\n    return this._isContentProcessed;\r\n  }\r\n\r\n  async processContent() {\r\n    if (this._isContentProcessed) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || !(this._file.content instanceof Uint8Array)) {\r\n      return;\r\n    }\r\n\r\n    if (this._file.type !== \"tga\") {\r\n      const exifr = new Exifr({});\r\n\r\n      try {\r\n        await exifr.read(this._file.content);\r\n\r\n        const results = await exifr.parse();\r\n\r\n        if (!results) {\r\n          this._errorProcessing = true;\r\n          this._errorMessage = \"No results returned.\";\r\n        } else {\r\n          this._width = results.ImageWidth;\r\n          this._height = results.ImageHeight;\r\n        }\r\n      } catch (e: any) {\r\n        this._errorProcessing = true;\r\n        this._errorMessage = e.message ? e.message : e.toString();\r\n      }\r\n    } else {\r\n      try {\r\n        const decoded = await ImageCodec.decodeTga(this._file.content);\r\n\r\n        if (decoded) {\r\n          this._width = decoded.width;\r\n          this._height = decoded.height;\r\n          this._imageData = decoded.pixels;\r\n        } else {\r\n          this._errorProcessing = true;\r\n          this._errorMessage = \"Failed to decode TGA image.\";\r\n        }\r\n      } catch (e: any) {\r\n        this._errorProcessing = true;\r\n        this._errorMessage = e.message ? e.message : e.toString();\r\n      }\r\n    }\r\n\r\n    /*\r\n    this usage of pngjs didn't seem to work for a significant portion of PNGs\r\n    same with the upnp library\r\n    if (this._file.type === \"png\" && this._file.content && this._file.content instanceof Uint8Array) {\r\n      try {\r\n        const pngm = PNG.sync.read(Buffer.from(this._file.content.buffer));\r\n\r\n        if (pngm.width !== this._width || pngm.height !== this._height) {\r\n          throw new Error(\"Mismatch in parsed image dimensions.\");\r\n        }\r\n\r\n        this._imageData = new Uint8Array(pngm.data);\r\n      } catch (e: any) {\r\n        Log.verbose(\"Could not get PNG data for \" + this._file.extendedPath);\r\n      }\r\n    }*/\r\n\r\n    this._isContentProcessed = true;\r\n  }\r\n\r\n  unloadContent() {\r\n    this._isContentProcessed = false;\r\n    this._imageData = undefined;\r\n  }\r\n\r\n  /**\r\n   * Decode image data (PNG or TGA) to raw RGBA pixels.\r\n   * This is a shared utility method for use by Model2DRenderer, ModelMeshFactory, etc.\r\n   *\r\n   * @param data Raw image file bytes\r\n   * @param fileType File extension ('png' or 'tga')\r\n   * @returns Decoded pixels with width, height, and RGBA data, or undefined if decoding fails\r\n   */\r\n  static async decodeToPixels(\r\n    data: Uint8Array,\r\n    fileType: string\r\n  ): Promise<{ width: number; height: number; pixels: Uint8Array } | undefined> {\r\n    if (fileType === \"tga\") {\r\n      return ImageCodec.decodeTga(data);\r\n    } else if (fileType === \"png\") {\r\n      return ImageCodec.decodePng(data);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<TextureDefinition, TextureDefinition>) {\r\n    let texd: TextureDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      texd = new TextureDefinition();\r\n\r\n      texd.file = file;\r\n\r\n      file.manager = texd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TextureDefinition) {\r\n      texd = file.manager as TextureDefinition;\r\n\r\n      if (!texd.isLoaded) {\r\n        if (loadHandler) {\r\n          texd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await texd.load();\r\n      }\r\n    }\r\n\r\n    return texd;\r\n  }\r\n\r\n  getReferencePath() {\r\n    if (!this._file) {\r\n      return undefined;\r\n    }\r\n\r\n    let projectPath = this._file.storageRelativePath;\r\n\r\n    return TextureDefinition.getTexturePath(projectPath);\r\n  }\r\n\r\n  static canonicalizeTexturePath(projectPath: string | undefined) {\r\n    if (projectPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    projectPath = projectPath.toLowerCase();\r\n\r\n    const lastPeriod = projectPath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      const removedPart = projectPath.substring(lastPeriod + 1);\r\n\r\n      if (AllowedExtensionsSet.has(removedPart)) {\r\n        projectPath = projectPath.substring(0, lastPeriod);\r\n      }\r\n    }\r\n\r\n    return projectPath;\r\n  }\r\n\r\n  static getTexturePath(projectPath: string) {\r\n    const lastPeriod = projectPath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      projectPath = projectPath.substring(0, lastPeriod);\r\n    }\r\n\r\n    const ppLower = projectPath.toLowerCase();\r\n\r\n    const texturesIndex = ppLower.indexOf(\"/textures/\");\r\n\r\n    if (texturesIndex < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return projectPath.substring(texturesIndex + 1);\r\n  }\r\n\r\n  persist(): boolean {\r\n    return false;\r\n  }\r\n\r\n  async load() {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TSCDF\");\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (!this._file.content || typeof this._file.content === \"string\") {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    // Only process VV sidecar files for this specific texture item\r\n    let pf = item.primaryFile;\r\n\r\n    if (!pf) {\r\n      await item.ensureStorage();\r\n      pf = item.primaryFile;\r\n    }\r\n\r\n    if (pf) {\r\n      const parentFolder = pf.parentFolder;\r\n\r\n      if (!parentFolder) {\r\n        return;\r\n      }\r\n\r\n      if (!parentFolder.isLoaded) {\r\n        await parentFolder.load();\r\n      }\r\n\r\n      let baseName = StorageUtilities.getBaseFromName(pf.name);\r\n      const parentFiles = parentFolder.files;\r\n\r\n      for (const ext of VibrantVisualsFileExtensionVariants) {\r\n        const vvSidecarFile = parentFiles[baseName + ext];\r\n        if (vvSidecarFile !== undefined && vvSidecarFile.extendedPath) {\r\n          const sidecarItem = project.getItemByExtendedOrProjectPath(vvSidecarFile.extendedPath);\r\n\r\n          if (sidecarItem && sidecarItem !== item) {\r\n            item.addChildItem(sidecarItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IItemTexture, IItemTextureNode } from \"./IItemTexture\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class ItemTextureCatalogDefinition {\r\n  private _data?: IItemTexture;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<ItemTextureCatalogDefinition, ItemTextureCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get textureData() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.texture_data === undefined) {\r\n      this._data.texture_data = {};\r\n    }\r\n\r\n    return this._data.texture_data;\r\n  }\r\n\r\n  public getCanonicalizedTexturePathList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      const texturePathArr = this._data.texture_data[key];\r\n\r\n      if (texturePathArr && texturePathArr.textures) {\r\n        if (typeof texturePathArr.textures === \"string\") {\r\n          const path = TextureDefinition.canonicalizeTexturePath(texturePathArr.textures);\r\n          if (path) {\r\n            textureList.push(path);\r\n          }\r\n        } else if (Array.isArray(texturePathArr.textures)) {\r\n          for (const texturePath of texturePathArr.textures) {\r\n            if (typeof texturePath === \"string\") {\r\n              const path = TextureDefinition.canonicalizeTexturePath(texturePath);\r\n              if (path) {\r\n                textureList.push(path);\r\n              }\r\n            } else if (texturePath) {\r\n              let tpath: string | undefined = (texturePath as IItemTextureNode).path;\r\n              if (typeof tpath === \"string\") {\r\n                tpath = TextureDefinition.canonicalizeTexturePath(tpath);\r\n                if (tpath) {\r\n                  textureList.push(tpath);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public getTexturePathList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      const texturePathArr = this._data.texture_data[key];\r\n\r\n      if (texturePathArr && texturePathArr.textures) {\r\n        if (typeof texturePathArr.textures === \"string\") {\r\n          textureList.push(texturePathArr.textures);\r\n        } else if (Array.isArray(texturePathArr.textures)) {\r\n          for (const texturePath of texturePathArr.textures) {\r\n            if (typeof texturePath === \"string\") {\r\n              const path = TextureDefinition.canonicalizeTexturePath(texturePath);\r\n              if (path) {\r\n                textureList.push(path);\r\n              }\r\n            } else if (texturePath) {\r\n              let tpath: string | undefined = (texturePath as IItemTextureNode).path;\r\n              if (typeof tpath === \"string\") {\r\n                tpath = TextureDefinition.canonicalizeTexturePath(tpath);\r\n                if (tpath) {\r\n                  textureList.push(tpath);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ItemTextureCatalogDefinition, ItemTextureCatalogDefinition>\r\n  ) {\r\n    let et: ItemTextureCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new ItemTextureCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ItemTextureCatalogDefinition) {\r\n      et = file.manager as ItemTextureCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  getTextureReferences() {\r\n    const textureRefs: string[] = [];\r\n    if (this.data?.texture_data) {\r\n      for (const resourceId in this.data.texture_data) {\r\n        const resource = this.data.texture_data[resourceId];\r\n\r\n        if (resource && resource.textures) {\r\n          if (!textureRefs.includes(resourceId)) {\r\n            textureRefs.push(resourceId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureRefs;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let texturePathList = this.getCanonicalizedTexturePathList();\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && texturePathList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n            StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n          );\r\n\r\n          if (relativePath) {\r\n            if (texturePathList && texturePathList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              texturePathList = Utilities.removeItemInArray(relativePath, texturePathList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (texturePathList) {\r\n      for (const texturePath of texturePathList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.isVanillaToken(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ITCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class INbtTag {\r\n  type?: number = 99;\r\n  name?: string;\r\n  value?: string | number | bigint | bigint[] | number[] | boolean | null;\r\n  childTagType?: number;\r\n  children?: INbtTag[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"./../core/Utilities\";\r\nimport Log from \"./../core/Log\";\r\n\r\nimport INbtTag from \"./INbtTag\";\r\n\r\nexport enum NbtTagType {\r\n  end = 0,\r\n  byte = 1,\r\n  short = 2,\r\n  int = 3,\r\n  long = 4,\r\n  float = 5,\r\n  double = 6,\r\n  byteArray = 7,\r\n  string = 8,\r\n  list = 9,\r\n  compound = 10,\r\n  intArray = 11,\r\n  longArray = 12,\r\n  unknown = 99,\r\n}\r\n\r\nexport default class NbtBinaryTag {\r\n  type: NbtTagType;\r\n  childTagType: NbtTagType = NbtTagType.unknown;\r\n  name: string;\r\n\r\n  value: string | number | bigint | bigint[] | number[] | boolean | null = null;\r\n\r\n  isListChild: boolean;\r\n\r\n  private _children: NbtBinaryTag[] = [];\r\n\r\n  get childrenWithEnd() {\r\n    return this._children;\r\n  }\r\n\r\n  getTagChildren(): NbtBinaryTag[] {\r\n    if (this._children.length === 0) {\r\n      return [];\r\n    }\r\n\r\n    if (this.lastTagIsEnd) {\r\n      return this._children.slice(0, -1);\r\n    }\r\n\r\n    return this._children;\r\n  }\r\n\r\n  getTagLength() {\r\n    if (this.lastTagIsEnd) {\r\n      return this._children.length - 1;\r\n    }\r\n\r\n    return this._children.length;\r\n  }\r\n\r\n  get lastTagIsEnd() {\r\n    if (this._children.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    const lastTag = this._children[this._children.length - 1];\r\n\r\n    if (lastTag.type === NbtTagType.end) {\r\n      return true;\r\n    } else if (this.childTagType === NbtTagType.end && lastTag._children.length === 0) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  get valueAsString() {\r\n    if (typeof this.value === \"number\") {\r\n      return this.value.toString();\r\n    } else if (typeof this.value === \"string\") {\r\n      return this.value;\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  get valueAsJSONObject() {\r\n    let obj = undefined;\r\n    const str = this.valueAsString;\r\n\r\n    if (str) {\r\n      try {\r\n        obj = JSON.parse(str);\r\n      } catch (e) {\r\n        obj = undefined;\r\n      }\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  get valueAsNumericArray() {\r\n    const childTags = this.getTagChildren();\r\n    const numarr = [];\r\n\r\n    for (const childTag of childTags) {\r\n      numarr.push(childTag.valueAsInt);\r\n    }\r\n\r\n    return numarr;\r\n  }\r\n\r\n  get valueAsStringArray() {\r\n    const childTags = this.getTagChildren();\r\n    const numarr = [];\r\n\r\n    for (const childTag of childTags) {\r\n      numarr.push(childTag.valueAsString);\r\n    }\r\n\r\n    return numarr;\r\n  }\r\n\r\n  get valueAsBoolean() {\r\n    if (typeof this.value === \"boolean\") {\r\n      return this.value;\r\n    } else if (typeof this.value === \"string\") {\r\n      if (this.value === \"true\" || this.value === \"TRUE\" || this.value === \"1\") {\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    } else if (typeof this.value === \"number\") {\r\n      if (this.value <= 0) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get valueAsInt() {\r\n    if (typeof this.value === \"number\") {\r\n      return this.value;\r\n    } else if (typeof this.value === \"string\") {\r\n      return parseInt(this.value);\r\n    } else if (typeof this.value === \"boolean\" && this.value === true) {\r\n      return 1;\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  get valueAsFloat() {\r\n    if (typeof this.value === \"number\") {\r\n      return this.value;\r\n    } else if (typeof this.value === \"string\") {\r\n      return parseFloat(this.value);\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  get valueAsBigInt(): bigint {\r\n    if (typeof this.value === \"bigint\") {\r\n      return this.value;\r\n    }\r\n\r\n    const type = typeof this.value;\r\n\r\n    if (this.value !== null && (type === \"number\" || type === \"string\" || type === \"boolean\" || type === \"bigint\")) {\r\n      return BigInt(this.value as string | number | boolean | bigint);\r\n    }\r\n\r\n    return BigInt(0);\r\n  }\r\n\r\n  constructor(type: NbtTagType, name: string, isListChild: boolean) {\r\n    this.type = type;\r\n    this.name = name;\r\n    this.isListChild = isListChild;\r\n  }\r\n\r\n  setListFromArray(arr: number[]) {\r\n    let children = this.getTagChildren();\r\n\r\n    if (children.length > arr.length) {\r\n      while (children.length > arr.length) {\r\n        this.removeTagByIndex(children.length - 1);\r\n        children = this.getTagChildren();\r\n      }\r\n    } else {\r\n      while (children.length < arr.length) {\r\n        const newTag = new NbtBinaryTag(NbtTagType.int, \"\", this.type === NbtTagType.list);\r\n        this.pushTag(newTag);\r\n        children = this.getTagChildren();\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n      children[i].value = arr[i];\r\n    }\r\n  }\r\n\r\n  pushTag(tag: NbtBinaryTag) {\r\n    // if this is a list we've got an end tag at the 0 slot, swap it out\r\n    if (\r\n      this.type === NbtTagType.list &&\r\n      this.lastTagIsEnd &&\r\n      this._children.length === 1 &&\r\n      tag.type !== NbtTagType.end\r\n    ) {\r\n      this._children[0] = tag;\r\n\r\n      if (\r\n        (this.childTagType === NbtTagType.unknown || this.childTagType === NbtTagType.end) &&\r\n        tag.childTagType !== NbtTagType.end\r\n      ) {\r\n        this.childTagType = tag.type;\r\n      }\r\n    } else if (this.type === NbtTagType.list) {\r\n      if (\r\n        (this.childTagType === NbtTagType.unknown || this.childTagType === NbtTagType.end) &&\r\n        tag.childTagType !== NbtTagType.end\r\n      ) {\r\n        this.childTagType = tag.type;\r\n      }\r\n\r\n      this._children.push(tag);\r\n    } else if (this.type === NbtTagType.compound && this.lastTagIsEnd && tag.type !== NbtTagType.end) {\r\n      // duplicate the End tag a the end\r\n      this._children.push(this._children[this._children.length - 1]);\r\n\r\n      this._children[this._children.length - 2] = tag;\r\n    } else {\r\n      this._children.push(tag);\r\n    }\r\n  }\r\n\r\n  prepareForSave(includingChildren: boolean) {\r\n    if (this.type === NbtTagType.list) {\r\n      if (this._children.length === 0) {\r\n        this.childTagType = NbtTagType.end;\r\n        this.addTag(NbtTagType.end);\r\n      } else if (this._children.length > 1 && this.lastTagIsEnd) {\r\n        this._children = this._children.slice(0, -1);\r\n      }\r\n    } else if (this.type === NbtTagType.compound && !this.lastTagIsEnd) {\r\n      this.addTag(NbtTagType.end);\r\n    }\r\n\r\n    if (includingChildren) {\r\n      for (let i = 0; i < this._children.length; i++) {\r\n        this._children[i].prepareForSave(includingChildren);\r\n      }\r\n    }\r\n  }\r\n\r\n  getByteSize() {\r\n    this.prepareForSave(false);\r\n    let byteSize = 0;\r\n\r\n    if (!this.isListChild) {\r\n      byteSize += 1; // one byte for type of NBT Tag\r\n\r\n      if (this.type !== NbtTagType.end) {\r\n        byteSize += 2 + this.name.length; // two bytes + name length for name.  assumes name is ASCII (1 byte per char)\r\n      }\r\n    }\r\n\r\n    switch (this.type) {\r\n      case NbtTagType.byte:\r\n        byteSize += 1;\r\n        break;\r\n\r\n      case NbtTagType.short:\r\n        byteSize += 2;\r\n        break;\r\n\r\n      case NbtTagType.int:\r\n        byteSize += 4;\r\n        break;\r\n\r\n      case NbtTagType.long:\r\n        byteSize += 8;\r\n        break;\r\n\r\n      case NbtTagType.float:\r\n        byteSize += 4;\r\n        break;\r\n\r\n      case NbtTagType.double:\r\n        byteSize += 8;\r\n        break;\r\n\r\n      case NbtTagType.string:\r\n        byteSize += 2; // length of string is 2-byte short\r\n\r\n        if (typeof this.value === \"string\") {\r\n          const bytes = Utilities.convertStringToBytes(this.value, \"UTF-8\");\r\n\r\n          if (bytes === undefined) {\r\n            throw new Error(\"Unexpected NBT conversion error in writing string.\");\r\n          }\r\n\r\n          byteSize += bytes.length;\r\n        }\r\n\r\n        break;\r\n\r\n      case NbtTagType.list:\r\n        byteSize += 5; // one byte for type of items, + 4 bytes for length;\r\n        break;\r\n\r\n      case NbtTagType.intArray:\r\n        byteSize += 4; // length of array\r\n\r\n        byteSize += 4 * (this.value as number[]).length;\r\n        break;\r\n\r\n      case NbtTagType.longArray:\r\n        byteSize += 4; // length of array\r\n\r\n        byteSize += 8 * (this.value as number[]).length;\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      byteSize += this._children[i].getByteSize();\r\n    }\r\n\r\n    return byteSize;\r\n  }\r\n\r\n  public getJsonString() {\r\n    return JSON.stringify(this.getJson(), null, 2);\r\n  }\r\n\r\n  public getJson() {\r\n    this.prepareForSave(false);\r\n\r\n    const tag = new INbtTag();\r\n\r\n    if (this.name !== undefined && this.name !== \"\") {\r\n      tag.name = this.name;\r\n    }\r\n\r\n    if (this.type !== NbtTagType.unknown) {\r\n      tag.type = this.type;\r\n    }\r\n\r\n    if (this.value !== undefined) {\r\n      tag.value = this.value;\r\n    }\r\n\r\n    if (this.childTagType !== NbtTagType.unknown) {\r\n      tag.childTagType = this.childTagType;\r\n    }\r\n\r\n    if (this._children.length > 0) {\r\n      tag.children = [];\r\n\r\n      for (let i = 0; i < this._children.length; i++) {\r\n        tag.children.push(this._children[i].getJson());\r\n      }\r\n    }\r\n\r\n    return tag;\r\n  }\r\n\r\n  public writeBytes(bytes: Uint8Array, index: number, littleEndian: boolean) {\r\n    this.prepareForSave(false);\r\n\r\n    const byteLength = bytes.buffer.byteLength;\r\n    const dv = new DataView(bytes.buffer, 0, byteLength);\r\n\r\n    if (!this.isListChild) {\r\n      // write out type.\r\n      dv.setInt8(index, this.type);\r\n      index += 1;\r\n\r\n      if (this.type !== NbtTagType.end) {\r\n        // write out name length;\r\n        dv.setInt16(index, this.name.length, littleEndian);\r\n        index += 2;\r\n\r\n        // TODO: probably an incorrect assumption that name is always \"ASCII\"\r\n        for (let j = 0; j < this.name.length; j++) {\r\n          bytes[index++] = this.name.charCodeAt(j);\r\n        }\r\n      }\r\n    }\r\n\r\n    switch (this.type) {\r\n      case NbtTagType.byte:\r\n        dv.setInt8(index, this.valueAsInt);\r\n        index += 1;\r\n        break;\r\n\r\n      case NbtTagType.short:\r\n        dv.setInt16(index, this.valueAsInt, littleEndian);\r\n        index += 2;\r\n        break;\r\n\r\n      case NbtTagType.int:\r\n        dv.setInt32(index, this.valueAsInt, littleEndian);\r\n        index += 4;\r\n        break;\r\n\r\n      case NbtTagType.long:\r\n        dv.setBigInt64(index, this.valueAsBigInt, littleEndian);\r\n        index += 8;\r\n        break;\r\n\r\n      case NbtTagType.float:\r\n        dv.setFloat32(index, this.valueAsFloat, littleEndian);\r\n        index += 4;\r\n        break;\r\n\r\n      case NbtTagType.double:\r\n        dv.setFloat64(index, this.valueAsFloat, littleEndian);\r\n        index += 8;\r\n        break;\r\n\r\n      case NbtTagType.string:\r\n        if (typeof this.value === \"string\") {\r\n          const bytes = Utilities.convertStringToBytes(this.value, \"UTF-8\");\r\n\r\n          if (bytes === undefined) {\r\n            throw new Error(\"Unexpected NBT conversion error in writing string.\");\r\n          }\r\n\r\n          dv.setInt16(index, bytes.length, littleEndian);\r\n\r\n          index += 2;\r\n\r\n          index = Utilities.writeString(dv, index, this.value, \"UTF-8\");\r\n          if (index < 0 || index >= byteLength) {\r\n            throw new Error(\"Unexpected error writing string.\");\r\n          }\r\n        } else {\r\n          dv.setInt16(index, 0, littleEndian);\r\n          index += 2;\r\n        }\r\n        break;\r\n\r\n      case NbtTagType.list:\r\n        dv.setInt8(index, this.childTagType);\r\n        index += 1;\r\n\r\n        dv.setInt32(index, this.getTagLength(), littleEndian);\r\n        index += 4;\r\n\r\n        break;\r\n\r\n      case NbtTagType.intArray:\r\n        // array length\r\n        dv.setInt32(index, this._children.length, littleEndian);\r\n        index += 4;\r\n\r\n        const nums = this.value as number[];\r\n\r\n        for (let i = 0; i < nums.length; i++) {\r\n          dv.setInt32(index, nums[i], littleEndian);\r\n          index += 4;\r\n        }\r\n\r\n        break;\r\n\r\n      case NbtTagType.longArray:\r\n        // array length\r\n        dv.setInt32(index, this._children.length, littleEndian);\r\n        index += 4;\r\n\r\n        const bigints = this.value as bigint[];\r\n\r\n        for (let i = 0; i < bigints.length; i++) {\r\n          dv.setBigInt64(index, bigints[i], littleEndian);\r\n          index += 8;\r\n        }\r\n\r\n        break;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      index = this._children[i].writeBytes(bytes, index, littleEndian);\r\n    }\r\n\r\n    return index;\r\n  }\r\n\r\n  public removeTagByIndex(index: number) {\r\n    const newChildren = [];\r\n\r\n    let removedItem = false;\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (i !== index) {\r\n        newChildren.push(this._children[i]);\r\n      } else {\r\n        removedItem = true;\r\n      }\r\n    }\r\n\r\n    this._children = newChildren;\r\n\r\n    return removedItem;\r\n  }\r\n\r\n  public removeTag(tagName: string) {\r\n    const newChildren = [];\r\n\r\n    let removedItem = false;\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name !== tagName) {\r\n        newChildren.push(this._children[i]);\r\n      } else {\r\n        removedItem = true;\r\n      }\r\n    }\r\n\r\n    this._children = newChildren;\r\n\r\n    return removedItem;\r\n  }\r\n\r\n  public ensureTag(tagName: string, tagType: NbtTagType) {\r\n    const tag = this.child(tagName);\r\n\r\n    if (tag !== null) {\r\n      Log.assert(tag.type === tagType, \"Unexpected data type '\" + tag.type + \"' for an nbt tag '\" + tagName + \"'\");\r\n\r\n      return tag;\r\n    }\r\n\r\n    return this.addTag(tagType, tagName);\r\n  }\r\n\r\n  public addTag(tagType: NbtTagType, tagName?: string) {\r\n    if (this.type !== NbtTagType.compound && this.type !== NbtTagType.list) {\r\n      throw new Error(\"Unsupported type for adding a tag\");\r\n    }\r\n\r\n    if (tagName === undefined) {\r\n      tagName = \"\";\r\n    }\r\n\r\n    const newTag = new NbtBinaryTag(tagType, tagName, this.type === NbtTagType.list);\r\n\r\n    this.pushTag(newTag);\r\n\r\n    return newTag;\r\n  }\r\n\r\n  public getProperty(name: string): NbtBinaryTag | null {\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name === name) {\r\n        return this._children[i];\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public child(name: string): NbtBinaryTag | null {\r\n    if (this.name === name) {\r\n      return this;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name === name) {\r\n        return this._children[i];\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public find(name: string): NbtBinaryTag | null {\r\n    if (this.name === name) {\r\n      return this;\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      if (this._children[i].name === name) {\r\n        return this._children[i];\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this._children.length; i++) {\r\n      const tagChild = this._children[i];\r\n\r\n      if (tagChild.type === NbtTagType.compound || tagChild.type === NbtTagType.list) {\r\n        const result = tagChild.find(name);\r\n\r\n        if (result != null) {\r\n          return result;\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IBlockTypePropertyValueData from \"./IBlockTypePropertyValueData\";\r\n\r\nexport enum BlockPropertyType {\r\n  int = 0,\r\n  boolean = 1,\r\n  string = 2,\r\n  float = 3,\r\n  stringEnum = 4,\r\n  intEnum = 5,\r\n  intBoolean = 6,\r\n}\r\n\r\nexport default interface IBlockTypePropertyData {\r\n  name: string;\r\n  default?: string | number | number[] | bigint | bigint[] | boolean | null;\r\n  type: BlockPropertyType;\r\n  title?: string;\r\n  values?: IBlockTypePropertyValueData[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport { BlockPropertyType } from \"./IBlockTypePropertyData\";\r\nimport Block from \"./Block\";\r\nimport IProperty from \"../dataform/IProperty\";\r\n\r\nexport default class BlockProperty implements IProperty {\r\n  private _value?: string | number | number[] | bigint | bigint[] | boolean;\r\n  private _nbtType: NbtTagType | null = null;\r\n\r\n  public id: string | undefined;\r\n  private _block: Block;\r\n\r\n  constructor(block: Block) {\r\n    this._block = block;\r\n  }\r\n\r\n  static getBlockPropertyTypeByName(name: string) {\r\n    switch (this.name) {\r\n      case \"direction\":\r\n      case \"age\":\r\n      case \"stage\":\r\n        return BlockPropertyType.int;\r\n\r\n      case \"leaves\":\r\n      case \"damage\":\r\n        return BlockPropertyType.stringEnum;\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  public get type() {\r\n    if (typeof this._value === \"string\") {\r\n      return BlockPropertyType.string;\r\n    } else if (typeof this._value === \"number\") {\r\n      return BlockPropertyType.int;\r\n    } else if (typeof this._value === \"boolean\") {\r\n      return BlockPropertyType.boolean;\r\n    } else {\r\n      return BlockPropertyType.int;\r\n    }\r\n  }\r\n\r\n  public get nbtType(): NbtTagType {\r\n    if (this._nbtType === null) {\r\n      if (typeof this._value === \"string\") {\r\n        return NbtTagType.string;\r\n      } else if (typeof this._value === \"number\") {\r\n        return NbtTagType.int;\r\n      } else if (typeof this._value === \"boolean\") {\r\n        return NbtTagType.byte;\r\n      } else {\r\n        return NbtTagType.byte;\r\n      }\r\n    }\r\n\r\n    return this._nbtType;\r\n  }\r\n\r\n  public set nbtType(newType: NbtTagType) {\r\n    this._nbtType = newType;\r\n  }\r\n\r\n  get value(): string | number | number[] | bigint | bigint[] | boolean | undefined {\r\n    return this._value;\r\n  }\r\n\r\n  asBoolean(defaultVal: boolean): boolean {\r\n    if (this._value === null || this._value === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof this._value === \"boolean\") {\r\n      return this._value;\r\n    } else if (typeof this._value === \"number\") {\r\n      return this._value !== 0;\r\n    } else if (typeof this._value === \"string\") {\r\n      return this._value === \"true\" || this._value === \"1\";\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  asString(defaultVal: string): string {\r\n    if (this._value === null || this._value === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    return this._value.toString();\r\n  }\r\n\r\n  asNumber(defaultVal: number): number {\r\n    if (this._value === null || this._value === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof this._value === \"number\") {\r\n      return this._value;\r\n    } else if (typeof this._value === \"string\") {\r\n      return parseInt(this._value);\r\n    } else if (typeof this._value === \"boolean\") {\r\n      if (this._value) {\r\n        return 1;\r\n      } else {\r\n        return 0;\r\n      }\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  set value(newValue: string | number | number[] | bigint | bigint[] | boolean | undefined) {\r\n    if (this._value !== newValue) {\r\n      this._value = newValue;\r\n\r\n      this._block._notifyPropertyChanged(this);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IComponent from \"../IComponent\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\n\r\nexport default class AttributeComponent implements IComponent {\r\n  id?: string;\r\n  base?: number;\r\n  current?: number;\r\n  minimum?: number;\r\n  maximum?: number;\r\n  defaultMinimum?: number;\r\n  defaultMaximum?: number;\r\n  [propertyId: string]: string | number | number[] | bigint | bigint[] | boolean | object | undefined;\r\n\r\n  loadFromNbtTag(tag: NbtBinaryTag) {\r\n    const minTag = tag.find(\"Min\");\r\n\r\n    if (minTag !== null) {\r\n      this.minimum = minTag.valueAsInt;\r\n    }\r\n\r\n    let maxTag = tag.find(\"Max\");\r\n\r\n    if (maxTag !== null) {\r\n      this.maximum = maxTag.valueAsInt;\r\n    }\r\n\r\n    const dminTag = tag.find(\"DefaultMin\");\r\n\r\n    if (dminTag !== null) {\r\n      this.defaultMinimum = dminTag.valueAsInt;\r\n    }\r\n\r\n    const dmaxTag = tag.find(\"DefaultMax\");\r\n\r\n    if (dmaxTag !== null) {\r\n      this.defaultMaximum = dmaxTag.valueAsInt;\r\n    }\r\n\r\n    const baseTag = tag.find(\"Base\");\r\n\r\n    if (baseTag !== null) {\r\n      this.base = baseTag.valueAsInt;\r\n    }\r\n\r\n    const currentTag = tag.find(\"Current\");\r\n\r\n    if (currentTag !== null) {\r\n      this.current = currentTag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IComponent from \"../IComponent\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\n\r\nexport default class AttributeComponent implements IComponent {\r\n  id?: string;\r\n  base?: number;\r\n  current?: number;\r\n  minimum?: number;\r\n  maximum?: number;\r\n  defaultMinimum?: number;\r\n  defaultMaximum?: number;\r\n  [propertyId: string]: string | number | number[] | bigint | bigint[] | boolean | object | undefined;\r\n\r\n  loadFromNbtTag(tag: NbtBinaryTag) {\r\n    const minTag = tag.find(\"Min\");\r\n\r\n    if (minTag !== null) {\r\n      this.minimum = minTag.valueAsFloat;\r\n    }\r\n\r\n    const maxTag = tag.find(\"Max\");\r\n\r\n    if (maxTag !== null) {\r\n      this.maximum = maxTag.valueAsFloat;\r\n    }\r\n\r\n    let dminTag = tag.find(\"DefaultMin\");\r\n\r\n    if (dminTag !== null) {\r\n      this.defaultMinimum = dminTag.valueAsFloat;\r\n    }\r\n\r\n    const dmaxTag = tag.find(\"DefaultMax\");\r\n\r\n    if (dmaxTag !== null) {\r\n      this.defaultMaximum = dmaxTag.valueAsFloat;\r\n    }\r\n\r\n    const baseTag = tag.find(\"Base\");\r\n\r\n    if (baseTag !== null) {\r\n      this.base = baseTag.valueAsFloat;\r\n    }\r\n\r\n    const currentTag = tag.find(\"Current\");\r\n\r\n    if (currentTag !== null) {\r\n      this.current = currentTag.valueAsFloat;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProperty from \"../dataform/IProperty\";\r\nimport ComponentizedBase from \"./ComponentizedBase\";\r\nimport Database from \"./../minecraft/Database\";\r\nimport Log from \"./../core/Log\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport IField, { FieldDataType } from \"../dataform/IField\";\r\nimport NumberValueComponent from \"./components/NumberValueComponent\";\r\n\r\nexport default class ComponentProperty implements IProperty {\r\n  public id: string;\r\n  private _item: ComponentizedBase;\r\n\r\n  private _form?: IFormDefinition;\r\n  private _field?: IField;\r\n  private isCoreProp: boolean = false;\r\n  private isInstanceProp: boolean = false;\r\n\r\n  constructor(item: ComponentizedBase, id: string) {\r\n    this._item = item;\r\n    this.id = id;\r\n  }\r\n\r\n  load() {\r\n    if (Database.uxCatalog === null || this._form !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const result = Database.getComponentFormField(this.id);\r\n\r\n    if (result !== undefined) {\r\n      this._form = result.form;\r\n\r\n      if (this._form.id === \"entityCore\") {\r\n        this.isCoreProp = true;\r\n      } else if (this._form.id === \"entityInstance\") {\r\n        this.isInstanceProp = true;\r\n      }\r\n\r\n      this._field = result.field;\r\n    } else {\r\n      Log.debugAlert(\"Form field \" + this.id + \" not found.\");\r\n    }\r\n  }\r\n\r\n  public get type() {\r\n    if (this._field !== undefined) {\r\n      return this._field.dataType;\r\n    }\r\n\r\n    return FieldDataType.string;\r\n  }\r\n\r\n  get defaultValue():\r\n    | string\r\n    | number\r\n    | number[]\r\n    | bigint\r\n    | bigint[]\r\n    | string[]\r\n    | object\r\n    | object[]\r\n    | boolean\r\n    | null\r\n    | undefined {\r\n    if (this._field === undefined) {\r\n      Log.fail(\"Unbacked component property '\" + this.id + \"' found.\");\r\n      return undefined;\r\n    }\r\n\r\n    return this._field.defaultValue;\r\n  }\r\n\r\n  get value():\r\n    | string\r\n    | number\r\n    | number[]\r\n    | bigint\r\n    | bigint[]\r\n    | string[]\r\n    | object\r\n    | object[]\r\n    | boolean\r\n    | undefined\r\n    | null {\r\n    if (this._field === undefined) {\r\n      Log.fail(\"Unbacked component property '\" + this.id + \"' found.\");\r\n      return undefined;\r\n    }\r\n\r\n    if (this.isCoreProp && this._field.groupId !== undefined) {\r\n      const componentId = this._field.groupId;\r\n      const component = this._item.getComponent(componentId);\r\n\r\n      if (this._field.dataType === FieldDataType.boolean) {\r\n        if (component !== undefined) {\r\n          return true;\r\n        } else {\r\n          return false;\r\n        }\r\n      } else if (\r\n        this._field.dataType === FieldDataType.number ||\r\n        this._field.dataType === FieldDataType.int ||\r\n        this._field.dataType === FieldDataType.intBoolean ||\r\n        this._field.dataType === FieldDataType.intValueLookup\r\n      ) {\r\n        if (component !== undefined) {\r\n          const val = (component as NumberValueComponent).value;\r\n\r\n          return val;\r\n        }\r\n      }\r\n    } else if (!this.isCoreProp && this._form !== undefined && this._field !== undefined && this._form.id) {\r\n      const componentId = this._form.id;\r\n\r\n      const component = this._item.getComponent(componentId);\r\n      if (component !== undefined && typeof component !== \"object\") {\r\n        return component[this._field.id];\r\n      }\r\n    }\r\n\r\n    return this.defaultValue;\r\n  }\r\n\r\n  asBoolean(defaultVal: boolean): boolean {\r\n    const val = this.value;\r\n\r\n    if (val === null || val === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof val === \"boolean\") {\r\n      return val;\r\n    } else if (typeof val === \"number\") {\r\n      return val !== 0;\r\n    } else if (typeof val === \"string\") {\r\n      return val === \"true\" || val === \"1\";\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  asString(defaultVal: string): string {\r\n    const val = this.value;\r\n\r\n    if (val === null || val === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    return val.toString();\r\n  }\r\n\r\n  asNumber(defaultVal: number): number {\r\n    const val = this.value;\r\n\r\n    if (val === null || val === undefined) {\r\n      return defaultVal;\r\n    }\r\n\r\n    if (typeof val === \"number\") {\r\n      return val;\r\n    } else if (typeof val === \"string\") {\r\n      return parseInt(val);\r\n    } else if (typeof val === \"boolean\") {\r\n      if (val) {\r\n        return 1;\r\n      } else {\r\n        return 0;\r\n      }\r\n    }\r\n\r\n    return defaultVal;\r\n  }\r\n\r\n  set value(\r\n    newValue: string | string[] | number | number[] | bigint | bigint[] | object | object[] | boolean | undefined | null\r\n  ) {\r\n    const val = this.value;\r\n\r\n    if (val !== newValue) {\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IComponent from \"./IComponent\";\r\nimport Log from \"../core/Log\";\r\nimport IntAttributeComponent from \"./components/IntAttributeComponent\";\r\nimport FloatAttributeComponent from \"./components/FloatAttributeComponent\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport ComponentProperty from \"./ComponentProperty\";\r\nimport NbtBinaryTag from \"./NbtBinaryTag\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ComponentizedBase implements IManagedComponentSetItem {\r\n  private _components: { [id: string]: IComponent | string | string[] | boolean | number[] | number | undefined };\r\n  private _managedComponents: { [id: string]: IManagedComponent };\r\n\r\n  private _componentProperties: { [id: string]: ComponentProperty };\r\n\r\n  private _onComponentAdded = new EventDispatcher<ComponentizedBase, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ComponentizedBase, string>();\r\n  private _onComponentChanged = new EventDispatcher<ComponentizedBase, IManagedComponent>();\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  id: string = \"\";\r\n\r\n  constructor() {\r\n    this._componentProperties = {};\r\n    this._components = {};\r\n    this._managedComponents = {};\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this._components === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    const component = this._components[id];\r\n\r\n    if (component === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managedComponents[id] && Utilities.isUsableAsObjectKey(id)) {\r\n      this._managedComponents[id] = new ManagedComponent(this._components, id, component);\r\n    }\r\n\r\n    return this._managedComponents[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"CBNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._components !== undefined) {\r\n      for (const componentName in this._managedComponents) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  ensureDataComponent(\r\n    id: string,\r\n    component: IComponent | string | number\r\n  ): IComponent | string | string[] | boolean | number[] | number | undefined {\r\n    this._ensureComponentsInitialized();\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    if (this._components === undefined || this._managedComponents === undefined) {\r\n      Log.unexpectedUndefined(\"CBEDC\");\r\n      throw new Error();\r\n    }\r\n\r\n    if (this._managedComponents[id] !== undefined) {\r\n      return this._managedComponents[id].getData();\r\n    }\r\n\r\n    const mc = this.ensureComponent(id, new ManagedComponent(this._components, id, component));\r\n\r\n    if (mc) {\r\n      return mc.getData();\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensureComponent(id: string, component: IManagedComponent): IManagedComponent {\r\n    this._ensureComponentsInitialized();\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    if (this._components === undefined || this._managedComponents === undefined || !Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unexpectedUndefined(\"CBEC\");\r\n      throw new Error();\r\n    }\r\n\r\n    if (this._managedComponents[id] !== undefined) {\r\n      return this._managedComponents[id];\r\n    }\r\n\r\n    this._managedComponents[id] = component;\r\n    this._components[id] = component.getData();\r\n\r\n    this._onComponentAdded.dispatch(this, component);\r\n\r\n    return component;\r\n  }\r\n\r\n  addComponent(id: string, component: IManagedComponent) {\r\n    this._ensureComponentsInitialized();\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    component.id = id;\r\n\r\n    if (this._managedComponents !== undefined) {\r\n      this._managedComponents[id] = component;\r\n\r\n      this._onComponentAdded.dispatch(this, component);\r\n    }\r\n\r\n    if (this._components) {\r\n      this._components[id] = component.getData();\r\n    }\r\n\r\n    return component;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._components === undefined) {\r\n      return;\r\n    }\r\n\r\n    id = MinecraftUtilities.canonicalizeFullName(id);\r\n\r\n    const newComponents: { [id: string]: IComponent | string | string[] | boolean | number[] | number | undefined } =\r\n      {};\r\n    const newManagedComponents: { [id: string]: IManagedComponent } = {};\r\n\r\n    for (const name in this._components) {\r\n      const nameCanon = MinecraftUtilities.canonicalizeFullName(name);\r\n\r\n      if (nameCanon !== id) {\r\n        const component = this._components[name];\r\n\r\n        newComponents[name] = component;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managedComponents) {\r\n      const nameCanon = MinecraftUtilities.canonicalizeFullName(name);\r\n\r\n      if (nameCanon !== id) {\r\n        const component = this._managedComponents[name];\r\n\r\n        newManagedComponents[name] = component;\r\n      }\r\n    }\r\n\r\n    this._components = newComponents;\r\n    this._managedComponents = newManagedComponents;\r\n  }\r\n\r\n  public getComponentProperty(name: string) {\r\n    return this._componentProperties[name];\r\n  }\r\n\r\n  public ensureComponentProperty(name: string) {\r\n    return this.addComponentProperty(name);\r\n  }\r\n\r\n  public addComponentProperty(name: string) {\r\n    let property = this._componentProperties[name];\r\n\r\n    if (property == null) {\r\n      property = new ComponentProperty(this, name);\r\n      property.id = name;\r\n\r\n      this._componentProperties[name] = property;\r\n\r\n      this.notifyComponentPropertyChanged(property);\r\n    }\r\n\r\n    return property;\r\n  }\r\n\r\n  notifyComponentPropertyChanged(property: ComponentProperty) {}\r\n\r\n  loadAttributeComponentsFromNbtTag(attributesTag: NbtBinaryTag) {\r\n    const attributesChildren = attributesTag.getTagChildren();\r\n\r\n    for (let i = 0; i < attributesChildren.length; i++) {\r\n      const attributeChild = attributesChildren[i];\r\n\r\n      const nameChild = attributeChild.find(\"Name\");\r\n\r\n      if (nameChild !== null) {\r\n        const name = nameChild.valueAsString;\r\n\r\n        let component: IComponent | null = null;\r\n        if (\r\n          name.endsWith(\"luck\") ||\r\n          name.endsWith(\"health\") ||\r\n          name.endsWith(\"absorption\") ||\r\n          name.endsWith(\"knockback_resistance\") ||\r\n          name.endsWith(\"follow_range\")\r\n        ) {\r\n          component = new IntAttributeComponent();\r\n        } else if (name.endsWith(\"movement\") || name.endsWith(\"jump_strength\") || name.endsWith(\"attack_damage\")) {\r\n          // movement, underwater_movement, lava_movement, horse.jump_strength\r\n          component = new FloatAttributeComponent();\r\n        } else {\r\n          Log.debugAlert(\"Unknown component '\" + name + \"' found\");\r\n          component = new FloatAttributeComponent();\r\n        }\r\n\r\n        const managedComponent = new ManagedComponent(this._components, name, component);\r\n\r\n        this.ensureComponent(name, managedComponent);\r\n      }\r\n    }\r\n  }\r\n\r\n  _ensureComponentsInitialized() {\r\n    if (this._components === null) {\r\n      this._components = {};\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolumeLine from \"./BlockVolumeLine\";\r\nimport BlockProperty from \"./BlockProperty\";\r\nimport IBlockData from \"./IBlockData\";\r\nimport IBlockSurroundings from \"./IBlockSurroundings\";\r\nimport Database from \"./Database\";\r\nimport BlockType from \"./BlockType\";\r\nimport { BlockRenderType } from \"./BlockRenderType\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Log from \"../core/Log\";\r\nimport IPropertyObject from \"../dataform/IPropertyObject\";\r\nimport ComponentizedBase from \"./ComponentizedBase\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum BlockFacingDirection {\r\n  Down = 0,\r\n  up = 1,\r\n  north = 2,\r\n  south = 3,\r\n  west = 4,\r\n  east = 5,\r\n}\r\n\r\nexport enum BlockDirection {\r\n  South = 0,\r\n  West = 1,\r\n  North = 2,\r\n  East = 3,\r\n}\r\n\r\nexport default class Block extends ComponentizedBase implements IPropertyObject {\r\n  public static MAX_WATER_LEVEL = 16;\r\n\r\n  private _type: BlockType | undefined;\r\n  private _blockType: BlockType | undefined;\r\n  private _data: number = 0;\r\n\r\n  private _covered: boolean | undefined;\r\n  private _typeId: string | undefined;\r\n  private _z: number | undefined;\r\n\r\n  private _surroundings: IBlockSurroundings | undefined;\r\n\r\n  public line: BlockVolumeLine | undefined;\r\n  public extraLiquidDepth: number = -1;\r\n  public persistenceVersion: number = -1;\r\n\r\n  public properties: { [id: string]: BlockProperty } = {};\r\n\r\n  private _onTypeChanged = new EventDispatcher<Block, Block>();\r\n  private _onPropertyChanged = new EventDispatcher<Block, BlockProperty>();\r\n\r\n  public get onTypeChanged() {\r\n    return this._onTypeChanged.asEvent();\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public set data(newData: number) {\r\n    this._data = newData;\r\n  }\r\n\r\n  public get surroundings() {\r\n    if (this._surroundings !== undefined) {\r\n      return this._surroundings;\r\n    }\r\n\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    return this._surroundings;\r\n  }\r\n\r\n  /**\r\n   * Clears the cached surroundings so they will be recalculated on next access.\r\n   * This should be called when a neighboring block changes.\r\n   */\r\n  public clearSurroundings() {\r\n    this._surroundings = undefined;\r\n  }\r\n\r\n  public setType(blockType: BlockType) {\r\n    this._type = blockType;\r\n    this._blockType = blockType; // Keep reference to preserve baseType with shape data\r\n    this._typeId = blockType.id;\r\n  }\r\n\r\n  public get opaqueSideCount() {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    let count = 0;\r\n\r\n    const blockShortTypeName = this.shortTypeId;\r\n\r\n    let adjacent = this._surroundings.left;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.right;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.up;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.down;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.forward;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    adjacent = this._surroundings.backward;\r\n    if (\r\n      adjacent === undefined ||\r\n      adjacent.isEmpty ||\r\n      (!adjacent.isOpaque && blockShortTypeName !== adjacent.shortTypeId)\r\n    ) {\r\n      count++;\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public get isOpaque() {\r\n    if (this._blockType === undefined) {\r\n      this._ensureTypes();\r\n    }\r\n\r\n    if (this._blockType !== undefined) {\r\n      const baseType = this._blockType.baseType;\r\n\r\n      return baseType.isOpaque;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _ensureTypes() {\r\n    if (this._blockType !== undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._typeId === undefined) {\r\n      return;\r\n    }\r\n\r\n    this._type = Database.ensureBlockType(this._typeId);\r\n\r\n    if (\r\n      this._type.javaData !== null &&\r\n      this._type.javaData.name !== null &&\r\n      this._type.javaData.name !== this._typeId\r\n    ) {\r\n      this._blockType = Database.ensureBlockType(this._type.javaData.name);\r\n\r\n      const typeProp = this.getProperty(\"type\");\r\n\r\n      if (typeProp !== undefined) {\r\n        if (this._blockType.shortId === \"piston\" && typeProp.asString(\"\") === \"sticky\") {\r\n          this._blockType = Database.ensureBlockType(\"sticky_piston\");\r\n        } else if (this._blockType.shortId === \"sticky_piston\" && typeProp.asString(\"\") === \"normal\") {\r\n          this._blockType = Database.ensureBlockType(\"piston\");\r\n        }\r\n      }\r\n    } else {\r\n      this._blockType = this._type;\r\n    }\r\n  }\r\n\r\n  _updateDataFromProperties() {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      return;\r\n    }\r\n\r\n    const baseType = this._blockType.baseType;\r\n\r\n    let data = 0;\r\n\r\n    if (baseType.data.properties !== undefined) {\r\n      for (let i = 0; i < baseType.data.properties.length; i++) {\r\n        const propData = baseType.data.properties[i];\r\n\r\n        if (propData.values !== undefined) {\r\n          const prop = this.getProperty(propData.name);\r\n\r\n          if (prop !== null && prop !== undefined) {\r\n            for (let j = 0; j < propData.values.length; j++) {\r\n              if (prop.value === propData.values[j].id) {\r\n                const dataAdd = propData.values[j].data;\r\n                if (dataAdd !== undefined) {\r\n                  data += dataAdd;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._data = data;\r\n  }\r\n\r\n  _notifyTypeChanged() {\r\n    this._onTypeChanged.dispatch(this, this);\r\n  }\r\n\r\n  _notifyPropertyChanged(blockProperty: BlockProperty) {\r\n    this._updateDataFromProperties();\r\n\r\n    this._onPropertyChanged.dispatch(this, blockProperty);\r\n\r\n    if (this.line !== undefined && this.line.cube !== undefined) {\r\n      this.line.cube._notifyBlockPropertyChanged(this);\r\n    }\r\n  }\r\n\r\n  public get blockType() {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      throw new Error(\"Block type is undefined for block: \" + this.id);\r\n    }\r\n\r\n    return this._blockType;\r\n  }\r\n\r\n  public get textureName() {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.shortTypeId === \"water\") {\r\n      return undefined;\r\n    }\r\n\r\n    return this._blockType.baseType.name;\r\n  }\r\n\r\n  public copyFrom(block: Block) {\r\n    this.typeName = block.typeName;\r\n  }\r\n\r\n  public static fromLegacyId(byte: number) {\r\n    if (byte === 0 || byte >= 256 || byte === undefined) {\r\n      return new Block(\"minecraft:air\");\r\n    }\r\n\r\n    const blockType = Database.getBlockTypeByLegacyId(byte);\r\n\r\n    if (blockType) {\r\n      return new Block(blockType.id);\r\n    }\r\n\r\n    // Log.fail(\"Could not find block identifier: \" + byte);\r\n\r\n    return new Block(\"minecraft:dirt\");\r\n  }\r\n\r\n  public get effectiveWaterLevel() {\r\n    let prop = this.getProperty(\"level\");\r\n\r\n    if (prop !== undefined) {\r\n      return prop.asNumber(0) * 2;\r\n    }\r\n\r\n    const shortTypeName = this.shortTypeId;\r\n\r\n    if (shortTypeName === \"water\") {\r\n      return 15;\r\n    }\r\n\r\n    prop = this.getProperty(\"liquid_depth\");\r\n\r\n    if (prop !== undefined) {\r\n      return 15 - prop.asNumber(0);\r\n    }\r\n\r\n    if (this.extraLiquidDepth < 0) {\r\n      return 0;\r\n    }\r\n\r\n    return 15 - this.extraLiquidDepth;\r\n  }\r\n\r\n  public get renderType(): BlockRenderType {\r\n    this._ensureTypes();\r\n\r\n    if (this._blockType === undefined) {\r\n      return BlockRenderType.BlockOneTexture;\r\n    }\r\n\r\n    if (this.shortTypeId === \"water\") {\r\n      return BlockRenderType.Water;\r\n    }\r\n\r\n    return this._blockType.renderType;\r\n  }\r\n\r\n  public getProperty(name: string) {\r\n    return this.properties[name];\r\n  }\r\n\r\n  public ensureProperty(name: string) {\r\n    return this.addProperty(name);\r\n  }\r\n\r\n  public getPropertyBoolean(name: string, defaultValue: boolean) {\r\n    const prop = this.properties[name];\r\n\r\n    if (prop === undefined || prop === null) {\r\n      return defaultValue;\r\n    }\r\n\r\n    return prop.asBoolean(defaultValue);\r\n  }\r\n\r\n  public getPropertyString(name: string, defaultValue: string) {\r\n    const prop = this.properties[name];\r\n\r\n    if (prop === undefined || prop === null) {\r\n      return defaultValue;\r\n    }\r\n\r\n    return prop.asString(defaultValue);\r\n  }\r\n\r\n  public getPropertyNumber(name: string, defaultValue: number) {\r\n    const prop = this.properties[name];\r\n\r\n    if (prop === undefined || prop === null) {\r\n      return defaultValue;\r\n    }\r\n\r\n    return prop.asNumber(defaultValue);\r\n  }\r\n\r\n  public addProperty(name: string) {\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      Log.unsupportedToken(name);\r\n      throw new Error();\r\n    }\r\n\r\n    let property = this.properties[name];\r\n\r\n    if (property == null) {\r\n      property = new BlockProperty(this);\r\n      property.id = name;\r\n\r\n      this.properties[name] = property;\r\n    }\r\n\r\n    return property;\r\n  }\r\n\r\n  public get z() {\r\n    return this._z;\r\n  }\r\n\r\n  public set z(value: number | undefined) {\r\n    this._z = value;\r\n  }\r\n\r\n  public get x() {\r\n    if (this.line === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.line.x;\r\n  }\r\n\r\n  public get y() {\r\n    if (this.line === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.line.y;\r\n  }\r\n\r\n  public get coordinatesString(): string {\r\n    if (this.line === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this.x + \".\" + this.y + \".\" + this.z;\r\n  }\r\n\r\n  public get typeName(): string | undefined {\r\n    return this._typeId;\r\n  }\r\n\r\n  public set typeName(val: string | undefined) {\r\n    if (this._typeId !== val) {\r\n      this._typeId = val;\r\n      this._blockType = undefined;\r\n      this._type = undefined;\r\n\r\n      if (this.line !== undefined && this.line.cube !== undefined) {\r\n        this.line.cube._notifyBlockTypeChanged(this);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getBlockData() {\r\n    let typeId = this.typeName;\r\n\r\n    if (typeId === null || typeId === undefined) {\r\n      typeId = \"\";\r\n    }\r\n\r\n    const props: { [id: string]: any } = {};\r\n\r\n    for (const id in this.properties) {\r\n      const blockProp = this.properties[id];\r\n\r\n      props[id] = blockProp.value;\r\n    }\r\n\r\n    const blockData: IBlockData = {\r\n      typeId: typeId,\r\n      state: props,\r\n    };\r\n\r\n    return blockData;\r\n  }\r\n\r\n  public toString(): string {\r\n    return JSON.stringify(this.getBlockData(), null, 2);\r\n  }\r\n\r\n  public get isEmpty() {\r\n    return this._typeId == null || this.shortTypeId === \"air\";\r\n  }\r\n\r\n  private _ensureSurroundingsIfCube() {\r\n    if (this.line === undefined || this._z === undefined || this._surroundings !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const cube = this.line.cube;\r\n    const curX = this.line.x;\r\n    const curY = this.line.y;\r\n    const curZ = this._z;\r\n\r\n    let down = undefined;\r\n    let up = undefined;\r\n    let left = undefined;\r\n    let right = undefined;\r\n    let forward = undefined;\r\n    let backward = undefined;\r\n\r\n    const plane = cube.x(curX);\r\n\r\n    if (curY >= 1) {\r\n      down = plane.y(curY - 1).z(curZ);\r\n    }\r\n\r\n    if (curY < cube.maxY - 1) {\r\n      up = plane.y(curY + 1).z(curZ);\r\n    }\r\n\r\n    if (curX >= 1) {\r\n      left = cube\r\n        .x(curX - 1)\r\n        .y(curY)\r\n        .z(curZ);\r\n    }\r\n\r\n    if (curX < cube.maxX - 1) {\r\n      right = cube\r\n        .x(curX + 1)\r\n        .y(curY)\r\n        .z(curZ);\r\n    }\r\n\r\n    const line = cube.x(curX).y(curY);\r\n\r\n    if (curZ >= 1) {\r\n      backward = line.z(curZ - 1);\r\n    }\r\n\r\n    if (curZ < cube.maxZ - 1) {\r\n      forward = line.z(curZ + 1);\r\n    }\r\n\r\n    this._surroundings = {\r\n      down: down,\r\n      up: up,\r\n      left: left,\r\n      right: right,\r\n      backward: backward,\r\n      forward: forward,\r\n    };\r\n  }\r\n\r\n  public get isCovered(): boolean {\r\n    if (this._covered !== undefined) {\r\n      return this._covered;\r\n    }\r\n\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined || this._z === undefined) {\r\n      this._covered = false;\r\n      return false;\r\n    }\r\n\r\n    const surround = this._surroundings;\r\n\r\n    if (\r\n      surround.down === undefined ||\r\n      surround.down.isEmpty ||\r\n      !surround.down.isOpaque ||\r\n      !surround.down.isCovered ||\r\n      surround.up === undefined ||\r\n      surround.up.isEmpty ||\r\n      !surround.up.isOpaque ||\r\n      !surround.up.isCovered ||\r\n      surround.left === undefined ||\r\n      surround.left.isEmpty ||\r\n      !surround.left.isOpaque ||\r\n      !surround.left.isCovered ||\r\n      surround.right === undefined ||\r\n      surround.right.isEmpty ||\r\n      !surround.right.isOpaque ||\r\n      !surround.right.isCovered ||\r\n      surround.forward === undefined ||\r\n      surround.forward.isEmpty ||\r\n      !surround.forward.isOpaque ||\r\n      !surround.forward.isCovered ||\r\n      surround.backward === undefined ||\r\n      surround.backward.isEmpty ||\r\n      !surround.backward.isOpaque ||\r\n      !surround.backward.isCovered\r\n    ) {\r\n      this._covered = false;\r\n      return false;\r\n    }\r\n\r\n    this._covered = true;\r\n    return true;\r\n  }\r\n\r\n  public get isTouchingOtherBlock(): boolean {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return false;\r\n    }\r\n\r\n    const surr = this._surroundings;\r\n\r\n    if (\r\n      (surr.down !== undefined && !surr.down.isEmpty) ||\r\n      (surr.up !== undefined && !surr.up.isEmpty) ||\r\n      (surr.left !== undefined && !surr.left.isEmpty) ||\r\n      (surr.right !== undefined && !surr.right.isEmpty) ||\r\n      (surr.forward !== undefined && !surr.forward.isEmpty) ||\r\n      (surr.backward !== undefined && !surr.backward.isEmpty)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public get up(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.up;\r\n  }\r\n\r\n  public get down(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.down;\r\n  }\r\n\r\n  public get left(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.left;\r\n  }\r\n\r\n  public get right(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.right;\r\n  }\r\n\r\n  public get forward(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.forward;\r\n  }\r\n\r\n  public get backward(): Block | undefined {\r\n    this._ensureSurroundingsIfCube();\r\n\r\n    if (this._surroundings === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._surroundings.backward;\r\n  }\r\n\r\n  public get shortTypeId() {\r\n    if (this._typeId !== undefined) {\r\n      if (this._typeId.startsWith(\"minecraft:\")) {\r\n        return this._typeId.substring(10, this._typeId.length);\r\n      }\r\n\r\n      return this._typeId;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  constructor(typeId?: string) {\r\n    super();\r\n\r\n    this._typeId = typeId;\r\n  }\r\n\r\n  applyFrom(template: Block) {\r\n    Log.assert(template !== null && template !== undefined, \"Undefined block template\");\r\n\r\n    this._typeId = template.typeName;\r\n\r\n    for (const propName in template.properties) {\r\n      const property = template.getProperty(propName);\r\n\r\n      const prop = this.ensureProperty(propName);\r\n\r\n      prop.nbtType = property.nbtType;\r\n      prop.value = property.value;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport Block from \"./Block\";\r\nimport BlockVolumePlane from \"./BlockVolumePlane\";\r\n\r\nexport default class BlockVolumeLine {\r\n  private _cube: BlockVolume;\r\n  private _plane: BlockVolumePlane;\r\n  private _y: number;\r\n\r\n  get cube() {\r\n    return this._cube;\r\n  }\r\n\r\n  get y() {\r\n    return this._y;\r\n  }\r\n\r\n  get x() {\r\n    return this._plane.x;\r\n  }\r\n\r\n  get plane() {\r\n    return this._plane;\r\n  }\r\n\r\n  blocks: Block[];\r\n\r\n  constructor(cube: BlockVolume, plane: BlockVolumePlane, y: number) {\r\n    this.blocks = [];\r\n    this._cube = cube;\r\n    this._plane = plane;\r\n    this._y = y;\r\n  }\r\n\r\n  z(z: number): Block {\r\n    if (z > this._cube.maxZ) {\r\n      throw new Error(\"Value exceeds maximum Z\");\r\n    }\r\n\r\n    while (z >= this.blocks.length) {\r\n      const block = new Block(undefined);\r\n\r\n      block.line = this;\r\n      block.z = this.blocks.length;\r\n\r\n      this.blocks[this.blocks.length] = block;\r\n    }\r\n\r\n    return this.blocks[z];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport BlockVolumeLine from \"./BlockVolumeLine\";\r\n\r\nexport default class BlockVolumePlane {\r\n  private _cube: BlockVolume;\r\n  private _x: number;\r\n\r\n  lines: BlockVolumeLine[];\r\n\r\n  get x() {\r\n    return this._x;\r\n  }\r\n\r\n  constructor(cube: BlockVolume, x: number) {\r\n    this.lines = [];\r\n    this._cube = cube;\r\n    this._x = x;\r\n  }\r\n\r\n  y(y: number): BlockVolumeLine {\r\n    if (y > this._cube.maxY) {\r\n      throw new Error(\"Value exceeds maximum Y\");\r\n    }\r\n\r\n    while (y >= this.lines.length) {\r\n      const newY = this.lines.length;\r\n      this.lines[newY] = new BlockVolumeLine(this._cube, this, newY);\r\n    }\r\n\r\n    return this.lines[y];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Location from \"./Location\";\r\n\r\nexport default class BlockLocation {\r\n  private _x: number;\r\n  private _y: number;\r\n  private _z: number;\r\n\r\n  public get x() {\r\n    return this._x;\r\n  }\r\n\r\n  public set x(newX: number) {\r\n    Log.assertIsInt(newX, \"BLX\");\r\n    this._x = newX;\r\n  }\r\n\r\n  public get y() {\r\n    return this._y;\r\n  }\r\n\r\n  public set y(newY: number) {\r\n    Log.assertIsInt(newY, \"BLY\");\r\n    this._y = newY;\r\n  }\r\n\r\n  public get z() {\r\n    return this._z;\r\n  }\r\n\r\n  public set z(newZ: number) {\r\n    Log.assertIsInt(newZ, \"BLZ\");\r\n    this._z = newZ;\r\n  }\r\n\r\n  public get title() {\r\n    return this.x + \"x\" + this.y + \"y\" + this.z + \"z\";\r\n  }\r\n\r\n  public toLocation() {\r\n    return new Location(this.x, this.y, this.z);\r\n  }\r\n\r\n  public toArray() {\r\n    return [this.x, this.y, this.z];\r\n  }\r\n\r\n  public toSummary() {\r\n    return \"(\" + this.x + \",\" + this.y + \",\" + this.z + \");\";\r\n  }\r\n\r\n  constructor(x?: number | undefined, y?: number | undefined, z?: number | undefined) {\r\n    this._x = x === undefined ? 0 : x;\r\n    this._y = y === undefined ? 0 : y;\r\n    this._z = z === undefined ? 0 : z;\r\n\r\n    Log.assertIsInt(this._x, \"BLCX\");\r\n    Log.assertIsInt(this._y, \"BLCY\");\r\n    Log.assertIsInt(this._z, \"BLCZ\");\r\n  }\r\n\r\n  static from(value: any): BlockLocation {\r\n    if (value instanceof BlockLocation) {\r\n      return value;\r\n    }\r\n\r\n    if (value instanceof Location) {\r\n      return value.toRoundedBlockLocation();\r\n    }\r\n\r\n    if (value.length && value.length === 3) {\r\n      return new BlockLocation(value[0], value[1], value[2]);\r\n    }\r\n\r\n    if (!value) {\r\n      return new BlockLocation(0, 0, 0);\r\n    }\r\n\r\n    if (value.x || value.y || value.z) {\r\n      return new BlockLocation(value.x, value.y, value.z);\r\n    }\r\n\r\n    return new BlockLocation(0, 0, 0);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockLocation from \"./BlockLocation\";\r\n\r\nexport default class Location {\r\n  private _x: number;\r\n  private _y: number;\r\n  private _z: number;\r\n\r\n  public get x() {\r\n    return this._x;\r\n  }\r\n\r\n  public set x(newX: number) {\r\n    this._x = newX;\r\n  }\r\n\r\n  public get y() {\r\n    return this._y;\r\n  }\r\n\r\n  public set y(newY: number) {\r\n    this._y = newY;\r\n  }\r\n\r\n  public get z() {\r\n    return this._z;\r\n  }\r\n\r\n  public set z(newZ: number) {\r\n    this._z = newZ;\r\n  }\r\n\r\n  public toSummary() {\r\n    return \"(\" + this.x.toPrecision(4) + \",\" + this.y.toPrecision(4) + \",\" + this.z.toPrecision(4) + \")\";\r\n  }\r\n\r\n  public toRoundedBlockLocation() {\r\n    return new BlockLocation(Math.round(this.x), Math.round(this.y), Math.round(this.z));\r\n  }\r\n\r\n  constructor(x?: number | undefined, y?: number | undefined, z?: number | undefined) {\r\n    this._x = x === undefined ? 0 : x;\r\n    this._y = y === undefined ? 0 : y;\r\n    this._z = z === undefined ? 0 : z;\r\n  }\r\n\r\n  distanceTo(location: Location) {\r\n    return Math.sqrt(\r\n      Math.pow(Math.abs(this._x - location.x), 2) +\r\n        Math.pow(Math.abs(this._y - location.y), 2) +\r\n        Math.pow(Math.abs(this._z - location.z), 2)\r\n    );\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class Rotation {\r\n  private _yaw: number;\r\n  private _pitch: number;\r\n\r\n  public get yaw() {\r\n    return this._yaw;\r\n  }\r\n\r\n  public set yaw(newYaw: number) {\r\n    this._yaw = newYaw;\r\n  }\r\n\r\n  public get pitch() {\r\n    return this._pitch;\r\n  }\r\n\r\n  public set pitch(newPitch: number) {\r\n    this._pitch = newPitch;\r\n  }\r\n\r\n  constructor(yaw?: number | undefined, pitch?: number | undefined) {\r\n    this._yaw = yaw === undefined ? 0 : yaw;\r\n    this._pitch = pitch === undefined ? 0 : pitch;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Location from \"./Location\";\r\nimport Log from \"./../core/Log\";\r\nimport ComponentizedBase from \"./ComponentizedBase\";\r\nimport NbtBinaryTag from \"./NbtBinaryTag\";\r\nimport Rotation from \"./Rotation\";\r\nimport IPropertyObject from \"../dataform/IPropertyObject\";\r\nimport IProperty from \"./../dataform/IProperty\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport ComponentProperty from \"./ComponentProperty\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport { IGeometry } from \"./IModelGeometry\";\r\n\r\nexport default class Entity extends ComponentizedBase implements IPropertyObject {\r\n  _typeId: string = \"\";\r\n\r\n  location: Location = new Location();\r\n  rotation: Rotation = new Rotation();\r\n  tags: string[] = [];\r\n  definitions: string[] = [];\r\n\r\n  customModel?: ModelGeometryDefinition | undefined;\r\n  /** Pre-transformed geometry that takes precedence over customModel.defaultGeometry.\r\n   *  Set by VanillaProjectManager after applying VanillaGeometryTransforms. */\r\n  customGeometry?: IGeometry | undefined;\r\n  customTextureData?: Uint8Array | undefined;\r\n  customTextureUrl?: string | undefined;\r\n  customTintColor?: { r: number; g: number; b: number; a: number } | undefined;\r\n  customIgnoreAlpha?: boolean | undefined;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Entity, IProperty>();\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  set typeId(newTypeId: string) {\r\n    this._typeId = newTypeId;\r\n  }\r\n\r\n  public getProperty(name: string) {\r\n    return this.getComponentProperty(name);\r\n  }\r\n\r\n  public ensureProperty(name: string) {\r\n    return this.addComponentProperty(name);\r\n  }\r\n\r\n  public addProperty(name: string) {\r\n    return this.addComponentProperty(name);\r\n  }\r\n\r\n  notifyComponentPropertyChanged(property: ComponentProperty) {\r\n    this._onPropertyChanged.dispatch(this, property);\r\n  }\r\n\r\n  loadDefinitionsFromNbtTag(tagsTag: NbtBinaryTag) {\r\n    const entityDefinitionChildren = tagsTag.getTagChildren();\r\n\r\n    const newDefinitions: string[] = [];\r\n\r\n    for (let i = 0; i < entityDefinitionChildren.length; i++) {\r\n      const definitionChild = entityDefinitionChildren[i];\r\n\r\n      newDefinitions.push(definitionChild.valueAsString);\r\n    }\r\n\r\n    this.definitions = newDefinitions;\r\n  }\r\n\r\n  loadTagsFromNbtTag(tagsTag: NbtBinaryTag) {\r\n    const entityTagChildren = tagsTag.getTagChildren();\r\n\r\n    const newTags: string[] = [];\r\n\r\n    for (let i = 0; i < entityTagChildren.length; i++) {\r\n      const tagChild = entityTagChildren[i];\r\n\r\n      newTags.push(tagChild.valueAsString);\r\n    }\r\n\r\n    this.tags = newTags;\r\n  }\r\n\r\n  loadRotationFromNbtTag(rotationTag: NbtBinaryTag) {\r\n    const entityRotChildren = rotationTag.getTagChildren();\r\n\r\n    if (entityRotChildren.length === 2) {\r\n      this.rotation.yaw = entityRotChildren[0].valueAsFloat;\r\n      this.rotation.pitch = entityRotChildren[1].valueAsFloat;\r\n    } else {\r\n      Log.debugAlert(\"Unexpected rotation\");\r\n    }\r\n  }\r\n\r\n  loadLocationFromNbtTag(locationTag: NbtBinaryTag) {\r\n    const tagChildren = locationTag.getTagChildren();\r\n\r\n    if (tagChildren.length === 3) {\r\n      this.location.x = tagChildren[0].valueAsFloat;\r\n      this.location.y = tagChildren[1].valueAsFloat;\r\n      this.location.z = tagChildren[2].valueAsFloat;\r\n    } else {\r\n      Log.debugAlert(\"Unexpected pos\");\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolumePlane from \"./BlockVolumePlane\";\r\nimport Block from \"./Block\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IBlockVolumeColumn from \"./IBlockVolumeColumn\";\r\nimport IDimension from \"./IDimension\";\r\nimport BlockLocation from \"./BlockLocation\";\r\nimport Entity from \"./Entity\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class BlockVolume implements IDimension {\r\n  _maxX: number = 1;\r\n  _maxY: number = 1;\r\n  _maxZ: number = 1;\r\n\r\n  private _onMaxDimensionsChanged = new EventDispatcher<BlockVolume, string>();\r\n  private _onBlockTypeChanged = new EventDispatcher<BlockVolume, Block>();\r\n  private _onBlockPropertyChanged = new EventDispatcher<BlockVolume, Block>();\r\n\r\n  private _columns: IBlockVolumeColumn[][] | undefined;\r\n\r\n  private _entities: Entity[] = [];\r\n\r\n  public get onMaxDimensionsChanged() {\r\n    return this._onMaxDimensionsChanged.asEvent();\r\n  }\r\n\r\n  public get onBlockTypeChanged() {\r\n    return this._onBlockTypeChanged.asEvent();\r\n  }\r\n\r\n  public get onBlockPropertyChanged() {\r\n    return this._onBlockPropertyChanged.asEvent();\r\n  }\r\n\r\n  get columns() {\r\n    if (this._columns === undefined) {\r\n      this._columns = this._generateColumnInfo();\r\n    }\r\n\r\n    return this._columns;\r\n  }\r\n\r\n  get maxX() {\r\n    return this._maxX;\r\n  }\r\n\r\n  get maxY() {\r\n    return this._maxY;\r\n  }\r\n\r\n  get maxZ() {\r\n    return this._maxZ;\r\n  }\r\n\r\n  set maxX(newMaxX: number) {\r\n    this._maxX = newMaxX;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"x\");\r\n  }\r\n\r\n  set maxY(newMaxY: number) {\r\n    this._maxY = newMaxY;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"y\");\r\n  }\r\n\r\n  set maxZ(newMaxZ: number) {\r\n    this._maxZ = newMaxZ;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"z\");\r\n  }\r\n\r\n  setMaxDimensions(newMaxX: number, newMaxY: number, newMaxZ: number) {\r\n    this._maxX = newMaxX;\r\n    this._maxY = newMaxY;\r\n    this._maxZ = newMaxZ;\r\n\r\n    this._onMaxDimensionsChanged.dispatch(this, \"xyz\");\r\n  }\r\n\r\n  planes: BlockVolumePlane[];\r\n\r\n  constructor() {\r\n    this.planes = [];\r\n  }\r\n\r\n  spawnEntity(entityTypeId: string, location: BlockLocation) {\r\n    const e = new Entity();\r\n\r\n    return e;\r\n  }\r\n\r\n  getBlock(location: BlockLocation) {\r\n    Log.assert(\r\n      location.x >= 0 &&\r\n        location.x <= this.maxX &&\r\n        location.y >= 0 &&\r\n        location.x <= this.maxY &&\r\n        location.z >= 0 &&\r\n        location.z <= this.maxZ,\r\n      \"Block location not within bounds.\"\r\n    );\r\n\r\n    return this.x(location.x).y(location.y).z(location.z);\r\n  }\r\n\r\n  getCommandList(fromX: number, fromY: number, fromZ: number) {\r\n    const commands: string[] = [];\r\n\r\n    for (let x = 0; x < this.maxX; x++) {\r\n      for (let y = 0; y < this.maxY; y++) {\r\n        for (let z = 0; z < this.maxZ; z++) {\r\n          const block = this.x(x).y(y).z(z);\r\n\r\n          if (!block.isEmpty) {\r\n            commands.push(\"setblock ~\" + (fromX + x) + \" ~\" + (fromY + y) + \" ~\" + (fromZ + z) + \" \" + block.typeName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return commands;\r\n  }\r\n\r\n  _generateColumnInfo() {\r\n    const newColumns: IBlockVolumeColumn[][] = new Array(this.maxZ);\r\n\r\n    for (let z = 0; z < this.maxY; z++) {\r\n      newColumns[z] = new Array(this.maxX);\r\n\r\n      for (let x = 0; x < this.maxX; x++) {\r\n        const blockX = this.x(x);\r\n        let foundOpaqueTop = false;\r\n        let foundContiguousTop = false;\r\n        let opaqueTop = 0;\r\n        let contiguousTop = 0;\r\n        let top = 0;\r\n\r\n        for (let y = 0; z < this.maxY; y++) {\r\n          const block = blockX.y(y).z(z);\r\n\r\n          if (!block.isEmpty && block.isOpaque && !foundOpaqueTop) {\r\n            opaqueTop++;\r\n          } else if (!block.isEmpty) {\r\n            if (!foundContiguousTop) {\r\n              contiguousTop++;\r\n            }\r\n\r\n            top = y;\r\n\r\n            if (!block.isOpaque) {\r\n              foundOpaqueTop = true;\r\n            }\r\n          } else {\r\n            foundOpaqueTop = true;\r\n            foundContiguousTop = true;\r\n          }\r\n        }\r\n\r\n        newColumns[x][z] = {\r\n          contiguousHeight: contiguousTop,\r\n          height: top,\r\n          opaqueHeight: opaqueTop,\r\n        };\r\n      }\r\n    }\r\n\r\n    return newColumns;\r\n  }\r\n\r\n  _notifyBlockTypeChanged(block: Block) {\r\n    this._columns = undefined;\r\n\r\n    this._onBlockTypeChanged.dispatch(this, block);\r\n  }\r\n\r\n  _notifyBlockPropertyChanged(block: Block) {\r\n    this._onBlockPropertyChanged.dispatch(this, block);\r\n  }\r\n\r\n  x(int: number): BlockVolumePlane {\r\n    if (int > this.maxX) {\r\n      throw new Error(\"Value exceeds maximum X\");\r\n    }\r\n\r\n    while (int >= this.planes.length) {\r\n      const newX = this.planes.length;\r\n      this.planes[newX] = new BlockVolumePlane(this, newX);\r\n    }\r\n\r\n    return this.planes[int];\r\n  }\r\n\r\n  fillEmpty(blockTypeId: string, xFrom: number, yFrom: number, zFrom: number, xTo: number, yTo: number, zTo: number) {\r\n    for (let x = xFrom; x <= xTo; x++) {\r\n      for (let y = yFrom; y <= yTo; y++) {\r\n        let block = this.x(x).y(y).z(zFrom);\r\n\r\n        block.typeName = blockTypeId;\r\n\r\n        block = this.x(x).y(y).z(zTo);\r\n\r\n        block.typeName = blockTypeId;\r\n      }\r\n    }\r\n\r\n    for (let y = yFrom; y <= yTo; y++) {\r\n      for (let z = zFrom + 1; z < zTo; z++) {\r\n        let block = this.x(xFrom).y(y).z(z);\r\n\r\n        block.typeName = blockTypeId;\r\n\r\n        block = this.x(xTo).y(y).z(z);\r\n\r\n        block.typeName = blockTypeId;\r\n      }\r\n    }\r\n  }\r\n\r\n  fill(blockTypeId: string, xFrom: number, yFrom: number, zFrom: number, xTo: number, yTo: number, zTo: number) {\r\n    for (let x = xFrom; x <= xTo; x++) {\r\n      for (let y = yFrom; y <= yTo; y++) {\r\n        for (let z = zFrom; z <= zTo; z++) {\r\n          const block = this.x(x).y(y).z(z);\r\n\r\n          block.typeName = blockTypeId;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  fillY(blockTypeId: string, y: number) {\r\n    for (let x = 0; x < this.maxX; x++) {\r\n      const zSlice = this.x(x).y(y);\r\n\r\n      for (let z = 0; z < this.maxZ; z++) {\r\n        const block = zSlice.z(z);\r\n\r\n        block.typeName = blockTypeId;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Resizes the volume to new dimensions, preserving existing block data\r\n   * within the overlapping region. Growth fills with air; blocks outside\r\n   * shrunken bounds are discarded. Corner-anchored (origin stays at 0,0,0).\r\n   */\r\n  resize(newMaxX: number, newMaxY: number, newMaxZ: number) {\r\n    const oldMaxX = this._maxX;\r\n    const oldMaxY = this._maxY;\r\n    const oldMaxZ = this._maxZ;\r\n    const oldPlanes = this.planes;\r\n\r\n    // Create fresh planes array\r\n    this.planes = [];\r\n    this._maxX = newMaxX;\r\n    this._maxY = newMaxY;\r\n    this._maxZ = newMaxZ;\r\n\r\n    // Copy blocks from old data where coordinates exist in both old and new bounds\r\n    const copyX = Math.min(oldMaxX, newMaxX);\r\n    const copyY = Math.min(oldMaxY, newMaxY);\r\n    const copyZ = Math.min(oldMaxZ, newMaxZ);\r\n\r\n    for (let xI = 0; xI < copyX; xI++) {\r\n      if (xI >= oldPlanes.length) {\r\n        break;\r\n      }\r\n      const oldPlane = oldPlanes[xI];\r\n\r\n      for (let yI = 0; yI < copyY; yI++) {\r\n        if (yI >= oldPlane.lines.length) {\r\n          break;\r\n        }\r\n        const oldLine = oldPlane.lines[yI];\r\n\r\n        for (let zI = 0; zI < copyZ; zI++) {\r\n          if (zI >= oldLine.blocks.length) {\r\n            break;\r\n          }\r\n          const oldBlock = oldLine.blocks[zI];\r\n\r\n          if (oldBlock && !oldBlock.isEmpty) {\r\n            const newBlock = this.x(xI).y(yI).z(zI);\r\n            newBlock.typeName = oldBlock.typeName;\r\n\r\n            if (oldBlock.properties) {\r\n              for (const key in oldBlock.properties) {\r\n                const prop = oldBlock.properties[key];\r\n                if (prop && prop.value !== undefined) {\r\n                  newBlock.ensureProperty(key).value = prop.value;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._columns = undefined;\r\n    this._onMaxDimensionsChanged.dispatch(this, \"xyz\");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class DataUtilities {\r\n  static getUnsignedInteger(num1: number, num2: number, num3: number, num4: number, littleEndian: boolean): number {\r\n    // Ensure inputs are valid bytes and convert to unsigned 32-bit result\r\n    let result: number;\r\n    if (littleEndian) {\r\n      result = ((num4 & 0xff) << 24) | ((num3 & 0xff) << 16) | ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      result = ((num1 & 0xff) << 24) | ((num2 & 0xff) << 16) | ((num3 & 0xff) << 8) | (num4 & 0xff);\r\n    }\r\n    // Convert to unsigned 32-bit by using unsigned right shift\r\n    return result >>> 0;\r\n  }\r\n\r\n  static writeUnsignedInteger(data: Uint8Array, index: number, value: number, littleEndian: boolean) {\r\n    const view = new DataView(data.buffer, index, 4);\r\n\r\n    view.setUint32(0, value, littleEndian);\r\n  }\r\n\r\n  static getFloat(num1: number, num2: number, num3: number, num4: number, littleEndian: boolean): number {\r\n    // Get the 32-bit integer representation first\r\n    let intValue: number;\r\n    if (littleEndian) {\r\n      intValue = ((num4 & 0xff) << 24) | ((num3 & 0xff) << 16) | ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      intValue = ((num1 & 0xff) << 24) | ((num2 & 0xff) << 16) | ((num3 & 0xff) << 8) | (num4 & 0xff);\r\n    }\r\n\r\n    // Use Float32Array to convert the bit pattern to float\r\n    const floatArray = new Float32Array(1);\r\n    const intArray = new Uint32Array(floatArray.buffer);\r\n    intArray[0] = intValue >>> 0; // Ensure unsigned\r\n    return floatArray[0];\r\n  }\r\n\r\n  static getSignedLong(\r\n    num1: number,\r\n    num2: number,\r\n    num3: number,\r\n    num4: number,\r\n    num5: number,\r\n    num6: number,\r\n    num7: number,\r\n    num8: number,\r\n    littleEndian: boolean\r\n  ): bigint {\r\n    // For 64-bit values, we need to use BigInt to maintain precision\r\n    // Convert each byte to BigInt and shift appropriately\r\n    const bytes = [num1, num2, num3, num4, num5, num6, num7, num8];\r\n\r\n    let result = 0n;\r\n    if (littleEndian) {\r\n      // Little endian: least significant byte first\r\n      for (let i = 7; i >= 0; i--) {\r\n        result = (result << 8n) | BigInt(bytes[i] & 0xff);\r\n      }\r\n    } else {\r\n      // Big endian: most significant byte first\r\n      for (let i = 0; i < 8; i++) {\r\n        result = (result << 8n) | BigInt(bytes[i] & 0xff);\r\n      }\r\n    }\r\n\r\n    // Convert to signed 64-bit value\r\n    // If the sign bit is set, subtract 2^64\r\n    if (result >= 0x8000000000000000n) {\r\n      result = result - 0x10000000000000000n;\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static getVarInt(data: Uint8Array, index: number) {\r\n    // most significant group first?\r\n    let bytesRead = 0;\r\n    let result = 0;\r\n    let currentByte = 0;\r\n\r\n    do {\r\n      currentByte = data[index];\r\n\r\n      const currentByteVal = currentByte & 0b01111111;\r\n\r\n      result |= currentByteVal << (7 * bytesRead);\r\n\r\n      bytesRead++;\r\n\r\n      if (bytesRead > 5) {\r\n        throw new Error(\"VarInt is unexpectedly large\");\r\n      }\r\n    } while ((currentByte & 0b10000000) !== 0);\r\n\r\n    return {\r\n      value: result,\r\n      bytesRead: bytesRead,\r\n    };\r\n  }\r\n\r\n  static getSignedShort(num1: number, num2: number, littleEndian: boolean): number {\r\n    // Get unsigned 16-bit value first\r\n    let value: number;\r\n    if (littleEndian) {\r\n      value = ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      value = ((num1 & 0xff) << 8) | (num2 & 0xff);\r\n    }\r\n\r\n    // Convert to signed 16-bit value\r\n    return value & 0x8000 ? value - 0x10000 : value;\r\n  }\r\n\r\n  static getUnsignedShort(num1: number, num2: number, littleEndian: boolean): number {\r\n    // Direct bitwise operations for 16-bit unsigned value\r\n    if (littleEndian) {\r\n      return ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      return ((num1 & 0xff) << 8) | (num2 & 0xff);\r\n    }\r\n  }\r\n\r\n  static getSignedInteger(num1: number, num2: number, num3: number, num4: number, littleEndian: boolean): number {\r\n    // Get unsigned 32-bit value first\r\n    let value: number;\r\n    if (littleEndian) {\r\n      value = ((num4 & 0xff) << 24) | ((num3 & 0xff) << 16) | ((num2 & 0xff) << 8) | (num1 & 0xff);\r\n    } else {\r\n      value = ((num1 & 0xff) << 24) | ((num2 & 0xff) << 16) | ((num3 & 0xff) << 8) | (num4 & 0xff);\r\n    }\r\n\r\n    // Convert to signed 32-bit value using JavaScript's signed right shift\r\n    return value | 0;\r\n  }\r\n\r\n  static getSignedByte(value: number): number {\r\n    // Convert to signed 8-bit value\r\n    return value & 0x80 ? value - 0x100 : value;\r\n  }\r\n\r\n  static getSignedDouble(\r\n    num1: number,\r\n    num2: number,\r\n    num3: number,\r\n    num4: number,\r\n    num5: number,\r\n    num6: number,\r\n    num7: number,\r\n    num8: number,\r\n    littleEndian: boolean\r\n  ) {\r\n    const buffer = new ArrayBuffer(8);\r\n    const bytes = new Uint8Array(buffer);\r\n\r\n    bytes[0] = num1;\r\n    bytes[1] = num2;\r\n    bytes[2] = num3;\r\n    bytes[3] = num4;\r\n    bytes[4] = num5;\r\n    bytes[5] = num6;\r\n    bytes[6] = num7;\r\n    bytes[7] = num8;\r\n\r\n    const view = new DataView(buffer);\r\n\r\n    return view.getFloat64(0, littleEndian);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinaryTag, { NbtTagType } from \"./NbtBinaryTag\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport INbtTag from \"./INbtTag\";\r\nimport Log from \"../core/Log\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\n\r\nexport default class NbtBinary implements IErrorable {\r\n  roots: NbtBinaryTag[] | null = null;\r\n  context?: string;\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  static readonly MAX_ARRAY_LENGTH = 10_000_000;\r\n  static readonly MAX_STRING_LENGTH = 1_000_000;\r\n\r\n  get singleRoot() {\r\n    if (this.roots === null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.roots.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    if (this.roots.length !== 1) {\r\n      this._pushError(\"Unexpectedly did not find a single root (\" + this.roots.length + \")\");\r\n    }\r\n\r\n    return this.roots[0];\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    let contextOut = undefined;\r\n\r\n    if (contextIn) {\r\n      contextOut = this.context ? this.context + \"-\" + contextIn : contextIn;\r\n    } else {\r\n      contextOut = this.context;\r\n    }\r\n\r\n    Log.error(message + (contextOut ? \" \" + contextOut : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextOut,\r\n    });\r\n  }\r\n\r\n  private _getVarInt(data: Uint8Array, index: number) {\r\n    let bytesRead = 0;\r\n    let result = 0;\r\n    let currentByte = 0;\r\n\r\n    do {\r\n      currentByte = data[index];\r\n\r\n      const currentByteVal = currentByte & 0b01111111;\r\n\r\n      result |= currentByteVal << (7 * bytesRead);\r\n\r\n      bytesRead++;\r\n\r\n      if (bytesRead > 5) {\r\n        throw new Error(\"VarInt is unexpectedly large\");\r\n      }\r\n    } while ((currentByte & 0b10000000) !== 0);\r\n\r\n    return {\r\n      value: result,\r\n      bytesRead: bytesRead,\r\n    };\r\n  }\r\n\r\n  getJsonString() {\r\n    return JSON.stringify(this.getJson());\r\n  }\r\n\r\n  getJson(): INbtTag {\r\n    if (this.roots === null) {\r\n      return {};\r\n    }\r\n\r\n    if (this.roots.length === 1) {\r\n      return this.roots[0].getJson();\r\n    }\r\n\r\n    throw new Error(\"Unexpected multiple roots.\");\r\n  }\r\n\r\n  toBinary(): Uint8Array | undefined {\r\n    if (this.roots === undefined || this.roots === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let byteSize = 0;\r\n    for (let i = 0; i < this.roots.length; i++) {\r\n      byteSize += this.roots[i].getByteSize();\r\n    }\r\n    const ab = new ArrayBuffer(byteSize);\r\n    const bytes = new Uint8Array(ab);\r\n\r\n    let bytesWrittenAll = 0;\r\n\r\n    for (let i = 0; i < this.roots.length; i++) {\r\n      bytesWrittenAll += this.roots[i].writeBytes(bytes, bytesWrittenAll, true);\r\n    }\r\n\r\n    Log.assert(bytesWrittenAll === byteSize, \"Unexpectedly did not write full NBT.\");\r\n\r\n    return bytes;\r\n  }\r\n\r\n  ensureSingleRoot() {\r\n    if (this.roots) {\r\n      if (this.roots.length !== 1) {\r\n        throw new Error(\"Unexpected root count.\");\r\n      }\r\n\r\n      return this.roots[0];\r\n    }\r\n\r\n    this.roots = [];\r\n\r\n    this.roots.push(new NbtBinaryTag(NbtTagType.compound, \"\", false));\r\n\r\n    return this.roots[0];\r\n  }\r\n\r\n  fromBinary(\r\n    data: Uint8Array,\r\n    littleEndian: boolean,\r\n    isVarint: boolean,\r\n    skipBytes?: number,\r\n    stringsAreASCII?: boolean,\r\n    processAsList?: boolean\r\n  ) {\r\n    const tagStack: NbtBinaryTag[] = [];\r\n    const listCountStack: number[] = [];\r\n    const listTypeStack: NbtTagType[] = [];\r\n\r\n    this.roots = [];\r\n\r\n    let i = 0;\r\n\r\n    if (skipBytes !== undefined) {\r\n      i = skipBytes;\r\n    }\r\n    if (!stringsAreASCII) {\r\n      stringsAreASCII = false;\r\n    }\r\n\r\n    while (i < data.length) {\r\n      let tagType: NbtTagType = NbtTagType.unknown;\r\n      let name = \"\";\r\n\r\n      let isListChild = false;\r\n\r\n      if (tagStack.length === 0 || tagStack[tagStack.length - 1].type !== NbtTagType.list) {\r\n        tagType = data[i++] as NbtTagType;\r\n\r\n        if (tagType > 13 && tagType !== 99) {\r\n          this._pushError(\"Unexpected NBT tag type: \" + tagType);\r\n        }\r\n\r\n        if (tagType !== NbtTagType.end) {\r\n          let nameLength = 0;\r\n\r\n          if (isVarint) {\r\n            const result = this._getVarInt(data, i);\r\n            nameLength = result.value;\r\n            i += result.bytesRead;\r\n          } else {\r\n            nameLength = data[i++];\r\n            nameLength += data[i++] * 256;\r\n          }\r\n\r\n          if (nameLength < 0 || nameLength > NbtBinary.MAX_STRING_LENGTH) {\r\n            this._pushError(\"Invalid NBT name length: \" + nameLength);\r\n            return 0;\r\n          }\r\n\r\n          for (let j = 0; j < nameLength; j++) {\r\n            if (i >= data.length) {\r\n              this._pushError(\"Unexpected end of data while reading NBT name\");\r\n              return 0;\r\n            }\r\n            name += String.fromCharCode(data[i++]);\r\n          }\r\n        } else if (tagStack.length === 0) {\r\n          break;\r\n        }\r\n      } // we're in list sub tag parsing mode\r\n      else {\r\n        tagType = listTypeStack[tagStack.length - 1];\r\n        isListChild = true;\r\n      }\r\n\r\n      const activeTag = new NbtBinaryTag(tagType, name, isListChild);\r\n\r\n      if (tagStack.length === 0) {\r\n        this.roots.push(activeTag);\r\n      } // if (activeTag.type !== NbtTagType.end)\r\n      else {\r\n        const parentTag = tagStack[tagStack.length - 1];\r\n\r\n        if (\r\n          parentTag.type === NbtTagType.list &&\r\n          (parentTag.childTagType === undefined || parentTag.childTagType === NbtTagType.unknown)\r\n        ) {\r\n          parentTag.childTagType = activeTag.type;\r\n        }\r\n\r\n        parentTag.childrenWithEnd.push(activeTag);\r\n      }\r\n\r\n      if (tagStack.length > 0 && tagStack[tagStack.length - 1].type === NbtTagType.list) {\r\n        listCountStack[tagStack.length - 1]--;\r\n\r\n        if (listCountStack[tagStack.length - 1] === 0) {\r\n          tagStack.pop();\r\n        }\r\n      }\r\n\r\n      if (activeTag.type === NbtTagType.compound) {\r\n        tagStack.push(activeTag);\r\n      } else if (activeTag.type === NbtTagType.end) {\r\n        tagStack.pop();\r\n        if (tagStack.length === 0 && !processAsList) {\r\n          break;\r\n        }\r\n      } else if (activeTag.type === NbtTagType.byte) {\r\n        activeTag.value = DataUtilities.getSignedByte(data[i++]);\r\n      } else if (activeTag.type === NbtTagType.byteArray) {\r\n        const arrayLength = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n\r\n        if (arrayLength < 0 || arrayLength > NbtBinary.MAX_ARRAY_LENGTH || i + arrayLength > data.length) {\r\n          this._pushError(\"Invalid NBT byteArray length: \" + arrayLength);\r\n          return 0;\r\n        }\r\n\r\n        const numberArray: number[] = [];\r\n\r\n        for (let j = 0; j < arrayLength; j++) {\r\n          numberArray.push(DataUtilities.getSignedByte(data[i++]));\r\n        }\r\n\r\n        activeTag.value = numberArray;\r\n      } else if (activeTag.type === NbtTagType.list) {\r\n        activeTag.type = NbtTagType.list;\r\n        tagStack.push(activeTag);\r\n\r\n        listTypeStack[tagStack.length - 1] = data[i++] as NbtTagType;\r\n        listCountStack[tagStack.length - 1] = DataUtilities.getSignedInteger(\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          littleEndian\r\n        );\r\n      } else if (activeTag.type === NbtTagType.intArray) {\r\n        const arrayLength = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n\r\n        if (arrayLength < 0 || arrayLength > NbtBinary.MAX_ARRAY_LENGTH || i + arrayLength * 4 > data.length) {\r\n          this._pushError(\"Invalid NBT intArray length: \" + arrayLength);\r\n          return 0;\r\n        }\r\n\r\n        const numberArray: number[] = [];\r\n\r\n        for (let j = 0; j < arrayLength; j++) {\r\n          numberArray.push(DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian));\r\n        }\r\n\r\n        activeTag.value = numberArray;\r\n      } else if (activeTag.type === NbtTagType.longArray) {\r\n        const arrayLength = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n\r\n        if (arrayLength < 0 || arrayLength > NbtBinary.MAX_ARRAY_LENGTH || i + arrayLength * 8 > data.length) {\r\n          this._pushError(\"Invalid NBT longArray length: \" + arrayLength);\r\n          return 0;\r\n        }\r\n\r\n        const numberArray: bigint[] = [];\r\n\r\n        for (let j = 0; j < arrayLength; j++) {\r\n          numberArray.push(\r\n            DataUtilities.getSignedLong(\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              data[i++],\r\n              littleEndian\r\n            )\r\n          );\r\n        }\r\n\r\n        activeTag.value = numberArray;\r\n      } else if (activeTag.type === NbtTagType.short) {\r\n        activeTag.value = DataUtilities.getSignedShort(data[i++], data[i++], littleEndian);\r\n      } else if (activeTag.type === NbtTagType.int) {\r\n        activeTag.value = DataUtilities.getSignedInteger(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n      } else if (activeTag.type === NbtTagType.float) {\r\n        activeTag.value = DataUtilities.getFloat(data[i++], data[i++], data[i++], data[i++], littleEndian);\r\n      } else if (activeTag.type === NbtTagType.double) {\r\n        activeTag.value = DataUtilities.getSignedDouble(\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          littleEndian\r\n        );\r\n      } else if (activeTag.type === NbtTagType.long) {\r\n        activeTag.value = DataUtilities.getSignedLong(\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          data[i++],\r\n          littleEndian\r\n        );\r\n      } else if (activeTag.type === NbtTagType.string) {\r\n        let stringLength = 0;\r\n\r\n        if (isVarint) {\r\n          const result = this._getVarInt(data, i);\r\n\r\n          stringLength = result.value;\r\n\r\n          i += result.bytesRead;\r\n        } else {\r\n          stringLength = DataUtilities.getUnsignedShort(data[i++], data[i++], littleEndian);\r\n        }\r\n\r\n        const view = new DataView(data.buffer);\r\n        let str: string | undefined;\r\n\r\n        if (stringsAreASCII) {\r\n          str = Utilities.readStringASCIIBuffer(data, i, stringLength);\r\n        } else {\r\n          str = Utilities.getString(view, i, stringLength, \"UTF8\");\r\n        }\r\n\r\n        if (str === undefined) {\r\n          throw new Error(\"Unexpectedly could not read a string.\");\r\n        }\r\n\r\n        activeTag.value = str;\r\n        i += stringLength;\r\n        Log.assert(i <= data.length, \"NBTFB\");\r\n\r\n        /*\r\n                let valueString = \"\";\r\n\r\n                for (let j=0; j<stringLength; j++)\r\n                {\r\n                    valueString += String.fromCharCode(data[i++]);\r\n                }\r\n\r\n                activeTag.value = valueString;*/\r\n      } else {\r\n        Log.unexpectedError(\"Unsupported NBT tag type '\" + activeTag.type + \"'\");\r\n      }\r\n    }\r\n\r\n    let bytesRead = i;\r\n    if (skipBytes !== undefined) {\r\n      bytesRead -= skipBytes;\r\n    }\r\n\r\n    return bytesRead;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class InventorySlot {\r\n  name?: string;\r\n  count?: number;\r\n  slot: number;\r\n  wasPickedUp?: boolean;\r\n  damage?: number;\r\n\r\n  constructor(slotIndex: number) {\r\n    this.slot = slotIndex;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class ComponentBase {\r\n  id?: string;\r\n  [propertyId: string]: string | number | number[] | bigint | bigint[] | boolean | object | undefined;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IComponent from \"../IComponent\";\r\nimport InventorySlot from \"../InventorySlot\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\nimport Log from \"../../core/Log\";\r\nimport ComponentBase from \"../ComponentBase\";\r\n\r\nexport default class EntityInventoryComponent extends ComponentBase implements IComponent {\r\n  slots: { [slotIndex: number]: InventorySlot };\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this.slots = {};\r\n  }\r\n\r\n  ensureSlot(slotIndex: number) {\r\n    let slot = this.slots[slotIndex];\r\n\r\n    if (slot === undefined) {\r\n      slot = new InventorySlot(slotIndex);\r\n\r\n      this.slots[slotIndex] = slot;\r\n    }\r\n\r\n    return slot;\r\n  }\r\n\r\n  loadFromNbtTag(tag: NbtBinaryTag) {\r\n    const childSlotTags = tag.getTagChildren();\r\n\r\n    for (let k = 0; k < childSlotTags.length; k++) {\r\n      const childSlotTag = childSlotTags[k];\r\n      const slotIndexTag = childSlotTag.find(\"Slot\");\r\n      const nameTag = childSlotTag.find(\"Name\");\r\n      const countTag = childSlotTag.find(\"Count\");\r\n      const wasPickedUpTag = childSlotTag.find(\"WasPickedUp\");\r\n      const damageTag = childSlotTag.find(\"Damage\");\r\n\r\n      if (\r\n        nameTag !== null &&\r\n        nameTag.value !== null &&\r\n        countTag !== null &&\r\n        countTag !== null &&\r\n        damageTag !== null &&\r\n        damageTag.value !== null &&\r\n        wasPickedUpTag !== null &&\r\n        wasPickedUpTag.value !== null\r\n      ) {\r\n        let slotIndex = k;\r\n\r\n        if (slotIndexTag !== null) {\r\n          slotIndex = slotIndexTag.valueAsInt;\r\n        }\r\n\r\n        const slot = this.ensureSlot(slotIndex);\r\n\r\n        slot.name = nameTag.valueAsString;\r\n        slot.count = countTag.valueAsInt;\r\n        slot.wasPickedUp = wasPickedUpTag.valueAsBoolean;\r\n        slot.damage = damageTag.valueAsInt;\r\n      } else {\r\n        Log.fail(\"Unexpected inventory item in structure.\");\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport ISnbtContent from \"./ISnbtContent\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport ISnbtBlock from \"./ISnbtBlock\";\r\nimport Block from \"./Block\";\r\nimport Entity from \"./Entity\";\r\nimport Log from \"../core/Log\";\r\nimport Database from \"./Database\";\r\nimport EntityInventoryComponent from \"./components/EntityInventoryComponent\";\r\n\r\nexport default class Structure {\r\n  private _cube: BlockVolume | undefined;\r\n  private _entities: Entity[] | undefined;\r\n  private _blockPalette: Block[] = [];\r\n  public nbt: NbtBinary | undefined;\r\n\r\n  public defaultBlockPersistenceVersion: number = 17879555;\r\n\r\n  public originX: number | undefined;\r\n  public originY: number | undefined;\r\n  public originZ: number | undefined;\r\n\r\n  get cube() {\r\n    return this._cube;\r\n  }\r\n\r\n  set cube(newCube: BlockVolume | undefined) {\r\n    this._cube = newCube;\r\n  }\r\n\r\n  get entities() {\r\n    return this._entities;\r\n  }\r\n\r\n  shallowCopyFrom(structure: Structure) {\r\n    this.cube = structure.cube;\r\n    this._entities = structure.entities;\r\n    this.originX = structure.originX;\r\n    this.originY = structure.originY;\r\n    this.originZ = structure.originZ;\r\n  }\r\n\r\n  createNbt() {\r\n    if (this._cube === undefined) {\r\n      return;\r\n    }\r\n\r\n    const nbt = new NbtBinary();\r\n\r\n    const root = nbt.ensureSingleRoot();\r\n\r\n    root.addTag(NbtTagType.int, \"format_version\").value = 1;\r\n\r\n    const sizeList = root.addTag(NbtTagType.list, \"size\");\r\n    sizeList.childTagType = NbtTagType.unknown;\r\n\r\n    sizeList.addTag(NbtTagType.int).value = this._cube.maxX;\r\n    sizeList.addTag(NbtTagType.int).value = this._cube.maxY;\r\n    sizeList.addTag(NbtTagType.int).value = this._cube.maxZ;\r\n\r\n    const structure = root.addTag(NbtTagType.compound, \"structure\");\r\n\r\n    const blockIndices = structure.addTag(NbtTagType.list, \"block_indices\");\r\n    const primaryLayer = blockIndices.addTag(NbtTagType.list);\r\n    const secondaryLayer = blockIndices.addTag(NbtTagType.list);\r\n\r\n    const blockPalette: { [blockId: string]: number } = {};\r\n    const paletteBlocks: Block[] = [];\r\n\r\n    for (let x = 0; x < this._cube.maxX; x++) {\r\n      for (let y = 0; y < this._cube.maxY; y++) {\r\n        for (let z = 0; z < this._cube.maxZ; z++) {\r\n          const block = this._cube.x(x).y(y).z(z);\r\n\r\n          const blockFingerprint = block.toString();\r\n\r\n          let paletteId = blockPalette[blockFingerprint];\r\n\r\n          if (block.typeName == null || block.typeName === \"air\") {\r\n            paletteId = -1;\r\n          } else if (paletteId == null) {\r\n            paletteId = paletteBlocks.length;\r\n            blockPalette[blockFingerprint] = paletteId;\r\n            paletteBlocks.push(block);\r\n          }\r\n\r\n          primaryLayer.addTag(NbtTagType.int).value = paletteId;\r\n          secondaryLayer.addTag(NbtTagType.int).value = block.extraLiquidDepth;\r\n        }\r\n      }\r\n    }\r\n\r\n    /*const entities = */ structure.addTag(NbtTagType.list, \"entities\");\r\n\r\n    if (this._entities !== undefined) {\r\n    }\r\n\r\n    const palette = structure.addTag(NbtTagType.compound, \"palette\");\r\n\r\n    structure.addTag(NbtTagType.end);\r\n\r\n    const paletteDefault = palette.addTag(NbtTagType.compound, \"default\");\r\n\r\n    palette.addTag(NbtTagType.end);\r\n\r\n    const blockStates = paletteDefault.addTag(NbtTagType.list, \"block_palette\");\r\n\r\n    for (let i = 0; i < paletteBlocks.length; i++) {\r\n      const block = paletteBlocks[i];\r\n\r\n      if (block.typeName == null) {\r\n        throw new Error(\"Unexpected palette block.\");\r\n      }\r\n\r\n      const blockState = blockStates.addTag(NbtTagType.compound);\r\n\r\n      blockState.addTag(NbtTagType.string, \"name\").value = block.typeName;\r\n\r\n      const blockStateStates = blockState.addTag(NbtTagType.compound, \"states\");\r\n\r\n      for (const propertyName in block.properties) {\r\n        const blockProperty = block.getProperty(propertyName);\r\n\r\n        const propType = blockProperty.nbtType;\r\n        const value = blockProperty.value;\r\n\r\n        if (value === undefined) {\r\n          blockStateStates.addTag(propType, propertyName).value = null;\r\n        } else {\r\n          blockStateStates.addTag(propType, propertyName).value = value;\r\n        }\r\n      }\r\n\r\n      let version = block.persistenceVersion;\r\n\r\n      if (version <= 0) {\r\n        version = this.defaultBlockPersistenceVersion;\r\n      }\r\n\r\n      blockState.addTag(NbtTagType.int, \"version\").value = version;\r\n      blockState.addTag(NbtTagType.end);\r\n    }\r\n\r\n    // TODO: add block_position_data here to paletteDefault;\r\n    const blockPositionData = paletteDefault.addTag(NbtTagType.compound, \"block_position_data\");\r\n    blockPositionData.addTag(NbtTagType.end);\r\n\r\n    paletteDefault.addTag(NbtTagType.end);\r\n\r\n    if (this.originX !== undefined && this.originY !== undefined && this.originZ !== undefined) {\r\n      const structureOrigin = root.addTag(NbtTagType.list, \"structure_world_origin\");\r\n\r\n      structureOrigin.addTag(NbtTagType.int).value = this.originX;\r\n      structureOrigin.addTag(NbtTagType.int).value = this.originY;\r\n      structureOrigin.addTag(NbtTagType.int).value = this.originZ;\r\n    }\r\n\r\n    root.addTag(NbtTagType.end);\r\n\r\n    return nbt;\r\n  }\r\n\r\n  loadFromSnbtText(text: string) {\r\n    let structure = null;\r\n\r\n    const content = MinecraftUtilities.fixupJson(text);\r\n\r\n    try {\r\n      // temporarily putting back in the safe code.\r\n      structure = JSON.stringify(content); // eval('(' + content + ')');\r\n    } catch (e) {\r\n      throw new Error(\"Error processing SNBT.\");\r\n    }\r\n\r\n    if (structure === null || structure === undefined) {\r\n      throw new Error(\"Could not create SNBT.\");\r\n    }\r\n  }\r\n\r\n  loadFromSnbt(content: ISnbtContent) {\r\n    if (\r\n      content.size === null ||\r\n      content.size === undefined ||\r\n      content.size.length !== 3 ||\r\n      content.data === undefined\r\n    ) {\r\n      throw new Error(\"Unexpected structure to Snbt file.\");\r\n    }\r\n\r\n    if (this._cube === undefined) {\r\n      this._cube = new BlockVolume();\r\n    }\r\n\r\n    this._cube.setMaxDimensions(content.size[0], content.size[1], content.size[2]);\r\n\r\n    for (let i = 0; i < content.data.length; i++) {\r\n      const block: ISnbtBlock = content.data[i];\r\n\r\n      if (block.pos === undefined || block.pos.length !== 3 || block.state === undefined) {\r\n        throw new Error(\"Unexpected format for a block in an Snbt\");\r\n      }\r\n\r\n      const targetBlock = this._cube.x(block.pos[0]).y(block.pos[1]).z(block.pos[2]);\r\n\r\n      let blockTypeId = block.state;\r\n\r\n      const firstCurly = blockTypeId.indexOf(\"{\");\r\n\r\n      if (firstCurly >= 0) {\r\n        if (blockTypeId[blockTypeId.length - 1] !== \"}\") {\r\n          throw new Error(\"Unexpected property found.\");\r\n        }\r\n\r\n        const props = blockTypeId.substring(firstCurly + 1, blockTypeId.length - 1).split(\",\");\r\n\r\n        for (const prop of props) {\r\n          const propArr = prop.split(\":\");\r\n\r\n          if (propArr.length === 2) {\r\n            targetBlock.ensureProperty(propArr[0]).value = propArr[1];\r\n          } else {\r\n            throw new Error(\"Unexpected property found.\");\r\n          }\r\n        }\r\n\r\n        blockTypeId = blockTypeId.substring(0, firstCurly);\r\n      }\r\n\r\n      targetBlock.typeName = blockTypeId;\r\n    }\r\n  }\r\n\r\n  async loadFromNbtBytes(bytes: Uint8Array) {\r\n    const tag = new NbtBinary();\r\n\r\n    tag.fromBinary(bytes, true, false);\r\n\r\n    this.nbt = tag;\r\n\r\n    await this.loadFromNbt(tag);\r\n  }\r\n\r\n  getMCStructureBytes() {\r\n    if (this.originX === undefined) {\r\n      this.originX = 10;\r\n    }\r\n\r\n    if (this.originY === undefined) {\r\n      this.originY = 10;\r\n    }\r\n\r\n    if (this.originZ === undefined) {\r\n      this.originZ = 10;\r\n    }\r\n\r\n    const nbt = this.createNbt();\r\n\r\n    if (nbt !== undefined) {\r\n      const bytes = nbt.toBinary();\r\n\r\n      return bytes;\r\n    }\r\n\r\n    Log.fail(\"Could not create MC Structure bytes for updated.\");\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async loadFromNbt(binary: NbtBinary) {\r\n    const cube = new BlockVolume();\r\n\r\n    const root = binary.singleRoot;\r\n\r\n    if (root === null) {\r\n      return;\r\n    }\r\n\r\n    const paletteTag = root.find(\"block_palette\");\r\n    const indicesTag = root.find(\"block_indices\");\r\n    const sizeTag = root.find(\"size\");\r\n\r\n    if (\r\n      paletteTag === null ||\r\n      sizeTag === null ||\r\n      indicesTag === null ||\r\n      sizeTag.getTagChildren().length !== 3 ||\r\n      indicesTag.getTagChildren().length !== 2\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const sizeTagChildren = sizeTag.getTagChildren();\r\n    const indicesChildren = indicesTag.getTagChildren();\r\n    const paletteTagChildren = paletteTag.getTagChildren();\r\n\r\n    cube.setMaxDimensions(\r\n      sizeTagChildren[0].value as number,\r\n      sizeTagChildren[1].value as number,\r\n      sizeTagChildren[2].value as number\r\n    );\r\n\r\n    this._blockPalette = [];\r\n\r\n    for (let i = 0; i < paletteTagChildren.length; i++) {\r\n      const state = paletteTagChildren[i];\r\n\r\n      const name = state.getProperty(\"name\");\r\n      const states = state.getProperty(\"states\");\r\n      const version = state.getProperty(\"version\");\r\n\r\n      if (name != null && states != null && version != null) {\r\n        const block = new Block(name.value as string);\r\n\r\n        this._blockPalette.push(block);\r\n\r\n        const statesChildren = states.getTagChildren();\r\n\r\n        for (let j = 0; j < statesChildren.length; j++) {\r\n          const state = statesChildren[j];\r\n\r\n          const blockProp = block.ensureProperty(state.name);\r\n\r\n          blockProp.nbtType = state.type;\r\n\r\n          if (state.value === null) {\r\n            blockProp.value = undefined;\r\n          } else {\r\n            blockProp.value = state.value;\r\n          }\r\n        }\r\n\r\n        block.persistenceVersion = version.value as number;\r\n        this.defaultBlockPersistenceVersion = block.persistenceVersion;\r\n      }\r\n    }\r\n\r\n    const blockRefs = indicesChildren[0].getTagChildren();\r\n\r\n    let i = 0;\r\n\r\n    for (let x = 0; x < cube.maxX; x++) {\r\n      for (let y = 0; y < cube.maxY; y++) {\r\n        for (let z = 0; z < cube.maxZ; z++) {\r\n          const blockRefNum = blockRefs[i].value as number;\r\n          const block = cube.x(x).y(y).z(z);\r\n\r\n          if (blockRefNum === -1) {\r\n            block.typeName = \"minecraft:air\";\r\n          } else {\r\n            block.applyFrom(this._blockPalette[blockRefNum]);\r\n          }\r\n          block.extraLiquidDepth = -1;\r\n\r\n          i++;\r\n        }\r\n      }\r\n    }\r\n\r\n    const waterLevels = indicesChildren[1].getTagChildren();\r\n    i = 0;\r\n    for (let x = 0; x < cube.maxX; x++) {\r\n      for (let y = 0; y < cube.maxY; y++) {\r\n        for (let z = 0; z < cube.maxZ; z++) {\r\n          const secondaryBlockIndex = waterLevels[i].value as number;\r\n\r\n          if (secondaryBlockIndex !== -1) {\r\n            const block = cube.x(x).y(y).z(z);\r\n\r\n            const secondaryBlock = this._blockPalette[secondaryBlockIndex];\r\n\r\n            if (secondaryBlock.shortTypeId === \"water\") {\r\n              block.extraLiquidDepth = secondaryBlock.getPropertyNumber(\"liquid_depth\", -1);\r\n            }\r\n          }\r\n\r\n          i++;\r\n        }\r\n      }\r\n    }\r\n\r\n    const entities = root.find(\"entities\");\r\n\r\n    this._entities = [];\r\n\r\n    if (entities !== null) {\r\n      await Database.loadUx();\r\n\r\n      if (Database.uxCatalog !== undefined) {\r\n        const entitiesChildren = entities.getTagChildren();\r\n\r\n        for (let i = 0; i < entitiesChildren.length; i++) {\r\n          const entityTag = entitiesChildren[i];\r\n\r\n          const entity = new Entity();\r\n\r\n          const entityTagChildren = entityTag.getTagChildren();\r\n\r\n          for (let j = 0; j < entityTagChildren.length; j++) {\r\n            const entityPropertyTag = entityTagChildren[j];\r\n\r\n            if (entityPropertyTag.name === \"definitions\") {\r\n              entity.loadDefinitionsFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"identifier\") {\r\n              Log.assert(entityPropertyTag.type === NbtTagType.string, \"Expected string type\");\r\n\r\n              entity.typeId = entityPropertyTag.valueAsString;\r\n            } else if (entityPropertyTag.name === \"Attributes\") {\r\n              entity.loadAttributeComponentsFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Rotation\") {\r\n              entity.loadRotationFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Tags\") {\r\n              entity.loadTagsFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"ChestItems\") {\r\n              const inventoryComponent = entity.ensureDataComponent(\r\n                \"inventory\",\r\n                new EntityInventoryComponent()\r\n              ) as EntityInventoryComponent;\r\n\r\n              inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Armor\") {\r\n              const inventoryComponent = entity.ensureDataComponent(\r\n                \"armor_inventory\",\r\n                new EntityInventoryComponent()\r\n              ) as EntityInventoryComponent;\r\n\r\n              inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"Mainhand\") {\r\n              const subElement = entityPropertyTag.getTagChildren();\r\n\r\n              if (subElement.length === 1) {\r\n                const inventoryComponent = entity.ensureDataComponent(\r\n                  \"mainhand\",\r\n                  new EntityInventoryComponent()\r\n                ) as EntityInventoryComponent;\r\n\r\n                inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n              }\r\n            } else if (entityPropertyTag.name === \"Offhand\") {\r\n              const subElement = entityPropertyTag.getTagChildren();\r\n\r\n              if (subElement.length === 1) {\r\n                const inventoryComponent = entity.ensureDataComponent(\r\n                  \"offhand\",\r\n                  new EntityInventoryComponent()\r\n                ) as EntityInventoryComponent;\r\n\r\n                inventoryComponent.loadFromNbtTag(entityPropertyTag);\r\n              }\r\n            } else if (entityPropertyTag.name === \"Pos\") {\r\n              entity.loadLocationFromNbtTag(entityPropertyTag);\r\n            } else if (entityPropertyTag.name === \"internalComponents\") {\r\n            } else if (entityPropertyTag.value === null) {\r\n              const prop = entity.ensureComponentProperty(entityPropertyTag.name);\r\n              prop.load();\r\n              prop.value = undefined;\r\n            } else if (\r\n              entityPropertyTag.name === \"Air\" ||\r\n              entityPropertyTag.name === \"Chested\" ||\r\n              entityPropertyTag.name === \"Color\" ||\r\n              entityPropertyTag.name === \"Color2\" ||\r\n              entityPropertyTag.name === \"Dead\" ||\r\n              entityPropertyTag.name === \"DeathTime\" ||\r\n              entityPropertyTag.name === \"FallDistance\" ||\r\n              entityPropertyTag.name === \"HurtTime\" ||\r\n              entityPropertyTag.name === \"Invulnerable\" ||\r\n              entityPropertyTag.name === \"IsAngry\" ||\r\n              entityPropertyTag.name === \"IsAutonomous\" ||\r\n              entityPropertyTag.name === \"IsBaby\" ||\r\n              entityPropertyTag.name === \"IsEating\" ||\r\n              entityPropertyTag.name === \"IsGliding\" ||\r\n              entityPropertyTag.name === \"IsGlobal\" ||\r\n              entityPropertyTag.name === \"IsIllagerCaptain\" ||\r\n              entityPropertyTag.name === \"IsOrphaned\" ||\r\n              entityPropertyTag.name === \"IsOutOfControl\" ||\r\n              entityPropertyTag.name === \"IsPregnant\" ||\r\n              entityPropertyTag.name === \"IsRoaring\" ||\r\n              entityPropertyTag.name === \"IsScared\" ||\r\n              entityPropertyTag.name === \"IsStunned\" ||\r\n              entityPropertyTag.name === \"IsSwimming\" ||\r\n              entityPropertyTag.name === \"IsTamed\" ||\r\n              entityPropertyTag.name === \"IsTrusting\" ||\r\n              entityPropertyTag.name === \"LeasherID\" ||\r\n              entityPropertyTag.name === \"LootDropped\" ||\r\n              entityPropertyTag.name === \"MarkVariant\" ||\r\n              entityPropertyTag.name === \"NaturalSpawn\" ||\r\n              entityPropertyTag.name === \"OnGround\" ||\r\n              entityPropertyTag.name === \"OwnerNew\" ||\r\n              entityPropertyTag.name === \"PortalCooldown\" ||\r\n              entityPropertyTag.name === \"Saddled\" ||\r\n              entityPropertyTag.name === \"Sheared\" ||\r\n              entityPropertyTag.name === \"ShowBottom\" ||\r\n              entityPropertyTag.name === \"Sitting\" ||\r\n              entityPropertyTag.name === \"SkinID\" ||\r\n              entityPropertyTag.name === \"SpawnedByNight\" ||\r\n              entityPropertyTag.name === \"Strength\" ||\r\n              entityPropertyTag.name === \"StrengthMax\" ||\r\n              entityPropertyTag.name === \"Surface\" ||\r\n              entityPropertyTag.name === \"TargetID\" ||\r\n              entityPropertyTag.name === \"TradeExperience\" ||\r\n              entityPropertyTag.name === \"TradeTier\" ||\r\n              entityPropertyTag.name === \"UniqueID\" ||\r\n              entityPropertyTag.name === \"Variant\" ||\r\n              entityPropertyTag.name === \"boundX\" ||\r\n              entityPropertyTag.name === \"boundY\" ||\r\n              entityPropertyTag.name === \"boundZ\" ||\r\n              entityPropertyTag.name === \"canPickupItems\" ||\r\n              entityPropertyTag.name === \"expDropEnabled\" ||\r\n              entityPropertyTag.name === \"hasBoundOrigin\" ||\r\n              entityPropertyTag.name === \"hasSetCanPickupItems\" ||\r\n              entityPropertyTag.name === \"isOrphaned\"\r\n            ) {\r\n              // placeholder for unimplemented properties\r\n              // entity.loadTagsFromNbtTag(entityPropertyTag);\r\n            } else {\r\n              const prop = entity.ensureComponentProperty(entityPropertyTag.name);\r\n              prop.load();\r\n              prop.value = entityPropertyTag.value;\r\n            }\r\n          }\r\n\r\n          this._entities.push(entity);\r\n        }\r\n      }\r\n    }\r\n\r\n    const structureOrigin = root.find(\"structure_world_origin\");\r\n\r\n    if (structureOrigin !== null && structureOrigin.getTagChildren().length === 3) {\r\n      const structuresOriginChildren = structureOrigin.getTagChildren();\r\n\r\n      this.originX = structuresOriginChildren[0].valueAsInt;\r\n      this.originY = structuresOriginChildren[1].valueAsInt;\r\n      this.originZ = structuresOriginChildren[2].valueAsInt;\r\n    } else {\r\n      this.originX = undefined;\r\n      this.originY = undefined;\r\n      this.originZ = undefined;\r\n    }\r\n\r\n    this._cube = cube;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport BlockVolume from \"../minecraft/BlockVolume\";\r\nimport Structure from \"../minecraft/Structure\";\r\n\r\nexport default class ProjectContent {\r\n  static defaultTestJavaScript = `import { Test } from \"@minecraft/server-gametest\";\r\nimport { world, system } from \"@minecraft/server\";\r\n        \r\nfunction basicTest(test) {\r\n    const zoglinEntityType = \"zoglin\";\r\n    const skeletonEntityType = \"skeleton\";\r\n        \r\n    test.spawn(zoglinEntityType, { x: 2, y: 2, z: 3});\r\n    test.spawn(skeletonEntityType, { x: 5, y: 2, z: 3});\r\n    \r\n    test.succeedWhen( ()=> {\r\n            test.assertEntityPresentInArea(skeletonEntityType, false);\r\n        }\r\n    );\r\n}\r\n        \r\ngt.register(\"MyProject\", \"basicTest\", basicTest).structureName(\"gametests:basic\");     \r\n`;\r\n\r\n  static emptyTestJavaScript = `import { Test } from \"@minecraft/server-gametest\";\r\nimport { world, system } from \"@minecraft/server\";\r\n        \r\nfunction basicTest(test) {\r\n\r\n}\r\n        \r\ngt.register(\"MyProject\", \"basicTest\", basicTest).structureName(\"gametests:basic\");     \r\n`;\r\n\r\n  static emptyJavaScript = `import { world, system } from \"@minecraft/server\";\r\n        \r\nfunction myFunction() \r\n{\r\n\r\n}\r\n`;\r\n\r\n  static emptyActionSet = `{\r\n}\r\n`;\r\n\r\n  static emptyWorldTest = `{\r\n}\r\n`;\r\n\r\n  static getItemName(name: string) {\r\n    name = name.trim();\r\n    name = name.replace(/ /gi, \"\");\r\n    name = Utilities.lowerCaseStartOfString(name);\r\n\r\n    return name;\r\n  }\r\n\r\n  static getDefaultTestJavaScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.defaultTestJavaScript;\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static getDefaultTestTypeScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.defaultTestJavaScript;\r\n\r\n    content = content.replace(\"(test)\", \"(test : gt.Test)\");\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyTestJavaScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.emptyTestJavaScript;\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyTestTypeScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.emptyTestJavaScript;\r\n\r\n    content = content.replace(\"(test)\", \"(test : gt.Helper)\");\r\n\r\n    content = this.replaceCommonItems(content, projectName);\r\n\r\n    content = content.replace(/basicTest/gi, ProjectContent.getItemName(testName));\r\n\r\n    return content;\r\n  }\r\n\r\n  static replaceCommonItems(content: string, projectName: string) {\r\n    return content.replace('\"MyProject\"', '\"' + ProjectContent.getItemName(projectName) + '\"');\r\n  }\r\n\r\n  static getEmptyActionSet(projectName: string, testName: string) {\r\n    const content = ProjectContent.emptyActionSet;\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyWorldTest(projectName: string, testName: string) {\r\n    const content = ProjectContent.emptyActionSet;\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyJavaScript(projectName: string, testName: string) {\r\n    let content = ProjectContent.emptyJavaScript;\r\n\r\n    content = content.replace(\"myFunction\", ProjectContent.getItemName(projectName) + \"Action\");\r\n\r\n    return content;\r\n  }\r\n\r\n  static getEmptyTypeScript(projectName: string, testName: string) {\r\n    return this.getEmptyJavaScript(projectName, testName);\r\n  }\r\n\r\n  static generateDefaultStructure() {\r\n    const structure = new Structure();\r\n    const cube = new BlockVolume();\r\n\r\n    cube.setMaxDimensions(8, 8, 8);\r\n\r\n    structure.cube = cube;\r\n\r\n    cube.fillY(\"minecraft:dirt\", 0);\r\n    cube.fillEmpty(\"minecraft:glass\", 0, 1, 0, 7, 7, 7);\r\n\r\n    return structure.getMCStructureBytes();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, IAddonMetadata, IResourcePackManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport BehaviorManifestDefinition from \"./BehaviorManifestDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ResourceManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IResourcePackManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<ResourceManifestDefinition, ResourceManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public set packScope(newValue: \"world\" | \"global\" | \"any\" | undefined) {\r\n    if (!this.definition || !this.definition.header) {\r\n      return;\r\n    }\r\n\r\n    this.definition.header.pack_scope = newValue;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public set productType(value: \"\" | \"addon\" | undefined) {\r\n    this.ensureMetadata();\r\n\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return;\r\n    }\r\n\r\n    this.definition.metadata.product_type = value;\r\n  }\r\n\r\n  get subpacks() {\r\n    if (!this.definition || !this.definition.subpacks) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.subpacks;\r\n  }\r\n\r\n  get capabilities() {\r\n    if (!this.definition || !this.definition.capabilities) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.capabilities;\r\n  }\r\n\r\n  get version() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.version;\r\n  }\r\n\r\n  get dependencies() {\r\n    if (!this.definition || !this.definition.dependencies) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.dependencies;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get id() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public async setUuid(newId: string | undefined, project?: Project) {\r\n    const oldUuid = this.id;\r\n\r\n    this.id = newId;\r\n\r\n    if (newId && oldUuid && project) {\r\n      await ResourceManifestDefinition.setNewResourcePackId(project, newId, oldUuid);\r\n    }\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async setNewResourcePackId(project: Project, newResourcePackId: string, oldResourcePackId: string) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let setResourcePack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.resourcePackManifestJson && !setResourcePack) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (rpManifestJson.id && Utilities.uuidEqual(rpManifestJson.id, oldResourcePackId)) {\r\n              rpManifestJson.id = newResourcePackId;\r\n              setResourcePack = true;\r\n              await rpManifestJson.save();\r\n            } else if (rpManifestJson.definition && rpManifestJson.definition.dependencies) {\r\n              const deps = rpManifestJson.definition?.dependencies;\r\n\r\n              for (const dep of deps) {\r\n                if (dep.uuid === oldResourcePackId) {\r\n                  dep.uuid = newResourcePackId;\r\n                }\r\n              }\r\n              await rpManifestJson.save();\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (bpManifestJson.definition && bpManifestJson.definition.dependencies) {\r\n              const deps = bpManifestJson.definition?.dependencies;\r\n\r\n              for (const dep of deps) {\r\n                if (dep.uuid === oldResourcePackId) {\r\n                  dep.uuid = newResourcePackId;\r\n                }\r\n              }\r\n\r\n              await bpManifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public hasAddonProperties(): boolean {\r\n    return this.productType === \"addon\" && this.packScope === \"world\";\r\n  }\r\n\r\n  public async setAddonProperties() {\r\n    this.productType = \"addon\";\r\n    this.packScope = \"world\";\r\n\r\n    await this.save();\r\n  }\r\n\r\n  public randomizeModuleUuids(newDataModuleId?: string, oldDataModuleId?: string) {\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.uuid) {\r\n        if (oldDataModuleId && newDataModuleId && (mod.uuid === oldDataModuleId || mod.uuid === newDataModuleId)) {\r\n          mod.uuid = newDataModuleId;\r\n        } else {\r\n          mod.uuid = Utilities.createUuid();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ResourceManifestDefinition, ResourceManifestDefinition>\r\n  ) {\r\n    let rmj: ResourceManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new ResourceManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ResourceManifestDefinition) {\r\n      rmj = file.manager as ResourceManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"RMDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public getSubpackByFolderName(folderName: string) {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this.definition.subpacks) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const subpack of this.definition.subpacks) {\r\n      if (subpack.folder_name === folderName) {\r\n        return subpack;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public ensureMetadata(): IAddonMetadata | undefined {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this.definition.metadata) {\r\n      this.definition.metadata = {};\r\n    }\r\n\r\n    return this.definition.metadata;\r\n  }\r\n\r\n  public ensureGeneratedWith(toolName: string, versionString: string): void {\r\n    const metadata = this.ensureMetadata();\r\n\r\n    if (!metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!metadata.generated_with) {\r\n      metadata.generated_with = {};\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName]) {\r\n      metadata.generated_with[toolName] = [];\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName].includes(versionString)) {\r\n      metadata.generated_with[toolName].push(versionString);\r\n    }\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  static validatePackReferenceVersion(version: any): {\r\n    isValid: boolean;\r\n    versionArray?: number[];\r\n    errorMessage?: string;\r\n  } {\r\n    if (!version) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Missing version\",\r\n      };\r\n    }\r\n\r\n    // Use MinecraftUtilities to parse version\r\n    const versionArray = MinecraftUtilities.getVersionArrayFrom(version);\r\n\r\n    if (\r\n      !versionArray ||\r\n      versionArray.length !== 3 ||\r\n      !versionArray.every((v: number) => typeof v === \"number\" && v >= 0)\r\n    ) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Invalid version format. Expected valid version string or array of 3 non-negative numbers\",\r\n      };\r\n    }\r\n\r\n    return {\r\n      isValid: true,\r\n      versionArray: versionArray,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IAddonManifest, { IAddonDependency, IAddonManifestHeader, IAddonMetadata, IAddonModule } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project, { AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR, minecraftScriptModules } from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { ProjectFocus } from \"../app/IProjectData\";\r\nimport ResourceManifestDefinition from \"./ResourceManifestDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class BehaviorManifestDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IAddonManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<BehaviorManifestDefinition, BehaviorManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public set productType(value: \"\" | \"addon\" | undefined) {\r\n    this.ensureMetadata();\r\n\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return;\r\n    }\r\n\r\n    this.definition.metadata.product_type = value;\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  get capabilities() {\r\n    if (!this.definition || !this.definition.capabilities) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.capabilities;\r\n  }\r\n\r\n  public get id() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public async setUuid(newId: string | undefined, project?: Project) {\r\n    const oldId = this.id;\r\n\r\n    this.id = newId;\r\n\r\n    if (newId && oldId && project) {\r\n      await BehaviorManifestDefinition.setNewBehaviorPackId(project, newId, oldId);\r\n    }\r\n  }\r\n\r\n  static async setNewBehaviorPackId(project: Project, newBehaviorPackId: string, oldBehaviorPackId: string) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let setBehaviorPack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.behaviorPackManifestJson && !setBehaviorPack) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (bpManifestJson.id && Utilities.uuidEqual(bpManifestJson.id, oldBehaviorPackId)) {\r\n              bpManifestJson.id = newBehaviorPackId;\r\n              setBehaviorPack = true;\r\n\r\n              await bpManifestJson.save();\r\n            } else if (bpManifestJson.definition && bpManifestJson.definition.dependencies) {\r\n              const deps = bpManifestJson.definition?.dependencies;\r\n\r\n              if (deps && Array.isArray(deps)) {\r\n                for (const dep of deps) {\r\n                  if (dep.uuid === oldBehaviorPackId) {\r\n                    dep.uuid = newBehaviorPackId;\r\n                  }\r\n                }\r\n              }\r\n\r\n              await bpManifestJson.save();\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (rpManifestJson.definition && rpManifestJson.definition.dependencies) {\r\n              const deps = rpManifestJson.definition?.dependencies;\r\n\r\n              if (deps && Array.isArray(deps)) {\r\n                for (const dep of deps) {\r\n                  if (dep.uuid === oldBehaviorPackId) {\r\n                    dep.uuid = newBehaviorPackId;\r\n                  }\r\n                }\r\n              }\r\n\r\n              await rpManifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public hasAddonProperties(): boolean {\r\n    return this.productType === \"addon\";\r\n  }\r\n\r\n  public async setAddonProperties() {\r\n    this.productType = \"addon\";\r\n\r\n    await this.save();\r\n  }\r\n\r\n  public randomizeModuleUuids(newScriptModuleId?: string, oldScriptModuleId?: string) {\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.uuid) {\r\n        if (\r\n          oldScriptModuleId &&\r\n          newScriptModuleId &&\r\n          (mod.uuid === oldScriptModuleId || mod.uuid === newScriptModuleId)\r\n        ) {\r\n          mod.uuid = newScriptModuleId;\r\n        } else {\r\n          mod.uuid = Utilities.createUuid();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public getNonScriptModuleDependencyCount() {\r\n    if (!this.definition || !this.definition.dependencies || !Array.isArray(this.definition.dependencies)) {\r\n      return 0;\r\n    }\r\n\r\n    let count = 0;\r\n\r\n    for (let dependency of this.definition.dependencies) {\r\n      if (dependency.uuid) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public getFirstNonScriptModuleDependency() {\r\n    if (!this.definition || !this.definition.dependencies || !Array.isArray(this.definition.dependencies)) {\r\n      return undefined;\r\n    }\r\n\r\n    for (let dependency of this.definition.dependencies) {\r\n      if (dependency.uuid) {\r\n        return dependency;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<BehaviorManifestDefinition, BehaviorManifestDefinition>\r\n  ) {\r\n    let bmj: BehaviorManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      bmj = new BehaviorManifestDefinition();\r\n\r\n      bmj.file = file;\r\n\r\n      file.manager = bmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof BehaviorManifestDefinition) {\r\n      bmj = file.manager as BehaviorManifestDefinition;\r\n\r\n      if (!bmj.isLoaded) {\r\n        if (loadHandler) {\r\n          bmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await bmj.load();\r\n      }\r\n    }\r\n\r\n    return bmj;\r\n  }\r\n\r\n  get version() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.version;\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  setModuleVersion(moduleName: string, version: string) {\r\n    if (!this.definition || !this.definition.dependencies) {\r\n      return false;\r\n    }\r\n\r\n    let verActual: string | number[] = version;\r\n    let changedVals = false;\r\n    if (version.indexOf(\"-\") < 1) {\r\n      const verArr = version.split(\".\");\r\n\r\n      if (verArr && verArr.length === 3) {\r\n        verActual = [];\r\n\r\n        for (let i = 0; i < verArr.length; i++) {\r\n          try {\r\n            verActual.push(parseInt(verArr[i]));\r\n          } catch (e) {\r\n            throw e;\r\n          }\r\n\r\n          if (Number.isNaN(verActual[i])) {\r\n            throw new Error(\"Could not parse \" + version);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.dependencies.length; i++) {\r\n      const dep = this.definition.dependencies[i];\r\n\r\n      if (dep.module_name === moduleName) {\r\n        if (dep.version !== verActual) {\r\n          dep.version = verActual;\r\n          changedVals = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return changedVals;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"BMDP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  public ensureMetadata(): IAddonMetadata | undefined {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this.definition.metadata) {\r\n      this.definition.metadata = {};\r\n    }\r\n\r\n    return this.definition.metadata;\r\n  }\r\n\r\n  public ensureGeneratedWith(toolName: string, versionString: string): void {\r\n    const metadata = this.ensureMetadata();\r\n\r\n    if (!metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!metadata.generated_with) {\r\n      metadata.generated_with = {};\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName]) {\r\n      metadata.generated_with[toolName] = [];\r\n    }\r\n\r\n    if (!metadata.generated_with[toolName].includes(versionString)) {\r\n      metadata.generated_with[toolName].push(versionString);\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  public getScriptModule(): IAddonModule | undefined {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.type && mod.type.toLowerCase() === \"script\") {\r\n        return mod;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureScriptModule(name: string, description: string): IAddonModule {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    for (let i = 0; i < this.definition.modules.length; i++) {\r\n      const mod = this.definition.modules[i];\r\n\r\n      if (mod.type && mod.type.toLowerCase() === \"script\") {\r\n        return mod;\r\n      }\r\n    }\r\n\r\n    const mod: IAddonModule = {\r\n      type: \"script\",\r\n      description: name,\r\n      version: [0, 0, 1],\r\n      uuid: Utilities.createUuid(),\r\n      language: \"javascript\",\r\n    };\r\n\r\n    this.definition.modules.push(mod);\r\n\r\n    return mod;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  static async getContent(project: Project, contentOnlyUpdate?: boolean) {\r\n    let versionMajor = 0;\r\n    let versionMinor = 0;\r\n    let versionPatch = 1;\r\n\r\n    if (project.versionMajor !== undefined) {\r\n      versionMajor = project.versionMajor;\r\n    }\r\n\r\n    if (project.versionMinor !== undefined) {\r\n      versionMinor = project.versionMinor;\r\n    }\r\n\r\n    if (project.versionPatch !== undefined) {\r\n      versionPatch = project.versionPatch;\r\n    }\r\n\r\n    const modulesList: IAddonModule[] = [];\r\n    const dependenciesList: IAddonDependency[] = [];\r\n    let scriptFile = undefined;\r\n    let pi = project.getFirstItemByType(ProjectItemType.catalogIndexJs);\r\n\r\n    if (pi !== undefined) {\r\n      scriptFile = pi.primaryFile;\r\n    }\r\n\r\n    const behaviorPackRootFolder = await project.getDefaultBehaviorPackFolder(false, contentOnlyUpdate);\r\n\r\n    if (scriptFile === undefined) {\r\n      pi = project.getFirstItemByType(ProjectItemType.js);\r\n      if (pi !== undefined) {\r\n        scriptFile = pi.primaryFile;\r\n      }\r\n\r\n      if (scriptFile === undefined) {\r\n        pi = project.getFirstItemByType(ProjectItemType.testJs);\r\n\r\n        if (pi !== undefined) {\r\n          scriptFile = pi.primaryFile;\r\n        }\r\n      }\r\n    }\r\n\r\n    const scriptState = await project.getScriptState();\r\n\r\n    if (scriptState.hasScript && scriptFile !== null && scriptFile !== undefined && behaviorPackRootFolder !== null) {\r\n      let path = scriptFile.getFolderRelativePath(behaviorPackRootFolder);\r\n\r\n      if (path !== undefined) {\r\n        if (path.startsWith(\"/\")) {\r\n          path = path.substring(1, path.length);\r\n        }\r\n\r\n        modulesList.push({\r\n          description: project.title + \" script\",\r\n          language: \"javascript\",\r\n          type: \"script\",\r\n          uuid: project.defaultScriptModuleUniqueId,\r\n          version: [versionMajor, versionMinor, versionPatch],\r\n          entry: path,\r\n        });\r\n\r\n        for (let i = 0; i < minecraftScriptModules.length; i++) {\r\n          const mod = minecraftScriptModules[i];\r\n\r\n          if (scriptState.hasModule[mod.id]) {\r\n            dependenciesList.push({\r\n              uuid: mod.uuid,\r\n              module_name: mod.module_name,\r\n              version: mod.preferredVersion,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const manifest: IAddonManifest = {\r\n      format_version: 2,\r\n      __comment__: AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR,\r\n      header: {\r\n        description: project.description,\r\n        name: project.title,\r\n        uuid: project.defaultBehaviorPackUniqueId,\r\n        version: [versionMajor, versionMinor, versionPatch],\r\n        min_engine_version: [1, 20, 10],\r\n      },\r\n      modules: modulesList,\r\n      dependencies: dependenciesList,\r\n    };\r\n\r\n    if (project.focus === ProjectFocus.editorExtension) {\r\n      manifest.capabilities = [\"editorExtension\"];\r\n    }\r\n\r\n    return JSON.stringify(manifest, null, 2);\r\n  }\r\n\r\n  static validatePackReferenceVersion(version: any): {\r\n    isValid: boolean;\r\n    versionArray?: number[];\r\n    errorMessage?: string;\r\n  } {\r\n    if (!version) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Missing version\",\r\n      };\r\n    }\r\n\r\n    // Use MinecraftUtilities to parse version (handles both string and array formats)\r\n    const versionArray = MinecraftUtilities.getVersionArrayFrom(version);\r\n\r\n    if (\r\n      !versionArray ||\r\n      versionArray.length !== 3 ||\r\n      !versionArray.every((v: number) => typeof v === \"number\" && v >= 0)\r\n    ) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Invalid version format. Expected valid version string or array of 3 non-negative numbers\",\r\n      };\r\n    }\r\n\r\n    return {\r\n      isValid: true,\r\n      versionArray: versionArray,\r\n    };\r\n  }\r\n\r\n  static validatePackId(packId: any): { isValid: boolean; errorMessage?: string } {\r\n    if (!packId || typeof packId !== \"string\") {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: \"Missing or invalid pack_id\",\r\n      };\r\n    }\r\n\r\n    if (!MinecraftUtilities.isValidUuid(packId)) {\r\n      return {\r\n        isValid: false,\r\n        errorMessage: `Invalid UUID format for pack_id [${packId}]`,\r\n      };\r\n    }\r\n\r\n    return { isValid: true };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, ISkinPackManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\n\r\nexport default class SkinManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: ISkinPackManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<SkinManifestDefinition, SkinManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<SkinManifestDefinition, SkinManifestDefinition>) {\r\n    let rmj: SkinManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new SkinManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SkinManifestDefinition) {\r\n      rmj = file.manager as SkinManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, IPersonaManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class PersonaManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IPersonaManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<PersonaManifestDefinition, PersonaManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<PersonaManifestDefinition, PersonaManifestDefinition>\r\n  ) {\r\n    let rmj: PersonaManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new PersonaManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof PersonaManifestDefinition) {\r\n      rmj = file.manager as PersonaManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"PMRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IAddonManifestHeader, IDesignPackManifest } from \"./IAddonManifest\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class DesignManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IDesignPackManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<DesignManifestDefinition, DesignManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get packScope() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.pack_scope;\r\n  }\r\n\r\n  public get productType() {\r\n    if (!this.definition || !this.definition.metadata) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.metadata.product_type;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IAddonManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  get minEngineVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.min_engine_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.min_engine_version;\r\n  }\r\n\r\n  setMinEngineVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.min_engine_version = versionArray;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<DesignManifestDefinition, DesignManifestDefinition>\r\n  ) {\r\n    let rmj: DesignManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rmj = new DesignManifestDefinition();\r\n\r\n      rmj.file = file;\r\n\r\n      file.manager = rmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof DesignManifestDefinition) {\r\n      rmj = file.manager as DesignManifestDefinition;\r\n\r\n      if (!rmj.isLoaded) {\r\n        if (loadHandler) {\r\n          rmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rmj.load();\r\n      }\r\n    }\r\n\r\n    return rmj;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"DMDP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          min_engine_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n        dependencies: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IAddonManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project from \"../app/Project\";\r\nimport IFile from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport BehaviorManifestDefinition from \"./BehaviorManifestDefinition\";\r\nimport ResourceManifestDefinition from \"./ResourceManifestDefinition\";\r\nimport SkinManifestDefinition from \"./SkinManifestDefinition\";\r\nimport PersonaManifestDefinition from \"./PersonaManifestDefinition\";\r\nimport DesignManifestDefinition from \"./DesignManifestDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport enum PackType {\r\n  resource = 0,\r\n  behavior = 1,\r\n  skin = 2,\r\n  persona = 3,\r\n  design = 4,\r\n}\r\n\r\nexport default class Pack {\r\n  packType: PackType;\r\n  manifestFile?: IFile;\r\n  folder: IFolder;\r\n  project: Project;\r\n  projectItem: ProjectItem;\r\n  isInWorld: boolean = false;\r\n  manifest?:\r\n    | BehaviorManifestDefinition\r\n    | ResourceManifestDefinition\r\n    | SkinManifestDefinition\r\n    | PersonaManifestDefinition\r\n    | DesignManifestDefinition\r\n    | undefined;\r\n\r\n  private _items: ProjectItem[] | undefined;\r\n\r\n  //stubbing in for use later\r\n  get isEDUOffer() {\r\n    return false;\r\n  }\r\n\r\n  constructor(folderIn: IFolder, packTypeIn: PackType, project: Project, projectItem: ProjectItem) {\r\n    this.project = project;\r\n    this.projectItem = projectItem;\r\n    this.folder = folderIn;\r\n    this.packType = packTypeIn;\r\n  }\r\n\r\n  ensureManifestFile() {\r\n    if (this.manifestFile === undefined) {\r\n      this.manifestFile = this.folder.ensureFile(\"manifest.json\");\r\n    }\r\n\r\n    return this.manifestFile;\r\n  }\r\n\r\n  async ensureManifest() {\r\n    if (this.manifest) {\r\n      return this.manifest;\r\n    }\r\n\r\n    this.manifestFile = this.ensureManifestFile();\r\n\r\n    if (this.packType === PackType.behavior) {\r\n      this.manifest = await BehaviorManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else if (this.packType === PackType.skin) {\r\n      this.manifest = await SkinManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else if (this.packType === PackType.persona) {\r\n      this.manifest = await PersonaManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else if (this.packType === PackType.design) {\r\n      this.manifest = await DesignManifestDefinition.ensureOnFile(this.manifestFile);\r\n    } else {\r\n      this.manifest = await ResourceManifestDefinition.ensureOnFile(this.manifestFile);\r\n    }\r\n\r\n    if (this.manifest && !this.manifest.isLoaded) {\r\n      this.manifest.load();\r\n    }\r\n\r\n    // If the manifest file was newly created or is empty, populate it with default content\r\n    if (this.manifest && !this.manifest.definition) {\r\n      this.manifest.ensureHeaderForProject(this.project);\r\n      this.manifest.persist();\r\n    }\r\n\r\n    return this.manifest;\r\n  }\r\n\r\n  getManifest(): ProjectItem {\r\n    const manifest = this.getPackItems().find((item) => item.name === \"manifest.json\");\r\n    Log.assert(!!manifest, \"Pack should always have a manifest item\");\r\n    return manifest;\r\n  }\r\n\r\n  getPackItems(): readonly ProjectItem[] {\r\n    if (!!this._items) {\r\n      return this._items;\r\n    }\r\n    const folderPath = this.projectItem.projectPath;\r\n\r\n    if (!folderPath) {\r\n      throw new Error(\"Pack.getPackItems called without a project path\");\r\n    }\r\n\r\n    this._items = this.project.items.filter((item) => item.projectPath?.startsWith(folderPath));\r\n    return this._items;\r\n  }\r\n\r\n  hasVibrantVisualsContent(): boolean {\r\n    return this.getPackItems().some((item) => ProjectItemUtilities.isVibrantVisualsRelated(item));\r\n  }\r\n\r\n  static ensureOnFolder(folder: IFolder, packType: PackType, project: Project, projectItem: ProjectItem) {\r\n    if (folder.manager === undefined) {\r\n      const pack = new Pack(folder, packType, project, projectItem);\r\n\r\n      if (projectItem.isInWorld) {\r\n        pack.isInWorld = true;\r\n      }\r\n      pack.project = project;\r\n      pack.packType = packType;\r\n\r\n      return pack;\r\n    } else {\r\n      return folder.manager as Pack;\r\n    }\r\n  }\r\n\r\n  get name(): string {\r\n    return this.projectItem?.name || \"Unnamed pack\";\r\n  }\r\n\r\n  async getFiles(predicate?: (file: IFile) => boolean): Promise<IFile[]> {\r\n    const result = [];\r\n    for await (const file of this.folder.allFiles) {\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent();\r\n      }\r\n\r\n      if (file.content && (!predicate || predicate(file))) {\r\n        result.push(file);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport Project from \"../app/Project\";\r\nimport { PackageJSON } from \"@npm/types\";\r\n\r\nexport const DevDependenciesDefault: Record<string, string> = {\r\n  \"@minecraft/core-build-tasks\": \"5.2.0\",\r\n  \"@minecraft/creator-tools\": \"0.16.2\",\r\n  \"eslint-plugin-minecraft-linting\": \"2.0.2\",\r\n  \"source-map\": \"0.7.4\",\r\n  \"ts-node\": \"10.9.1\",\r\n  typescript: \"5.5.4\",\r\n};\r\n\r\nexport const ScriptsDefault: Record<string, string> = {\r\n  lint: \"just-scripts lint\",\r\n  build: \"just-scripts build\",\r\n  \"build:production\": \"just-scripts build --production\",\r\n  clean: \"just-scripts clean\",\r\n  deploy: \"npm run build && npx mct deploy env -i .\",\r\n  \"local-deploy\": \"just-scripts local-deploy\",\r\n  mcaddon: \"just-scripts mcaddon\",\r\n  \"mcaddon:production\": \"just-scripts mcaddon --production\",\r\n  enablemcloopback:\r\n    \"CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-1958404141-86561845-1752920682-3514627264-368642714-62675701-733520436\",\r\n  enablemcpreviewloopback:\r\n    \"CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-424268864-5579737-879501358-346833251-474568803-887069379-4040235476\",\r\n  buildsnippets: \"just-scripts buildSnippets\",\r\n};\r\n\r\nexport const DependenciesDefault: Record<string, string> = {\r\n  \"@minecraft/math\": \"2.4.0\",\r\n  \"@minecraft/server\": \"2.0.0\",\r\n  \"@minecraft/server-editor\": \"0.1.0-beta.1.21.30-preview.24\",\r\n  \"@minecraft/server-ui\": \"2.0.0\",\r\n  \"@minecraft/vanilla-data\": \"1.26.13\",\r\n};\r\n\r\nexport const OverridesDefault: { [name: string]: any } = {\r\n  \"@minecraft/math\": {\r\n    \"@minecraft/server\": \"$@minecraft/server\",\r\n  },\r\n  \"@minecraft/server-gametest\": {\r\n    \"@minecraft/server\": \"$@minecraft/server\",\r\n  },\r\n  \"@minecraft/server-ui\": {\r\n    \"@minecraft/server\": \"$@minecraft/server\",\r\n  },\r\n};\r\n\r\nexport const PackageJsonDefault: PackageJSON = {\r\n  name: \"my-project\",\r\n  version: \"0.1.0\",\r\n  description: \"My Minecraft Addon Project\",\r\n  private: true,\r\n  devDependencies: DevDependenciesDefault,\r\n  scripts: ScriptsDefault,\r\n  dependencies: DependenciesDefault,\r\n};\r\n\r\nexport const SetupRequiredScripts: Record<string, string> = {\r\n  lint: \"just-scripts lint\",\r\n  build: \"just-scripts build\",\r\n  clean: \"just-scripts clean\",\r\n  deploy: \"npm run build && npx mct deploy env -i .\",\r\n  \"local-deploy\": \"just-scripts local-deploy\",\r\n  mcaddon: \"just-scripts mcaddon\",\r\n};\r\n\r\nexport const SetupRequiredDependencies: Record<string, string> = {\r\n  \"@minecraft/server\": DependenciesDefault[\"@minecraft/server\"],\r\n  \"@minecraft/server-ui\": DependenciesDefault[\"@minecraft/server-ui\"],\r\n};\r\n\r\nexport const NpmPackageSettingAllowList = [\r\n  \"name\",\r\n  \"author\",\r\n  \"dependencies\",\r\n  \"devDependencies\",\r\n  \"contributors\",\r\n  \"license\",\r\n  \"overrides\",\r\n  \"version\",\r\n  \"productName\",\r\n  \"description\",\r\n  \"private\",\r\n  \"scripts\",\r\n];\r\n\r\n/**\r\n * Strips semver range prefixes (^, ~, >=, etc.) from a version string,\r\n * returning an exact pinned version. This prevents uncontrolled automatic\r\n * upgrades when `npm install` is run.\r\n */\r\nexport function pinVersion(version: string): string {\r\n  return version.replace(/^[~^>=<]+/, \"\");\r\n}\r\n\r\n/**\r\n * Strips semver range prefixes from every value in a dependency record.\r\n */\r\nexport function pinDependencies(deps: Record<string, string>): Record<string, string> {\r\n  const pinned: Record<string, string> = {};\r\n  for (const key of Object.keys(deps)) {\r\n    pinned[key] = pinVersion(deps[key]);\r\n  }\r\n  return pinned;\r\n}\r\n\r\nexport default class NpmPackageDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: PackageJSON;\r\n\r\n  private _onLoaded = new EventDispatcher<NpmPackageDefinition, NpmPackageDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.description;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition) {\r\n      return this.definition.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<NpmPackageDefinition, NpmPackageDefinition>) {\r\n    let dt: NpmPackageDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new NpmPackageDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof NpmPackageDefinition) {\r\n      dt = file.manager as NpmPackageDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"NPDP\");\r\n\r\n    if (this.definition) {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async ensureMinContent(project: Project) {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      this.definition = PackageJsonDefault;\r\n    }\r\n\r\n    await this.updateContent(project);\r\n    await this.ensureStandardContent();\r\n  }\r\n\r\n  async updateContent(project: Project) {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    this.definition.name = project.name;\r\n    this.definition.description = project.description;\r\n    this.definition.version = project.versionAsString;\r\n  }\r\n\r\n  async ensureStandardContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return;\r\n    }\r\n\r\n    if (this.definition.devDependencies) {\r\n      let isValidDevDependencies = true;\r\n\r\n      for (const devDepend in this.definition.devDependencies) {\r\n        if (DevDependenciesDefault[devDepend] === undefined) {\r\n          Log.debugAlert(\"Unexpected dev dependency '\" + devDepend + \"' found.\");\r\n          isValidDevDependencies = false;\r\n        }\r\n      }\r\n\r\n      if (!isValidDevDependencies) {\r\n        this.definition.devDependencies = DevDependenciesDefault;\r\n      } else {\r\n        this.definition.devDependencies = pinDependencies(this.definition.devDependencies);\r\n      }\r\n    }\r\n\r\n    if (this.definition.dependencies) {\r\n      let isValidDependencies = true;\r\n\r\n      for (const dependencyName in this.definition.dependencies) {\r\n        if (DependenciesDefault[dependencyName] === undefined) {\r\n          Log.debugAlert(\"Unexpected dependency '\" + dependencyName + \"' found.\");\r\n          isValidDependencies = false;\r\n        }\r\n      }\r\n\r\n      if (!isValidDependencies) {\r\n        this.definition.dependencies = DependenciesDefault;\r\n      } else {\r\n        this.definition.dependencies = pinDependencies(this.definition.dependencies);\r\n      }\r\n    }\r\n\r\n    if ((this.definition as any).overrides) {\r\n      const overrides: { [name: string]: any } = (this.definition as any).overrides;\r\n\r\n      let isOverrideValid = true;\r\n\r\n      for (const overrideName in overrides) {\r\n        if (OverridesDefault[overrideName] === undefined) {\r\n          Log.debugAlert(\"Unexpected override '\" + overrideName + \"' found.\");\r\n          isOverrideValid = false;\r\n        } else if (JSON.stringify(OverridesDefault[overrideName]) !== JSON.stringify(overrides[overrideName])) {\r\n          Log.debugAlert(\r\n            \"Unexpected override '\" +\r\n              overrideName +\r\n              \"' is not in exepected form: \" +\r\n              JSON.stringify(overrides[overrideName])\r\n          );\r\n          isOverrideValid = false;\r\n        }\r\n      }\r\n\r\n      if (!isOverrideValid) {\r\n        (this.definition as any).overrides = OverridesDefault;\r\n      }\r\n    }\r\n\r\n    if (this.definition.scripts) {\r\n      let isValidScripts = true;\r\n\r\n      for (const scriptName in this.definition.scripts) {\r\n        if (ScriptsDefault[scriptName] === undefined) {\r\n          Log.debugAlert(\"Unexpected script '\" + scriptName + \"' found.\");\r\n          isValidScripts = false;\r\n        } else if (this.definition.scripts[scriptName] !== ScriptsDefault[scriptName]) {\r\n          Log.debugAlert(\"Script '\" + scriptName + \"' is in unexpected form: \" + this.definition.scripts[scriptName]);\r\n          isValidScripts = false;\r\n        }\r\n      }\r\n\r\n      if (!isValidScripts) {\r\n        this.definition.scripts = ScriptsDefault;\r\n      }\r\n    }\r\n\r\n    for (const key in this.definition) {\r\n      if (!NpmPackageSettingAllowList.includes(key)) {\r\n        (this.definition as any)[key] = undefined;\r\n        Log.debugAlert(\"Unexpected setting '\" + key + \"' found in package.json.\");\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureSetupContent(bpTitle?: string): Promise<boolean> {\r\n    await this.load();\r\n\r\n    let changed = false;\r\n\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        name: \"my-project\",\r\n        version: \"0.1.0\",\r\n        description: \"My Minecraft Addon Project\",\r\n        private: true,\r\n      };\r\n      changed = true;\r\n    }\r\n\r\n    if (bpTitle && (!this.definition.name || this.definition.name === \"my-project\")) {\r\n      const slugified = bpTitle\r\n        .toLowerCase()\r\n        .replace(/[^a-z0-9-]/g, \"-\")\r\n        .replace(/-+/g, \"-\")\r\n        .replace(/^-|-$/g, \"\");\r\n\r\n      if (slugified && slugified !== this.definition.name) {\r\n        this.definition.name = slugified;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (!this.definition.scripts) {\r\n      this.definition.scripts = {};\r\n    }\r\n\r\n    for (const scriptName in SetupRequiredScripts) {\r\n      if (!this.definition.scripts[scriptName]) {\r\n        this.definition.scripts[scriptName] = SetupRequiredScripts[scriptName];\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (!this.definition.dependencies) {\r\n      this.definition.dependencies = {};\r\n    }\r\n\r\n    for (const depName in SetupRequiredDependencies) {\r\n      if (!this.definition.dependencies[depName]) {\r\n        this.definition.dependencies[depName] = SetupRequiredDependencies[depName];\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    // Pin all dependency versions (strip ^ and ~ prefixes)\r\n    for (const depName in this.definition.dependencies) {\r\n      const pinned = pinVersion(this.definition.dependencies[depName]);\r\n      if (pinned !== this.definition.dependencies[depName]) {\r\n        this.definition.dependencies[depName] = pinned;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (this.definition.devDependencies) {\r\n      for (const depName in this.definition.devDependencies) {\r\n        const pinned = pinVersion(this.definition.devDependencies[depName]);\r\n        if (pinned !== this.definition.devDependencies[depName]) {\r\n          this.definition.devDependencies[depName] = pinned;\r\n          changed = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return changed;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this._file.isContentLoaded === false) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    this.definition = StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "export enum MolangNodeType {\r\n  unknown = 0,\r\n  number = 1,\r\n  variable = 2,\r\n  operator = 3,\r\n  function = 4,\r\n  condition = 5,\r\n  clauseSet = 6,\r\n}\r\n\r\nexport default interface IMolangNode {\r\n  type: MolangNodeType;\r\n  value?: string;\r\n  left?: IMolangNode;\r\n  right?: IMolangNode;\r\n}\r\n", "import IMolangNode from \"./IMolangNode\";\r\n\r\nexport default class MolangNode {\r\n  _data: IMolangNode;\r\n\r\n  get data() {\r\n    return this._data;\r\n  }\r\n\r\n  constructor(data: IMolangNode) {\r\n    this._data = data;\r\n  }\r\n}\r\n", "import { IMolangExpression } from \"./IMolangExpression\";\r\nimport IMolangNode, { MolangNodeType } from \"./IMolangNode\";\r\nimport MolangNode from \"./MolangNode\";\r\n\r\n// NOTE NOTE: I tried to call this MolangExpression but it was giving errors in the vscbuild process\r\nexport default class Molang {\r\n  _data: IMolangExpression;\r\n\r\n  constructor(molang: string) {\r\n    const node = this.parse(molang);\r\n    this._data = { rootNode: node.data };\r\n  }\r\n\r\n  parse(molangExpression: string): MolangNode {\r\n    const tokens = this.tokenize(molangExpression);\r\n    const syntaxTree = this.parseTokens(tokens);\r\n\r\n    return syntaxTree;\r\n  }\r\n\r\n  private tokenize(expression: string): string[] {\r\n    // Simple tokenizer splitting by spaces and operators\r\n    return expression.match(/(\\d+|\\w+|[()+\\-/])/g) || [];\r\n  }\r\n\r\n  private parseTokens(tokens: string[]): MolangNode {\r\n    const stack: MolangNode[] = [];\r\n    const operators: string[] = [];\r\n\r\n    const precedence: { [key: string]: number } = {\r\n      \"+\": 1,\r\n      \"-\": 1,\r\n      \"*\": 2,\r\n      \"/\": 2,\r\n    };\r\n\r\n    const operatorSet = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n    const applyOperator = () => {\r\n      const operator = operators.pop();\r\n      const right = stack.pop();\r\n      const left = stack.pop();\r\n\r\n      const node: IMolangNode = {\r\n        type: MolangNodeType.operator,\r\n        value: operator,\r\n        left: left?.data,\r\n        right: right?.data,\r\n      };\r\n\r\n      stack.push(new MolangNode(node));\r\n    };\r\n\r\n    for (const token of tokens) {\r\n      if (/\\d+/.test(token)) {\r\n        stack.push(new MolangNode({ type: MolangNodeType.number, value: token }));\r\n      } else if (/\\w+/.test(token)) {\r\n        stack.push(new MolangNode({ type: MolangNodeType.variable, value: token }));\r\n      } else if (token === \"(\") {\r\n        operators.push(token);\r\n      } else if (token === \")\") {\r\n        while (operators.length && operators[operators.length - 1] !== \"(\") {\r\n          applyOperator();\r\n        }\r\n        operators.pop(); // Remove '('\r\n      } else if (operatorSet.has(token)) {\r\n        while (operators.length && precedence[operators[operators.length - 1]] >= precedence[token]) {\r\n          applyOperator();\r\n        }\r\n        operators.push(token);\r\n      }\r\n    }\r\n\r\n    while (operators.length) {\r\n      applyOperator();\r\n    }\r\n\r\n    return stack[0];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport { IBlockPermutation } from \"./IBlockTypeBehaviorPack\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport Molang from \"./Molang\";\r\nimport IComponent from \"./IComponent\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ManagedPermutation implements IManagedComponentSetItem {\r\n  _data?: IBlockPermutation;\r\n  _managed?: { [id: string]: IManagedComponent | undefined };\r\n\r\n  _conditionMolang: Molang | undefined;\r\n\r\n  private _onComponentAdded = new EventDispatcher<ManagedPermutation, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ManagedPermutation, string>();\r\n  private _onComponentChanged = new EventDispatcher<ManagedPermutation, IManagedComponent>();\r\n\r\n  public constructor(data: IBlockPermutation) {\r\n    this._data = data;\r\n\r\n    this._managed = {};\r\n  }\r\n\r\n  id: string = \"\";\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get condition() {\r\n    return this._data?.condition;\r\n  }\r\n\r\n  public set condition(value: string | undefined) {\r\n    if (value) {\r\n      if (!this._data) {\r\n        this._data = {\r\n          condition: \"\",\r\n          components: {},\r\n        };\r\n      }\r\n\r\n      this._data.condition = value;\r\n    }\r\n  }\r\n\r\n  public get conditionExpression() {\r\n    if (this._conditionMolang) {\r\n      return this._conditionMolang;\r\n    }\r\n\r\n    const cond = this.condition;\r\n\r\n    if (!cond) {\r\n      return undefined;\r\n    }\r\n\r\n    this._conditionMolang = new Molang(cond);\r\n\r\n    return this._conditionMolang;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    if (!this._data) {\r\n      this._data = {\r\n        condition: \"\",\r\n        components: {},\r\n      };\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(this._data.components, id, componentOrData);\r\n\r\n    if (Utilities.isUsableAsObjectKey(mc.id)) {\r\n      this._data.components[mc.id] = mc.getData();\r\n      this._managed[mc.id] = mc;\r\n    }\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      throw new Error();\r\n    }\r\n\r\n    this._data.components[id] = undefined;\r\n\r\n    if (this._managed) {\r\n      this._managed[id] = undefined;\r\n    }\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const comps = this._data.components;\r\n\r\n      if (!comps) {\r\n        return undefined;\r\n      }\r\n\r\n      const data = comps[id];\r\n\r\n      if (data) {\r\n        this._managed[id] = new ManagedComponent(this._data.components, id, data);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    if (!this._data) {\r\n      return [];\r\n    }\r\n\r\n    if (!this._managed) {\r\n      this._managed = {};\r\n    }\r\n\r\n    const comparr: IManagedComponent[] = [];\r\n\r\n    for (const c in this._data) {\r\n      const comp = this._data.components[c];\r\n\r\n      if (!this._managed[c] && comp) {\r\n        this._managed[c] = new ManagedComponent(this._data.components, c, comp);\r\n      }\r\n\r\n      const mc = this._managed[c];\r\n\r\n      if (mc) {\r\n        comparr.push(mc);\r\n      }\r\n    }\r\n\r\n    return comparr;\r\n  }\r\n\r\n  notifyComponentUpdated(id: string): void {\r\n    if (!this._managed) {\r\n      return;\r\n    }\r\n\r\n    const comp = this._managed[id];\r\n\r\n    if (comp) {\r\n      this._onComponentChanged.dispatch(this, comp);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IModelGeometry, { IGeometry } from \"./IModelGeometry\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class ModelGeometryDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IModelGeometry;\r\n  public definitions: IGeometry[] = [];\r\n\r\n  private _identifiers: string[] = [];\r\n\r\n  private _onLoaded = new EventDispatcher<ModelGeometryDefinition, ModelGeometryDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get formatVersion() {\r\n    return this._data?.format_version;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get defaultGeometry() {\r\n    if (this.definitions && this.definitions.length > 0) {\r\n      return this.definitions[0];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get identifiers(): string[] {\r\n    if (this._identifiers) {\r\n      return this._identifiers;\r\n    }\r\n\r\n    if (\r\n      !this._data ||\r\n      !this._data[\"minecraft:geometry\"] ||\r\n      this._data[\"minecraft:geometry\"].length !== 1 ||\r\n      !this._data[\"minecraft:geometry\"][0].description\r\n    ) {\r\n      return [];\r\n    }\r\n\r\n    const ids: string[] = [];\r\n\r\n    for (const def of this.definitions) {\r\n      if (def.description && def.description.identifier) {\r\n        ids.push(def.description.identifier);\r\n      }\r\n    }\r\n\r\n    return ids;\r\n  }\r\n\r\n  public getById(id: string): IGeometry | undefined {\r\n    Log.assert(id !== \"minecraft:geometry\");\r\n\r\n    let model = (this._data as any)[id];\r\n\r\n    if (model) {\r\n      return model as IGeometry;\r\n    }\r\n\r\n    // Check for v1 format keys with inheritance syntax (e.g., \"geometry.sheep.v1.8:geometry.sheep.sheared.v1.8\")\r\n    // When looking for \"geometry.sheep.v1.8\", check if any key starts with that ID followed by \":\"\r\n    for (const key of Object.keys(this._data || {})) {\r\n      if (key.startsWith(id + \":\")) {\r\n        return (this._data as any)[key] as IGeometry;\r\n      }\r\n    }\r\n\r\n    for (const def of this.definitions) {\r\n      if (def.description && def.description.identifier === id) {\r\n        return def;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public getVisibleBoundsWidth(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.visible_bounds_width;\r\n    }\r\n\r\n    return this.definitions[defIndex].visible_bounds_width;\r\n  }\r\n\r\n  public getVisibleBoundsHeight(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.visible_bounds_height;\r\n    }\r\n\r\n    return this.definitions[defIndex].visible_bounds_height;\r\n  }\r\n\r\n  public getVisibleBoundsOffset(defIndex: number): number[] | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.visible_bounds_offset;\r\n    }\r\n\r\n    return this.definitions[defIndex].visible_bounds_offset;\r\n  }\r\n\r\n  public getTextureWidth(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.texture_width;\r\n    }\r\n\r\n    return this.definitions[defIndex].texturewidth;\r\n  }\r\n\r\n  public ensureDefault(id: string) {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        \"minecraft:geometry\": [\r\n          {\r\n            description: {\r\n              identifier: id,\r\n              texture_width: 128,\r\n              texture_height: 64,\r\n              visible_bounds_width: 4,\r\n              visible_bounds_height: 3.5,\r\n              visible_bounds_offset: [0, 1.25, 0],\r\n            },\r\n            bones: [],\r\n          },\r\n        ],\r\n      };\r\n\r\n      this.persist();\r\n      this.populateDefsAndIds();\r\n      this._isLoaded = true;\r\n    }\r\n  }\r\n\r\n  public getTextureHeight(defIndex: number): number | undefined {\r\n    if (defIndex < 0 || defIndex >= this.definitions.length) {\r\n      return;\r\n    }\r\n\r\n    if (!this.definitions[defIndex]) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.definitions[defIndex].description) {\r\n      return this.definitions[defIndex].description.texture_height;\r\n    }\r\n\r\n    return this.definitions[defIndex].textureheight;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ModelGeometryDefinition, ModelGeometryDefinition>\r\n  ) {\r\n    let rc: ModelGeometryDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rc = new ModelGeometryDefinition();\r\n\r\n      rc.file = file;\r\n\r\n      file.manager = rc;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ModelGeometryDefinition) {\r\n      rc = file.manager as ModelGeometryDefinition;\r\n\r\n      if (!rc.isLoaded) {\r\n        if (loadHandler) {\r\n          rc.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rc.load();\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] {\r\n    if (!this._data || !this._data.format_version) {\r\n      return [0, 0, 0];\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"MGDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  public ensureDefinition(name: string) {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        \"minecraft:geometry\": [\r\n          {\r\n            description: {\r\n              identifier: name,\r\n              texture_width: 32,\r\n              texture_height: 32,\r\n              visible_bounds_width: 2,\r\n              visible_bounds_height: 2,\r\n              visible_bounds_offset: [0, 0, 0],\r\n            },\r\n            bones: [],\r\n          },\r\n        ],\r\n      };\r\n    }\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  populateDefsAndIds() {\r\n    this.definitions = [];\r\n    this._identifiers = [];\r\n\r\n    if (this._data && this._data[\"minecraft:geometry\"]) {\r\n      for (const def of this._data[\"minecraft:geometry\"]) {\r\n        if (def.description && def.description.identifier) {\r\n          this._identifiers.push(def.description.identifier);\r\n        }\r\n\r\n        this.definitions.push(def);\r\n      }\r\n    } else if (this._data) {\r\n      // look for 1.8.0 style geometries:\r\n      // {\r\n      //   \"format_version\": ...\r\n      //   \"geometry.foobar\": {}\r\n      // }\r\n\r\n      for (const elt in this._data) {\r\n        if (elt !== \"format_version\" && elt.startsWith(\"geometry.\") && (this._data as any)[elt]) {\r\n          this._identifiers.push(elt);\r\n\r\n          this.definitions.push((this._data as any)[elt]);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Load geometry data from a raw JavaScript object (parsed JSON).\r\n   * Useful for loading geometry data without a file reference.\r\n   * @param data The geometry JSON data object\r\n   * @param geometryId Optional specific geometry identifier to select from multi-geometry files\r\n   */\r\n  loadFromData(data: object, geometryId?: string) {\r\n    this._data = data as IModelGeometry;\r\n    this.populateDefsAndIds();\r\n    this._isLoaded = true;\r\n\r\n    // If a specific geometry ID is requested and there are multiple, reorder to make it default\r\n    if (geometryId && this.definitions.length > 1) {\r\n      const index = this._identifiers.indexOf(geometryId);\r\n      if (index > 0) {\r\n        // Move the requested geometry to the front\r\n        const [geo] = this.definitions.splice(index, 1);\r\n        const [id] = this._identifiers.splice(index, 1);\r\n        this.definitions.unshift(geo);\r\n        this._identifiers.unshift(id);\r\n      }\r\n    }\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this.populateDefsAndIds();\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n}\r\n", "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/syntax.ts\nvar Syntax = /* @__PURE__ */ ((Syntax2) => {\n  Syntax2[\"AssignmentExpression\"] = \"AssignmentExpression\";\n  Syntax2[\"AssignmentPattern\"] = \"AssignmentPattern\";\n  Syntax2[\"ArrayExpression\"] = \"ArrayExpression\";\n  Syntax2[\"ArrayPattern\"] = \"ArrayPattern\";\n  Syntax2[\"ArrowFunctionExpression\"] = \"ArrowFunctionExpression\";\n  Syntax2[\"AwaitExpression\"] = \"AwaitExpression\";\n  Syntax2[\"BlockStatement\"] = \"BlockStatement\";\n  Syntax2[\"BinaryExpression\"] = \"BinaryExpression\";\n  Syntax2[\"BreakStatement\"] = \"BreakStatement\";\n  Syntax2[\"CallExpression\"] = \"CallExpression\";\n  Syntax2[\"CatchClause\"] = \"CatchClause\";\n  Syntax2[\"ChainExpression\"] = \"ChainExpression\";\n  Syntax2[\"ClassBody\"] = \"ClassBody\";\n  Syntax2[\"ClassDeclaration\"] = \"ClassDeclaration\";\n  Syntax2[\"ClassExpression\"] = \"ClassExpression\";\n  Syntax2[\"ConditionalExpression\"] = \"ConditionalExpression\";\n  Syntax2[\"ContinueStatement\"] = \"ContinueStatement\";\n  Syntax2[\"Decorator\"] = \"Decorator\";\n  Syntax2[\"DoWhileStatement\"] = \"DoWhileStatement\";\n  Syntax2[\"DebuggerStatement\"] = \"DebuggerStatement\";\n  Syntax2[\"EmptyStatement\"] = \"EmptyStatement\";\n  Syntax2[\"ExportAllDeclaration\"] = \"ExportAllDeclaration\";\n  Syntax2[\"ExportDefaultDeclaration\"] = \"ExportDefaultDeclaration\";\n  Syntax2[\"ExportNamedDeclaration\"] = \"ExportNamedDeclaration\";\n  Syntax2[\"ExportSpecifier\"] = \"ExportSpecifier\";\n  Syntax2[\"ExpressionStatement\"] = \"ExpressionStatement\";\n  Syntax2[\"ForStatement\"] = \"ForStatement\";\n  Syntax2[\"ForOfStatement\"] = \"ForOfStatement\";\n  Syntax2[\"ForInStatement\"] = \"ForInStatement\";\n  Syntax2[\"FunctionDeclaration\"] = \"FunctionDeclaration\";\n  Syntax2[\"FunctionExpression\"] = \"FunctionExpression\";\n  Syntax2[\"Identifier\"] = \"Identifier\";\n  Syntax2[\"IfStatement\"] = \"IfStatement\";\n  Syntax2[\"ImportAttribute\"] = \"ImportAttribute\";\n  Syntax2[\"ImportExpression\"] = \"ImportExpression\";\n  Syntax2[\"ImportDeclaration\"] = \"ImportDeclaration\";\n  Syntax2[\"ImportDefaultSpecifier\"] = \"ImportDefaultSpecifier\";\n  Syntax2[\"ImportNamespaceSpecifier\"] = \"ImportNamespaceSpecifier\";\n  Syntax2[\"ImportSpecifier\"] = \"ImportSpecifier\";\n  Syntax2[\"Literal\"] = \"Literal\";\n  Syntax2[\"LabeledStatement\"] = \"LabeledStatement\";\n  Syntax2[\"LogicalExpression\"] = \"LogicalExpression\";\n  Syntax2[\"MemberExpression\"] = \"MemberExpression\";\n  Syntax2[\"MetaProperty\"] = \"MetaProperty\";\n  Syntax2[\"MethodDefinition\"] = \"MethodDefinition\";\n  Syntax2[\"NewExpression\"] = \"NewExpression\";\n  Syntax2[\"ObjectExpression\"] = \"ObjectExpression\";\n  Syntax2[\"ObjectPattern\"] = \"ObjectPattern\";\n  Syntax2[\"Program\"] = \"Program\";\n  Syntax2[\"Property\"] = \"Property\";\n  Syntax2[\"PrivateIdentifier\"] = \"PrivateIdentifier\";\n  Syntax2[\"RestElement\"] = \"RestElement\";\n  Syntax2[\"ReturnStatement\"] = \"ReturnStatement\";\n  Syntax2[\"SequenceExpression\"] = \"SequenceExpression\";\n  Syntax2[\"SpreadElement\"] = \"SpreadElement\";\n  Syntax2[\"StaticBlock\"] = \"StaticBlock\";\n  Syntax2[\"Super\"] = \"Super\";\n  Syntax2[\"SwitchCase\"] = \"SwitchCase\";\n  Syntax2[\"SwitchStatement\"] = \"SwitchStatement\";\n  Syntax2[\"TaggedTemplateExpression\"] = \"TaggedTemplateExpression\";\n  Syntax2[\"TemplateElement\"] = \"TemplateElement\";\n  Syntax2[\"TemplateLiteral\"] = \"TemplateLiteral\";\n  Syntax2[\"ThisExpression\"] = \"ThisExpression\";\n  Syntax2[\"ThrowStatement\"] = \"ThrowStatement\";\n  Syntax2[\"TryStatement\"] = \"TryStatement\";\n  Syntax2[\"UnaryExpression\"] = \"UnaryExpression\";\n  Syntax2[\"UpdateExpression\"] = \"UpdateExpression\";\n  Syntax2[\"VariableDeclaration\"] = \"VariableDeclaration\";\n  Syntax2[\"VariableDeclarator\"] = \"VariableDeclarator\";\n  Syntax2[\"WhileStatement\"] = \"WhileStatement\";\n  Syntax2[\"WithStatement\"] = \"WithStatement\";\n  Syntax2[\"YieldExpression\"] = \"YieldExpression\";\n  return Syntax2;\n})(Syntax || {});\n\n// src/comment-handler.ts\nvar CommentHandler = class {\n  attach;\n  comments;\n  stack;\n  leading;\n  trailing;\n  constructor() {\n    this.attach = false;\n    this.comments = [];\n    this.stack = [];\n    this.leading = [];\n    this.trailing = [];\n  }\n  insertInnerComments(node, metadata) {\n    if (node.type === \"BlockStatement\" /* BlockStatement */ && node.body.length === 0) {\n      const innerComments = [];\n      for (let i = this.leading.length - 1; i >= 0; --i) {\n        const entry = this.leading[i];\n        if (metadata.end.offset >= entry.start) {\n          innerComments.unshift(entry.comment);\n          this.leading.splice(i, 1);\n          this.trailing.splice(i, 1);\n        }\n      }\n      if (innerComments.length) {\n        node.innerComments = innerComments;\n      }\n    }\n  }\n  findTrailingComments(metadata) {\n    let trailingComments = [];\n    if (this.trailing.length > 0) {\n      for (let i = this.trailing.length - 1; i >= 0; --i) {\n        const entry = this.trailing[i];\n        if (entry.start >= metadata.end.offset) {\n          trailingComments.unshift(entry.comment);\n        }\n      }\n      this.trailing.length = 0;\n      return trailingComments;\n    }\n    const last = this.stack[this.stack.length - 1];\n    if (last && last.node.trailingComments) {\n      const firstComment = last.node.trailingComments[0];\n      if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n        trailingComments = last.node.trailingComments;\n        delete last.node.trailingComments;\n      }\n    }\n    return trailingComments;\n  }\n  findLeadingComments(metadata) {\n    const leadingComments = [];\n    let target;\n    while (this.stack.length > 0) {\n      const entry = this.stack[this.stack.length - 1];\n      if (entry && entry.start >= metadata.start.offset) {\n        target = entry.node;\n        this.stack.pop();\n      } else {\n        break;\n      }\n    }\n    if (target) {\n      const count = target.leadingComments ? target.leadingComments.length : 0;\n      for (let i = count - 1; i >= 0; --i) {\n        const comment = target.leadingComments[i];\n        if (comment.range[1] <= metadata.start.offset) {\n          leadingComments.unshift(comment);\n          target.leadingComments.splice(i, 1);\n        }\n      }\n      if (target.leadingComments && target.leadingComments.length === 0) {\n        delete target.leadingComments;\n      }\n      return leadingComments;\n    }\n    for (let i = this.leading.length - 1; i >= 0; --i) {\n      const entry = this.leading[i];\n      if (entry.start <= metadata.start.offset) {\n        leadingComments.unshift(entry.comment);\n        this.leading.splice(i, 1);\n      }\n    }\n    return leadingComments;\n  }\n  visitNode(node, metadata) {\n    if (node.type === \"Program\" /* Program */ && node.body.length > 0) {\n      return;\n    }\n    this.insertInnerComments(node, metadata);\n    const trailingComments = this.findTrailingComments(metadata);\n    const leadingComments = this.findLeadingComments(metadata);\n    if (leadingComments.length > 0) {\n      node.leadingComments = leadingComments;\n    }\n    if (trailingComments.length > 0) {\n      node.trailingComments = trailingComments;\n    }\n    this.stack.push({\n      node,\n      start: metadata.start.offset\n    });\n  }\n  visitComment(node, metadata) {\n    const type = node.type[0] === \"L\" ? \"Line\" : \"Block\";\n    const comment = {\n      type,\n      value: node.value\n    };\n    if (node.range) {\n      comment.range = node.range;\n    }\n    if (node.loc) {\n      comment.loc = node.loc;\n    }\n    this.comments.push(comment);\n    if (this.attach) {\n      const entry = {\n        comment: {\n          type,\n          value: node.value,\n          range: [metadata.start.offset, metadata.end.offset]\n        },\n        start: metadata.start.offset\n      };\n      if (node.loc) {\n        entry.comment.loc = node.loc;\n      }\n      node.type = type;\n      this.leading.push(entry);\n      this.trailing.push(entry);\n    }\n  }\n  visit(node, metadata) {\n    if (node.type === \"LineComment\") {\n      this.visitComment(node, metadata);\n    } else if (node.type === \"BlockComment\") {\n      this.visitComment(node, metadata);\n    } else if (this.attach) {\n      this.visitNode(node, metadata);\n    }\n  }\n};\n\n// src/character.ts\nvar Regex = {\n  // Unicode v12.1.0 NonAsciiIdentifierStart:\n  NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7C6\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB67\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDEC0-\\uDEEB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/,\n  // Unicode v12.1.0 NonAsciiIdentifierPart:\n  // eslint-disable-next-line no-misleading-character-class\n  NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u07FD\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D3-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u09FE\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CD0-\\u1CD2\\u1CD4-\\u1CFA\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7C6\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB67\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD27\\uDD30-\\uDD39\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF50\\uDFE0-\\uDFF6]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD44-\\uDD46\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDC9-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3B-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC5E\\uDC5F\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDC00-\\uDC3A\\uDCA0-\\uDCE9\\uDCFF\\uDDA0-\\uDDA7\\uDDAA-\\uDDD7\\uDDDA-\\uDDE1\\uDDE3\\uDDE4\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE99\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF6]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF4F-\\uDF87\\uDF8F-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD00-\\uDD2C\\uDD30-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n};\nvar Character = {\n  fromCodePoint(cp) {\n    return cp < 65536 ? String.fromCharCode(cp) : String.fromCharCode(55296 + (cp - 65536 >> 10)) + String.fromCharCode(56320 + (cp - 65536 & 1023));\n  },\n  isStringWellFormedUnicode(text) {\n    for (let i = 0; i < text.length; i++) {\n      let c = text.charCodeAt(i);\n      if (c >= 55296 && c <= 56319) {\n        if (i === text.length - 1) {\n          return false;\n        }\n        i++;\n        c = text.charCodeAt(i);\n        if (c < 56320 && c > 57343) {\n          return false;\n        }\n      } else if (c >= 56320 && c <= 57343) {\n        return false;\n      }\n    }\n    return true;\n  },\n  // https://tc39.github.io/ecma262/#sec-white-space\n  isWhiteSpace(cp) {\n    return cp === 32 || cp === 9 || cp === 11 || cp === 12 || cp === 160 || cp >= 5760 && [5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8239, 8287, 12288, 65279].indexOf(cp) >= 0;\n  },\n  // https://tc39.github.io/ecma262/#sec-line-terminators\n  isLineTerminator(cp) {\n    return cp === 10 || cp === 13 || cp === 8232 || cp === 8233;\n  },\n  // https://tc39.github.io/ecma262/#sec-names-and-keywords\n  isIdentifierStart(cp) {\n    return cp === 36 || cp === 95 || // $ (dollar) and _ (underscore)\n    cp >= 65 && cp <= 90 || // A..Z\n    cp >= 97 && cp <= 122 || // a..z\n    cp === 92 || // \\ (backslash)\n    cp >= 128 && Regex.NonAsciiIdentifierStart.test(Character.fromCodePoint(cp));\n  },\n  isIdentifierPart(cp) {\n    return cp === 36 || cp === 95 || // $ (dollar) and _ (underscore)\n    cp >= 65 && cp <= 90 || // A..Z\n    cp >= 97 && cp <= 122 || // a..z\n    cp >= 48 && cp <= 57 || // 0..9\n    cp === 92 || // \\ (backslash)\n    cp >= 128 && Regex.NonAsciiIdentifierPart.test(Character.fromCodePoint(cp));\n  },\n  // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n  isDecimalDigit(cp) {\n    return cp >= 48 && cp <= 57;\n  },\n  isDecimalDigitChar(ch) {\n    return ch.length === 1 && Character.isDecimalDigit(ch.charCodeAt(0));\n  },\n  isHexDigit(cp) {\n    return cp >= 48 && cp <= 57 || // 0..9\n    cp >= 65 && cp <= 70 || // A..F\n    cp >= 97 && cp <= 102;\n  },\n  isHexDigitChar(ch) {\n    return ch.length === 1 && Character.isHexDigit(ch.charCodeAt(0));\n  },\n  isOctalDigit(cp) {\n    return cp >= 48 && cp <= 55;\n  },\n  isOctalDigitChar(ch) {\n    return ch.length === 1 && Character.isOctalDigit(ch.charCodeAt(0));\n  }\n};\n\n// src/jsx-nodes.ts\nvar JSXClosingElement = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"JSXClosingElement\" /* JSXClosingElement */;\n    this.name = name;\n  }\n};\nvar JSXClosingFragment = class {\n  type;\n  constructor() {\n    this.type = \"JSXClosingFragment\" /* JSXClosingFragment */;\n  }\n};\nvar JSXElement = class {\n  type;\n  openingElement;\n  children;\n  closingElement;\n  constructor(openingElement, children, closingElement) {\n    this.type = \"JSXElement\" /* JSXElement */;\n    this.openingElement = openingElement;\n    this.children = children;\n    this.closingElement = closingElement;\n  }\n};\nvar JSXEmptyExpression = class {\n  type;\n  constructor() {\n    this.type = \"JSXEmptyExpression\" /* JSXEmptyExpression */;\n  }\n};\nvar JSXExpressionContainer = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"JSXExpressionContainer\" /* JSXExpressionContainer */;\n    this.expression = expression;\n  }\n};\nvar JSXIdentifier = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"JSXIdentifier\" /* JSXIdentifier */;\n    this.name = name;\n  }\n};\nvar JSXMemberExpression = class {\n  type;\n  object;\n  property;\n  constructor(object, property) {\n    this.type = \"JSXMemberExpression\" /* JSXMemberExpression */;\n    this.object = object;\n    this.property = property;\n  }\n};\nvar JSXAttribute = class {\n  type;\n  name;\n  value;\n  constructor(name, value) {\n    this.type = \"JSXAttribute\" /* JSXAttribute */;\n    this.name = name;\n    this.value = value;\n  }\n};\nvar JSXNamespacedName = class {\n  type;\n  namespace;\n  name;\n  constructor(namespace, name) {\n    this.type = \"JSXNamespacedName\" /* JSXNamespacedName */;\n    this.namespace = namespace;\n    this.name = name;\n  }\n};\nvar JSXOpeningElement = class {\n  type;\n  name;\n  selfClosing;\n  attributes;\n  constructor(name, selfClosing, attributes) {\n    this.type = \"JSXOpeningElement\" /* JSXOpeningElement */;\n    this.name = name;\n    this.selfClosing = selfClosing;\n    this.attributes = attributes;\n  }\n};\nvar JSXOpeningFragment = class {\n  type;\n  selfClosing;\n  constructor(selfClosing) {\n    this.type = \"JSXOpeningFragment\" /* JSXOpeningFragment */;\n    this.selfClosing = selfClosing;\n  }\n};\nvar JSXSpreadAttribute = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"JSXSpreadAttribute\" /* JSXSpreadAttribute */;\n    this.argument = argument;\n  }\n};\nvar JSXText = class {\n  type;\n  value;\n  raw;\n  constructor(value, raw) {\n    this.type = \"JSXText\" /* JSXText */;\n    this.value = value;\n    this.raw = raw;\n  }\n};\n\n// src/nodes.ts\nvar nodes_exports = {};\n__export(nodes_exports, {\n  ArrayExpression: () => ArrayExpression,\n  ArrayPattern: () => ArrayPattern,\n  ArrowFunctionExpression: () => ArrowFunctionExpression,\n  AssignmentExpression: () => AssignmentExpression,\n  AssignmentPattern: () => AssignmentPattern,\n  AsyncFunctionDeclaration: () => AsyncFunctionDeclaration,\n  AwaitExpression: () => AwaitExpression,\n  BigIntLiteral: () => BigIntLiteral,\n  BinaryExpression: () => BinaryExpression,\n  BlockStatement: () => BlockStatement,\n  BreakStatement: () => BreakStatement,\n  CallExpression: () => CallExpression,\n  CatchClause: () => CatchClause,\n  ChainExpression: () => ChainExpression,\n  ClassBody: () => ClassBody,\n  ClassDeclaration: () => ClassDeclaration,\n  ClassExpression: () => ClassExpression,\n  ConditionalExpression: () => ConditionalExpression,\n  ContinueStatement: () => ContinueStatement,\n  DebuggerStatement: () => DebuggerStatement,\n  Decorator: () => Decorator,\n  Directive: () => Directive,\n  DoWhileStatement: () => DoWhileStatement,\n  EmptyStatement: () => EmptyStatement,\n  ExportAllDeclaration: () => ExportAllDeclaration,\n  ExportDefaultDeclaration: () => ExportDefaultDeclaration,\n  ExportNamedDeclaration: () => ExportNamedDeclaration,\n  ExportSpecifier: () => ExportSpecifier,\n  ExpressionStatement: () => ExpressionStatement,\n  ForInStatement: () => ForInStatement,\n  ForOfStatement: () => ForOfStatement,\n  ForStatement: () => ForStatement,\n  FunctionDeclaration: () => FunctionDeclaration,\n  FunctionExpression: () => FunctionExpression,\n  Identifier: () => Identifier,\n  IfStatement: () => IfStatement,\n  ImportAttribute: () => ImportAttribute,\n  ImportDeclaration: () => ImportDeclaration,\n  ImportDefaultSpecifier: () => ImportDefaultSpecifier,\n  ImportExpression: () => ImportExpression,\n  ImportNamespaceSpecifier: () => ImportNamespaceSpecifier,\n  ImportSpecifier: () => ImportSpecifier,\n  LabeledStatement: () => LabeledStatement,\n  Literal: () => Literal,\n  LogicalExpression: () => LogicalExpression,\n  MemberExpression: () => MemberExpression,\n  MetaProperty: () => MetaProperty,\n  MethodDefinition: () => MethodDefinition,\n  Module: () => Module,\n  NewExpression: () => NewExpression,\n  ObjectExpression: () => ObjectExpression,\n  ObjectPattern: () => ObjectPattern,\n  PrivateIdentifier: () => PrivateIdentifier,\n  Program: () => Program,\n  Property: () => Property,\n  PropertyDefinition: () => PropertyDefinition,\n  RegexLiteral: () => RegexLiteral,\n  RestElement: () => RestElement,\n  ReturnStatement: () => ReturnStatement,\n  Script: () => Script,\n  SequenceExpression: () => SequenceExpression,\n  SpreadElement: () => SpreadElement,\n  StaticBlock: () => StaticBlock,\n  Super: () => Super,\n  SwitchCase: () => SwitchCase,\n  SwitchStatement: () => SwitchStatement,\n  TaggedTemplateExpression: () => TaggedTemplateExpression,\n  TemplateElement: () => TemplateElement,\n  TemplateLiteral: () => TemplateLiteral,\n  ThisExpression: () => ThisExpression,\n  ThrowStatement: () => ThrowStatement,\n  TryStatement: () => TryStatement,\n  UnaryExpression: () => UnaryExpression,\n  UpdateExpression: () => UpdateExpression,\n  VariableDeclaration: () => VariableDeclaration,\n  VariableDeclarator: () => VariableDeclarator,\n  WhileStatement: () => WhileStatement,\n  WithStatement: () => WithStatement,\n  YieldExpression: () => YieldExpression\n});\nvar ArrayExpression = class {\n  type;\n  elements;\n  constructor(elements) {\n    this.type = \"ArrayExpression\" /* ArrayExpression */;\n    this.elements = elements;\n  }\n};\nvar ArrayPattern = class {\n  type;\n  elements;\n  constructor(elements) {\n    this.type = \"ArrayPattern\" /* ArrayPattern */;\n    this.elements = elements;\n  }\n};\nvar ArrowFunctionExpression = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(params, body, expression, isAsync) {\n    this.type = \"ArrowFunctionExpression\" /* ArrowFunctionExpression */;\n    this.id = null;\n    this.params = params;\n    this.body = body;\n    this.generator = false;\n    this.expression = expression;\n    this.async = isAsync;\n  }\n};\nvar AssignmentExpression = class {\n  type;\n  operator;\n  left;\n  right;\n  constructor(operator, left, right) {\n    this.type = \"AssignmentExpression\" /* AssignmentExpression */;\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar AssignmentPattern = class {\n  type;\n  left;\n  right;\n  constructor(left, right) {\n    this.type = \"AssignmentPattern\" /* AssignmentPattern */;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar AsyncFunctionDeclaration = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(id, params, body, generator) {\n    this.type = \"FunctionDeclaration\" /* FunctionDeclaration */;\n    this.id = id;\n    this.params = params;\n    this.body = body;\n    this.generator = generator;\n    this.expression = false;\n    this.async = true;\n  }\n};\nvar AwaitExpression = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"AwaitExpression\" /* AwaitExpression */;\n    this.argument = argument;\n  }\n};\nvar BigIntLiteral = class {\n  type;\n  value;\n  raw;\n  bigint;\n  constructor(value, raw, bigint) {\n    this.type = \"Literal\" /* Literal */;\n    this.value = value;\n    this.raw = raw;\n    this.bigint = bigint;\n  }\n};\nvar BinaryExpression = class {\n  type;\n  operator;\n  left;\n  right;\n  constructor(operator, left, right) {\n    this.type = \"BinaryExpression\" /* BinaryExpression */;\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar BlockStatement = class {\n  type;\n  body;\n  constructor(body) {\n    this.type = \"BlockStatement\" /* BlockStatement */;\n    this.body = body;\n  }\n};\nvar BreakStatement = class {\n  type;\n  label;\n  constructor(label) {\n    this.type = \"BreakStatement\" /* BreakStatement */;\n    this.label = label;\n  }\n};\nvar CallExpression = class {\n  type;\n  callee;\n  arguments;\n  optional;\n  constructor(callee, args, optional) {\n    this.type = \"CallExpression\" /* CallExpression */;\n    this.callee = callee;\n    this.arguments = args;\n    this.optional = optional;\n  }\n};\nvar CatchClause = class {\n  type;\n  param;\n  body;\n  constructor(param, body) {\n    this.type = \"CatchClause\" /* CatchClause */;\n    this.param = param;\n    this.body = body;\n  }\n};\nvar ChainExpression = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"ChainExpression\" /* ChainExpression */;\n    this.expression = expression;\n  }\n};\nvar ClassBody = class {\n  type;\n  body;\n  constructor(body) {\n    this.type = \"ClassBody\" /* ClassBody */;\n    this.body = body;\n  }\n};\nvar ClassDeclaration = class {\n  type;\n  id;\n  superClass;\n  body;\n  decorators;\n  constructor(id, superClass, body, decorators) {\n    this.type = \"ClassDeclaration\" /* ClassDeclaration */;\n    this.id = id;\n    this.superClass = superClass;\n    this.body = body;\n    this.decorators = decorators;\n  }\n};\nvar ClassExpression = class {\n  type;\n  id;\n  superClass;\n  body;\n  decorators;\n  constructor(id, superClass, body, decorators) {\n    this.type = \"ClassExpression\" /* ClassExpression */;\n    this.id = id;\n    this.superClass = superClass;\n    this.body = body;\n    this.decorators = decorators;\n  }\n};\nvar ConditionalExpression = class {\n  type;\n  test;\n  consequent;\n  alternate;\n  constructor(test, consequent, alternate) {\n    this.type = \"ConditionalExpression\" /* ConditionalExpression */;\n    this.test = test;\n    this.consequent = consequent;\n    this.alternate = alternate;\n  }\n};\nvar ContinueStatement = class {\n  type;\n  label;\n  constructor(label) {\n    this.type = \"ContinueStatement\" /* ContinueStatement */;\n    this.label = label;\n  }\n};\nvar DebuggerStatement = class {\n  type;\n  constructor() {\n    this.type = \"DebuggerStatement\" /* DebuggerStatement */;\n  }\n};\nvar Decorator = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"Decorator\" /* Decorator */;\n    this.expression = expression;\n  }\n};\nvar Directive = class {\n  type;\n  expression;\n  directive;\n  constructor(expression, directive) {\n    this.type = \"ExpressionStatement\" /* ExpressionStatement */;\n    this.expression = expression;\n    this.directive = directive;\n  }\n};\nvar DoWhileStatement = class {\n  type;\n  body;\n  test;\n  constructor(body, test) {\n    this.type = \"DoWhileStatement\" /* DoWhileStatement */;\n    this.body = body;\n    this.test = test;\n  }\n};\nvar EmptyStatement = class {\n  type;\n  constructor() {\n    this.type = \"EmptyStatement\" /* EmptyStatement */;\n  }\n};\nvar ExportAllDeclaration = class {\n  type;\n  source;\n  exported;\n  assertions;\n  constructor(source, exported, assertions) {\n    this.type = \"ExportAllDeclaration\" /* ExportAllDeclaration */;\n    this.source = source;\n    this.exported = exported;\n    this.assertions = assertions;\n  }\n};\nvar ExportDefaultDeclaration = class {\n  type;\n  declaration;\n  constructor(declaration) {\n    this.type = \"ExportDefaultDeclaration\" /* ExportDefaultDeclaration */;\n    this.declaration = declaration;\n  }\n};\nvar ExportNamedDeclaration = class {\n  type;\n  declaration;\n  specifiers;\n  source;\n  assertions;\n  constructor(declaration, specifiers, source, assertions) {\n    this.type = \"ExportNamedDeclaration\" /* ExportNamedDeclaration */;\n    this.declaration = declaration;\n    this.specifiers = specifiers;\n    this.source = source;\n    this.assertions = assertions;\n  }\n};\nvar ExportSpecifier = class {\n  type;\n  exported;\n  local;\n  constructor(local, exported) {\n    this.type = \"ExportSpecifier\" /* ExportSpecifier */;\n    this.exported = exported;\n    this.local = local;\n  }\n};\nvar ExpressionStatement = class {\n  type;\n  expression;\n  constructor(expression) {\n    this.type = \"ExpressionStatement\" /* ExpressionStatement */;\n    this.expression = expression;\n  }\n};\nvar ForInStatement = class {\n  type;\n  left;\n  right;\n  body;\n  each;\n  constructor(left, right, body) {\n    this.type = \"ForInStatement\" /* ForInStatement */;\n    this.left = left;\n    this.right = right;\n    this.body = body;\n    this.each = false;\n  }\n};\nvar ForOfStatement = class {\n  type;\n  await;\n  left;\n  right;\n  body;\n  constructor(left, right, body, _await) {\n    this.type = \"ForOfStatement\" /* ForOfStatement */;\n    this.await = _await;\n    this.left = left;\n    this.right = right;\n    this.body = body;\n  }\n};\nvar ForStatement = class {\n  type;\n  init;\n  test;\n  update;\n  body;\n  constructor(init, test, update, body) {\n    this.type = \"ForStatement\" /* ForStatement */;\n    this.init = init;\n    this.test = test;\n    this.update = update;\n    this.body = body;\n  }\n};\nvar FunctionDeclaration = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(id, params, body, generator) {\n    this.type = \"FunctionDeclaration\" /* FunctionDeclaration */;\n    this.id = id;\n    this.params = params;\n    this.body = body;\n    this.generator = generator;\n    this.expression = false;\n    this.async = false;\n  }\n};\nvar FunctionExpression = class {\n  type;\n  id;\n  params;\n  body;\n  generator;\n  expression;\n  async;\n  constructor(id, params, body, generator, isAsync) {\n    this.type = \"FunctionExpression\" /* FunctionExpression */;\n    this.id = id;\n    this.params = params;\n    this.body = body;\n    this.generator = generator;\n    this.expression = false;\n    this.async = isAsync;\n  }\n};\nvar Identifier = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"Identifier\" /* Identifier */;\n    this.name = name;\n  }\n};\nvar IfStatement = class {\n  type;\n  test;\n  consequent;\n  alternate;\n  constructor(test, consequent, alternate) {\n    this.type = \"IfStatement\" /* IfStatement */;\n    this.test = test;\n    this.consequent = consequent;\n    this.alternate = alternate;\n  }\n};\nvar ImportAttribute = class {\n  type;\n  key;\n  value;\n  constructor(key, value) {\n    this.type = \"ImportAttribute\" /* ImportAttribute */;\n    this.key = key;\n    this.value = value;\n  }\n};\nvar ImportExpression = class {\n  type;\n  source;\n  attributes;\n  constructor(source, attributes) {\n    this.type = \"ImportExpression\" /* ImportExpression */;\n    this.source = source;\n    this.attributes = attributes;\n  }\n};\nvar ImportDeclaration = class {\n  type;\n  specifiers;\n  source;\n  assertions;\n  constructor(specifiers, source, assertions) {\n    this.type = \"ImportDeclaration\" /* ImportDeclaration */;\n    this.specifiers = specifiers;\n    this.source = source;\n    this.assertions = assertions;\n  }\n};\nvar ImportDefaultSpecifier = class {\n  type;\n  local;\n  constructor(local) {\n    this.type = \"ImportDefaultSpecifier\" /* ImportDefaultSpecifier */;\n    this.local = local;\n  }\n};\nvar ImportNamespaceSpecifier = class {\n  type;\n  local;\n  constructor(local) {\n    this.type = \"ImportNamespaceSpecifier\" /* ImportNamespaceSpecifier */;\n    this.local = local;\n  }\n};\nvar ImportSpecifier = class {\n  type;\n  local;\n  imported;\n  constructor(local, imported) {\n    this.type = \"ImportSpecifier\" /* ImportSpecifier */;\n    this.local = local;\n    this.imported = imported;\n  }\n};\nvar LabeledStatement = class {\n  type;\n  label;\n  body;\n  constructor(label, body) {\n    this.type = \"LabeledStatement\" /* LabeledStatement */;\n    this.label = label;\n    this.body = body;\n  }\n};\nvar Literal = class {\n  type;\n  value;\n  raw;\n  constructor(value, raw) {\n    this.type = \"Literal\" /* Literal */;\n    this.value = value;\n    this.raw = raw;\n  }\n};\nvar LogicalExpression = class {\n  type;\n  operator;\n  left;\n  right;\n  constructor(operator, left, right) {\n    this.type = \"LogicalExpression\" /* LogicalExpression */;\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n};\nvar MemberExpression = class {\n  type;\n  computed;\n  object;\n  property;\n  optional;\n  constructor(computed, object, property, optional) {\n    this.type = \"MemberExpression\" /* MemberExpression */;\n    this.computed = computed;\n    this.object = object;\n    this.property = property;\n    this.optional = optional;\n  }\n};\nvar MetaProperty = class {\n  type;\n  meta;\n  property;\n  constructor(meta, property) {\n    this.type = \"MetaProperty\" /* MetaProperty */;\n    this.meta = meta;\n    this.property = property;\n  }\n};\nvar MethodDefinition = class {\n  type;\n  key;\n  computed;\n  value;\n  kind;\n  static;\n  decorators;\n  constructor(key, computed, value, kind, isStatic, decorators) {\n    this.type = \"MethodDefinition\" /* MethodDefinition */;\n    this.key = key;\n    this.computed = computed;\n    this.value = value;\n    this.kind = kind;\n    this.static = isStatic;\n    this.decorators = decorators;\n  }\n};\nvar Module = class {\n  type;\n  body;\n  sourceType;\n  constructor(body) {\n    this.type = \"Program\" /* Program */;\n    this.body = body;\n    this.sourceType = \"module\";\n  }\n};\nvar NewExpression = class {\n  type;\n  callee;\n  arguments;\n  constructor(callee, args) {\n    this.type = \"NewExpression\" /* NewExpression */;\n    this.callee = callee;\n    this.arguments = args;\n  }\n};\nvar ObjectExpression = class {\n  type;\n  properties;\n  constructor(properties) {\n    this.type = \"ObjectExpression\" /* ObjectExpression */;\n    this.properties = properties;\n  }\n};\nvar ObjectPattern = class {\n  type;\n  properties;\n  constructor(properties) {\n    this.type = \"ObjectPattern\" /* ObjectPattern */;\n    this.properties = properties;\n  }\n};\nvar PrivateIdentifier = class {\n  type;\n  name;\n  constructor(name) {\n    this.type = \"PrivateIdentifier\" /* PrivateIdentifier */;\n    this.name = name;\n  }\n};\nvar Program = class {\n  type;\n  body;\n  sourceType;\n  constructor(sourceType, body) {\n    this.type = \"Program\" /* Program */;\n    this.sourceType = sourceType;\n    this.body = body;\n  }\n};\nvar Property = class {\n  type;\n  key;\n  computed;\n  value;\n  kind;\n  method;\n  shorthand;\n  constructor(kind, key, computed, value, method, shorthand) {\n    this.type = \"Property\" /* Property */;\n    this.key = key;\n    this.computed = computed;\n    this.value = value;\n    this.kind = kind;\n    this.method = method;\n    this.shorthand = shorthand;\n  }\n};\nvar PropertyDefinition = class {\n  type;\n  key;\n  computed;\n  value;\n  static;\n  decorators;\n  constructor(key, computed, value, isStatic, decorators) {\n    this.type = \"Property\" /* Property */;\n    this.key = key;\n    this.computed = computed;\n    this.value = value;\n    this.static = isStatic;\n    this.decorators = decorators;\n  }\n};\nvar RegexLiteral = class {\n  type;\n  value;\n  raw;\n  regex;\n  constructor(value, raw, pattern, flags) {\n    this.type = \"Literal\" /* Literal */;\n    this.value = value;\n    this.raw = raw;\n    this.regex = { pattern, flags };\n  }\n};\nvar RestElement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"RestElement\" /* RestElement */;\n    this.argument = argument;\n  }\n};\nvar ReturnStatement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"ReturnStatement\" /* ReturnStatement */;\n    this.argument = argument;\n  }\n};\nvar Script = class {\n  type;\n  body;\n  sourceType;\n  constructor(body) {\n    this.type = \"Program\" /* Program */;\n    this.body = body;\n    this.sourceType = \"script\";\n  }\n};\nvar SequenceExpression = class {\n  type;\n  expressions;\n  constructor(expressions) {\n    this.type = \"SequenceExpression\" /* SequenceExpression */;\n    this.expressions = expressions;\n  }\n};\nvar SpreadElement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"SpreadElement\" /* SpreadElement */;\n    this.argument = argument;\n  }\n};\nvar StaticBlock = class {\n  type;\n  body;\n  constructor(body) {\n    this.type = \"StaticBlock\" /* StaticBlock */;\n    this.body = body;\n  }\n};\nvar Super = class {\n  type;\n  constructor() {\n    this.type = \"Super\" /* Super */;\n  }\n};\nvar SwitchCase = class {\n  type;\n  test;\n  consequent;\n  constructor(test, consequent) {\n    this.type = \"SwitchCase\" /* SwitchCase */;\n    this.test = test;\n    this.consequent = consequent;\n  }\n};\nvar SwitchStatement = class {\n  type;\n  discriminant;\n  cases;\n  constructor(discriminant, cases) {\n    this.type = \"SwitchStatement\" /* SwitchStatement */;\n    this.discriminant = discriminant;\n    this.cases = cases;\n  }\n};\nvar TaggedTemplateExpression = class {\n  type;\n  tag;\n  quasi;\n  constructor(tag, quasi) {\n    this.type = \"TaggedTemplateExpression\" /* TaggedTemplateExpression */;\n    this.tag = tag;\n    this.quasi = quasi;\n  }\n};\nvar TemplateElement = class {\n  type;\n  value;\n  tail;\n  constructor(value, tail) {\n    this.type = \"TemplateElement\" /* TemplateElement */;\n    this.value = value;\n    this.tail = tail;\n  }\n};\nvar TemplateLiteral = class {\n  type;\n  quasis;\n  expressions;\n  constructor(quasis, expressions) {\n    this.type = \"TemplateLiteral\" /* TemplateLiteral */;\n    this.quasis = quasis;\n    this.expressions = expressions;\n  }\n};\nvar ThisExpression = class {\n  type;\n  constructor() {\n    this.type = \"ThisExpression\" /* ThisExpression */;\n  }\n};\nvar ThrowStatement = class {\n  type;\n  argument;\n  constructor(argument) {\n    this.type = \"ThrowStatement\" /* ThrowStatement */;\n    this.argument = argument;\n  }\n};\nvar TryStatement = class {\n  type;\n  block;\n  handler;\n  finalizer;\n  constructor(block, handler, finalizer) {\n    this.type = \"TryStatement\" /* TryStatement */;\n    this.block = block;\n    this.handler = handler;\n    this.finalizer = finalizer;\n  }\n};\nvar UnaryExpression = class {\n  type;\n  operator;\n  argument;\n  prefix;\n  constructor(operator, argument) {\n    this.type = \"UnaryExpression\" /* UnaryExpression */;\n    this.operator = operator;\n    this.argument = argument;\n    this.prefix = true;\n  }\n};\nvar UpdateExpression = class {\n  type;\n  operator;\n  argument;\n  prefix;\n  constructor(operator, argument, prefix) {\n    this.type = \"UpdateExpression\" /* UpdateExpression */;\n    this.operator = operator;\n    this.argument = argument;\n    this.prefix = prefix;\n  }\n};\nvar VariableDeclaration = class {\n  type;\n  declarations;\n  kind;\n  constructor(declarations, kind) {\n    this.type = \"VariableDeclaration\" /* VariableDeclaration */;\n    this.declarations = declarations;\n    this.kind = kind;\n  }\n};\nvar VariableDeclarator = class {\n  type;\n  id;\n  init;\n  constructor(id, init) {\n    this.type = \"VariableDeclarator\" /* VariableDeclarator */;\n    this.id = id;\n    this.init = init;\n  }\n};\nvar WhileStatement = class {\n  type;\n  test;\n  body;\n  constructor(test, body) {\n    this.type = \"WhileStatement\" /* WhileStatement */;\n    this.test = test;\n    this.body = body;\n  }\n};\nvar WithStatement = class {\n  type;\n  object;\n  body;\n  constructor(object, body) {\n    this.type = \"WithStatement\" /* WithStatement */;\n    this.object = object;\n    this.body = body;\n  }\n};\nvar YieldExpression = class {\n  type;\n  argument;\n  delegate;\n  constructor(argument, delegate) {\n    this.type = \"YieldExpression\" /* YieldExpression */;\n    this.argument = argument;\n    this.delegate = delegate;\n  }\n};\n\n// src/assert.ts\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"ASSERT: \" + message);\n  }\n}\n\n// src/error-handler.ts\nvar ErrorHandler = class {\n  errors;\n  tolerant;\n  constructor() {\n    this.errors = [];\n    this.tolerant = false;\n  }\n  recordError(error) {\n    this.errors.push(error);\n  }\n  tolerate(error) {\n    if (this.tolerant) {\n      this.recordError(error);\n    } else {\n      throw error;\n    }\n  }\n  constructError(msg, column) {\n    let error = new Error(msg);\n    try {\n      throw error;\n    } catch (base) {\n      if (Object.create && Object.defineProperty) {\n        error = Object.create(base);\n        Object.defineProperty(error, \"column\", { value: column });\n      }\n    }\n    return error;\n  }\n  createError(index, line, col, description) {\n    const msg = \"Line \" + line + \": \" + description;\n    const _error = this.constructError(msg, col);\n    _error.index = index;\n    _error.lineNumber = line;\n    _error.description = description;\n    const error = _error;\n    return error;\n  }\n  throwError(index, line, col, description) {\n    throw this.createError(index, line, col, description);\n  }\n  tolerateError(index, line, col, description) {\n    const error = this.createError(index, line, col, description);\n    if (this.tolerant) {\n      this.recordError(error);\n    } else {\n      throw error;\n    }\n  }\n};\n\n// src/messages.ts\nvar Messages = {\n  AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block.\",\n  BadImportCallArity: \"Unexpected token\",\n  BadGetterArity: \"Getter must not have any formal parameters\",\n  BadSetterArity: \"Setter must have exactly one formal parameter\",\n  BadSetterRestParameter: \"Setter function argument must not be a rest parameter\",\n  CannotUseImportMetaOutsideAModule: \"Cannot use 'import.meta' outside a module\",\n  ConstructorIsAsync: \"Class constructor may not be an async method\",\n  ConstructorIsPrivate: \"Class constructor may not be a private method\",\n  ConstructorSpecialMethod: \"Class constructor may not be an accessor\",\n  DeclarationMissingInitializer: \"Missing initializer in %0 declaration\",\n  DefaultRestParameter: \"Unexpected token =\",\n  DefaultRestProperty: \"Unexpected token =\",\n  DuplicateBinding: \"Duplicate binding %0\",\n  DuplicateConstructor: \"A class may only have one constructor\",\n  DuplicateParameter: \"Duplicate parameter name not allowed in this context\",\n  DuplicateProtoProperty: \"Duplicate __proto__ fields are not allowed in object literals\",\n  ForInOfLoopInitializer: \"%0 loop variable declaration may not have an initializer\",\n  GeneratorInLegacyContext: \"Generator declarations are not allowed in legacy contexts\",\n  IllegalBreak: \"Illegal break statement\",\n  IllegalContinue: \"Illegal continue statement\",\n  IllegalExportDeclaration: \"Unexpected token\",\n  IllegalImportDeclaration: \"Unexpected token\",\n  IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list\",\n  IllegalReturn: \"Illegal return statement\",\n  InvalidEscapedReservedWord: \"Keyword must not contain escaped characters\",\n  InvalidHexEscapeSequence: \"Invalid hexadecimal escape sequence\",\n  InvalidLHSInAssignment: \"Invalid left-hand side in assignment\",\n  InvalidLHSInForIn: \"Invalid left-hand side in for-in\",\n  InvalidLHSInForLoop: \"Invalid left-hand side in for-loop\",\n  InvalidModuleSpecifier: \"Unexpected token\",\n  InvalidRegExp: \"Invalid regular expression\",\n  InvalidTaggedTemplateOnOptionalChain: \"Invalid tagged template on optional chain\",\n  InvalidUnicodeEscapeSequence: \"Invalid Unicode escape sequence\",\n  LetInLexicalBinding: \"let is disallowed as a lexically bound name\",\n  MissingFromClause: \"Unexpected token\",\n  MultipleDefaultsInSwitch: \"More than one default clause in switch statement\",\n  NewlineAfterThrow: \"Illegal newline after throw\",\n  NoAsAfterImportNamespace: \"Unexpected token\",\n  NoAsAndFromEscapeSequences: \"The `as` and `from` contextual keywords must not contain Unicode escape sequences.\",\n  NoCatchOrFinally: \"Missing catch or finally after try\",\n  NoSemicolonAfterDecorator: \"Decorators must not be followed by a semicolon.\",\n  NumericSeperatorOneUnderscore: \"Numeric separator must be exactly one underscore\",\n  NumericSeperatorNotAllowedHere: \"Numeric separator is not allowed here\",\n  ParameterAfterRestParameter: \"Rest parameter must be last formal parameter\",\n  PropertyAfterRestProperty: \"Unexpected token\",\n  Redeclaration: \"%0 '%1' has already been declared\",\n  StaticPrototype: \"Classes may not have static property named prototype\",\n  StrictCatchVariable: \"Catch variable may not be eval or arguments in strict mode\",\n  StrictDelete: \"Delete of an unqualified identifier in strict mode.\",\n  StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block\",\n  StrictFunctionName: \"Function name may not be eval or arguments in strict mode\",\n  StrictLHSAssignment: \"Assignment to eval or arguments is not allowed in strict mode\",\n  StrictLHSPostfix: \"Postfix increment/decrement may not have eval or arguments operand in strict mode\",\n  StrictLHSPrefix: \"Prefix increment/decrement may not have eval or arguments operand in strict mode\",\n  StrictModeWith: \"Strict mode code may not include a with statement\",\n  StrictOctalLiteral: \"Octal literals are not allowed in strict mode.\",\n  StrictParamName: \"Parameter name eval or arguments is not allowed in strict mode\",\n  StrictReservedWord: \"Use of future reserved word in strict mode\",\n  StrictVarName: \"Variable name may not be eval or arguments in strict mode\",\n  TemplateOctalLiteral: \"Octal literals are not allowed in template strings.\",\n  TemplateEscape89: \"\\\\8 and \\\\9 are not allowed in template strings.\",\n  UnexpectedEOS: \"Unexpected end of input\",\n  UnexpectedIdentifier: \"Unexpected identifier\",\n  UnexpectedNumber: \"Unexpected number\",\n  UnexpectedReserved: \"Unexpected reserved word\",\n  UnexpectedString: \"Unexpected string\",\n  UnexpectedSuper: \"'super' keyword unexpected here\",\n  UnexpectedTemplate: \"Unexpected quasi %0\",\n  UnexpectedToken: \"Unexpected token %0\",\n  UnexpectedTokenIllegal: \"Unexpected token ILLEGAL\",\n  UnknownLabel: \"Undefined label '%0'\",\n  UnterminatedRegExp: \"Invalid regular expression: missing /\"\n};\n\n// src/token.ts\nvar TokenName = {};\nTokenName[1 /* BooleanLiteral */] = \"Boolean\";\nTokenName[2 /* EOF */] = \"<end>\";\nTokenName[3 /* Identifier */] = \"Identifier\";\nTokenName[4 /* Keyword */] = \"Keyword\";\nTokenName[5 /* NullLiteral */] = \"Null\";\nTokenName[6 /* NumericLiteral */] = \"Numeric\";\nTokenName[7 /* Punctuator */] = \"Punctuator\";\nTokenName[8 /* StringLiteral */] = \"String\";\nTokenName[9 /* RegularExpression */] = \"RegularExpression\";\nTokenName[10 /* Template */] = \"Template\";\n\n// src/scanner.ts\nfunction hexValue(ch) {\n  return \"0123456789abcdef\".indexOf(ch.toLowerCase());\n}\nfunction octalValue(ch) {\n  return \"01234567\".indexOf(ch);\n}\nvar Scanner = class {\n  source;\n  errorHandler;\n  trackComment;\n  isModule;\n  index;\n  lineNumber;\n  lineStart;\n  curlyStack;\n  length;\n  constructor(code, handler) {\n    this.source = code;\n    this.errorHandler = handler;\n    this.trackComment = false;\n    this.isModule = false;\n    this.length = code.length;\n    this.index = 0;\n    this.lineNumber = code.length > 0 ? 1 : 0;\n    this.lineStart = 0;\n    this.curlyStack = [];\n  }\n  saveState() {\n    return {\n      index: this.index,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      curlyStack: this.curlyStack.slice()\n    };\n  }\n  restoreState(state) {\n    this.index = state.index;\n    this.lineNumber = state.lineNumber;\n    this.lineStart = state.lineStart;\n    this.curlyStack = state.curlyStack;\n  }\n  eof() {\n    return this.index >= this.length;\n  }\n  throwUnexpectedToken(message = Messages.UnexpectedTokenIllegal) {\n    return this.errorHandler.throwError(\n      this.index,\n      this.lineNumber,\n      this.index - this.lineStart + 1,\n      message\n    );\n  }\n  tolerateUnexpectedToken(message = Messages.UnexpectedTokenIllegal) {\n    this.errorHandler.tolerateError(\n      this.index,\n      this.lineNumber,\n      this.index - this.lineStart + 1,\n      message\n    );\n  }\n  // https://tc39.github.io/ecma262/#sec-comments\n  skipSingleLineComment(offset) {\n    let comments = [];\n    let start, loc;\n    if (this.trackComment) {\n      comments = [];\n      start = this.index - offset;\n      loc = {\n        start: {\n          line: this.lineNumber,\n          column: this.index - this.lineStart - offset\n        },\n        end: {}\n      };\n    }\n    while (!this.eof()) {\n      const ch = this.source.charCodeAt(this.index);\n      ++this.index;\n      if (Character.isLineTerminator(ch)) {\n        if (this.trackComment) {\n          loc.end = {\n            line: this.lineNumber,\n            column: this.index - this.lineStart - 1\n          };\n          const entry = {\n            multiLine: false,\n            slice: [start + offset, this.index - 1],\n            range: [start, this.index - 1],\n            loc\n          };\n          comments.push(entry);\n        }\n        if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n          ++this.index;\n        }\n        ++this.lineNumber;\n        this.lineStart = this.index;\n        return comments;\n      }\n    }\n    if (this.trackComment) {\n      loc.end = {\n        line: this.lineNumber,\n        column: this.index - this.lineStart\n      };\n      const entry = {\n        multiLine: false,\n        slice: [start + offset, this.index],\n        range: [start, this.index],\n        loc\n      };\n      comments.push(entry);\n    }\n    return comments;\n  }\n  skipMultiLineComment() {\n    let comments = [];\n    let start, loc;\n    if (this.trackComment) {\n      comments = [];\n      start = this.index - 2;\n      loc = {\n        start: {\n          line: this.lineNumber,\n          column: this.index - this.lineStart - 2\n        },\n        end: {}\n      };\n    }\n    while (!this.eof()) {\n      const ch = this.source.charCodeAt(this.index);\n      if (Character.isLineTerminator(ch)) {\n        if (ch === 13 && this.source.charCodeAt(this.index + 1) === 10) {\n          ++this.index;\n        }\n        ++this.lineNumber;\n        ++this.index;\n        this.lineStart = this.index;\n      } else if (ch === 42) {\n        if (this.source.charCodeAt(this.index + 1) === 47) {\n          this.index += 2;\n          if (this.trackComment) {\n            loc.end = {\n              line: this.lineNumber,\n              column: this.index - this.lineStart\n            };\n            const entry = {\n              multiLine: true,\n              slice: [start + 2, this.index - 2],\n              range: [start, this.index],\n              loc\n            };\n            comments.push(entry);\n          }\n          return comments;\n        }\n        ++this.index;\n      } else {\n        ++this.index;\n      }\n    }\n    if (this.trackComment) {\n      loc.end = {\n        line: this.lineNumber,\n        column: this.index - this.lineStart\n      };\n      const entry = {\n        multiLine: true,\n        slice: [start + 2, this.index],\n        range: [start, this.index],\n        loc\n      };\n      comments.push(entry);\n    }\n    this.tolerateUnexpectedToken();\n    return comments;\n  }\n  scanComments() {\n    let comments;\n    if (this.trackComment) {\n      comments = [];\n    }\n    let start = this.index === 0;\n    while (!this.eof()) {\n      let ch = this.source.charCodeAt(this.index);\n      if (Character.isWhiteSpace(ch)) {\n        ++this.index;\n      } else if (Character.isLineTerminator(ch)) {\n        ++this.index;\n        if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n          ++this.index;\n        }\n        ++this.lineNumber;\n        this.lineStart = this.index;\n        start = true;\n      } else if (ch === 47) {\n        ch = this.source.charCodeAt(this.index + 1);\n        if (ch === 47) {\n          this.index += 2;\n          const comment = this.skipSingleLineComment(2);\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n          start = true;\n        } else if (ch === 42) {\n          this.index += 2;\n          const comment = this.skipMultiLineComment();\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n        } else {\n          break;\n        }\n      } else if (start && ch === 45) {\n        if (this.source.charCodeAt(this.index + 1) === 45 && this.source.charCodeAt(this.index + 2) === 62) {\n          this.index += 3;\n          const comment = this.skipSingleLineComment(3);\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n        } else {\n          break;\n        }\n      } else if (ch === 60 && !this.isModule) {\n        if (this.source.slice(this.index + 1, this.index + 4) === \"!--\") {\n          this.index += 4;\n          const comment = this.skipSingleLineComment(4);\n          if (this.trackComment) {\n            comments = comments.concat(comment);\n          }\n        } else {\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    return comments;\n  }\n  // https://tc39.github.io/ecma262/#sec-future-reserved-words\n  isFutureReservedWord(id) {\n    switch (id) {\n      case \"enum\":\n      case \"export\":\n      case \"import\":\n      case \"super\":\n        return true;\n      default:\n        return false;\n    }\n  }\n  isStrictModeReservedWord(id) {\n    switch (id) {\n      case \"implements\":\n      case \"interface\":\n      case \"package\":\n      case \"private\":\n      case \"protected\":\n      case \"public\":\n      case \"static\":\n      case \"yield\":\n      case \"let\":\n        return true;\n      default:\n        return false;\n    }\n  }\n  isRestrictedWord(id) {\n    return id === \"eval\" || id === \"arguments\";\n  }\n  // https://tc39.github.io/ecma262/#sec-keywords\n  isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return id === \"if\" || id === \"in\" || id === \"do\";\n      case 3:\n        return id === \"var\" || id === \"for\" || id === \"new\" || id === \"try\" || id === \"let\";\n      case 4:\n        return id === \"this\" || id === \"else\" || id === \"case\" || id === \"void\" || id === \"with\" || id === \"enum\";\n      case 5:\n        return id === \"while\" || id === \"break\" || id === \"catch\" || id === \"throw\" || id === \"const\" || id === \"yield\" || id === \"class\" || id === \"super\";\n      case 6:\n        return id === \"return\" || id === \"typeof\" || id === \"delete\" || id === \"switch\" || id === \"export\" || id === \"import\";\n      case 7:\n        return id === \"default\" || id === \"finally\" || id === \"extends\";\n      case 8:\n        return id === \"function\" || id === \"continue\" || id === \"debugger\";\n      case 10:\n        return id === \"instanceof\";\n      default:\n        return false;\n    }\n  }\n  codePointAt(i) {\n    let cp = this.source.charCodeAt(i);\n    if (cp >= 55296 && cp <= 56319) {\n      const second = this.source.charCodeAt(i + 1);\n      if (second >= 56320 && second <= 57343) {\n        const first = cp;\n        cp = (first - 55296) * 1024 + second - 56320 + 65536;\n      }\n    }\n    return cp;\n  }\n  scanHexEscape(prefix) {\n    const len = prefix === \"u\" ? 4 : 2;\n    let code = 0;\n    for (let i = 0; i < len; ++i) {\n      if (!this.eof() && Character.isHexDigit(this.source.charCodeAt(this.index))) {\n        code = code * 16 + hexValue(this.source[this.index++]);\n      } else {\n        return null;\n      }\n    }\n    return String.fromCharCode(code);\n  }\n  tryToScanUnicodeCodePointEscape() {\n    let ch = this.source[this.index];\n    let code = 0;\n    if (ch === \"}\") {\n      return null;\n    }\n    while (!this.eof()) {\n      ch = this.source[this.index++];\n      if (!Character.isHexDigit(ch.charCodeAt(0))) {\n        break;\n      }\n      code = code * 16 + hexValue(ch);\n    }\n    if (code > 1114111 || ch !== \"}\") {\n      return null;\n    }\n    return Character.fromCodePoint(code);\n  }\n  scanUnicodeCodePointEscape() {\n    const result = this.tryToScanUnicodeCodePointEscape();\n    if (result === null) {\n      return this.throwUnexpectedToken();\n    }\n    return result;\n  }\n  getIdentifier() {\n    const start = this.index++;\n    while (!this.eof()) {\n      const ch = this.source.charCodeAt(this.index);\n      if (ch === 92) {\n        this.index = start;\n        return this.getComplexIdentifier();\n      } else if (ch >= 55296 && ch < 57343) {\n        this.index = start;\n        return this.getComplexIdentifier();\n      }\n      if (Character.isIdentifierPart(ch)) {\n        ++this.index;\n      } else {\n        break;\n      }\n    }\n    return this.source.slice(start, this.index);\n  }\n  getComplexIdentifier() {\n    let cp = this.codePointAt(this.index);\n    let id = Character.fromCodePoint(cp);\n    this.index += id.length;\n    let ch;\n    if (cp === 92) {\n      if (this.source.charCodeAt(this.index) !== 117) {\n        this.throwUnexpectedToken();\n      }\n      ++this.index;\n      if (this.source[this.index] === \"{\") {\n        ++this.index;\n        ch = this.scanUnicodeCodePointEscape();\n      } else {\n        ch = this.scanHexEscape(\"u\");\n        if (ch === null || ch === \"\\\\\" || !Character.isIdentifierStart(ch.charCodeAt(0))) {\n          this.throwUnexpectedToken();\n        }\n      }\n      id = ch;\n    }\n    while (!this.eof()) {\n      cp = this.codePointAt(this.index);\n      if (!Character.isIdentifierPart(cp)) {\n        break;\n      }\n      ch = Character.fromCodePoint(cp);\n      id += ch;\n      this.index += ch.length;\n      if (cp === 92) {\n        id = id.substr(0, id.length - 1);\n        if (this.source.charCodeAt(this.index) !== 117) {\n          this.throwUnexpectedToken();\n        }\n        ++this.index;\n        if (this.source[this.index] === \"{\") {\n          ++this.index;\n          ch = this.scanUnicodeCodePointEscape();\n        } else {\n          ch = this.scanHexEscape(\"u\");\n          if (ch === null || ch === \"\\\\\" || !Character.isIdentifierPart(ch.charCodeAt(0))) {\n            this.throwUnexpectedToken();\n          }\n        }\n        id += ch;\n      }\n    }\n    return id;\n  }\n  octalToDecimal(ch) {\n    let octal = ch !== \"0\";\n    let code = octalValue(ch);\n    if (!this.eof() && Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n      octal = true;\n      code = code * 8 + octalValue(this.source[this.index++]);\n      if (\"0123\".indexOf(ch) >= 0 && !this.eof() && Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n        code = code * 8 + octalValue(this.source[this.index++]);\n      }\n    }\n    return {\n      code,\n      octal\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-names-and-keywords\n  scanIdentifier() {\n    let type;\n    const start = this.index;\n    const escaped = this.source.charCodeAt(start) === 92;\n    const id = escaped ? this.getComplexIdentifier() : this.getIdentifier();\n    if (id.length === 1) {\n      type = 3 /* Identifier */;\n    } else if (this.isKeyword(id)) {\n      type = 4 /* Keyword */;\n    } else if (id === \"null\") {\n      type = 5 /* NullLiteral */;\n    } else if (id === \"true\" || id === \"false\") {\n      type = 1 /* BooleanLiteral */;\n    } else {\n      type = 3 /* Identifier */;\n    }\n    if (type !== 3 /* Identifier */ && start + id.length !== this.index) {\n      const restore = this.index;\n      this.index = start;\n      this.tolerateUnexpectedToken(Messages.InvalidEscapedReservedWord);\n      this.index = restore;\n    }\n    return {\n      type,\n      value: id,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index,\n      escaped\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-punctuators\n  scanPunctuator() {\n    const start = this.index;\n    let str = this.source[this.index];\n    switch (str) {\n      case \"(\":\n      case \"{\":\n        if (str === \"{\") {\n          this.curlyStack.push(\"{\");\n        }\n        ++this.index;\n        break;\n      case \".\":\n        ++this.index;\n        if (this.source[this.index] === \".\" && this.source[this.index + 1] === \".\") {\n          this.index += 2;\n          str = \"...\";\n        }\n        break;\n      case \"}\":\n        ++this.index;\n        this.curlyStack.pop();\n        break;\n      case \"?\":\n        ++this.index;\n        if (this.source[this.index] === \"?\") {\n          ++this.index;\n          if (this.source[this.index] === \"=\") {\n            ++this.index;\n            str = \"??=\";\n          } else {\n            str = \"??\";\n          }\n        }\n        if (this.source[this.index] === \".\" && !/^\\d$/.test(this.source[this.index + 1])) {\n          ++this.index;\n          str = \"?.\";\n        }\n        break;\n      case \"#\":\n      case \")\":\n      case \";\":\n      case \",\":\n      case \"[\":\n      case \"]\":\n      case \":\":\n      case \"~\":\n      case \"@\":\n        ++this.index;\n        break;\n      default:\n        str = this.source.substr(this.index, 4);\n        if (str === \">>>=\") {\n          this.index += 4;\n        } else {\n          str = str.substr(0, 3);\n          if (str === \"===\" || str === \"!==\" || str === \">>>\" || str === \"<<=\" || str === \">>=\" || str === \"**=\" || str === \"&&=\" || str === \"||=\") {\n            this.index += 3;\n          } else {\n            str = str.substr(0, 2);\n            if (str === \"&&\" || str === \"||\" || str === \"==\" || str === \"!=\" || str === \"+=\" || str === \"-=\" || str === \"*=\" || str === \"/=\" || str === \"++\" || str === \"--\" || str === \"<<\" || str === \">>\" || str === \"&=\" || str === \"|=\" || str === \"^=\" || str === \"%=\" || str === \"<=\" || str === \">=\" || str === \"=>\" || str === \"**\") {\n              this.index += 2;\n            } else {\n              str = this.source[this.index];\n              if (\"<>=!+-*%&|^/\".indexOf(str) >= 0) {\n                ++this.index;\n              }\n            }\n          }\n        }\n    }\n    if (this.index === start) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 7 /* Punctuator */,\n      value: str,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n  scanHexLiteral(start) {\n    let num = this.scanLiteralPart(Character.isHexDigitChar);\n    if (num.length === 0) {\n      this.throwUnexpectedToken();\n    }\n    if (this.source[this.index] === \"n\") {\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(\"0x\" + num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseInt(\"0x\" + num, 16),\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  scanBinaryLiteral(start) {\n    let ch;\n    let num = this.scanLiteralPart((c) => c === \"0\" || c === \"1\");\n    if (num.length === 0) {\n      this.throwUnexpectedToken();\n    }\n    if (this.source[this.index] === \"n\") {\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(\"0b\" + num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (!this.eof()) {\n      ch = this.source.charCodeAt(this.index);\n      if (Character.isIdentifierStart(ch) || Character.isDecimalDigit(ch)) {\n        this.throwUnexpectedToken();\n      }\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseInt(num, 2),\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  scanOctalLiteral(prefix, start) {\n    let num = \"\";\n    let octal = false;\n    if (Character.isOctalDigit(prefix.charCodeAt(0))) {\n      octal = true;\n      num = \"0\" + this.source[this.index++];\n    } else {\n      ++this.index;\n    }\n    num += this.scanLiteralPart(Character.isOctalDigitChar);\n    if (!octal && num.length === 0) {\n      this.throwUnexpectedToken();\n    }\n    if (this.source[this.index] === \"n\") {\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(\"0o\" + num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (Character.isIdentifierStart(this.source.charCodeAt(this.index)) || Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseInt(num, 8),\n      octal,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  isImplicitOctalLiteral() {\n    for (let i = this.index + 1; i < this.length; ++i) {\n      const ch = this.source[i];\n      if (ch === \"8\" || ch === \"9\" || ch === \"n\") {\n        return false;\n      }\n      if (!Character.isOctalDigit(ch.charCodeAt(0))) {\n        return true;\n      }\n    }\n    return true;\n  }\n  scanLiteralPart(check) {\n    let num = \"\";\n    if (this.source[this.index] === \"_\")\n      this.throwUnexpectedToken(Messages.NumericSeperatorNotAllowedHere);\n    while (this.source[this.index] && (check(this.source[this.index]) || this.source[this.index] === \"_\")) {\n      if (this.source[this.index] !== \"_\")\n        num += this.source[this.index];\n      this.index++;\n      if (this.source[this.index - 1] === \"_\" && this.source[this.index] === \"_\")\n        this.throwUnexpectedToken(Messages.NumericSeperatorOneUnderscore);\n    }\n    if (this.source[this.index - 1] === \"_\")\n      this.throwUnexpectedToken(Messages.NumericSeperatorNotAllowedHere);\n    return num;\n  }\n  scanNumericLiteral() {\n    const start = this.index;\n    let ch = this.source[start];\n    assert(\n      Character.isDecimalDigit(ch.charCodeAt(0)) || ch === \".\",\n      \"Numeric literal must start with a decimal digit or a decimal point\"\n    );\n    let num = \"\";\n    if (ch !== \".\") {\n      num = this.source[this.index++];\n      ch = this.source[this.index];\n      if (num === \"0\") {\n        if (ch === \"x\" || ch === \"X\") {\n          ++this.index;\n          return this.scanHexLiteral(start);\n        }\n        if (ch === \"b\" || ch === \"B\") {\n          ++this.index;\n          return this.scanBinaryLiteral(start);\n        }\n        if (ch === \"o\" || ch === \"O\") {\n          return this.scanOctalLiteral(ch, start);\n        }\n        if (ch && Character.isOctalDigit(ch.charCodeAt(0))) {\n          if (this.isImplicitOctalLiteral()) {\n            return this.scanOctalLiteral(ch, start);\n          }\n        }\n      }\n      this.index--;\n      num = this.scanLiteralPart(Character.isDecimalDigitChar);\n      ch = this.source[this.index];\n    }\n    if (ch === \".\") {\n      num += this.source[this.index++];\n      num += this.scanLiteralPart(Character.isDecimalDigitChar);\n      ch = this.source[this.index];\n    }\n    if (ch === \"e\" || ch === \"E\") {\n      num += this.source[this.index++];\n      ch = this.source[this.index];\n      if (ch === \"+\" || ch === \"-\") {\n        num += this.source[this.index++];\n      }\n      if (Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n        num += this.scanLiteralPart(Character.isDecimalDigitChar);\n      } else {\n        this.throwUnexpectedToken();\n      }\n    } else if (ch === \"n\") {\n      if (num.length > 1 && num[0] === \"0\") {\n        this.throwUnexpectedToken();\n      }\n      this.index++;\n      return {\n        type: 6 /* NumericLiteral */,\n        value: BigInt(num),\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start,\n        end: this.index\n      };\n    }\n    if (Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 6 /* NumericLiteral */,\n      value: parseFloat(num),\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-literals-string-literals\n  scanStringLiteral() {\n    const start = this.index;\n    let quote = this.source[start];\n    assert(\n      quote === \"'\" || quote === '\"',\n      \"String literal must starts with a quote\"\n    );\n    ++this.index;\n    let octal = false;\n    let str = \"\";\n    while (!this.eof()) {\n      let ch = this.source[this.index++];\n      if (ch === quote) {\n        quote = \"\";\n        break;\n      } else if (ch === \"\\\\\") {\n        ch = this.source[this.index++];\n        if (!ch || !Character.isLineTerminator(ch.charCodeAt(0))) {\n          switch (ch) {\n            case \"u\":\n              if (this.source[this.index] === \"{\") {\n                ++this.index;\n                str += this.scanUnicodeCodePointEscape();\n              } else {\n                const unescapedChar = this.scanHexEscape(ch);\n                if (unescapedChar === null) {\n                  this.throwUnexpectedToken();\n                }\n                str += unescapedChar;\n              }\n              break;\n            case \"x\":\n              const unescaped = this.scanHexEscape(ch);\n              if (unescaped === null) {\n                this.throwUnexpectedToken(Messages.InvalidHexEscapeSequence);\n              }\n              str += unescaped;\n              break;\n            case \"n\":\n              str += \"\\n\";\n              break;\n            case \"r\":\n              str += \"\\r\";\n              break;\n            case \"t\":\n              str += \"\t\";\n              break;\n            case \"b\":\n              str += \"\\b\";\n              break;\n            case \"f\":\n              str += \"\\f\";\n              break;\n            case \"v\":\n              str += \"\\v\";\n              break;\n            case \"8\":\n            case \"9\":\n              str += ch;\n              this.tolerateUnexpectedToken();\n              break;\n            default:\n              if (ch && Character.isOctalDigit(ch.charCodeAt(0))) {\n                const octToDec = this.octalToDecimal(ch);\n                octal = octToDec.octal || octal;\n                str += String.fromCharCode(octToDec.code);\n              } else {\n                str += ch;\n              }\n              break;\n          }\n        } else {\n          ++this.lineNumber;\n          if (ch === \"\\r\" && this.source[this.index] === \"\\n\") {\n            ++this.index;\n          }\n          this.lineStart = this.index;\n        }\n      } else if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        break;\n      } else {\n        str += ch;\n      }\n    }\n    if (quote !== \"\") {\n      this.index = start;\n      this.throwUnexpectedToken();\n    }\n    return {\n      type: 8 /* StringLiteral */,\n      value: str,\n      octal,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n  scanTemplate() {\n    let cooked = \"\";\n    let terminated = false;\n    const start = this.index;\n    const head = this.source[start] === \"`\";\n    let tail = false;\n    let notEscapeSequenceHead = null;\n    let rawOffset = 2;\n    ++this.index;\n    while (!this.eof()) {\n      let ch = this.source[this.index++];\n      if (ch === \"`\") {\n        rawOffset = 1;\n        tail = true;\n        terminated = true;\n        break;\n      } else if (ch === \"$\") {\n        if (this.source[this.index] === \"{\") {\n          this.curlyStack.push(\"${\");\n          ++this.index;\n          terminated = true;\n          break;\n        }\n        cooked += ch;\n      } else if (notEscapeSequenceHead !== null) {\n        continue;\n      } else if (ch === \"\\\\\") {\n        ch = this.source[this.index++];\n        if (!Character.isLineTerminator(ch.charCodeAt(0))) {\n          switch (ch) {\n            case \"n\":\n              cooked += \"\\n\";\n              break;\n            case \"r\":\n              cooked += \"\\r\";\n              break;\n            case \"t\":\n              cooked += \"\t\";\n              break;\n            case \"u\":\n              if (this.source[this.index] === \"{\") {\n                ++this.index;\n                const unicodeCodePointEscape = this.tryToScanUnicodeCodePointEscape();\n                if (unicodeCodePointEscape === null) {\n                  notEscapeSequenceHead = \"u\";\n                } else {\n                  cooked += unicodeCodePointEscape;\n                }\n              } else {\n                const unescapedChar = this.scanHexEscape(ch);\n                if (unescapedChar === null) {\n                  notEscapeSequenceHead = \"u\";\n                } else {\n                  cooked += unescapedChar;\n                }\n              }\n              break;\n            case \"x\":\n              const unescaped = this.scanHexEscape(ch);\n              if (unescaped === null) {\n                notEscapeSequenceHead = \"x\";\n              } else {\n                cooked += unescaped;\n              }\n              break;\n            case \"b\":\n              cooked += \"\\b\";\n              break;\n            case \"f\":\n              cooked += \"\\f\";\n              break;\n            case \"v\":\n              cooked += \"\\v\";\n              break;\n            default:\n              if (ch === \"0\") {\n                if (Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n                  notEscapeSequenceHead = \"0\";\n                } else {\n                  cooked += \"\\0\";\n                }\n              } else if (Character.isDecimalDigitChar(ch)) {\n                notEscapeSequenceHead = ch;\n              } else {\n                cooked += ch;\n              }\n              break;\n          }\n        } else {\n          ++this.lineNumber;\n          if (ch === \"\\r\" && this.source[this.index] === \"\\n\") {\n            ++this.index;\n          }\n          this.lineStart = this.index;\n        }\n      } else if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        ++this.lineNumber;\n        if (ch === \"\\r\" && this.source[this.index] === \"\\n\") {\n          ++this.index;\n        }\n        this.lineStart = this.index;\n        cooked += \"\\n\";\n      } else {\n        cooked += ch;\n      }\n    }\n    if (!terminated) {\n      this.throwUnexpectedToken();\n    }\n    if (!head) {\n      this.curlyStack.pop();\n    }\n    return {\n      type: 10 /* Template */,\n      value: this.source.slice(start + 1, this.index - rawOffset),\n      cooked: notEscapeSequenceHead === null ? cooked : null,\n      head,\n      tail,\n      notEscapeSequenceHead,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n  testRegExp(pattern, flags) {\n    const astralSubstitute = \"\\uFFFF\";\n    let tmp = pattern;\n    if (flags.indexOf(\"u\") >= 0) {\n      tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, ($0, $1, $2) => {\n        const codePoint = parseInt($1 || $2, 16);\n        if (codePoint > 1114111) {\n          this.throwUnexpectedToken(Messages.InvalidRegExp);\n        }\n        if (codePoint <= 65535) {\n          return String.fromCharCode(codePoint);\n        }\n        return astralSubstitute;\n      }).replace(\n        /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n        astralSubstitute\n      );\n    }\n    try {\n      RegExp(tmp);\n    } catch (e) {\n      this.throwUnexpectedToken(Messages.InvalidRegExp);\n    }\n    try {\n      return new RegExp(pattern, flags);\n    } catch (exception) {\n      return null;\n    }\n  }\n  scanRegExpBody() {\n    let ch = this.source[this.index];\n    assert(ch === \"/\", \"Regular expression literal must start with a slash\");\n    let str = this.source[this.index++];\n    let classMarker = false;\n    let terminated = false;\n    while (!this.eof()) {\n      ch = this.source[this.index++];\n      str += ch;\n      if (ch === \"\\\\\") {\n        ch = this.source[this.index++];\n        if (Character.isLineTerminator(ch.charCodeAt(0))) {\n          this.throwUnexpectedToken(Messages.UnterminatedRegExp);\n        }\n        str += ch;\n      } else if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        this.throwUnexpectedToken(Messages.UnterminatedRegExp);\n      } else if (classMarker) {\n        if (ch === \"]\") {\n          classMarker = false;\n        }\n      } else {\n        if (ch === \"/\") {\n          terminated = true;\n          break;\n        } else if (ch === \"[\") {\n          classMarker = true;\n        }\n      }\n    }\n    if (!terminated) {\n      this.throwUnexpectedToken(Messages.UnterminatedRegExp);\n    }\n    return str.substr(1, str.length - 2);\n  }\n  scanRegExpFlags() {\n    let str = \"\";\n    let flags = \"\";\n    while (!this.eof()) {\n      let ch = this.source[this.index];\n      if (!Character.isIdentifierPart(ch.charCodeAt(0))) {\n        break;\n      }\n      ++this.index;\n      if (ch === \"\\\\\" && !this.eof()) {\n        ch = this.source[this.index];\n        if (ch === \"u\") {\n          ++this.index;\n          let restore = this.index;\n          const char = this.scanHexEscape(\"u\");\n          if (char !== null) {\n            flags += char;\n            for (str += \"\\\\u\"; restore < this.index; ++restore) {\n              str += this.source[restore];\n            }\n          } else {\n            this.index = restore;\n            flags += \"u\";\n            str += \"\\\\u\";\n          }\n          this.tolerateUnexpectedToken();\n        } else {\n          str += \"\\\\\";\n          this.tolerateUnexpectedToken();\n        }\n      } else {\n        flags += ch;\n        str += ch;\n      }\n    }\n    return flags;\n  }\n  scanRegExp() {\n    const start = this.index;\n    const pattern = this.scanRegExpBody();\n    const flags = this.scanRegExpFlags();\n    const value = this.testRegExp(pattern, flags);\n    return {\n      type: 9 /* RegularExpression */,\n      value: \"\",\n      pattern,\n      flags,\n      regex: value,\n      lineNumber: this.lineNumber,\n      lineStart: this.lineStart,\n      start,\n      end: this.index\n    };\n  }\n  lex() {\n    if (this.eof()) {\n      return {\n        type: 2 /* EOF */,\n        value: \"\",\n        lineNumber: this.lineNumber,\n        lineStart: this.lineStart,\n        start: this.index,\n        end: this.index\n      };\n    }\n    const cp = this.source.charCodeAt(this.index);\n    if (Character.isIdentifierStart(cp)) {\n      return this.scanIdentifier();\n    }\n    if (cp === 40 || cp === 41 || cp === 59) {\n      return this.scanPunctuator();\n    }\n    if (cp === 39 || cp === 34) {\n      return this.scanStringLiteral();\n    }\n    if (cp === 46) {\n      if (Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n        return this.scanNumericLiteral();\n      }\n      return this.scanPunctuator();\n    }\n    if (Character.isDecimalDigit(cp)) {\n      return this.scanNumericLiteral();\n    }\n    if (cp === 96 || cp === 125 && this.curlyStack[this.curlyStack.length - 1] === \"${\") {\n      return this.scanTemplate();\n    }\n    if (cp >= 55296 && cp < 57343) {\n      if (Character.isIdentifierStart(this.codePointAt(this.index))) {\n        return this.scanIdentifier();\n      }\n    }\n    return this.scanPunctuator();\n  }\n};\n\n// src/parser.ts\nvar ArrowParameterPlaceHolder = \"ArrowParameterPlaceHolder\";\nvar Parser = class {\n  config;\n  delegate;\n  errorHandler;\n  scanner;\n  operatorPrecedence;\n  lookahead;\n  hasLineTerminator;\n  context;\n  tokens;\n  startMarker;\n  lastMarker;\n  constructor(code, options = {}, delegate) {\n    this.config = {\n      range: typeof options.range === \"boolean\" && options.range,\n      loc: typeof options.loc === \"boolean\" && options.loc,\n      source: null,\n      tokens: typeof options.tokens === \"boolean\" && options.tokens,\n      comment: typeof options.comment === \"boolean\" && options.comment,\n      tolerant: typeof options.tolerant === \"boolean\" && options.tolerant\n    };\n    if (this.config.loc && options.source && options.source !== null) {\n      this.config.source = String(options.source);\n    }\n    this.delegate = delegate;\n    this.errorHandler = new ErrorHandler();\n    this.errorHandler.tolerant = this.config.tolerant == true;\n    this.scanner = new Scanner(code, this.errorHandler);\n    this.scanner.trackComment = this.config.comment == true;\n    this.operatorPrecedence = {\n      \")\": 0,\n      \";\": 0,\n      \",\": 0,\n      \"=\": 0,\n      \"]\": 0,\n      \"??\": 5,\n      \"||\": 6,\n      \"&&\": 7,\n      \"|\": 8,\n      \"^\": 9,\n      \"&\": 10,\n      \"==\": 11,\n      \"!=\": 11,\n      \"===\": 11,\n      \"!==\": 11,\n      \"<\": 12,\n      \">\": 12,\n      \"<=\": 12,\n      \">=\": 12,\n      \"<<\": 13,\n      \">>\": 13,\n      \">>>\": 13,\n      \"+\": 14,\n      \"-\": 14,\n      \"*\": 15,\n      \"/\": 15,\n      \"%\": 15\n    };\n    this.lookahead = {\n      type: 2 /* EOF */,\n      value: \"\",\n      lineNumber: this.scanner.lineNumber,\n      lineStart: 0,\n      start: 0,\n      end: 0\n    };\n    this.hasLineTerminator = false;\n    this.context = {\n      isModule: false,\n      isAsync: false,\n      allowIn: true,\n      allowStrictDirective: true,\n      allowSuper: false,\n      allowYield: true,\n      firstCoverInitializedNameError: null,\n      isAssignmentTarget: false,\n      isBindingElement: false,\n      inConstructor: false,\n      inFunctionBody: false,\n      inIteration: false,\n      inSwitch: false,\n      inClassConstructor: false,\n      labelSet: {},\n      strict: false,\n      decorators: null\n    };\n    this.tokens = [];\n    this.startMarker = {\n      index: 0,\n      line: this.scanner.lineNumber,\n      column: 0\n    };\n    this.lastMarker = {\n      index: 0,\n      line: this.scanner.lineNumber,\n      column: 0\n    };\n    this.nextToken();\n    this.lastMarker = {\n      index: this.scanner.index,\n      line: this.scanner.lineNumber,\n      column: this.scanner.index - this.scanner.lineStart\n    };\n  }\n  throwError(messageFormat, ...values) {\n    const args = values.slice();\n    const msg = messageFormat.replace(\n      /%(\\d)/g,\n      (whole, idx) => {\n        assert(idx < args.length, \"Message reference must be in range\");\n        return args[idx];\n      }\n    );\n    const index = this.lastMarker.index;\n    const line = this.lastMarker.line;\n    const column = this.lastMarker.column + 1;\n    throw this.errorHandler.createError(index, line, column, msg);\n  }\n  tolerateError(messageFormat, ...values) {\n    const args = values.slice();\n    const msg = messageFormat.replace(\n      /%(\\d)/g,\n      (whole, idx) => {\n        assert(idx < args.length, \"Message reference must be in range\");\n        return args[idx];\n      }\n    );\n    const index = this.lastMarker.index;\n    const line = this.scanner.lineNumber;\n    const column = this.lastMarker.column + 1;\n    this.errorHandler.tolerateError(index, line, column, msg);\n  }\n  // Throw an exception because of the token.\n  unexpectedTokenError(token, message) {\n    let msg = message || Messages.UnexpectedToken;\n    let value;\n    if (token) {\n      if (!message) {\n        msg = token.type === 2 /* EOF */ ? Messages.UnexpectedEOS : token.type === 3 /* Identifier */ ? Messages.UnexpectedIdentifier : token.type === 6 /* NumericLiteral */ ? Messages.UnexpectedNumber : token.type === 8 /* StringLiteral */ ? Messages.UnexpectedString : token.type === 10 /* Template */ ? Messages.UnexpectedTemplate : Messages.UnexpectedToken;\n        if (token.type === 4 /* Keyword */) {\n          if (this.scanner.isFutureReservedWord(token.value)) {\n            msg = Messages.UnexpectedReserved;\n          } else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n            msg = Messages.StrictReservedWord;\n          }\n        }\n      }\n      value = token.value;\n    } else {\n      value = \"ILLEGAL\";\n    }\n    msg = msg.replace(\"%0\", value);\n    if (token && typeof token.lineNumber === \"number\") {\n      const index = token.start;\n      const line = token.lineNumber;\n      const lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n      const column = token.start - lastMarkerLineStart + 1;\n      return this.errorHandler.createError(index, line, column, msg);\n    } else {\n      const index = this.lastMarker.index;\n      const line = this.lastMarker.line;\n      const column = this.lastMarker.column + 1;\n      return this.errorHandler.createError(index, line, column, msg);\n    }\n  }\n  throwUnexpectedToken(token, message) {\n    throw this.unexpectedTokenError(token, message);\n  }\n  tolerateUnexpectedToken(token, message) {\n    this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n  }\n  tolerateInvalidLoopStatement() {\n    if (this.matchKeyword(\"class\") || this.matchKeyword(\"function\")) {\n      this.tolerateError(Messages.UnexpectedToken, this.lookahead);\n    }\n  }\n  collectComments() {\n    if (!this.config.comment) {\n      this.scanner.scanComments();\n    } else {\n      const comments = this.scanner.scanComments();\n      if (comments.length > 0 && this.delegate) {\n        for (let i = 0; i < comments.length; ++i) {\n          const e = comments[i];\n          const node = {\n            type: e.multiLine ? \"BlockComment\" : \"LineComment\",\n            value: this.scanner.source.slice(e.slice[0], e.slice[1])\n          };\n          if (this.config.range) {\n            node.range = e.range;\n          }\n          if (this.config.loc) {\n            node.loc = e.loc;\n          }\n          const metadata = {\n            start: {\n              line: e.loc.start.line,\n              column: e.loc.start.column,\n              offset: e.range[0]\n            },\n            end: {\n              line: e.loc.end.line,\n              column: e.loc.end.column,\n              offset: e.range[1]\n            }\n          };\n          this.delegate(node, metadata);\n        }\n      }\n    }\n  }\n  // From internal representation to an external structure\n  getTokenRaw(token) {\n    return this.scanner.source.slice(token.start, token.end);\n  }\n  convertToken(token) {\n    const t = {\n      type: TokenName[token.type],\n      value: this.getTokenRaw(token)\n    };\n    if (this.config.range) {\n      t.range = [token.start, token.end];\n    }\n    if (this.config.loc) {\n      t.loc = {\n        start: {\n          line: this.startMarker.line,\n          column: this.startMarker.column\n        },\n        end: {\n          line: this.scanner.lineNumber,\n          column: this.scanner.index - this.scanner.lineStart\n        }\n      };\n    }\n    if (token.type === 9 /* RegularExpression */) {\n      const pattern = token.pattern;\n      const flags = token.flags;\n      t.regex = { pattern, flags };\n    }\n    return t;\n  }\n  nextToken() {\n    const token = this.lookahead;\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    this.collectComments();\n    if (this.scanner.index !== this.startMarker.index) {\n      this.startMarker.index = this.scanner.index;\n      this.startMarker.line = this.scanner.lineNumber;\n      this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n    }\n    const next = this.scanner.lex();\n    this.hasLineTerminator = token.lineNumber !== next.lineNumber;\n    if (next && this.context.strict && next.type === 3 /* Identifier */) {\n      if (this.scanner.isStrictModeReservedWord(next.value)) {\n        next.type = 4 /* Keyword */;\n      }\n    }\n    this.lookahead = next;\n    if (this.config.tokens && next.type !== 2 /* EOF */) {\n      this.tokens.push(this.convertToken(next));\n    }\n    return token;\n  }\n  nextRegexToken() {\n    this.collectComments();\n    const token = this.scanner.scanRegExp();\n    if (this.config.tokens) {\n      this.tokens.pop();\n      this.tokens.push(this.convertToken(token));\n    }\n    this.lookahead = token;\n    this.nextToken();\n    return token;\n  }\n  createNode() {\n    return {\n      index: this.startMarker.index,\n      line: this.startMarker.line,\n      column: this.startMarker.column\n    };\n  }\n  startNode(token, lastLineStart = 0) {\n    let column = token.start - token.lineStart;\n    let line = token.lineNumber;\n    if (column < 0) {\n      column += lastLineStart;\n      line--;\n    }\n    return {\n      index: token.start,\n      line,\n      column\n    };\n  }\n  finalize(marker, node) {\n    if (this.config.range) {\n      node.range = [marker.index, this.lastMarker.index];\n    }\n    if (this.config.loc) {\n      node.loc = {\n        start: {\n          line: marker.line,\n          column: marker.column\n        },\n        end: {\n          line: this.lastMarker.line,\n          column: this.lastMarker.column\n        }\n      };\n      if (this.config.source) {\n        node.loc.source = this.config.source;\n      }\n    }\n    if (this.delegate) {\n      const metadata = {\n        start: {\n          line: marker.line,\n          column: marker.column,\n          offset: marker.index\n        },\n        end: {\n          line: this.lastMarker.line,\n          column: this.lastMarker.column,\n          offset: this.lastMarker.index\n        }\n      };\n      this.delegate(node, metadata);\n    }\n    return node;\n  }\n  // Expect the next token to match the specified punctuator.\n  // If not, an exception will be thrown.\n  expect(value) {\n    const token = this.nextToken();\n    if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n      this.throwUnexpectedToken(token);\n    }\n  }\n  // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n  expectCommaSeparator() {\n    if (this.config.tolerant) {\n      const token = this.lookahead;\n      if (token.type === 7 /* Punctuator */ && token.value === \",\") {\n        this.nextToken();\n      } else if (token.type === 7 /* Punctuator */ && token.value === \";\") {\n        this.nextToken();\n        this.tolerateUnexpectedToken(token);\n      } else {\n        this.tolerateUnexpectedToken(token, Messages.UnexpectedToken);\n      }\n    } else {\n      this.expect(\",\");\n    }\n  }\n  // Expect the next token to match the specified keyword.\n  // If not, an exception will be thrown.\n  expectKeyword(keyword) {\n    const token = this.nextToken();\n    if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n      this.throwUnexpectedToken(token);\n    }\n  }\n  // Return true if the next token matches the specified punctuator.\n  match(value) {\n    return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n  }\n  // Return true if the next token matches the specified keyword\n  matchKeyword(keyword) {\n    return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n  }\n  // Return true if the next token matches the specified contextual keyword\n  // (where an identifier is sometimes a keyword depending on the context)\n  matchContextualKeyword(keyword) {\n    return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n  }\n  // Return true if the next token is an assignment operator\n  matchAssign() {\n    if (this.lookahead.type !== 7 /* Punctuator */) {\n      return false;\n    }\n    const op = this.lookahead.value;\n    return op === \"=\" || op === \"*=\" || op === \"**=\" || op === \"/=\" || op === \"%=\" || op === \"+=\" || op === \"-=\" || op === \"<<=\" || op === \">>=\" || op === \">>>=\" || op === \"&=\" || op === \"^=\" || op === \"|=\" || op === \"&&=\" || op === \"||=\" || op === \"??=\";\n  }\n  // Cover grammar support.\n  //\n  // When an assignment expression position starts with an left parenthesis, the determination of the type\n  // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n  // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n  //\n  // There are three productions that can be parsed in a parentheses pair that needs to be determined\n  // after the outermost pair is closed. They are:\n  //\n  //   1. AssignmentExpression\n  //   2. BindingElements\n  //   3. AssignmentTargets\n  //\n  // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n  // binding element or assignment target.\n  //\n  // The three productions have the relationship:\n  //\n  //   BindingElements \u2286 AssignmentTargets \u2286 AssignmentExpression\n  //\n  // with a single exception that CoverInitializedName when used directly in an Expression, generates\n  // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n  // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n  //\n  // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n  // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n  // the CoverInitializedName check is conducted.\n  //\n  // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n  // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n  // pattern. The CoverInitializedName check is deferred.\n  isolateCoverGrammar(parseFunction) {\n    const previousIsBindingElement = this.context.isBindingElement;\n    const previousIsAssignmentTarget = this.context.isAssignmentTarget;\n    const previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n    this.context.isBindingElement = true;\n    this.context.isAssignmentTarget = true;\n    this.context.firstCoverInitializedNameError = null;\n    const result = parseFunction.call(this);\n    if (this.context.firstCoverInitializedNameError !== null) {\n      this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n    }\n    this.context.isBindingElement = previousIsBindingElement;\n    this.context.isAssignmentTarget = previousIsAssignmentTarget;\n    this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n    return result;\n  }\n  inheritCoverGrammar(parseFunction) {\n    const previousIsBindingElement = this.context.isBindingElement;\n    const previousIsAssignmentTarget = this.context.isAssignmentTarget;\n    const previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n    this.context.isBindingElement = true;\n    this.context.isAssignmentTarget = true;\n    this.context.firstCoverInitializedNameError = null;\n    const result = parseFunction.call(this);\n    this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n    this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n    this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n    return result;\n  }\n  consumeSemicolon() {\n    if (this.match(\";\")) {\n      this.nextToken();\n    } else if (!this.hasLineTerminator) {\n      if (this.lookahead.type !== 2 /* EOF */ && !this.match(\"}\")) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      this.lastMarker.index = this.startMarker.index;\n      this.lastMarker.line = this.startMarker.line;\n      this.lastMarker.column = this.startMarker.column;\n    }\n  }\n  // https://tc39.github.io/ecma262/#sec-primary-expression\n  parsePrimaryExpression() {\n    const node = this.createNode();\n    let expr;\n    let token, raw;\n    switch (this.lookahead.type) {\n      case 3 /* Identifier */:\n        if ((this.context.isModule || this.context.isAsync) && this.lookahead.value === \"await\") {\n          this.tolerateUnexpectedToken(this.lookahead);\n        }\n        expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Identifier(this.nextToken().value));\n        break;\n      case 6 /* NumericLiteral */:\n      case 8 /* StringLiteral */:\n        if (this.context.strict && this.lookahead.octal) {\n          this.tolerateUnexpectedToken(this.lookahead, Messages.StrictOctalLiteral);\n        }\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        token = this.nextToken();\n        raw = this.getTokenRaw(token);\n        if (typeof token.value === \"bigint\")\n          expr = this.finalize(node, new BigIntLiteral(token.value, raw, token.value.toString()));\n        else\n          expr = this.finalize(node, new Literal(token.value, raw));\n        break;\n      case 1 /* BooleanLiteral */:\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        token = this.nextToken();\n        raw = this.getTokenRaw(token);\n        expr = this.finalize(node, new Literal(token.value === \"true\", raw));\n        break;\n      case 5 /* NullLiteral */:\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        token = this.nextToken();\n        raw = this.getTokenRaw(token);\n        expr = this.finalize(node, new Literal(null, raw));\n        break;\n      case 10 /* Template */:\n        expr = this.parseTemplateLiteral({ isTagged: false });\n        break;\n      case 7 /* Punctuator */:\n        switch (this.lookahead.value) {\n          case \"(\":\n            this.context.isBindingElement = false;\n            expr = this.inheritCoverGrammar(this.parseGroupExpression);\n            break;\n          case \"[\":\n            expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n            break;\n          case \"{\":\n            expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n            break;\n          case \"/\":\n          case \"/=\":\n            this.context.isAssignmentTarget = false;\n            this.context.isBindingElement = false;\n            this.scanner.index = this.startMarker.index;\n            token = this.nextRegexToken();\n            raw = this.getTokenRaw(token);\n            expr = this.finalize(node, new RegexLiteral(token.regex, raw, token.pattern, token.flags));\n            break;\n          case \"#\":\n            this.nextToken();\n            expr = this.finalize(node, new PrivateIdentifier(this.nextToken().value));\n            break;\n          case \"@\":\n            let decorators = this.parseDecorators();\n            this.context.decorators = decorators;\n            let expression = this.parsePrimaryExpression();\n            this.context.decorators = null;\n            expr = this.finalize(node, new PrivateIdentifier(this.nextToken().value));\n            break;\n          default:\n            expr = this.throwUnexpectedToken(this.nextToken());\n        }\n        break;\n      case 4 /* Keyword */:\n        if (!this.context.strict && this.context.allowYield && this.matchKeyword(\"yield\")) {\n          expr = this.parseIdentifierName();\n        } else if (!this.context.strict && this.matchKeyword(\"let\")) {\n          expr = this.finalize(node, new Identifier(this.nextToken().value));\n        } else {\n          this.context.isAssignmentTarget = false;\n          this.context.isBindingElement = false;\n          if (this.matchKeyword(\"function\")) {\n            expr = this.parseFunctionExpression();\n          } else if (this.matchKeyword(\"this\")) {\n            this.nextToken();\n            expr = this.finalize(node, new ThisExpression());\n          } else if (this.matchKeyword(\"class\")) {\n            expr = this.parseClassExpression();\n          } else if (this.matchKeyword(\"new\")) {\n            expr = this.parseNewExpression();\n          } else if (this.matchImportCall()) {\n            expr = this.parseImportCall();\n          } else if (this.matchImportMeta()) {\n            if (!this.context.isModule) {\n              this.tolerateUnexpectedToken(this.lookahead, Messages.CannotUseImportMetaOutsideAModule);\n            }\n            expr = this.parseImportMeta();\n          } else {\n            expr = this.throwUnexpectedToken(this.nextToken());\n          }\n        }\n        break;\n      default:\n        expr = this.throwUnexpectedToken(this.nextToken());\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-array-initializer\n  parseSpreadElement() {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n    return this.finalize(node, new SpreadElement(arg));\n  }\n  parseArrayInitializer() {\n    const node = this.createNode();\n    const elements = [];\n    this.expect(\"[\");\n    while (!this.match(\"]\")) {\n      if (this.match(\",\")) {\n        this.nextToken();\n        elements.push(null);\n      } else if (this.match(\"...\")) {\n        const element = this.parseSpreadElement();\n        if (!this.match(\"]\")) {\n          this.context.isAssignmentTarget = false;\n          this.context.isBindingElement = false;\n          this.expect(\",\");\n        }\n        elements.push(element);\n      } else {\n        elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n        if (!this.match(\"]\")) {\n          this.expect(\",\");\n        }\n      }\n    }\n    this.expect(\"]\");\n    return this.finalize(node, new ArrayExpression(elements));\n  }\n  // https://tc39.github.io/ecma262/#sec-object-initializer\n  parsePropertyMethod(params) {\n    this.context.isAssignmentTarget = false;\n    this.context.isBindingElement = false;\n    const previousStrict = this.context.strict;\n    const previousAllowStrictDirective = this.context.allowStrictDirective;\n    this.context.allowStrictDirective = params.simple;\n    const body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n    if (this.context.strict && params.firstRestricted) {\n      this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n    }\n    if (this.context.strict && params.stricted) {\n      this.tolerateUnexpectedToken(params.stricted, params.message);\n    }\n    this.context.strict = previousStrict;\n    this.context.allowStrictDirective = previousAllowStrictDirective;\n    return body;\n  }\n  parsePropertyMethodFunction(isGenerator) {\n    const node = this.createNode();\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = true;\n    const params = this.parseFormalParameters();\n    const method = this.parsePropertyMethod(params);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, params.params, method, isGenerator, false));\n  }\n  parsePropertyMethodAsyncFunction(isGenerator) {\n    const node = this.createNode();\n    const previousAllowYield = this.context.allowYield;\n    const previousIsAsync = this.context.isAsync;\n    this.context.allowYield = false;\n    this.context.isAsync = true;\n    const params = this.parseFormalParameters();\n    const method = this.parsePropertyMethod(params);\n    this.context.allowYield = previousAllowYield;\n    this.context.isAsync = previousIsAsync;\n    return this.finalize(node, new FunctionExpression(null, params.params, method, isGenerator, true));\n  }\n  parseObjectPropertyKey(isPrivate = false) {\n    const node = this.createNode();\n    const token = this.nextToken();\n    let key;\n    switch (token.type) {\n      case 8 /* StringLiteral */:\n      case 6 /* NumericLiteral */:\n        if (this.context.strict && token.octal) {\n          this.tolerateUnexpectedToken(token, Messages.StrictOctalLiteral);\n        }\n        const raw = this.getTokenRaw(token);\n        if (typeof token.value === \"bigint\")\n          key = this.finalize(node, new BigIntLiteral(token.value, raw, token.value.toString()));\n        else\n          key = this.finalize(node, new Literal(token.value, raw));\n        break;\n      case 3 /* Identifier */:\n      case 1 /* BooleanLiteral */:\n      case 5 /* NullLiteral */:\n      case 4 /* Keyword */:\n        key = this.finalize(node, isPrivate ? new PrivateIdentifier(token.value) : new Identifier(token.value));\n        break;\n      case 7 /* Punctuator */:\n        if (token.value === \"[\") {\n          key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          this.expect(\"]\");\n        } else {\n          key = this.throwUnexpectedToken(token);\n        }\n        break;\n      default:\n        key = this.throwUnexpectedToken(token);\n    }\n    return key;\n  }\n  isPropertyKey(key, value) {\n    return key.type === \"Identifier\" /* Identifier */ && key.name === value || key.type === \"Literal\" /* Literal */ && key.value === value;\n  }\n  parseObjectProperty(hasProto) {\n    const node = this.createNode();\n    const token = this.lookahead;\n    let kind;\n    let key = null;\n    let value = null;\n    let computed = false;\n    let method = false;\n    let shorthand = false;\n    let isAsync = false;\n    let isGenerator = false;\n    if (token.type === 3 /* Identifier */) {\n      const id = token.value;\n      this.nextToken();\n      computed = this.match(\"[\");\n      isAsync = !this.hasLineTerminator && id === \"async\" && !this.match(\":\") && !this.match(\"(\") && !this.match(\",\");\n      isGenerator = this.match(\"*\");\n      if (isGenerator) {\n        this.nextToken();\n      }\n      key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Identifier(id));\n    } else if (this.match(\"*\")) {\n      this.nextToken();\n    } else {\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n    }\n    const lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n    if (token.type === 3 /* Identifier */ && !isAsync && token.value === \"get\" && lookaheadPropertyKey) {\n      kind = \"get\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      this.context.allowYield = false;\n      value = this.parseGetterMethod();\n    } else if (token.type === 3 /* Identifier */ && !isAsync && token.value === \"set\" && lookaheadPropertyKey) {\n      kind = \"set\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      value = this.parseSetterMethod();\n    } else if (token.type === 7 /* Punctuator */ && token.value === \"*\" && lookaheadPropertyKey) {\n      kind = \"init\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      value = this.parseGeneratorMethod(false);\n      method = true;\n    } else {\n      if (!key) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      kind = \"init\";\n      if (this.match(\":\") && !isAsync) {\n        if (!computed && this.isPropertyKey(key, \"__proto__\")) {\n          if (hasProto.value) {\n            this.tolerateError(Messages.DuplicateProtoProperty);\n          }\n          hasProto.value = true;\n        }\n        this.nextToken();\n        value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n      } else if (this.match(\"(\")) {\n        value = isAsync ? this.parsePropertyMethodAsyncFunction(isGenerator) : this.parsePropertyMethodFunction(isGenerator);\n        method = true;\n      } else if (token.type === 3 /* Identifier */) {\n        const id = this.finalize(node, new Identifier(token.value));\n        if (this.match(\"=\")) {\n          this.context.firstCoverInitializedNameError = this.lookahead;\n          this.nextToken();\n          shorthand = true;\n          const init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          value = this.finalize(node, new AssignmentPattern(id, init));\n        } else {\n          shorthand = true;\n          value = id;\n        }\n      } else {\n        this.throwUnexpectedToken(this.nextToken());\n      }\n    }\n    return this.finalize(node, new Property(kind, key, computed, value, method, shorthand));\n  }\n  parseObjectInitializer() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const properties = [];\n    const hasProto = { value: false };\n    while (!this.match(\"}\")) {\n      const property = this.match(\"...\") ? this.parseSpreadElement() : this.parseObjectProperty(hasProto);\n      properties.push(property);\n      if (!this.match(\"}\") && (!property.method || this.match(\",\"))) {\n        this.expectCommaSeparator();\n      }\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new ObjectExpression(properties));\n  }\n  // https://tc39.es/proposal-template-literal-revision/#sec-static-semantics-template-early-errors\n  throwTemplateLiteralEarlyErrors(token) {\n    switch (token.notEscapeSequenceHead) {\n      case \"u\":\n        return this.throwUnexpectedToken(token, Messages.InvalidUnicodeEscapeSequence);\n      case \"x\":\n        return this.throwUnexpectedToken(token, Messages.InvalidHexEscapeSequence);\n      case \"8\":\n      case \"9\":\n        return this.throwUnexpectedToken(token, Messages.TemplateEscape89);\n      default:\n        return this.throwUnexpectedToken(token, Messages.TemplateOctalLiteral);\n    }\n  }\n  // https://tc39.github.io/ecma262/#sec-template-literals\n  parseTemplateHead(options) {\n    assert(this.lookahead.head, \"Template literal must start with a template head\");\n    const node = this.createNode();\n    const token = this.nextToken();\n    if (!options.isTagged && token.notEscapeSequenceHead !== null) {\n      this.throwTemplateLiteralEarlyErrors(token);\n    }\n    const raw = token.value;\n    const cooked = token.cooked;\n    return this.finalize(node, new TemplateElement({ raw, cooked }, token.tail));\n  }\n  parseTemplateElement(options) {\n    if (this.lookahead.type !== 10 /* Template */) {\n      this.throwUnexpectedToken();\n    }\n    const node = this.createNode();\n    const token = this.nextToken();\n    if (!options.isTagged && token.notEscapeSequenceHead !== null) {\n      this.throwTemplateLiteralEarlyErrors(token);\n    }\n    const raw = token.value;\n    const cooked = token.cooked;\n    return this.finalize(node, new TemplateElement({ raw, cooked }, token.tail));\n  }\n  parseTemplateLiteral(options) {\n    const node = this.createNode();\n    const expressions = [];\n    const quasis = [];\n    let quasi = this.parseTemplateHead(options);\n    quasis.push(quasi);\n    while (!quasi.tail) {\n      expressions.push(this.parseExpression());\n      quasi = this.parseTemplateElement(options);\n      quasis.push(quasi);\n    }\n    return this.finalize(node, new TemplateLiteral(quasis, expressions));\n  }\n  // https://tc39.github.io/ecma262/#sec-grouping-operator\n  reinterpretExpressionAsPattern(expr) {\n    switch (expr.type) {\n      case \"Identifier\" /* Identifier */:\n      case \"MemberExpression\" /* MemberExpression */:\n      case \"RestElement\" /* RestElement */:\n      case \"AssignmentPattern\" /* AssignmentPattern */:\n        break;\n      case \"SpreadElement\" /* SpreadElement */:\n        expr.type = \"RestElement\" /* RestElement */;\n        this.reinterpretExpressionAsPattern(expr.argument);\n        break;\n      case \"ArrayExpression\" /* ArrayExpression */:\n        expr.type = \"ArrayPattern\" /* ArrayPattern */;\n        for (let i = 0; i < expr.elements.length; i++) {\n          if (expr.elements[i] !== null) {\n            this.reinterpretExpressionAsPattern(expr.elements[i]);\n          }\n        }\n        break;\n      case \"ObjectExpression\" /* ObjectExpression */:\n        expr.type = \"ObjectPattern\" /* ObjectPattern */;\n        for (let i = 0; i < expr.properties.length; i++) {\n          const property = expr.properties[i];\n          this.reinterpretExpressionAsPattern(property.type === \"SpreadElement\" /* SpreadElement */ ? property : property.value);\n        }\n        break;\n      case \"AssignmentExpression\" /* AssignmentExpression */:\n        expr.type = \"AssignmentPattern\" /* AssignmentPattern */;\n        delete expr.operator;\n        this.reinterpretExpressionAsPattern(expr.left);\n        break;\n      default:\n        break;\n    }\n  }\n  parseGroupExpression() {\n    let expr;\n    this.expect(\"(\");\n    if (this.match(\")\")) {\n      this.nextToken();\n      if (!this.match(\"=>\")) {\n        this.expect(\"=>\");\n      }\n      expr = {\n        type: ArrowParameterPlaceHolder,\n        params: [],\n        async: false\n      };\n    } else {\n      const startToken = this.lookahead;\n      const params = [];\n      if (this.match(\"...\")) {\n        expr = this.parseRestElement(params);\n        this.expect(\")\");\n        if (!this.match(\"=>\")) {\n          this.expect(\"=>\");\n        }\n        expr = {\n          type: ArrowParameterPlaceHolder,\n          params: [expr],\n          async: false\n        };\n      } else {\n        let arrow = false;\n        this.context.isBindingElement = true;\n        expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n        if (this.match(\",\")) {\n          const expressions = [];\n          this.context.isAssignmentTarget = false;\n          expressions.push(expr);\n          while (this.lookahead.type !== 2 /* EOF */) {\n            if (!this.match(\",\")) {\n              break;\n            }\n            this.nextToken();\n            if (this.match(\")\")) {\n              this.nextToken();\n              for (let i = 0; i < expressions.length; i++) {\n                this.reinterpretExpressionAsPattern(expressions[i]);\n              }\n              arrow = true;\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: expressions,\n                async: false\n              };\n            } else if (this.match(\"...\")) {\n              if (!this.context.isBindingElement) {\n                this.throwUnexpectedToken(this.lookahead);\n              }\n              expressions.push(this.parseRestElement(params));\n              this.expect(\")\");\n              if (!this.match(\"=>\")) {\n                this.expect(\"=>\");\n              }\n              this.context.isBindingElement = false;\n              for (let i = 0; i < expressions.length; i++) {\n                this.reinterpretExpressionAsPattern(expressions[i]);\n              }\n              arrow = true;\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: expressions,\n                async: false\n              };\n            } else {\n              expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n            }\n            if (arrow) {\n              break;\n            }\n          }\n          if (!arrow) {\n            expr = this.finalize(this.startNode(startToken), new SequenceExpression(expressions));\n          }\n        }\n        if (!arrow) {\n          this.expect(\")\");\n          if (this.match(\"=>\")) {\n            if (expr.type === \"Identifier\" /* Identifier */ && expr.name === \"yield\") {\n              arrow = true;\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: [expr],\n                async: false\n              };\n            }\n            if (!arrow) {\n              if (!this.context.isBindingElement) {\n                this.throwUnexpectedToken(this.lookahead);\n              }\n              if (expr.type === \"SequenceExpression\" /* SequenceExpression */) {\n                for (let i = 0; i < expr.expressions.length; i++) {\n                  this.reinterpretExpressionAsPattern(expr.expressions[i]);\n                }\n              } else {\n                this.reinterpretExpressionAsPattern(expr);\n              }\n              const parameters = expr.type === \"SequenceExpression\" /* SequenceExpression */ ? expr.expressions : [expr];\n              expr = {\n                type: ArrowParameterPlaceHolder,\n                params: parameters,\n                async: false\n              };\n            }\n          }\n          this.context.isBindingElement = false;\n        }\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n  parseArguments() {\n    this.expect(\"(\");\n    const args = [];\n    if (!this.match(\")\")) {\n      while (true) {\n        const expr = this.match(\"...\") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAssignmentExpression);\n        args.push(expr);\n        if (this.match(\")\")) {\n          break;\n        }\n        this.expectCommaSeparator();\n        if (this.match(\")\")) {\n          break;\n        }\n      }\n    }\n    this.expect(\")\");\n    return args;\n  }\n  isIdentifierName(token) {\n    return token.type === 3 /* Identifier */ || token.type === 4 /* Keyword */ || token.type === 1 /* BooleanLiteral */ || token.type === 5 /* NullLiteral */;\n  }\n  parseIdentifierName(allowPrivateField = false) {\n    let isPrivateField = false;\n    let node = this.createNode();\n    let token = this.nextToken();\n    if (token.value === \"#\" && allowPrivateField) {\n      token = this.nextToken();\n      isPrivateField = true;\n    }\n    if (!this.isIdentifierName(token)) {\n      this.throwUnexpectedToken(token);\n    }\n    return this.finalize(node, isPrivateField ? new PrivateIdentifier(token.value) : new Identifier(token.value));\n  }\n  parseNewExpression() {\n    const node = this.createNode();\n    const id = this.parseIdentifierName();\n    assert(id.name === \"new\", \"New expression must start with `new`\");\n    let expr;\n    if (this.match(\".\")) {\n      this.nextToken();\n      if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === \"target\") {\n        const property = this.parseIdentifierName();\n        expr = new MetaProperty(id, property);\n      } else {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n    } else if (this.matchKeyword(\"import\")) {\n      this.throwUnexpectedToken(this.lookahead);\n    } else {\n      const callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n      const args = this.match(\"(\") ? this.parseArguments() : [];\n      expr = new NewExpression(callee, args);\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    }\n    return this.finalize(node, expr);\n  }\n  parseAsyncArgument() {\n    const arg = this.parseAssignmentExpression();\n    this.context.firstCoverInitializedNameError = null;\n    return arg;\n  }\n  parseAsyncArguments() {\n    this.expect(\"(\");\n    const args = [];\n    if (!this.match(\")\")) {\n      while (true) {\n        const expr = this.match(\"...\") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAsyncArgument);\n        args.push(expr);\n        if (this.match(\")\")) {\n          break;\n        }\n        this.expectCommaSeparator();\n        if (this.match(\")\")) {\n          break;\n        }\n      }\n    }\n    this.expect(\")\");\n    return args;\n  }\n  matchImportCall() {\n    let match = this.matchKeyword(\"import\");\n    if (match) {\n      const state = this.scanner.saveState();\n      this.scanner.scanComments();\n      const next = this.scanner.lex();\n      this.scanner.restoreState(state);\n      match = next.type === 7 /* Punctuator */ && next.value === \"(\";\n    }\n    return match;\n  }\n  parseImportCall() {\n    const node = this.createNode();\n    this.expectKeyword(\"import\");\n    this.expect(\"(\");\n    var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n    this.context.isAssignmentTarget = true;\n    const source = this.parseAssignmentExpression();\n    let attributes = null;\n    if (this.match(\",\")) {\n      this.nextToken();\n      if (!this.match(\")\"))\n        attributes = this.parseAssignmentExpression();\n    }\n    this.context.isAssignmentTarget = previousIsAssignmentTarget;\n    if (!this.match(\")\")) {\n      if (this.match(\",\")) {\n        this.nextToken();\n      }\n      this.expect(\")\");\n    } else {\n      this.nextToken();\n    }\n    return this.finalize(node, new ImportExpression(source, attributes));\n  }\n  matchImportMeta() {\n    let match = this.matchKeyword(\"import\");\n    if (match) {\n      const state = this.scanner.saveState();\n      this.scanner.scanComments();\n      const dot = this.scanner.lex();\n      if (dot.type === 7 /* Punctuator */ && dot.value === \".\") {\n        this.scanner.scanComments();\n        const meta = this.scanner.lex();\n        match = meta.type === 3 /* Identifier */ && meta.value === \"meta\";\n        if (match) {\n          if (meta.end - meta.start !== \"meta\".length) {\n            this.tolerateUnexpectedToken(meta, Messages.InvalidEscapedReservedWord);\n          }\n        }\n      } else {\n        match = false;\n      }\n      this.scanner.restoreState(state);\n    }\n    return match;\n  }\n  parseImportMeta() {\n    const node = this.createNode();\n    const id = this.parseIdentifierName();\n    this.expect(\".\");\n    const property = this.parseIdentifierName();\n    this.context.isAssignmentTarget = false;\n    return this.finalize(node, new MetaProperty(id, property));\n  }\n  parseLeftHandSideExpressionAllowCall() {\n    const startToken = this.lookahead;\n    const maybeAsync = this.matchContextualKeyword(\"async\");\n    const previousAllowIn = this.context.allowIn;\n    this.context.allowIn = true;\n    let expr;\n    const isSuper = this.matchKeyword(\"super\");\n    if (isSuper && this.context.inFunctionBody) {\n      expr = this.createNode();\n      this.nextToken();\n      expr = this.finalize(expr, new Super());\n      if (!this.match(\"(\") && !this.match(\".\") && !this.match(\"[\")) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n    } else {\n      expr = this.inheritCoverGrammar(this.matchKeyword(\"new\") ? this.parseNewExpression : this.parsePrimaryExpression);\n    }\n    if (isSuper && this.match(\"(\") && (!this.context.inClassConstructor || !this.context.allowSuper)) {\n      this.tolerateError(Messages.UnexpectedSuper);\n    }\n    let hasOptional = false;\n    while (true) {\n      let optional = false;\n      if (this.match(\"?.\")) {\n        optional = true;\n        hasOptional = true;\n        this.expect(\"?.\");\n      }\n      if (this.match(\"(\")) {\n        const asyncArrow = maybeAsync && startToken.lineNumber === this.lookahead.lineNumber;\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = false;\n        const args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n        if (expr.type === \"ImportExpression\" /* ImportExpression */ && args.length !== 1) {\n          this.tolerateError(Messages.BadImportCallArity);\n        }\n        expr = this.finalize(this.startNode(startToken), new CallExpression(expr, args, optional));\n        if (asyncArrow && this.match(\"=>\")) {\n          for (let i = 0; i < args.length; ++i) {\n            this.reinterpretExpressionAsPattern(args[i]);\n          }\n          expr = {\n            type: ArrowParameterPlaceHolder,\n            params: args,\n            async: true\n          };\n        }\n      } else if (this.match(\"[\")) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        this.expect(\"[\");\n        const property = this.isolateCoverGrammar(this.parseExpression);\n        this.expect(\"]\");\n        expr = this.finalize(this.startNode(startToken), new MemberExpression(true, expr, property, optional));\n      } else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n        if (optional) {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n        if (hasOptional) {\n          this.throwError(Messages.InvalidTaggedTemplateOnOptionalChain);\n        }\n        const quasi = this.parseTemplateLiteral({ isTagged: true });\n        expr = this.finalize(this.startNode(startToken), new TaggedTemplateExpression(expr, quasi));\n      } else if (this.match(\".\") || optional) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        if (!optional) {\n          this.expect(\".\");\n        }\n        const property = this.parseIdentifierName(true);\n        expr = this.finalize(this.startNode(startToken), new MemberExpression(false, expr, property, optional));\n      } else {\n        break;\n      }\n    }\n    this.context.allowIn = previousAllowIn;\n    if (hasOptional) {\n      return new ChainExpression(expr);\n    }\n    return expr;\n  }\n  parseSuper() {\n    const node = this.createNode();\n    this.expectKeyword(\"super\");\n    if (!this.match(\"[\") && !this.match(\".\")) {\n      this.throwUnexpectedToken(this.lookahead);\n    }\n    return this.finalize(node, new Super());\n  }\n  parseLeftHandSideExpression() {\n    assert(this.context.allowIn, \"callee of new expression always allow in keyword.\");\n    const node = this.startNode(this.lookahead);\n    let expr = this.matchKeyword(\"super\") && this.context.inFunctionBody ? this.parseSuper() : this.inheritCoverGrammar(this.matchKeyword(\"new\") ? this.parseNewExpression : this.parsePrimaryExpression);\n    let hasOptional = false;\n    while (true) {\n      let optional = false;\n      if (this.match(\"?.\")) {\n        optional = true;\n        hasOptional = true;\n        this.expect(\"?.\");\n      }\n      if (this.match(\"[\")) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        this.expect(\"[\");\n        const property = this.isolateCoverGrammar(this.parseExpression);\n        this.expect(\"]\");\n        expr = this.finalize(node, new MemberExpression(true, expr, property, optional));\n      } else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n        if (optional) {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n        if (hasOptional) {\n          this.throwError(Messages.InvalidTaggedTemplateOnOptionalChain);\n        }\n        const quasi = this.parseTemplateLiteral({ isTagged: true });\n        expr = this.finalize(node, new TaggedTemplateExpression(expr, quasi));\n      } else if (this.match(\".\") || optional) {\n        this.context.isBindingElement = false;\n        this.context.isAssignmentTarget = !optional;\n        if (!optional) {\n          this.expect(\".\");\n        }\n        const property = this.parseIdentifierName();\n        expr = this.finalize(node, new MemberExpression(false, expr, property, optional));\n      } else {\n        break;\n      }\n    }\n    if (hasOptional) {\n      return new ChainExpression(expr);\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-update-expressions\n  parseUpdateExpression() {\n    let expr;\n    const startToken = this.lookahead;\n    if (this.match(\"++\") || this.match(\"--\")) {\n      const node = this.startNode(startToken);\n      const token = this.nextToken();\n      expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n      if (this.context.strict && expr.type === \"Identifier\" /* Identifier */ && this.scanner.isRestrictedWord(expr.name)) {\n        this.tolerateError(Messages.StrictLHSPrefix);\n      }\n      if (!this.context.isAssignmentTarget) {\n        this.tolerateError(Messages.InvalidLHSInAssignment);\n      }\n      const prefix = true;\n      expr = this.finalize(node, new UpdateExpression(token.value, expr, prefix));\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    } else {\n      expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n      if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n        if (this.match(\"++\") || this.match(\"--\")) {\n          if (this.context.strict && expr.type === \"Identifier\" /* Identifier */ && this.scanner.isRestrictedWord(expr.name)) {\n            this.tolerateError(Messages.StrictLHSPostfix);\n          }\n          if (!this.context.isAssignmentTarget) {\n            this.tolerateError(Messages.InvalidLHSInAssignment);\n          }\n          this.context.isAssignmentTarget = false;\n          this.context.isBindingElement = false;\n          const operator = this.nextToken().value;\n          const prefix = false;\n          expr = this.finalize(this.startNode(startToken), new UpdateExpression(operator, expr, prefix));\n        }\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-unary-operators\n  parseAwaitExpression() {\n    const node = this.createNode();\n    this.nextToken();\n    const argument = this.parseUnaryExpression();\n    return this.finalize(node, new AwaitExpression(argument));\n  }\n  parseUnaryExpression() {\n    let expr;\n    if (this.match(\"+\") || this.match(\"-\") || this.match(\"~\") || this.match(\"!\") || this.matchKeyword(\"delete\") || this.matchKeyword(\"void\") || this.matchKeyword(\"typeof\")) {\n      const node = this.startNode(this.lookahead);\n      const token = this.nextToken();\n      expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n      expr = this.finalize(node, new UnaryExpression(token.value, expr));\n      if (this.context.strict && expr.operator === \"delete\" && expr.argument.type === \"Identifier\" /* Identifier */) {\n        this.tolerateError(Messages.StrictDelete);\n      }\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    } else if ((this.context.isModule && !this.context.inFunctionBody || this.context.isAsync) && this.matchContextualKeyword(\"await\")) {\n      expr = this.parseAwaitExpression();\n    } else {\n      expr = this.parseUpdateExpression();\n    }\n    return expr;\n  }\n  parseExponentiationExpression() {\n    const startToken = this.lookahead;\n    const isLeftParenthesized = this.match(\"(\");\n    let expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n    const exponentAllowed = expr.type !== \"UnaryExpression\" /* UnaryExpression */ || isLeftParenthesized;\n    if (exponentAllowed && this.match(\"**\")) {\n      this.nextToken();\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n      const left = expr;\n      const right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n      expr = this.finalize(this.startNode(startToken), new BinaryExpression(\"**\", left, right));\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-exp-operator\n  // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n  // https://tc39.github.io/ecma262/#sec-additive-operators\n  // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n  // https://tc39.github.io/ecma262/#sec-relational-operators\n  // https://tc39.github.io/ecma262/#sec-equality-operators\n  // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n  // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n  binaryPrecedence(token) {\n    const op = token.value;\n    let precedence;\n    if (token.type === 7 /* Punctuator */) {\n      precedence = this.operatorPrecedence[op] || 0;\n    } else if (token.type === 4 /* Keyword */) {\n      precedence = op === \"instanceof\" || this.context.allowIn && op === \"in\" ? 12 : 0;\n    } else {\n      precedence = 0;\n    }\n    return precedence;\n  }\n  parseBinaryExpression() {\n    const startToken = this.lookahead;\n    let expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n    let allowAndOr = true;\n    let allowNullishCoalescing = true;\n    const updateNullishCoalescingRestrictions = (token2) => {\n      if (token2.value === \"&&\" || token2.value === \"||\") {\n        allowNullishCoalescing = false;\n      }\n      if (token2.value === \"??\") {\n        allowAndOr = false;\n      }\n    };\n    const token = this.lookahead;\n    let prec = this.binaryPrecedence(token);\n    if (prec > 0) {\n      updateNullishCoalescingRestrictions(token);\n      this.nextToken();\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n      const markers = [startToken, this.lookahead];\n      let left = expr;\n      let right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n      const stack = [left, token.value, right];\n      const precedences = [prec];\n      while (true) {\n        prec = this.binaryPrecedence(this.lookahead);\n        if (prec <= 0) {\n          break;\n        }\n        if (!allowAndOr && (this.lookahead.value === \"&&\" || this.lookahead.value === \"||\") || !allowNullishCoalescing && this.lookahead.value === \"??\") {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n        updateNullishCoalescingRestrictions(this.lookahead);\n        while (stack.length > 2 && prec <= precedences[precedences.length - 1]) {\n          right = stack.pop();\n          const operator = stack.pop();\n          precedences.pop();\n          left = stack.pop();\n          markers.pop();\n          const marker = markers[markers.length - 1];\n          const node = this.startNode(marker, marker.lineStart);\n          const logical = operator === \"||\" || operator === \"&&\" || operator === \"??\";\n          stack.push(this.finalize(node, logical ? new LogicalExpression(operator, left, right) : new BinaryExpression(operator, left, right)));\n        }\n        stack.push(this.nextToken().value);\n        precedences.push(prec);\n        markers.push(this.lookahead);\n        stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n      }\n      let i = stack.length - 1;\n      expr = stack[i];\n      let lastMarker = markers.pop();\n      while (i > 1) {\n        const marker = markers.pop();\n        const lastLineStart = lastMarker && lastMarker.lineStart;\n        const node = this.startNode(marker, lastLineStart);\n        const operator = stack[i - 1];\n        const logical = operator === \"||\" || operator === \"&&\" || operator === \"??\";\n        expr = this.finalize(node, logical ? new LogicalExpression(operator, stack[i - 2], expr) : new BinaryExpression(operator, stack[i - 2], expr));\n        i -= 2;\n        lastMarker = marker;\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-conditional-operator\n  parseConditionalExpression() {\n    const startToken = this.lookahead;\n    let expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n    if (this.match(\"?\")) {\n      this.nextToken();\n      const previousAllowIn = this.context.allowIn;\n      this.context.allowIn = true;\n      const consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      this.context.allowIn = previousAllowIn;\n      this.expect(\":\");\n      const alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      expr = this.finalize(this.startNode(startToken), new ConditionalExpression(expr, consequent, alternate));\n      this.context.isAssignmentTarget = false;\n      this.context.isBindingElement = false;\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-assignment-operators\n  checkPatternParam(options, param) {\n    switch (param.type) {\n      case \"Identifier\" /* Identifier */:\n        this.validateParam(options, param, param.name);\n        break;\n      case \"RestElement\" /* RestElement */:\n        this.checkPatternParam(options, param.argument);\n        break;\n      case \"AssignmentPattern\" /* AssignmentPattern */:\n        this.checkPatternParam(options, param.left);\n        break;\n      case \"ArrayPattern\" /* ArrayPattern */:\n        for (let i = 0; i < param.elements.length; i++) {\n          if (param.elements[i] !== null) {\n            this.checkPatternParam(options, param.elements[i]);\n          }\n        }\n        break;\n      case \"ObjectPattern\" /* ObjectPattern */:\n        for (let i = 0; i < param.properties.length; i++) {\n          const property = param.properties[i];\n          this.checkPatternParam(options, property.type === \"RestElement\" /* RestElement */ ? property : property.value);\n        }\n        break;\n      default:\n        break;\n    }\n    options.simple = options.simple && param instanceof Identifier;\n  }\n  reinterpretAsCoverFormalsList(expr) {\n    let params = [expr];\n    const options = {\n      simple: true,\n      paramSet: {}\n    };\n    let asyncArrow = false;\n    switch (expr.type) {\n      case \"Identifier\" /* Identifier */:\n        break;\n      case ArrowParameterPlaceHolder:\n        params = expr.params;\n        asyncArrow = expr.async;\n        break;\n      default:\n        return null;\n    }\n    for (let i = 0; i < params.length; ++i) {\n      const param = params[i];\n      if (param.type === \"AssignmentPattern\" /* AssignmentPattern */) {\n        if (param.right.type === \"YieldExpression\" /* YieldExpression */) {\n          if (param.right.argument) {\n            this.throwUnexpectedToken(this.lookahead);\n          }\n          param.right.type = \"Identifier\" /* Identifier */;\n          param.right.name = \"yield\";\n          delete param.right.argument;\n          delete param.right.delegate;\n        }\n      } else if (asyncArrow && param.type === \"Identifier\" /* Identifier */ && param.name === \"await\") {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      this.checkPatternParam(options, param);\n      params[i] = param;\n    }\n    if (this.context.strict || !this.context.allowYield) {\n      for (let i = 0; i < params.length; ++i) {\n        const param = params[i];\n        if (param.type === \"YieldExpression\" /* YieldExpression */) {\n          this.throwUnexpectedToken(this.lookahead);\n        }\n      }\n    }\n    if (options.hasDuplicateParameterNames) {\n      const token = this.context.strict ? options.stricted : options.firstRestricted;\n      this.throwUnexpectedToken(token, Messages.DuplicateParameter);\n    }\n    return {\n      simple: options.simple,\n      params,\n      stricted: options.stricted,\n      firstRestricted: options.firstRestricted,\n      message: options.message\n    };\n  }\n  parseAssignmentExpression() {\n    let expr;\n    if (!this.context.allowYield && this.matchKeyword(\"yield\")) {\n      expr = this.parseYieldExpression();\n    } else {\n      const startToken = this.lookahead;\n      let token = startToken;\n      expr = this.parseConditionalExpression();\n      if (token.type === 3 /* Identifier */ && token.lineNumber === this.lookahead.lineNumber && token.value === \"async\") {\n        if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword(\"yield\")) {\n          const arg = this.parsePrimaryExpression();\n          this.reinterpretExpressionAsPattern(arg);\n          expr = {\n            type: ArrowParameterPlaceHolder,\n            params: [arg],\n            async: true\n          };\n        }\n      }\n      if (expr.type === ArrowParameterPlaceHolder || this.match(\"=>\")) {\n        this.context.isAssignmentTarget = false;\n        this.context.isBindingElement = false;\n        const isAsync = expr.async;\n        const list = this.reinterpretAsCoverFormalsList(expr);\n        if (list) {\n          if (this.hasLineTerminator) {\n            this.tolerateUnexpectedToken(this.lookahead);\n          }\n          this.context.firstCoverInitializedNameError = null;\n          const previousStrict = this.context.strict;\n          const previousAllowStrictDirective = this.context.allowStrictDirective;\n          this.context.allowStrictDirective = list.simple;\n          const previousAllowYield = this.context.allowYield;\n          const previousIsAsync = this.context.isAsync;\n          this.context.allowYield = true;\n          this.context.isAsync = isAsync;\n          const node = this.startNode(startToken);\n          this.expect(\"=>\");\n          let body;\n          if (this.match(\"{\")) {\n            const previousAllowIn = this.context.allowIn;\n            this.context.allowIn = true;\n            body = this.parseFunctionSourceElements();\n            this.context.allowIn = previousAllowIn;\n          } else {\n            body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          }\n          const expression = body.type !== \"BlockStatement\" /* BlockStatement */;\n          if (this.context.strict && list.firstRestricted) {\n            this.throwUnexpectedToken(list.firstRestricted, list.message);\n          }\n          if (this.context.strict && list.stricted) {\n            this.tolerateUnexpectedToken(list.stricted, list.message);\n          }\n          expr = this.finalize(node, new ArrowFunctionExpression(list.params, body, expression, isAsync));\n          this.context.strict = previousStrict;\n          this.context.allowStrictDirective = previousAllowStrictDirective;\n          this.context.allowYield = previousAllowYield;\n          this.context.isAsync = previousIsAsync;\n        }\n      } else {\n        if (this.matchAssign()) {\n          if (!this.context.isAssignmentTarget) {\n            this.tolerateError(Messages.InvalidLHSInAssignment);\n          }\n          if (this.context.strict && expr.type === \"Identifier\" /* Identifier */) {\n            const id = expr;\n            if (this.scanner.isRestrictedWord(id.name)) {\n              this.tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);\n            }\n            if (this.scanner.isStrictModeReservedWord(id.name)) {\n              this.tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n            }\n          }\n          if (!this.match(\"=\")) {\n            this.context.isAssignmentTarget = false;\n            this.context.isBindingElement = false;\n          } else {\n            this.reinterpretExpressionAsPattern(expr);\n          }\n          token = this.nextToken();\n          const operator = token.value;\n          const right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n          expr = this.finalize(this.startNode(startToken), new AssignmentExpression(operator, expr, right));\n          this.context.firstCoverInitializedNameError = null;\n        }\n      }\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-comma-operator\n  parseExpression() {\n    const startToken = this.lookahead;\n    let expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n    if (this.match(\",\")) {\n      const expressions = [];\n      expressions.push(expr);\n      while (this.lookahead.type !== 2 /* EOF */) {\n        if (!this.match(\",\")) {\n          break;\n        }\n        this.nextToken();\n        expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n      }\n      expr = this.finalize(this.startNode(startToken), new SequenceExpression(expressions));\n    }\n    return expr;\n  }\n  // https://tc39.github.io/ecma262/#sec-block\n  parseStatementListItem() {\n    let statement;\n    this.context.isAssignmentTarget = true;\n    this.context.isBindingElement = true;\n    if (this.lookahead.type === 4 /* Keyword */) {\n      switch (this.lookahead.value) {\n        case \"export\":\n          if (!this.context.isModule) {\n            this.tolerateUnexpectedToken(this.lookahead, Messages.IllegalExportDeclaration);\n          }\n          statement = this.parseExportDeclaration();\n          break;\n        case \"import\":\n          if (this.matchImportCall()) {\n            statement = this.parseExpressionStatement();\n          } else if (this.matchImportMeta()) {\n            statement = this.parseStatement();\n          } else {\n            if (!this.context.isModule) {\n              this.tolerateUnexpectedToken(this.lookahead, Messages.IllegalImportDeclaration);\n            }\n            statement = this.parseImportDeclaration();\n          }\n          break;\n        case \"const\":\n          statement = this.parseLexicalDeclaration({ inFor: false });\n          break;\n        case \"function\":\n          statement = this.parseFunctionDeclaration();\n          break;\n        case \"class\":\n          statement = this.parseClassDeclaration();\n          break;\n        case \"let\":\n          statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n          break;\n        default:\n          statement = this.parseStatement();\n          break;\n      }\n    } else {\n      statement = this.parseStatement();\n    }\n    return statement;\n  }\n  parseBlock() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const block = [];\n    while (true) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      block.push(this.parseStatementListItem());\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new BlockStatement(block));\n  }\n  // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n  parseLexicalBinding(kind, options) {\n    const node = this.createNode();\n    const params = [];\n    const id = this.parsePattern(params, kind);\n    if (this.context.strict && id.type === \"Identifier\" /* Identifier */) {\n      if (this.scanner.isRestrictedWord(id.name)) {\n        this.tolerateError(Messages.StrictVarName);\n      }\n    }\n    let init = null;\n    if (kind === \"const\") {\n      if (!this.matchKeyword(\"in\") && !this.matchContextualKeyword(\"of\")) {\n        if (this.match(\"=\")) {\n          this.nextToken();\n          init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n        } else {\n          this.throwError(Messages.DeclarationMissingInitializer, \"const\");\n        }\n      }\n    } else if (!options.inFor && id.type !== \"Identifier\" /* Identifier */ || this.match(\"=\")) {\n      this.expect(\"=\");\n      init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n    }\n    return this.finalize(node, new VariableDeclarator(id, init));\n  }\n  parseBindingList(kind, options) {\n    const list = [this.parseLexicalBinding(kind, options)];\n    while (this.match(\",\")) {\n      this.nextToken();\n      list.push(this.parseLexicalBinding(kind, options));\n    }\n    return list;\n  }\n  isLexicalDeclaration() {\n    const state = this.scanner.saveState();\n    this.scanner.scanComments();\n    const next = this.scanner.lex();\n    this.scanner.restoreState(state);\n    return next.type === 3 /* Identifier */ || next.type === 7 /* Punctuator */ && next.value === \"[\" || next.type === 7 /* Punctuator */ && next.value === \"{\" || next.type === 4 /* Keyword */ && next.value === \"let\" || next.type === 4 /* Keyword */ && next.value === \"yield\";\n  }\n  parseLexicalDeclaration(options) {\n    const node = this.createNode();\n    const kind = this.nextToken().value;\n    assert(kind === \"let\" || kind === \"const\", \"Lexical declaration must be either let or const\");\n    const declarations = this.parseBindingList(kind, options);\n    this.consumeSemicolon();\n    return this.finalize(node, new VariableDeclaration(declarations, kind));\n  }\n  /**\n   * This function checks to see if a property is initialized in a Class\n   * e.g.\n   * publicProp = 123;\n   * @returns {Boolean}\n   */\n  isInitializedProperty() {\n    let state = this.scanner.saveState();\n    this.scanner.scanComments();\n    let next = this.scanner.lex();\n    this.scanner.restoreState(state);\n    return this.lookahead.type === 3 && next.value === \"=\";\n  }\n  /**\n   * This function checks to see if a property is declared in a Class\n   * e.g.\n   * publicProp;\n   * @returns {Boolean}\n   */\n  isDeclaredProperty() {\n    let state = this.scanner.saveState();\n    this.scanner.scanComments();\n    let next = this.scanner.lex();\n    this.scanner.restoreState(state);\n    return this.lookahead.type === 3 && next.value === \";\" || this.lookahead.type === 3 && next.lineNumber !== this.startMarker.line;\n  }\n  // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n  parseBindingRestElement(params, kind) {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.parsePattern(params, kind);\n    return this.finalize(node, new RestElement(arg));\n  }\n  parseArrayPattern(params, kind) {\n    const node = this.createNode();\n    this.expect(\"[\");\n    const elements = [];\n    while (!this.match(\"]\")) {\n      if (this.match(\",\")) {\n        this.nextToken();\n        elements.push(null);\n      } else {\n        if (this.match(\"...\")) {\n          elements.push(this.parseBindingRestElement(params, kind));\n          break;\n        } else {\n          elements.push(this.parsePatternWithDefault(params, kind));\n        }\n        if (!this.match(\"]\")) {\n          this.expect(\",\");\n        }\n      }\n    }\n    this.expect(\"]\");\n    return this.finalize(node, new ArrayPattern(elements));\n  }\n  parsePropertyPattern(params, kind) {\n    const node = this.createNode();\n    let computed = false;\n    let shorthand = false;\n    const method = false;\n    let key;\n    let value;\n    if (this.lookahead.type === 3 /* Identifier */) {\n      const keyToken = this.lookahead;\n      key = this.parseVariableIdentifier();\n      const init = this.finalize(node, new Identifier(keyToken.value));\n      if (this.match(\"=\")) {\n        params.push(keyToken);\n        shorthand = true;\n        this.nextToken();\n        const expr = this.parseAssignmentExpression();\n        value = this.finalize(this.startNode(keyToken), new AssignmentPattern(init, expr));\n      } else if (!this.match(\":\")) {\n        params.push(keyToken);\n        shorthand = true;\n        value = init;\n      } else {\n        this.expect(\":\");\n        value = this.parsePatternWithDefault(params, kind);\n      }\n    } else {\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey();\n      this.expect(\":\");\n      value = this.parsePatternWithDefault(params, kind);\n    }\n    return this.finalize(node, new Property(\"init\", key, computed, value, method, shorthand));\n  }\n  parseRestProperty(params) {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.parsePattern(params);\n    if (this.match(\"=\")) {\n      this.throwError(Messages.DefaultRestProperty);\n    }\n    if (!this.match(\"}\")) {\n      this.throwError(Messages.PropertyAfterRestProperty);\n    }\n    return this.finalize(node, new RestElement(arg));\n  }\n  parseObjectPattern(params, kind) {\n    const node = this.createNode();\n    const properties = [];\n    this.expect(\"{\");\n    while (!this.match(\"}\")) {\n      properties.push(this.match(\"...\") ? this.parseRestProperty(params) : this.parsePropertyPattern(params, kind));\n      if (!this.match(\"}\")) {\n        this.expect(\",\");\n      }\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new ObjectPattern(properties));\n  }\n  parsePattern(params, kind) {\n    let pattern;\n    if (this.match(\"[\")) {\n      pattern = this.parseArrayPattern(params, kind);\n    } else if (this.match(\"{\")) {\n      pattern = this.parseObjectPattern(params, kind);\n    } else {\n      if (this.matchKeyword(\"let\") && (kind === \"const\" || kind === \"let\")) {\n        this.tolerateUnexpectedToken(this.lookahead, Messages.LetInLexicalBinding);\n      }\n      params.push(this.lookahead);\n      pattern = this.parseVariableIdentifier(kind);\n    }\n    return pattern;\n  }\n  parsePatternWithDefault(params, kind) {\n    const startToken = this.lookahead;\n    let pattern = this.parsePattern(params, kind);\n    if (this.match(\"=\")) {\n      this.nextToken();\n      const previousAllowYield = this.context.allowYield;\n      this.context.allowYield = true;\n      const right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      this.context.allowYield = previousAllowYield;\n      pattern = this.finalize(this.startNode(startToken), new AssignmentPattern(pattern, right));\n    }\n    return pattern;\n  }\n  // https://tc39.github.io/ecma262/#sec-variable-statement\n  parseVariableIdentifier(kind) {\n    const node = this.createNode();\n    const token = this.nextToken();\n    if (token.type === 4 /* Keyword */ && token.value === \"yield\") {\n      if (this.context.strict) {\n        this.tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n      } else if (!this.context.allowYield) {\n        this.throwUnexpectedToken(token);\n      }\n    } else if (token.type !== 3 /* Identifier */) {\n      if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n        this.tolerateUnexpectedToken(token, Messages.StrictReservedWord);\n      } else {\n        if (this.context.strict || token.value !== \"let\" || kind !== \"var\") {\n          this.throwUnexpectedToken(token);\n        }\n      }\n    } else if ((this.context.isModule || this.context.isAsync) && token.type === 3 /* Identifier */ && token.value === \"await\") {\n      this.tolerateUnexpectedToken(token);\n    }\n    return this.finalize(node, new Identifier(token.value));\n  }\n  parseVariableDeclaration(options) {\n    const node = this.createNode();\n    const params = [];\n    const id = this.parsePattern(params, \"var\");\n    if (this.context.strict && id.type === \"Identifier\" /* Identifier */) {\n      if (this.scanner.isRestrictedWord(id.name)) {\n        this.tolerateError(Messages.StrictVarName);\n      }\n    }\n    let init = null;\n    if (this.match(\"=\")) {\n      this.nextToken();\n      init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n    } else if (id.type !== \"Identifier\" /* Identifier */ && !options.inFor) {\n      this.expect(\"=\");\n    }\n    return this.finalize(node, new VariableDeclarator(id, init));\n  }\n  parseVariableDeclarationList(options) {\n    const opt = { inFor: options.inFor };\n    const list = [];\n    list.push(this.parseVariableDeclaration(opt));\n    while (this.match(\",\")) {\n      this.nextToken();\n      list.push(this.parseVariableDeclaration(opt));\n    }\n    return list;\n  }\n  parseVariableStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"var\");\n    const declarations = this.parseVariableDeclarationList({ inFor: false });\n    this.consumeSemicolon();\n    return this.finalize(node, new VariableDeclaration(declarations, \"var\"));\n  }\n  // https://tc39.github.io/ecma262/#sec-empty-statement\n  parseEmptyStatement() {\n    const node = this.createNode();\n    this.expect(\";\");\n    return this.finalize(node, new EmptyStatement());\n  }\n  // https://tc39.github.io/ecma262/#sec-expression-statement\n  parseExpressionStatement() {\n    const node = this.createNode();\n    const expr = this.parseExpression();\n    this.consumeSemicolon();\n    return this.finalize(node, new ExpressionStatement(expr));\n  }\n  // https://tc39.github.io/ecma262/#sec-if-statement\n  parseIfClause() {\n    if (this.context.strict && this.matchKeyword(\"function\")) {\n      this.tolerateError(Messages.StrictFunction);\n    }\n    return this.parseStatement();\n  }\n  parseIfStatement() {\n    const node = this.createNode();\n    let consequent;\n    let alternate = null;\n    this.expectKeyword(\"if\");\n    this.expect(\"(\");\n    const test = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      consequent = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      consequent = this.parseIfClause();\n      if (this.matchKeyword(\"else\")) {\n        this.nextToken();\n        alternate = this.parseIfClause();\n      }\n    }\n    return this.finalize(node, new IfStatement(test, consequent, alternate));\n  }\n  // https://tc39.github.io/ecma262/#sec-do-while-statement\n  parseDoWhileStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"do\");\n    this.tolerateInvalidLoopStatement();\n    const previousInIteration = this.context.inIteration;\n    this.context.inIteration = true;\n    const body = this.parseStatement();\n    this.context.inIteration = previousInIteration;\n    this.expectKeyword(\"while\");\n    this.expect(\"(\");\n    const test = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n    } else {\n      this.expect(\")\");\n      if (this.match(\";\")) {\n        this.nextToken();\n      }\n    }\n    return this.finalize(node, new DoWhileStatement(body, test));\n  }\n  // https://tc39.github.io/ecma262/#sec-while-statement\n  parseWhileStatement() {\n    const node = this.createNode();\n    let body;\n    this.expectKeyword(\"while\");\n    this.expect(\"(\");\n    const test = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      body = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      const previousInIteration = this.context.inIteration;\n      this.context.inIteration = true;\n      body = this.parseStatement();\n      this.context.inIteration = previousInIteration;\n    }\n    return this.finalize(node, new WhileStatement(test, body));\n  }\n  // https://tc39.github.io/ecma262/#sec-for-statement\n  // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n  parseForStatement() {\n    let init = null;\n    let test = null;\n    let update = null;\n    let forIn = true;\n    let left, right;\n    let _await = false;\n    const node = this.createNode();\n    this.expectKeyword(\"for\");\n    if (this.matchContextualKeyword(\"await\")) {\n      if (!this.context.isAsync) {\n        this.tolerateUnexpectedToken(this.lookahead);\n      }\n      _await = true;\n      this.nextToken();\n    }\n    this.expect(\"(\");\n    if (this.match(\";\")) {\n      this.nextToken();\n    } else {\n      if (this.matchKeyword(\"var\")) {\n        init = this.createNode();\n        this.nextToken();\n        const previousAllowIn = this.context.allowIn;\n        this.context.allowIn = false;\n        const declarations = this.parseVariableDeclarationList({ inFor: true });\n        this.context.allowIn = previousAllowIn;\n        if (!_await && declarations.length === 1 && this.matchKeyword(\"in\")) {\n          const decl = declarations[0];\n          if (decl.init && (decl.id.type === \"ArrayPattern\" /* ArrayPattern */ || decl.id.type === \"ObjectPattern\" /* ObjectPattern */ || this.context.strict)) {\n            this.tolerateError(Messages.ForInOfLoopInitializer, \"for-in\");\n          }\n          init = this.finalize(init, new VariableDeclaration(declarations, \"var\"));\n          this.nextToken();\n          left = init;\n          right = this.parseExpression();\n          init = null;\n        } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword(\"of\")) {\n          init = this.finalize(init, new VariableDeclaration(declarations, \"var\"));\n          this.nextToken();\n          left = init;\n          right = this.parseAssignmentExpression();\n          init = null;\n          forIn = false;\n        } else {\n          init = this.finalize(init, new VariableDeclaration(declarations, \"var\"));\n          this.expect(\";\");\n        }\n      } else if (this.matchKeyword(\"const\") || this.matchKeyword(\"let\")) {\n        init = this.createNode();\n        const kind = this.nextToken().value;\n        if (!this.context.strict && this.lookahead.value === \"in\") {\n          init = this.finalize(init, new Identifier(kind));\n          this.nextToken();\n          left = init;\n          right = this.parseExpression();\n          init = null;\n        } else {\n          const previousAllowIn = this.context.allowIn;\n          this.context.allowIn = false;\n          const declarations = this.parseBindingList(kind, { inFor: true });\n          this.context.allowIn = previousAllowIn;\n          if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword(\"in\")) {\n            init = this.finalize(init, new VariableDeclaration(declarations, kind));\n            this.nextToken();\n            left = init;\n            right = this.parseExpression();\n            init = null;\n          } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword(\"of\")) {\n            init = this.finalize(init, new VariableDeclaration(declarations, kind));\n            this.nextToken();\n            left = init;\n            right = this.parseAssignmentExpression();\n            init = null;\n            forIn = false;\n          } else {\n            this.consumeSemicolon();\n            init = this.finalize(init, new VariableDeclaration(declarations, kind));\n          }\n        }\n      } else {\n        const initStartToken = this.lookahead;\n        const previousIsBindingElement = this.context.isBindingElement;\n        const previousIsAssignmentTarget = this.context.isAssignmentTarget;\n        const previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n        const previousAllowIn = this.context.allowIn;\n        this.context.allowIn = false;\n        init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n        this.context.allowIn = previousAllowIn;\n        if (this.matchKeyword(\"in\")) {\n          if (!this.context.isAssignmentTarget || init.type === \"AssignmentExpression\" /* AssignmentExpression */) {\n            this.tolerateError(Messages.InvalidLHSInForIn);\n          }\n          this.nextToken();\n          this.reinterpretExpressionAsPattern(init);\n          left = init;\n          right = this.parseExpression();\n          init = null;\n        } else if (this.matchContextualKeyword(\"of\")) {\n          if (!this.context.isAssignmentTarget || init.type === \"AssignmentExpression\" /* AssignmentExpression */) {\n            this.tolerateError(Messages.InvalidLHSInForLoop);\n          }\n          this.nextToken();\n          this.reinterpretExpressionAsPattern(init);\n          left = init;\n          right = this.parseAssignmentExpression();\n          init = null;\n          forIn = false;\n        } else {\n          this.context.isBindingElement = previousIsBindingElement;\n          this.context.isAssignmentTarget = previousIsAssignmentTarget;\n          this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n          if (this.match(\",\")) {\n            const initSeq = [init];\n            while (this.match(\",\")) {\n              this.nextToken();\n              initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n            }\n            init = this.finalize(this.startNode(initStartToken), new SequenceExpression(initSeq));\n          }\n          this.expect(\";\");\n        }\n      }\n    }\n    if (typeof left === \"undefined\") {\n      if (!this.match(\";\")) {\n        test = this.isolateCoverGrammar(this.parseExpression);\n      }\n      this.expect(\";\");\n      if (!this.match(\")\")) {\n        update = this.isolateCoverGrammar(this.parseExpression);\n      }\n    }\n    let body;\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      body = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      this.tolerateInvalidLoopStatement();\n      const previousInIteration = this.context.inIteration;\n      this.context.inIteration = true;\n      body = this.isolateCoverGrammar(this.parseStatement);\n      this.context.inIteration = previousInIteration;\n    }\n    return typeof left === \"undefined\" ? this.finalize(node, new ForStatement(init, test, update, body)) : forIn ? this.finalize(node, new ForInStatement(left, right, body)) : this.finalize(node, new ForOfStatement(left, right, body, _await));\n  }\n  // https://tc39.github.io/ecma262/#sec-continue-statement\n  parseContinueStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"continue\");\n    let label = null;\n    if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n      const id = this.parseVariableIdentifier();\n      label = id;\n      const key = \"$\" + id.name;\n      if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n        this.throwError(Messages.UnknownLabel, id.name);\n      }\n    }\n    this.consumeSemicolon();\n    if (label === null && !this.context.inIteration) {\n      this.throwError(Messages.IllegalContinue);\n    }\n    return this.finalize(node, new ContinueStatement(label));\n  }\n  // https://tc39.github.io/ecma262/#sec-break-statement\n  parseBreakStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"break\");\n    let label = null;\n    if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n      const id = this.parseVariableIdentifier();\n      const key = \"$\" + id.name;\n      if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n        this.throwError(Messages.UnknownLabel, id.name);\n      }\n      label = id;\n    }\n    this.consumeSemicolon();\n    if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n      this.throwError(Messages.IllegalBreak);\n    }\n    return this.finalize(node, new BreakStatement(label));\n  }\n  // https://tc39.github.io/ecma262/#sec-return-statement\n  parseReturnStatement() {\n    if (!this.context.inFunctionBody) {\n      this.tolerateError(Messages.IllegalReturn);\n    }\n    const node = this.createNode();\n    this.expectKeyword(\"return\");\n    const hasArgument = !this.match(\";\") && !this.match(\"}\") && !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */ || this.lookahead.type === 8 /* StringLiteral */ || this.lookahead.type === 10 /* Template */;\n    const argument = hasArgument ? this.parseExpression() : null;\n    this.consumeSemicolon();\n    return this.finalize(node, new ReturnStatement(argument));\n  }\n  // https://tc39.github.io/ecma262/#sec-with-statement\n  parseWithStatement() {\n    if (this.context.strict) {\n      this.tolerateError(Messages.StrictModeWith);\n    }\n    const node = this.createNode();\n    let body;\n    this.expectKeyword(\"with\");\n    this.expect(\"(\");\n    const object = this.parseExpression();\n    if (!this.match(\")\") && this.config.tolerant) {\n      this.tolerateUnexpectedToken(this.nextToken());\n      body = this.finalize(this.createNode(), new EmptyStatement());\n    } else {\n      this.expect(\")\");\n      body = this.parseStatement();\n    }\n    return this.finalize(node, new WithStatement(object, body));\n  }\n  // https://tc39.github.io/ecma262/#sec-switch-statement\n  parseSwitchCase() {\n    const node = this.createNode();\n    let test;\n    if (this.matchKeyword(\"default\")) {\n      this.nextToken();\n      test = null;\n    } else {\n      this.expectKeyword(\"case\");\n      test = this.parseExpression();\n    }\n    this.expect(\":\");\n    const consequent = [];\n    while (true) {\n      if (this.match(\"}\") || this.matchKeyword(\"default\") || this.matchKeyword(\"case\")) {\n        break;\n      }\n      consequent.push(this.parseStatementListItem());\n    }\n    return this.finalize(node, new SwitchCase(test, consequent));\n  }\n  parseSwitchStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"switch\");\n    this.expect(\"(\");\n    const discriminant = this.parseExpression();\n    this.expect(\")\");\n    const previousInSwitch = this.context.inSwitch;\n    this.context.inSwitch = true;\n    const cases = [];\n    let defaultFound = false;\n    this.expect(\"{\");\n    while (true) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      const clause = this.parseSwitchCase();\n      if (clause.test === null) {\n        if (defaultFound) {\n          this.throwError(Messages.MultipleDefaultsInSwitch);\n        }\n        defaultFound = true;\n      }\n      cases.push(clause);\n    }\n    this.expect(\"}\");\n    this.context.inSwitch = previousInSwitch;\n    return this.finalize(node, new SwitchStatement(discriminant, cases));\n  }\n  // https://tc39.github.io/ecma262/#sec-labelled-statements\n  parseLabelledStatement() {\n    const node = this.createNode();\n    const expr = this.parseExpression();\n    let statement;\n    if (expr.type === \"Identifier\" /* Identifier */ && this.match(\":\")) {\n      this.nextToken();\n      const id = expr;\n      const key = \"$\" + id.name;\n      if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n        this.throwError(Messages.Redeclaration, \"Label\", id.name);\n      }\n      this.context.labelSet[key] = true;\n      let body;\n      if (this.matchKeyword(\"class\")) {\n        this.tolerateUnexpectedToken(this.lookahead);\n        body = this.parseClassDeclaration();\n      } else if (this.matchKeyword(\"function\")) {\n        const token = this.lookahead;\n        const declaration = this.parseFunctionDeclaration();\n        if (this.context.strict) {\n          this.tolerateUnexpectedToken(token, Messages.StrictFunction);\n        } else if (declaration.generator) {\n          this.tolerateUnexpectedToken(token, Messages.GeneratorInLegacyContext);\n        }\n        body = declaration;\n      } else {\n        body = this.parseStatement();\n      }\n      delete this.context.labelSet[key];\n      statement = new LabeledStatement(id, body);\n    } else {\n      this.consumeSemicolon();\n      statement = new ExpressionStatement(expr);\n    }\n    return this.finalize(node, statement);\n  }\n  // https://tc39.github.io/ecma262/#sec-throw-statement\n  parseThrowStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"throw\");\n    if (this.hasLineTerminator) {\n      this.throwError(Messages.NewlineAfterThrow);\n    }\n    const argument = this.parseExpression();\n    this.consumeSemicolon();\n    return this.finalize(node, new ThrowStatement(argument));\n  }\n  // https://tc39.github.io/ecma262/#sec-try-statement\n  parseCatchClause() {\n    const node = this.createNode();\n    this.expectKeyword(\"catch\");\n    let param = null;\n    if (this.match(\"(\")) {\n      this.expect(\"(\");\n      if (this.match(\")\")) {\n        this.throwUnexpectedToken(this.lookahead);\n      }\n      const params = [];\n      param = this.parsePattern(params);\n      const paramMap = {};\n      for (let i = 0; i < params.length; i++) {\n        const key = \"$\" + params[i].value;\n        if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n          this.tolerateError(Messages.DuplicateBinding, params[i].value);\n        }\n        paramMap[key] = true;\n      }\n      if (this.context.strict && param.type === \"Identifier\" /* Identifier */) {\n        if (this.scanner.isRestrictedWord(param.name)) {\n          this.tolerateError(Messages.StrictCatchVariable);\n        }\n      }\n      this.expect(\")\");\n    }\n    const body = this.parseBlock();\n    return this.finalize(node, new CatchClause(param, body));\n  }\n  parseFinallyClause() {\n    this.expectKeyword(\"finally\");\n    return this.parseBlock();\n  }\n  parseTryStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"try\");\n    const block = this.parseBlock();\n    const handler = this.matchKeyword(\"catch\") ? this.parseCatchClause() : null;\n    const finalizer = this.matchKeyword(\"finally\") ? this.parseFinallyClause() : null;\n    if (!handler && !finalizer) {\n      this.throwError(Messages.NoCatchOrFinally);\n    }\n    return this.finalize(node, new TryStatement(block, handler, finalizer));\n  }\n  // https://tc39.github.io/ecma262/#sec-debugger-statement\n  parseDebuggerStatement() {\n    const node = this.createNode();\n    this.expectKeyword(\"debugger\");\n    this.consumeSemicolon();\n    return this.finalize(node, new DebuggerStatement());\n  }\n  // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n  parseStatement() {\n    let statement;\n    switch (this.lookahead.type) {\n      case 1 /* BooleanLiteral */:\n      case 5 /* NullLiteral */:\n      case 6 /* NumericLiteral */:\n      case 8 /* StringLiteral */:\n      case 10 /* Template */:\n      case 9 /* RegularExpression */:\n        statement = this.parseExpressionStatement();\n        break;\n      case 7 /* Punctuator */:\n        const value = this.lookahead.value;\n        if (value === \"{\") {\n          statement = this.parseBlock();\n        } else if (value === \"(\") {\n          statement = this.parseExpressionStatement();\n        } else if (value === \";\") {\n          statement = this.parseEmptyStatement();\n        } else {\n          statement = this.parseExpressionStatement();\n        }\n        break;\n      case 3 /* Identifier */:\n        statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n        break;\n      case 4 /* Keyword */:\n        switch (this.lookahead.value) {\n          case \"break\":\n            statement = this.parseBreakStatement();\n            break;\n          case \"continue\":\n            statement = this.parseContinueStatement();\n            break;\n          case \"debugger\":\n            statement = this.parseDebuggerStatement();\n            break;\n          case \"do\":\n            statement = this.parseDoWhileStatement();\n            break;\n          case \"for\":\n            statement = this.parseForStatement();\n            break;\n          case \"function\":\n            statement = this.parseFunctionDeclaration();\n            break;\n          case \"if\":\n            statement = this.parseIfStatement();\n            break;\n          case \"return\":\n            statement = this.parseReturnStatement();\n            break;\n          case \"switch\":\n            statement = this.parseSwitchStatement();\n            break;\n          case \"throw\":\n            statement = this.parseThrowStatement();\n            break;\n          case \"try\":\n            statement = this.parseTryStatement();\n            break;\n          case \"var\":\n            statement = this.parseVariableStatement();\n            break;\n          case \"while\":\n            statement = this.parseWhileStatement();\n            break;\n          case \"with\":\n            statement = this.parseWithStatement();\n            break;\n          default:\n            statement = this.parseExpressionStatement();\n            break;\n        }\n        break;\n      default:\n        statement = this.throwUnexpectedToken(this.lookahead);\n    }\n    return statement;\n  }\n  // https://tc39.github.io/ecma262/#sec-function-definitions\n  parseFunctionSourceElements() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const body = this.parseDirectivePrologues();\n    const previousLabelSet = this.context.labelSet;\n    const previousInIteration = this.context.inIteration;\n    const previousInSwitch = this.context.inSwitch;\n    const previousInFunctionBody = this.context.inFunctionBody;\n    this.context.labelSet = {};\n    this.context.inIteration = false;\n    this.context.inSwitch = false;\n    this.context.inFunctionBody = true;\n    while (this.lookahead.type !== 2 /* EOF */) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      body.push(this.parseStatementListItem());\n    }\n    this.expect(\"}\");\n    this.context.labelSet = previousLabelSet;\n    this.context.inIteration = previousInIteration;\n    this.context.inSwitch = previousInSwitch;\n    this.context.inFunctionBody = previousInFunctionBody;\n    return this.finalize(node, new BlockStatement(body));\n  }\n  validateParam(options, param, name) {\n    const key = \"$\" + name;\n    if (this.context.strict) {\n      if (this.scanner.isRestrictedWord(name)) {\n        options.stricted = param;\n        options.message = Messages.StrictParamName;\n      }\n      if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n        options.stricted = param;\n        options.hasDuplicateParameterNames = true;\n      }\n    } else if (!options.firstRestricted) {\n      if (this.scanner.isRestrictedWord(name)) {\n        options.firstRestricted = param;\n        options.message = Messages.StrictParamName;\n      } else if (this.scanner.isStrictModeReservedWord(name)) {\n        options.firstRestricted = param;\n        options.message = Messages.StrictReservedWord;\n      } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n        options.stricted = param;\n        options.hasDuplicateParameterNames = true;\n      }\n    }\n    if (typeof Object.defineProperty === \"function\") {\n      Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n    } else {\n      options.paramSet[key] = true;\n    }\n  }\n  parseRestElement(params) {\n    const node = this.createNode();\n    this.expect(\"...\");\n    const arg = this.parsePattern(params);\n    if (this.match(\"=\")) {\n      this.throwError(Messages.DefaultRestParameter);\n    }\n    if (!this.match(\")\")) {\n      this.throwError(Messages.ParameterAfterRestParameter);\n    }\n    return this.finalize(node, new RestElement(arg));\n  }\n  parseFormalParameter(options) {\n    const params = [];\n    const param = this.match(\"...\") ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n    for (let i = 0; i < params.length; i++) {\n      this.validateParam(options, params[i], params[i].value);\n    }\n    options.simple = options.simple && param instanceof Identifier;\n    options.params.push(param);\n  }\n  parseFormalParameters(firstRestricted) {\n    const options = {\n      simple: true,\n      hasDuplicateParameterNames: false,\n      params: [],\n      firstRestricted\n    };\n    this.expect(\"(\");\n    if (!this.match(\")\")) {\n      options.paramSet = {};\n      while (this.lookahead.type !== 2 /* EOF */) {\n        this.parseFormalParameter(options);\n        if (this.match(\")\")) {\n          break;\n        }\n        this.expect(\",\");\n        if (this.match(\")\")) {\n          break;\n        }\n      }\n    }\n    this.expect(\")\");\n    if (options.hasDuplicateParameterNames) {\n      if (this.context.strict || this.context.isAsync || !options.simple) {\n        this.throwError(Messages.DuplicateParameter);\n      }\n    }\n    return {\n      simple: options.simple,\n      params: options.params,\n      stricted: options.stricted,\n      firstRestricted: options.firstRestricted,\n      message: options.message\n    };\n  }\n  matchAsyncFunction() {\n    let match = this.matchContextualKeyword(\"async\");\n    if (match) {\n      const state = this.scanner.saveState();\n      this.scanner.scanComments();\n      const next = this.scanner.lex();\n      this.scanner.restoreState(state);\n      match = state.lineNumber === next.lineNumber && next.type === 4 /* Keyword */ && next.value === \"function\";\n    }\n    return match;\n  }\n  parseFunctionDeclaration(identifierIsOptional) {\n    const node = this.createNode();\n    const isAsync = this.matchContextualKeyword(\"async\");\n    if (isAsync) {\n      if (this.context.inIteration) {\n        this.tolerateError(Messages.AsyncFunctionInSingleStatementContext);\n      }\n      this.nextToken();\n    }\n    this.expectKeyword(\"function\");\n    const isGenerator = this.match(\"*\");\n    if (isGenerator) {\n      this.nextToken();\n    }\n    let message;\n    let id = null;\n    let firstRestricted = null;\n    if (!identifierIsOptional || !this.match(\"(\")) {\n      const token = this.lookahead;\n      id = this.parseVariableIdentifier();\n      if (this.context.strict) {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          this.tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n        }\n      } else {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictFunctionName;\n        } else if (this.scanner.isStrictModeReservedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictReservedWord;\n        }\n      }\n    }\n    const previousIsAsync = this.context.isAsync;\n    const previousAllowYield = this.context.allowYield;\n    this.context.isAsync = isAsync;\n    this.context.allowYield = !isGenerator;\n    const formalParameters = this.parseFormalParameters(firstRestricted);\n    const params = formalParameters.params;\n    const stricted = formalParameters.stricted;\n    firstRestricted = formalParameters.firstRestricted;\n    if (formalParameters.message) {\n      message = formalParameters.message;\n    }\n    const previousStrict = this.context.strict;\n    const previousAllowStrictDirective = this.context.allowStrictDirective;\n    this.context.allowStrictDirective = formalParameters.simple;\n    const body = this.parseFunctionSourceElements();\n    if (this.context.strict && firstRestricted) {\n      this.throwUnexpectedToken(firstRestricted, message);\n    }\n    if (this.context.strict && stricted) {\n      this.tolerateUnexpectedToken(stricted, message);\n    }\n    this.context.strict = previousStrict;\n    this.context.allowStrictDirective = previousAllowStrictDirective;\n    this.context.isAsync = previousIsAsync;\n    this.context.allowYield = previousAllowYield;\n    return isAsync ? this.finalize(node, new AsyncFunctionDeclaration(id, params, body, isGenerator)) : this.finalize(node, new FunctionDeclaration(id, params, body, isGenerator));\n  }\n  parseFunctionExpression() {\n    const node = this.createNode();\n    const isAsync = this.matchContextualKeyword(\"async\");\n    if (isAsync) {\n      this.nextToken();\n    }\n    this.expectKeyword(\"function\");\n    const isGenerator = this.match(\"*\");\n    if (isGenerator) {\n      this.nextToken();\n    }\n    let message;\n    let id = null;\n    let firstRestricted;\n    const previousIsAsync = this.context.isAsync;\n    const previousAllowYield = this.context.allowYield;\n    this.context.isAsync = isAsync;\n    this.context.allowYield = !isGenerator;\n    if (!this.match(\"(\")) {\n      const token = this.lookahead;\n      id = !this.context.strict && !isGenerator && this.matchKeyword(\"yield\") ? this.parseIdentifierName() : this.parseVariableIdentifier();\n      if (this.context.strict) {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          this.tolerateUnexpectedToken(token, Messages.StrictFunctionName);\n        }\n      } else {\n        if (this.scanner.isRestrictedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictFunctionName;\n        } else if (this.scanner.isStrictModeReservedWord(token.value)) {\n          firstRestricted = token;\n          message = Messages.StrictReservedWord;\n        }\n      }\n    }\n    const formalParameters = this.parseFormalParameters(firstRestricted);\n    const params = formalParameters.params;\n    const stricted = formalParameters.stricted;\n    firstRestricted = formalParameters.firstRestricted;\n    if (formalParameters.message) {\n      message = formalParameters.message;\n    }\n    const previousStrict = this.context.strict;\n    const previousAllowStrictDirective = this.context.allowStrictDirective;\n    this.context.allowStrictDirective = formalParameters.simple;\n    const body = this.parseFunctionSourceElements();\n    if (this.context.strict && firstRestricted) {\n      this.throwUnexpectedToken(firstRestricted, message);\n    }\n    if (this.context.strict && stricted) {\n      this.tolerateUnexpectedToken(stricted, message);\n    }\n    this.context.strict = previousStrict;\n    this.context.allowStrictDirective = previousAllowStrictDirective;\n    this.context.isAsync = previousIsAsync;\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(id, params, body, isGenerator, isAsync));\n  }\n  // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n  parseDirective() {\n    const token = this.lookahead;\n    const node = this.createNode();\n    const expr = this.parseExpression();\n    const directive = expr.type === \"Literal\" /* Literal */ ? this.getTokenRaw(token).slice(1, -1) : null;\n    this.consumeSemicolon();\n    return this.finalize(node, directive ? new Directive(expr, directive) : new ExpressionStatement(expr));\n  }\n  parseDirectivePrologues() {\n    let firstRestricted = null;\n    const body = [];\n    while (true) {\n      const token = this.lookahead;\n      if (token.type !== 8 /* StringLiteral */) {\n        break;\n      }\n      const statement = this.parseDirective();\n      body.push(statement);\n      const directive = statement.directive;\n      if (typeof directive !== \"string\") {\n        break;\n      }\n      if (directive === \"use strict\") {\n        this.context.strict = true;\n        if (firstRestricted) {\n          this.tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral);\n        }\n        if (!this.context.allowStrictDirective) {\n          this.tolerateUnexpectedToken(token, Messages.IllegalLanguageModeDirective);\n        }\n      } else {\n        if (!firstRestricted && token.octal) {\n          firstRestricted = token;\n        }\n      }\n    }\n    return body;\n  }\n  // https://tc39.github.io/ecma262/#sec-method-definitions\n  qualifiedPropertyName(token) {\n    switch (token.type) {\n      case 3 /* Identifier */:\n      case 8 /* StringLiteral */:\n      case 1 /* BooleanLiteral */:\n      case 5 /* NullLiteral */:\n      case 6 /* NumericLiteral */:\n      case 4 /* Keyword */:\n        return true;\n      case 7 /* Punctuator */:\n        return token.value === \"[\" || token.value === \"#\";\n      default:\n        break;\n    }\n    return false;\n  }\n  parseGetterMethod() {\n    const node = this.createNode();\n    const isGenerator = false;\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = !isGenerator;\n    const formalParameters = this.parseFormalParameters();\n    if (formalParameters.params.length > 0) {\n      this.tolerateError(Messages.BadGetterArity);\n    }\n    const method = this.parsePropertyMethod(formalParameters);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, formalParameters.params, method, isGenerator, false));\n  }\n  parseSetterMethod() {\n    const node = this.createNode();\n    const isGenerator = false;\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = !isGenerator;\n    const formalParameters = this.parseFormalParameters();\n    if (formalParameters.params.length !== 1) {\n      this.tolerateError(Messages.BadSetterArity);\n    } else if (formalParameters.params[0] instanceof RestElement) {\n      this.tolerateError(Messages.BadSetterRestParameter);\n    }\n    const method = this.parsePropertyMethod(formalParameters);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, formalParameters.params, method, isGenerator, false));\n  }\n  parseGeneratorMethod(isAsync) {\n    const node = this.createNode();\n    const isGenerator = true;\n    const previousAllowYield = this.context.allowYield;\n    this.context.allowYield = true;\n    const params = this.parseFormalParameters();\n    this.context.allowYield = false;\n    const method = this.parsePropertyMethod(params);\n    this.context.allowYield = previousAllowYield;\n    return this.finalize(node, new FunctionExpression(null, params.params, method, isGenerator, isAsync));\n  }\n  // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n  isStartOfExpression() {\n    let start = true;\n    const value = this.lookahead.value;\n    switch (this.lookahead.type) {\n      case 7 /* Punctuator */:\n        start = value === \"[\" || value === \"(\" || value === \"{\" || value === \"+\" || value === \"-\" || value === \"!\" || value === \"~\" || value === \"++\" || value === \"--\" || value === \"/\" || value === \"/=\";\n        break;\n      case 4 /* Keyword */:\n        start = value === \"class\" || value === \"delete\" || value === \"function\" || value === \"let\" || value === \"new\" || value === \"super\" || value === \"this\" || value === \"typeof\" || value === \"void\" || value === \"yield\";\n        break;\n      default:\n        break;\n    }\n    return start;\n  }\n  parseYieldExpression() {\n    const node = this.createNode();\n    this.expectKeyword(\"yield\");\n    let argument = null;\n    let delegate = false;\n    if (!this.hasLineTerminator) {\n      const previousAllowYield = this.context.allowYield;\n      this.context.allowYield = false;\n      delegate = this.match(\"*\");\n      if (delegate) {\n        this.nextToken();\n        argument = this.parseAssignmentExpression();\n      } else if (this.isStartOfExpression()) {\n        argument = this.parseAssignmentExpression();\n      }\n      this.context.allowYield = previousAllowYield;\n    }\n    return this.finalize(node, new YieldExpression(argument, delegate));\n  }\n  // https://tc39.github.io/ecma262/#sec-class-definitions\n  parseStaticBlock() {\n    const node = this.createNode();\n    this.expect(\"{\");\n    const block = [];\n    while (true) {\n      if (this.match(\"}\")) {\n        break;\n      }\n      block.push(this.parseStatementListItem());\n    }\n    this.expect(\"}\");\n    return this.finalize(node, new StaticBlock(block));\n  }\n  parseDecorator() {\n    const node = this.createNode();\n    this.expect(\"@\");\n    const previousStrict = this.context.strict;\n    const previousAllowYield = this.context.allowYield;\n    const previousIsAsync = this.context.isAsync;\n    this.context.strict = false;\n    this.context.allowYield = true;\n    this.context.isAsync = false;\n    const expression = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n    this.context.strict = previousStrict;\n    this.context.allowYield = previousAllowYield;\n    this.context.isAsync = previousIsAsync;\n    if (this.match(\";\")) {\n      this.throwError(Messages.NoSemicolonAfterDecorator);\n    }\n    return this.finalize(node, new Decorator(expression));\n  }\n  parseDecorators() {\n    let decorators = null;\n    while (this.match(\"@\")) {\n      if (decorators == null)\n        decorators = [];\n      decorators.push(this.parseDecorator());\n    }\n    return decorators;\n  }\n  parseClassElement(hasConstructor) {\n    let token = this.lookahead;\n    const node = this.createNode();\n    const previousInConstructor = this.context.inConstructor;\n    let kind = \"\";\n    let key = null;\n    let value = null;\n    let computed = false;\n    let method = false;\n    let isStatic = false;\n    let isAsync = false;\n    let isGenerator = false;\n    let isPrivate = false;\n    const decorators = this.parseDecorators();\n    if (decorators) {\n      token = this.lookahead;\n    }\n    if (this.match(\"*\")) {\n      this.nextToken();\n    } else {\n      computed = this.match(\"[\");\n      if (this.match(\"#\")) {\n        isPrivate = true;\n        this.nextToken();\n        token = this.lookahead;\n      }\n      key = this.parseObjectPropertyKey(isPrivate);\n      const id = key;\n      this.context.inConstructor = token.type === 3 /* Identifier */ && token.value === \"constructor\";\n      if (id.name === \"static\" && (this.qualifiedPropertyName(this.lookahead) || this.match(\"*\"))) {\n        token = this.lookahead;\n        isStatic = true;\n        computed = this.match(\"[\");\n        if (this.match(\"*\")) {\n          this.nextToken();\n          if (this.match(\"#\")) {\n            isPrivate = true;\n            this.nextToken();\n            token = this.lookahead;\n          }\n        } else {\n          if (this.match(\"#\")) {\n            isPrivate = true;\n            this.nextToken();\n            token = this.lookahead;\n          }\n          key = this.parseObjectPropertyKey(isPrivate);\n        }\n      }\n      if (id.name === \"static\" && this.match(\"{\")) {\n        return this.parseStaticBlock();\n      }\n      if (token.type === 3 /* Identifier */ && !this.hasLineTerminator && token.value === \"async\") {\n        const punctuator = this.lookahead.value;\n        if (punctuator !== \":\" && punctuator !== \"(\") {\n          isAsync = true;\n          isGenerator = this.match(\"*\");\n          if (isGenerator) {\n            this.nextToken();\n          }\n          token = this.lookahead;\n          computed = this.match(\"[\");\n          if (this.match(\"*\")) {\n            this.nextToken();\n            if (this.match(\"#\")) {\n              isPrivate = true;\n              this.nextToken();\n            }\n          } else {\n            if (this.match(\"#\")) {\n              isPrivate = true;\n              this.nextToken();\n              token = this.lookahead;\n            }\n            key = this.parseObjectPropertyKey(isPrivate);\n          }\n          if (token.type === 3 /* Identifier */ && token.value === \"constructor\" && !isStatic) {\n            this.tolerateUnexpectedToken(token, Messages.ConstructorIsAsync);\n          }\n        }\n      }\n    }\n    if (token.type === 3 /* Identifier */ && token.value === \"constructor\" && isPrivate) {\n      this.tolerateUnexpectedToken(token, Messages.ConstructorIsPrivate);\n    }\n    const lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n    if (token.type === 3 /* Identifier */ || token.type === 8 /* StringLiteral */) {\n      if (token.value === \"get\" && lookaheadPropertyKey) {\n        kind = \"get\";\n        if (this.match(\"#\")) {\n          isPrivate = true;\n          this.nextToken();\n          token = this.lookahead;\n        }\n        computed = this.match(\"[\");\n        key = this.parseObjectPropertyKey(isPrivate);\n        this.context.allowYield = false;\n        value = this.parseGetterMethod();\n      } else if (token.value === \"set\" && lookaheadPropertyKey) {\n        kind = \"set\";\n        if (this.match(\"#\")) {\n          isPrivate = true;\n          this.nextToken();\n          token = this.lookahead;\n        }\n        computed = this.match(\"[\");\n        key = this.parseObjectPropertyKey(isPrivate);\n        value = this.parseSetterMethod();\n      } else if (!this.match(\"(\")) {\n        kind = \"property\";\n        computed = false;\n        if (this.match(\"=\")) {\n          this.nextToken();\n          value = this.isolateCoverGrammar(this.parseAssignmentExpression);\n        }\n      }\n    } else if (token.type === 7 /* Punctuator */ && token.value === \"*\" && lookaheadPropertyKey) {\n      kind = \"init\";\n      computed = this.match(\"[\");\n      key = this.parseObjectPropertyKey(isPrivate);\n      value = this.parseGeneratorMethod(isAsync);\n      method = true;\n    } else if (token.type === 7 /* Punctuator */ && token.value === \"[\" && !this.match(\"(\")) {\n      kind = \"property\";\n      computed = true;\n      if (this.match(\"=\")) {\n        this.nextToken();\n        value = this.isolateCoverGrammar(this.parseAssignmentExpression);\n      }\n    }\n    if (!kind && key && this.match(\"(\")) {\n      const previousInClassConstructor = this.context.inClassConstructor;\n      this.context.inClassConstructor = token.value === \"constructor\";\n      kind = \"init\";\n      value = isAsync ? this.parsePropertyMethodAsyncFunction(isGenerator) : this.parsePropertyMethodFunction(isGenerator);\n      this.context.inClassConstructor = previousInClassConstructor;\n      method = true;\n    }\n    if (!kind) {\n      this.throwUnexpectedToken(this.lookahead);\n    }\n    if (kind === \"init\") {\n      kind = \"method\";\n    }\n    if (!computed) {\n      if (isStatic && this.isPropertyKey(key, \"prototype\")) {\n        this.throwUnexpectedToken(token, Messages.StaticPrototype);\n      }\n      if (!isStatic && this.isPropertyKey(key, \"constructor\")) {\n        if (kind !== \"method\" || !method || value && value.generator) {\n          this.throwUnexpectedToken(token, Messages.ConstructorSpecialMethod);\n        }\n        if (hasConstructor.value) {\n          this.throwUnexpectedToken(token, Messages.DuplicateConstructor);\n        } else {\n          hasConstructor.value = true;\n        }\n        kind = \"constructor\";\n      }\n    }\n    this.context.inConstructor = previousInConstructor;\n    if (kind === \"property\") {\n      this.consumeSemicolon();\n      return this.finalize(node, new PropertyDefinition(key, computed, value, isStatic, decorators));\n    } else\n      return this.finalize(node, new MethodDefinition(key, computed, value, kind, isStatic, decorators));\n  }\n  parseClassElementList() {\n    const body = [];\n    const hasConstructor = { value: false };\n    this.expect(\"{\");\n    while (!this.match(\"}\")) {\n      if (this.match(\";\")) {\n        this.nextToken();\n      } else {\n        body.push(this.parseClassElement(hasConstructor));\n      }\n    }\n    this.expect(\"}\");\n    return body;\n  }\n  parseClassBody() {\n    const node = this.createNode();\n    const elementList = this.parseClassElementList();\n    return this.finalize(node, new ClassBody(elementList));\n  }\n  parseClassDeclaration(identifierIsOptional) {\n    const node = this.createNode();\n    const previousStrict = this.context.strict;\n    const previousAllowSuper = this.context.allowSuper;\n    this.context.strict = true;\n    this.expectKeyword(\"class\");\n    const id = identifierIsOptional && this.lookahead.type !== 3 /* Identifier */ ? null : this.parseVariableIdentifier();\n    let superClass = null;\n    if (this.matchKeyword(\"extends\")) {\n      this.nextToken();\n      superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n      this.context.allowSuper = true;\n    }\n    const classBody = this.parseClassBody();\n    this.context.allowSuper = previousAllowSuper;\n    this.context.strict = previousStrict;\n    return this.finalize(node, new ClassDeclaration(id, superClass, classBody, this.context.decorators));\n  }\n  parseClassExpression() {\n    const node = this.createNode();\n    const previousStrict = this.context.strict;\n    this.context.strict = true;\n    this.expectKeyword(\"class\");\n    const id = this.lookahead.type === 3 /* Identifier */ ? this.parseVariableIdentifier() : null;\n    let superClass = null;\n    if (this.matchKeyword(\"extends\")) {\n      this.nextToken();\n      superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n      this.context.allowSuper = true;\n    }\n    const classBody = this.parseClassBody();\n    this.context.strict = previousStrict;\n    return this.finalize(node, new ClassExpression(id, superClass, classBody, this.context.decorators));\n  }\n  // https://tc39.github.io/ecma262/#sec-scripts\n  // https://tc39.github.io/ecma262/#sec-modules\n  parseModule() {\n    this.context.strict = true;\n    this.context.isModule = true;\n    this.scanner.isModule = true;\n    const node = this.createNode();\n    const body = this.parseDirectivePrologues();\n    while (this.lookahead.type !== 2 /* EOF */) {\n      body.push(this.parseStatementListItem());\n    }\n    return this.finalize(node, new Module(body));\n  }\n  parseScript() {\n    const node = this.createNode();\n    const body = this.parseDirectivePrologues();\n    while (this.lookahead.type !== 2 /* EOF */) {\n      body.push(this.parseStatementListItem());\n    }\n    return this.finalize(node, new Script(body));\n  }\n  // https://tc39.github.io/ecma262/#sec-imports\n  parseImportAttributes() {\n    if (this.lookahead.value === \"assert\") {\n      this.nextToken();\n      this.expect(\"{\");\n      const attributes = [];\n      while (!this.match(\"}\")) {\n        attributes.push(this.parseImportAttribute());\n        if (!this.match(\"}\")) {\n          this.expectCommaSeparator();\n        }\n      }\n      this.expect(\"}\");\n      return attributes;\n    }\n    return null;\n  }\n  parseImportAttribute() {\n    const node = this.createNode();\n    if (this.lookahead.type !== 3 /* Identifier */) {\n      this.throwUnexpectedToken(this.nextToken());\n    }\n    const key = this.parseIdentifierName();\n    if (!this.match(\":\")) {\n      this.throwUnexpectedToken(this.nextToken());\n    }\n    this.nextToken();\n    const literalToken = this.nextToken();\n    const raw = this.getTokenRaw(literalToken);\n    const value = this.finalize(node, new Literal(literalToken.value, raw));\n    return this.finalize(node, new ImportAttribute(key, value));\n  }\n  parseModuleSpecifier() {\n    const node = this.createNode();\n    if (this.lookahead.type !== 8 /* StringLiteral */) {\n      this.throwError(Messages.InvalidModuleSpecifier);\n    }\n    const token = this.nextToken();\n    const raw = this.getTokenRaw(token);\n    if (!Character.isStringWellFormedUnicode(token.value)) {\n      this.throwError(Messages.InvalidModuleSpecifier);\n    }\n    return this.finalize(node, new Literal(token.value, raw));\n  }\n  // import {<foo as bar>} ...;\n  parseImportSpecifier() {\n    const node = this.createNode();\n    let imported;\n    let local;\n    if (this.lookahead.type === 3 /* Identifier */) {\n      imported = this.parseVariableIdentifier();\n      local = imported;\n      if (this.matchContextualKeyword(\"as\")) {\n        this.nextToken();\n        local = this.parseVariableIdentifier();\n      }\n    } else {\n      imported = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n      local = imported;\n      if (this.matchContextualKeyword(\"as\")) {\n        this.nextToken();\n        local = this.parseVariableIdentifier();\n      } else {\n        this.throwUnexpectedToken(this.nextToken());\n      }\n    }\n    return this.finalize(node, new ImportSpecifier(local, imported));\n  }\n  // {foo, bar as bas}\n  parseNamedImports() {\n    this.expect(\"{\");\n    const specifiers = [];\n    while (!this.match(\"}\")) {\n      specifiers.push(this.parseImportSpecifier());\n      if (!this.match(\"}\")) {\n        this.expect(\",\");\n      }\n    }\n    this.expect(\"}\");\n    return specifiers;\n  }\n  // import <foo> ...;\n  parseImportDefaultSpecifier() {\n    const node = this.createNode();\n    const local = this.parseIdentifierName();\n    return this.finalize(node, new ImportDefaultSpecifier(local));\n  }\n  // import <* as foo> ...;\n  parseImportNamespaceSpecifier() {\n    const node = this.createNode();\n    this.expect(\"*\");\n    if (!this.matchContextualKeyword(\"as\")) {\n      this.throwError(Messages.NoAsAfterImportNamespace);\n    }\n    if (this.lookahead.escaped) {\n      this.throwError(Messages.NoAsAndFromEscapeSequences);\n    }\n    this.nextToken();\n    const local = this.parseIdentifierName();\n    return this.finalize(node, new ImportNamespaceSpecifier(local));\n  }\n  parseImportDeclaration() {\n    if (this.context.inFunctionBody) {\n      this.throwError(Messages.IllegalImportDeclaration);\n    }\n    const node = this.createNode();\n    this.expectKeyword(\"import\");\n    let src;\n    let specifiers = [];\n    if (this.lookahead.type === 8 /* StringLiteral */) {\n      src = this.parseModuleSpecifier();\n    } else {\n      if (this.match(\"{\")) {\n        specifiers = specifiers.concat(this.parseNamedImports());\n      } else if (this.match(\"*\")) {\n        specifiers.push(this.parseImportNamespaceSpecifier());\n      } else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword(\"default\")) {\n        specifiers.push(this.parseImportDefaultSpecifier());\n        if (this.match(\",\")) {\n          this.nextToken();\n          if (this.match(\"*\")) {\n            specifiers.push(this.parseImportNamespaceSpecifier());\n          } else if (this.match(\"{\")) {\n            specifiers = specifiers.concat(this.parseNamedImports());\n          } else {\n            this.throwUnexpectedToken(this.lookahead);\n          }\n        }\n      } else {\n        this.throwUnexpectedToken(this.nextToken());\n      }\n      if (!this.matchContextualKeyword(\"from\")) {\n        const message = this.lookahead.value ? Messages.UnexpectedToken : Messages.MissingFromClause;\n        this.throwError(message, this.lookahead.value);\n      }\n      this.nextToken();\n      src = this.parseModuleSpecifier();\n    }\n    const attributes = this.parseImportAttributes();\n    this.consumeSemicolon();\n    return this.finalize(node, new ImportDeclaration(specifiers, src, attributes));\n  }\n  // https://tc39.github.io/ecma262/#sec-exports\n  parseExportSpecifier() {\n    const node = this.createNode();\n    const local = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n    let exported = local;\n    if (this.matchContextualKeyword(\"as\")) {\n      if (this.lookahead.escaped) {\n        this.throwError(Messages.NoAsAndFromEscapeSequences);\n      }\n      this.nextToken();\n      exported = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n    }\n    return this.finalize(node, new ExportSpecifier(local, exported));\n  }\n  parseExportDeclaration() {\n    if (this.context.inFunctionBody) {\n      this.throwError(Messages.IllegalExportDeclaration);\n    }\n    const node = this.createNode();\n    this.expectKeyword(\"export\");\n    let exportDeclaration;\n    if (this.matchKeyword(\"default\")) {\n      this.nextToken();\n      if (this.matchKeyword(\"function\")) {\n        const declaration = this.parseFunctionDeclaration(true);\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      } else if (this.matchKeyword(\"class\")) {\n        const declaration = this.parseClassDeclaration(true);\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      } else if (this.matchContextualKeyword(\"async\")) {\n        const declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      } else {\n        if (this.matchContextualKeyword(\"from\")) {\n          this.throwError(Messages.UnexpectedToken, this.lookahead.value);\n        }\n        const declaration = this.match(\"{\") ? this.parseObjectInitializer() : this.match(\"[\") ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n        this.consumeSemicolon();\n        exportDeclaration = this.finalize(node, new ExportDefaultDeclaration(declaration));\n      }\n    } else if (this.match(\"*\")) {\n      this.nextToken();\n      let exported = null;\n      if (this.matchContextualKeyword(\"as\")) {\n        if (this.lookahead.escaped) {\n          this.throwError(Messages.NoAsAndFromEscapeSequences);\n        }\n        this.nextToken();\n        exported = this.lookahead.type == 8 /* StringLiteral */ ? this.parseModuleSpecifier() : this.parseIdentifierName();\n      }\n      if (!this.matchContextualKeyword(\"from\")) {\n        const message = this.lookahead.value ? Messages.UnexpectedToken : Messages.MissingFromClause;\n        this.throwError(message, this.lookahead.value);\n      }\n      if (this.lookahead.escaped) {\n        this.throwError(Messages.NoAsAndFromEscapeSequences);\n      }\n      this.nextToken();\n      const src = this.parseModuleSpecifier();\n      const attributes = this.parseImportAttributes();\n      this.consumeSemicolon();\n      exportDeclaration = this.finalize(node, new ExportAllDeclaration(src, exported, attributes));\n    } else if (this.lookahead.type === 4 /* Keyword */) {\n      let declaration;\n      switch (this.lookahead.value) {\n        case \"let\":\n        case \"const\":\n          declaration = this.parseLexicalDeclaration({ inFor: false });\n          break;\n        case \"var\":\n        case \"class\":\n        case \"function\":\n          declaration = this.parseStatementListItem();\n          break;\n        default:\n          this.throwUnexpectedToken(this.lookahead);\n      }\n      exportDeclaration = this.finalize(node, new ExportNamedDeclaration(declaration, [], null, null));\n    } else if (this.matchAsyncFunction()) {\n      const declaration = this.parseFunctionDeclaration();\n      exportDeclaration = this.finalize(node, new ExportNamedDeclaration(declaration, [], null, null));\n    } else {\n      const specifiers = [];\n      let source = null;\n      let isExportFromIdentifier = false;\n      let attributes = null;\n      this.expect(\"{\");\n      while (!this.match(\"}\")) {\n        isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword(\"default\");\n        specifiers.push(this.parseExportSpecifier());\n        if (!this.match(\"}\")) {\n          this.expect(\",\");\n        }\n      }\n      this.expect(\"}\");\n      if (this.matchContextualKeyword(\"from\")) {\n        if (this.lookahead.escaped) {\n          this.throwError(Messages.NoAsAndFromEscapeSequences);\n        }\n        this.nextToken();\n        source = this.parseModuleSpecifier();\n        attributes = this.parseImportAttributes();\n        this.consumeSemicolon();\n      } else if (isExportFromIdentifier) {\n        const message = this.lookahead.value ? Messages.UnexpectedToken : Messages.MissingFromClause;\n        this.throwError(message, this.lookahead.value);\n      } else {\n        attributes = this.parseImportAttributes();\n        this.consumeSemicolon();\n      }\n      exportDeclaration = this.finalize(node, new ExportNamedDeclaration(null, specifiers, source, attributes));\n    }\n    return exportDeclaration;\n  }\n};\n\n// src/xhtml-entities.ts\nvar XHTMLEntities = {\n  quot: '\"',\n  amp: \"&\",\n  apos: \"'\",\n  gt: \">\",\n  nbsp: \"\\xA0\",\n  iexcl: \"\\xA1\",\n  cent: \"\\xA2\",\n  pound: \"\\xA3\",\n  curren: \"\\xA4\",\n  yen: \"\\xA5\",\n  brvbar: \"\\xA6\",\n  sect: \"\\xA7\",\n  uml: \"\\xA8\",\n  copy: \"\\xA9\",\n  ordf: \"\\xAA\",\n  laquo: \"\\xAB\",\n  not: \"\\xAC\",\n  shy: \"\\xAD\",\n  reg: \"\\xAE\",\n  macr: \"\\xAF\",\n  deg: \"\\xB0\",\n  plusmn: \"\\xB1\",\n  sup2: \"\\xB2\",\n  sup3: \"\\xB3\",\n  acute: \"\\xB4\",\n  micro: \"\\xB5\",\n  para: \"\\xB6\",\n  middot: \"\\xB7\",\n  cedil: \"\\xB8\",\n  sup1: \"\\xB9\",\n  ordm: \"\\xBA\",\n  raquo: \"\\xBB\",\n  frac14: \"\\xBC\",\n  frac12: \"\\xBD\",\n  frac34: \"\\xBE\",\n  iquest: \"\\xBF\",\n  Agrave: \"\\xC0\",\n  Aacute: \"\\xC1\",\n  Acirc: \"\\xC2\",\n  Atilde: \"\\xC3\",\n  Auml: \"\\xC4\",\n  Aring: \"\\xC5\",\n  AElig: \"\\xC6\",\n  Ccedil: \"\\xC7\",\n  Egrave: \"\\xC8\",\n  Eacute: \"\\xC9\",\n  Ecirc: \"\\xCA\",\n  Euml: \"\\xCB\",\n  Igrave: \"\\xCC\",\n  Iacute: \"\\xCD\",\n  Icirc: \"\\xCE\",\n  Iuml: \"\\xCF\",\n  ETH: \"\\xD0\",\n  Ntilde: \"\\xD1\",\n  Ograve: \"\\xD2\",\n  Oacute: \"\\xD3\",\n  Ocirc: \"\\xD4\",\n  Otilde: \"\\xD5\",\n  Ouml: \"\\xD6\",\n  times: \"\\xD7\",\n  Oslash: \"\\xD8\",\n  Ugrave: \"\\xD9\",\n  Uacute: \"\\xDA\",\n  Ucirc: \"\\xDB\",\n  Uuml: \"\\xDC\",\n  Yacute: \"\\xDD\",\n  THORN: \"\\xDE\",\n  szlig: \"\\xDF\",\n  agrave: \"\\xE0\",\n  aacute: \"\\xE1\",\n  acirc: \"\\xE2\",\n  atilde: \"\\xE3\",\n  auml: \"\\xE4\",\n  aring: \"\\xE5\",\n  aelig: \"\\xE6\",\n  ccedil: \"\\xE7\",\n  egrave: \"\\xE8\",\n  eacute: \"\\xE9\",\n  ecirc: \"\\xEA\",\n  euml: \"\\xEB\",\n  igrave: \"\\xEC\",\n  iacute: \"\\xED\",\n  icirc: \"\\xEE\",\n  iuml: \"\\xEF\",\n  eth: \"\\xF0\",\n  ntilde: \"\\xF1\",\n  ograve: \"\\xF2\",\n  oacute: \"\\xF3\",\n  ocirc: \"\\xF4\",\n  otilde: \"\\xF5\",\n  ouml: \"\\xF6\",\n  divide: \"\\xF7\",\n  oslash: \"\\xF8\",\n  ugrave: \"\\xF9\",\n  uacute: \"\\xFA\",\n  ucirc: \"\\xFB\",\n  uuml: \"\\xFC\",\n  yacute: \"\\xFD\",\n  thorn: \"\\xFE\",\n  yuml: \"\\xFF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n  lang: \"\\u27E8\",\n  rang: \"\\u27E9\"\n};\n\n// src/jsx-parser.ts\nTokenName[100 /* Identifier */] = \"JSXIdentifier\";\nTokenName[101 /* Text */] = \"JSXText\";\nfunction getQualifiedElementName(elementName) {\n  let qualifiedName;\n  switch (elementName.type) {\n    case \"JSXIdentifier\" /* JSXIdentifier */:\n      const id = elementName;\n      qualifiedName = id.name;\n      break;\n    case \"JSXNamespacedName\" /* JSXNamespacedName */:\n      const ns = elementName;\n      qualifiedName = getQualifiedElementName(ns.namespace) + \":\" + getQualifiedElementName(ns.name);\n      break;\n    case \"JSXMemberExpression\" /* JSXMemberExpression */:\n      const expr = elementName;\n      qualifiedName = getQualifiedElementName(expr.object) + \".\" + getQualifiedElementName(expr.property);\n      break;\n    default:\n      break;\n  }\n  return qualifiedName;\n}\nvar JSXParser = class extends Parser {\n  constructor(code, options, delegate) {\n    super(code, options, delegate);\n  }\n  //@ts-ignore\n  parsePrimaryExpression() {\n    return this.match(\"<\") ? this.parseJSXRoot() : super.parsePrimaryExpression();\n  }\n  startJSX() {\n    this.scanner.index = this.startMarker.index;\n    this.scanner.lineNumber = this.startMarker.line;\n    this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n  }\n  finishJSX() {\n    this.nextToken();\n  }\n  reenterJSX() {\n    this.startJSX();\n    this.expectJSX(\"}\");\n    if (this.config.tokens) {\n      this.tokens.pop();\n    }\n  }\n  createJSXNode() {\n    this.collectComments();\n    return {\n      index: this.scanner.index,\n      line: this.scanner.lineNumber,\n      column: this.scanner.index - this.scanner.lineStart\n    };\n  }\n  createJSXChildNode() {\n    return {\n      index: this.scanner.index,\n      line: this.scanner.lineNumber,\n      column: this.scanner.index - this.scanner.lineStart\n    };\n  }\n  scanXHTMLEntity(quote) {\n    let result = \"&\";\n    let valid = true;\n    let terminated = false;\n    let numeric = false;\n    let hex = false;\n    while (!this.scanner.eof() && valid && !terminated) {\n      const ch = this.scanner.source[this.scanner.index];\n      if (ch === quote) {\n        break;\n      }\n      terminated = ch === \";\";\n      result += ch;\n      ++this.scanner.index;\n      if (!terminated) {\n        switch (result.length) {\n          case 2:\n            numeric = ch === \"#\";\n            break;\n          case 3:\n            if (numeric) {\n              hex = ch === \"x\";\n              valid = hex || Character.isDecimalDigit(ch.charCodeAt(0));\n              numeric = numeric && !hex;\n            }\n            break;\n          default:\n            valid = valid && !(numeric && !Character.isDecimalDigit(ch.charCodeAt(0)));\n            valid = valid && !(hex && !Character.isHexDigit(ch.charCodeAt(0)));\n            break;\n        }\n      }\n    }\n    if (valid && terminated && result.length > 2) {\n      const str = result.substr(1, result.length - 2);\n      if (numeric && str.length > 1) {\n        result = String.fromCharCode(parseInt(str.substr(1), 10));\n      } else if (hex && str.length > 2) {\n        result = String.fromCharCode(parseInt(\"0\" + str.substr(1), 16));\n      } else if (!numeric && !hex && XHTMLEntities[str]) {\n        result = XHTMLEntities[str];\n      }\n    }\n    return result;\n  }\n  // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n  lexJSX() {\n    const cp = this.scanner.source.charCodeAt(this.scanner.index);\n    if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n      const value = this.scanner.source[this.scanner.index++];\n      return {\n        type: 7 /* Punctuator */,\n        value,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start: this.scanner.index - 1,\n        end: this.scanner.index\n      };\n    }\n    if (cp === 34 || cp === 39) {\n      const start = this.scanner.index;\n      const quote = this.scanner.source[this.scanner.index++];\n      let str = \"\";\n      while (!this.scanner.eof()) {\n        const ch = this.scanner.source[this.scanner.index++];\n        if (ch === quote) {\n          break;\n        } else if (ch === \"&\") {\n          str += this.scanXHTMLEntity(quote);\n        } else {\n          str += ch;\n        }\n      }\n      return {\n        type: 8 /* StringLiteral */,\n        value: str,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start,\n        end: this.scanner.index\n      };\n    }\n    if (cp === 46) {\n      const n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n      const n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n      const value = n1 === 46 && n2 === 46 ? \"...\" : \".\";\n      const start = this.scanner.index;\n      this.scanner.index += value.length;\n      return {\n        type: 7 /* Punctuator */,\n        value,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start,\n        end: this.scanner.index\n      };\n    }\n    if (cp === 96) {\n      return {\n        type: 10 /* Template */,\n        value: \"\",\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start: this.scanner.index,\n        end: this.scanner.index\n      };\n    }\n    if (Character.isIdentifierStart(cp) && cp !== 92) {\n      const start = this.scanner.index;\n      ++this.scanner.index;\n      while (!this.scanner.eof()) {\n        const ch = this.scanner.source.charCodeAt(this.scanner.index);\n        if (Character.isIdentifierPart(ch) && ch !== 92) {\n          ++this.scanner.index;\n        } else if (ch === 45) {\n          ++this.scanner.index;\n        } else {\n          break;\n        }\n      }\n      const id = this.scanner.source.slice(start, this.scanner.index);\n      return {\n        type: 100 /* Identifier */,\n        value: id,\n        lineNumber: this.scanner.lineNumber,\n        lineStart: this.scanner.lineStart,\n        start,\n        end: this.scanner.index\n      };\n    }\n    return this.scanner.lex();\n  }\n  nextJSXToken() {\n    this.collectComments();\n    this.startMarker.index = this.scanner.index;\n    this.startMarker.line = this.scanner.lineNumber;\n    this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n    const token = this.lexJSX();\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    if (this.config.tokens) {\n      this.tokens.push(this.convertToken(token));\n    }\n    return token;\n  }\n  nextJSXText() {\n    this.startMarker.index = this.scanner.index;\n    this.startMarker.line = this.scanner.lineNumber;\n    this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n    const start = this.scanner.index;\n    let text = \"\";\n    while (!this.scanner.eof()) {\n      const ch = this.scanner.source[this.scanner.index];\n      if (ch === \"{\" || ch === \"<\") {\n        break;\n      }\n      ++this.scanner.index;\n      text += ch;\n      if (Character.isLineTerminator(ch.charCodeAt(0))) {\n        ++this.scanner.lineNumber;\n        if (ch === \"\\r\" && this.scanner.source[this.scanner.index] === \"\\n\") {\n          ++this.scanner.index;\n        }\n        this.scanner.lineStart = this.scanner.index;\n      }\n    }\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    const token = {\n      type: 101 /* Text */,\n      value: text,\n      lineNumber: this.scanner.lineNumber,\n      lineStart: this.scanner.lineStart,\n      start,\n      end: this.scanner.index\n    };\n    if (text.length > 0 && this.config.tokens) {\n      this.tokens.push(this.convertToken(token));\n    }\n    return token;\n  }\n  peekJSXToken() {\n    const state = this.scanner.saveState();\n    this.scanner.scanComments();\n    const next = this.lexJSX();\n    this.scanner.restoreState(state);\n    return next;\n  }\n  // Expect the next JSX token to match the specified punctuator.\n  // If not, an exception will be thrown.\n  expectJSX(value) {\n    const token = this.nextJSXToken();\n    if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n      this.throwUnexpectedToken(token);\n    }\n  }\n  // Return true if the next JSX token matches the specified punctuator.\n  matchJSX(value) {\n    const next = this.peekJSXToken();\n    return next.type === 7 /* Punctuator */ && next.value === value;\n  }\n  parseJSXIdentifier() {\n    const node = this.createJSXNode();\n    const token = this.nextJSXToken();\n    if (token.type !== 100 /* Identifier */) {\n      this.throwUnexpectedToken(token);\n    }\n    return this.finalize(node, new JSXIdentifier(token.value));\n  }\n  parseJSXElementName() {\n    const node = this.createJSXNode();\n    let elementName = this.parseJSXIdentifier();\n    if (this.matchJSX(\":\")) {\n      const namespace = elementName;\n      this.expectJSX(\":\");\n      const name = this.parseJSXIdentifier();\n      elementName = this.finalize(node, new JSXNamespacedName(namespace, name));\n    } else if (this.matchJSX(\".\")) {\n      while (this.matchJSX(\".\")) {\n        const object = elementName;\n        this.expectJSX(\".\");\n        const property = this.parseJSXIdentifier();\n        elementName = this.finalize(node, new JSXMemberExpression(object, property));\n      }\n    }\n    return elementName;\n  }\n  parseJSXAttributeName() {\n    const node = this.createJSXNode();\n    let attributeName;\n    const identifier = this.parseJSXIdentifier();\n    if (this.matchJSX(\":\")) {\n      const namespace = identifier;\n      this.expectJSX(\":\");\n      const name = this.parseJSXIdentifier();\n      attributeName = this.finalize(node, new JSXNamespacedName(namespace, name));\n    } else {\n      attributeName = identifier;\n    }\n    return attributeName;\n  }\n  parseJSXStringLiteralAttribute() {\n    const node = this.createJSXNode();\n    const token = this.nextJSXToken();\n    if (token.type !== 8 /* StringLiteral */) {\n      this.throwUnexpectedToken(token);\n    }\n    const raw = this.getTokenRaw(token);\n    return this.finalize(node, new Literal(token.value, raw));\n  }\n  parseJSXExpressionAttribute() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"{\");\n    this.finishJSX();\n    if (this.match(\"}\")) {\n      this.tolerateError(\"JSX attributes must only be assigned a non-empty expression\");\n    }\n    const expression = this.parseAssignmentExpression();\n    this.reenterJSX();\n    return this.finalize(node, new JSXExpressionContainer(expression));\n  }\n  parseJSXAttributeValue() {\n    return this.matchJSX(\"{\") ? this.parseJSXExpressionAttribute() : this.matchJSX(\"<\") ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n  }\n  parseJSXNameValueAttribute() {\n    const node = this.createJSXNode();\n    const name = this.parseJSXAttributeName();\n    let value = null;\n    if (this.matchJSX(\"=\")) {\n      this.expectJSX(\"=\");\n      value = this.parseJSXAttributeValue();\n    }\n    return this.finalize(node, new JSXAttribute(name, value));\n  }\n  parseJSXSpreadAttribute() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"{\");\n    this.expectJSX(\"...\");\n    this.finishJSX();\n    const argument = this.parseAssignmentExpression();\n    this.reenterJSX();\n    return this.finalize(node, new JSXSpreadAttribute(argument));\n  }\n  parseJSXAttributes() {\n    const attributes = [];\n    while (!this.matchJSX(\"/\") && !this.matchJSX(\">\")) {\n      const attribute = this.matchJSX(\"{\") ? this.parseJSXSpreadAttribute() : this.parseJSXNameValueAttribute();\n      attributes.push(attribute);\n    }\n    return attributes;\n  }\n  parseJSXOpeningElement() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"<\");\n    if (this.matchJSX(\">\")) {\n      this.expectJSX(\">\");\n      return this.finalize(node, new JSXOpeningFragment(false));\n    }\n    const name = this.parseJSXElementName();\n    const attributes = this.parseJSXAttributes();\n    const selfClosing = this.matchJSX(\"/\");\n    if (selfClosing) {\n      this.expectJSX(\"/\");\n    }\n    this.expectJSX(\">\");\n    return this.finalize(node, new JSXOpeningElement(name, selfClosing, attributes));\n  }\n  parseJSXBoundaryElement() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"<\");\n    if (this.matchJSX(\"/\")) {\n      this.expectJSX(\"/\");\n      if (this.matchJSX(\">\")) {\n        this.expectJSX(\">\");\n        return this.finalize(node, new JSXClosingFragment());\n      }\n      const elementName = this.parseJSXElementName();\n      this.expectJSX(\">\");\n      return this.finalize(node, new JSXClosingElement(elementName));\n    }\n    const name = this.parseJSXElementName();\n    const attributes = this.parseJSXAttributes();\n    const selfClosing = this.matchJSX(\"/\");\n    if (selfClosing) {\n      this.expectJSX(\"/\");\n    }\n    this.expectJSX(\">\");\n    return this.finalize(node, new JSXOpeningElement(name, selfClosing, attributes));\n  }\n  parseJSXEmptyExpression() {\n    const node = this.createJSXChildNode();\n    this.collectComments();\n    this.lastMarker.index = this.scanner.index;\n    this.lastMarker.line = this.scanner.lineNumber;\n    this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n    return this.finalize(node, new JSXEmptyExpression());\n  }\n  parseJSXExpressionContainer() {\n    const node = this.createJSXNode();\n    this.expectJSX(\"{\");\n    let expression;\n    if (this.matchJSX(\"}\")) {\n      expression = this.parseJSXEmptyExpression();\n      this.expectJSX(\"}\");\n    } else {\n      this.finishJSX();\n      expression = this.parseAssignmentExpression();\n      this.reenterJSX();\n    }\n    return this.finalize(node, new JSXExpressionContainer(expression));\n  }\n  parseJSXChildren() {\n    const children = [];\n    while (!this.scanner.eof()) {\n      const node = this.createJSXChildNode();\n      const token = this.nextJSXText();\n      if (token.start < token.end) {\n        const raw = this.getTokenRaw(token);\n        const child = this.finalize(node, new JSXText(token.value, raw));\n        children.push(child);\n      }\n      if (this.scanner.source[this.scanner.index] === \"{\") {\n        const container = this.parseJSXExpressionContainer();\n        children.push(container);\n      } else {\n        break;\n      }\n    }\n    return children;\n  }\n  parseComplexJSXElement(el) {\n    const stack = [];\n    while (!this.scanner.eof()) {\n      el.children = el.children.concat(this.parseJSXChildren());\n      const node = this.createJSXChildNode();\n      const element = this.parseJSXBoundaryElement();\n      if (element.type === \"JSXOpeningElement\" /* JSXOpeningElement */) {\n        const opening = element;\n        if (opening.selfClosing) {\n          const child = this.finalize(node, new JSXElement(opening, [], null));\n          el.children.push(child);\n        } else {\n          stack.push(el);\n          el = { node, opening, closing: null, children: [] };\n        }\n      }\n      if (element.type === \"JSXClosingElement\" /* JSXClosingElement */) {\n        el.closing = element;\n        const open = getQualifiedElementName(el.opening.name);\n        const close = getQualifiedElementName(el.closing.name);\n        if (open !== close) {\n          this.tolerateError(\"Expected corresponding JSX closing tag for %0\", open);\n        }\n        if (stack.length > 0) {\n          const child = this.finalize(el.node, new JSXElement(el.opening, el.children, el.closing));\n          el = stack[stack.length - 1];\n          el.children.push(child);\n          stack.pop();\n        } else {\n          break;\n        }\n      }\n      if (element.type === \"JSXClosingFragment\" /* JSXClosingFragment */) {\n        el.closing = element;\n        if (el.opening.type !== \"JSXOpeningFragment\" /* JSXOpeningFragment */) {\n          this.tolerateError(\"Expected corresponding JSX closing tag for jsx fragment\");\n        } else {\n          break;\n        }\n      }\n    }\n    return el;\n  }\n  parseJSXElement() {\n    const node = this.createJSXNode();\n    const opening = this.parseJSXOpeningElement();\n    let children = [];\n    let closing = null;\n    if (!opening.selfClosing) {\n      const el = this.parseComplexJSXElement({ node, opening, closing, children });\n      children = el.children;\n      closing = el.closing;\n    }\n    return this.finalize(node, new JSXElement(opening, children, closing));\n  }\n  parseJSXRoot() {\n    if (this.config.tokens) {\n      this.tokens.pop();\n    }\n    this.startJSX();\n    const element = this.parseJSXElement();\n    this.finishJSX();\n    return element;\n  }\n  isStartOfExpression() {\n    return super.isStartOfExpression() || this.match(\"<\");\n  }\n};\n\n// src/tokenizer.ts\nvar beforeFunctionExpressionTokens = [\n  \"(\",\n  \"{\",\n  \"[\",\n  \"in\",\n  \"typeof\",\n  \"instanceof\",\n  \"new\",\n  \"return\",\n  \"case\",\n  \"delete\",\n  \"throw\",\n  \"void\",\n  // assignment operators\n  \"=\",\n  \"+=\",\n  \"-=\",\n  \"*=\",\n  \"**=\",\n  \"/=\",\n  \"%=\",\n  \"<<=\",\n  \">>=\",\n  \">>>=\",\n  \"&=\",\n  \"|=\",\n  \"^=\",\n  \",\",\n  // binary/unary operators\n  \"+\",\n  \"-\",\n  \"*\",\n  \"**\",\n  \"/\",\n  \"%\",\n  \"++\",\n  \"--\",\n  \"<<\",\n  \">>\",\n  \">>>\",\n  \"&\",\n  \"|\",\n  \"^\",\n  \"!\",\n  \"~\",\n  \"&&\",\n  \"||\",\n  \"??\",\n  \"?\",\n  \":\",\n  \"===\",\n  \"==\",\n  \">=\",\n  \"<=\",\n  \"<\",\n  \">\",\n  \"!=\",\n  \"!==\"\n];\nvar Reader = class {\n  values;\n  curly;\n  paren;\n  constructor() {\n    this.values = [];\n    this.curly = this.paren = -1;\n  }\n  // A function following one of those tokens is an expression.\n  beforeFunctionExpression(t) {\n    return beforeFunctionExpressionTokens.includes(t);\n  }\n  // Determine if forward slash (/) is an operator or part of a regular expression\n  // https://github.com/mozilla/sweet.js/wiki/design\n  isRegexStart() {\n    const previous = this.values[this.values.length - 1];\n    let regex = previous !== null;\n    switch (previous) {\n      case \"this\":\n      case \"]\":\n        regex = false;\n        break;\n      case \")\":\n        const keyword = this.values[this.paren - 1];\n        regex = keyword === \"if\" || keyword === \"while\" || keyword === \"for\" || keyword === \"with\";\n        break;\n      case \"}\":\n        regex = true;\n        if (this.values[this.curly - 3] === \"function\") {\n          const check = this.values[this.curly - 4];\n          regex = check ? !this.beforeFunctionExpression(check) : false;\n        } else if (this.values[this.curly - 4] === \"function\") {\n          const check = this.values[this.curly - 5];\n          regex = check ? !this.beforeFunctionExpression(check) : true;\n        }\n        break;\n      default:\n        break;\n    }\n    return regex;\n  }\n  push(token) {\n    if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n      if (token.value === \"{\") {\n        this.curly = this.values.length;\n      } else if (token.value === \"(\") {\n        this.paren = this.values.length;\n      }\n      this.values.push(token.value);\n    } else {\n      this.values.push(null);\n    }\n  }\n};\nvar Tokenizer = class {\n  errorHandler;\n  scanner;\n  trackRange;\n  trackLoc;\n  buffer;\n  reader;\n  constructor(code, config) {\n    this.errorHandler = new ErrorHandler();\n    this.errorHandler.tolerant = config ? typeof config.tolerant === \"boolean\" && config.tolerant : false;\n    this.scanner = new Scanner(code, this.errorHandler);\n    this.scanner.trackComment = config ? typeof config.comment === \"boolean\" && config.comment : false;\n    this.trackRange = config ? typeof config.range === \"boolean\" && config.range : false;\n    this.trackLoc = config ? typeof config.loc === \"boolean\" && config.loc : false;\n    this.buffer = [];\n    this.reader = new Reader();\n  }\n  errors() {\n    return this.errorHandler.errors;\n  }\n  getNextToken() {\n    if (this.buffer.length === 0) {\n      const comments = this.scanner.scanComments();\n      if (this.scanner.trackComment) {\n        for (let i = 0; i < comments.length; ++i) {\n          const e = comments[i];\n          const value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n          const comment = {\n            type: e.multiLine ? \"BlockComment\" : \"LineComment\",\n            value\n          };\n          if (this.trackRange) {\n            comment.range = e.range;\n          }\n          if (this.trackLoc) {\n            comment.loc = e.loc;\n          }\n          this.buffer.push(comment);\n        }\n      }\n      if (!this.scanner.eof()) {\n        let loc;\n        if (this.trackLoc) {\n          loc = {\n            start: {\n              line: this.scanner.lineNumber,\n              column: this.scanner.index - this.scanner.lineStart\n            },\n            end: {}\n          };\n        }\n        const maybeRegex = this.scanner.source[this.scanner.index] === \"/\" && this.reader.isRegexStart();\n        let token;\n        if (maybeRegex) {\n          const state = this.scanner.saveState();\n          try {\n            token = this.scanner.scanRegExp();\n          } catch (e) {\n            this.scanner.restoreState(state);\n            token = this.scanner.lex();\n          }\n        } else {\n          token = this.scanner.lex();\n        }\n        this.reader.push(token);\n        const entry = {\n          type: TokenName[token.type],\n          value: this.scanner.source.slice(token.start, token.end)\n        };\n        if (this.trackRange) {\n          entry.range = [token.start, token.end];\n        }\n        if (this.trackLoc) {\n          loc.end = {\n            line: this.scanner.lineNumber,\n            column: this.scanner.index - this.scanner.lineStart\n          };\n          entry.loc = loc;\n        }\n        if (token.type === 9 /* RegularExpression */) {\n          const pattern = token.pattern;\n          const flags = token.flags;\n          entry.regex = { pattern, flags };\n        }\n        this.buffer.push(entry);\n      }\n    }\n    return this.buffer.shift();\n  }\n};\n\n// src/visitor.ts\nvar Visitor = class {\n  visit(node) {\n    if (node == null)\n      return node;\n    switch (node.type) {\n      case \"AssignmentExpression\" /* AssignmentExpression */:\n        return this.visitAssignmentExpression(node);\n      case \"AssignmentPattern\" /* AssignmentPattern */:\n        return this.visitAssignmentPattern(node);\n      case \"ArrayExpression\" /* ArrayExpression */:\n        return this.visitArrayExpression(node);\n      case \"ArrayPattern\" /* ArrayPattern */:\n        return this.visitArrayPattern(node);\n      case \"ArrowFunctionExpression\" /* ArrowFunctionExpression */:\n        return this.visitArrowFunctionExpression(node);\n      case \"AwaitExpression\" /* AwaitExpression */:\n        return this.visitAwaitExpression(node);\n      case \"BlockStatement\" /* BlockStatement */:\n        return this.visitBlockStatement(node);\n      case \"BinaryExpression\" /* BinaryExpression */:\n        return this.visitBinaryExpression(node);\n      case \"BreakStatement\" /* BreakStatement */:\n        return this.visitBreakStatement(node);\n      case \"CallExpression\" /* CallExpression */:\n        return this.visitCallExpression(node);\n      case \"CatchClause\" /* CatchClause */:\n        return this.visitCatchClause(node);\n      case \"ChainExpression\" /* ChainExpression */:\n        return this.visitChainExpression(node);\n      case \"ClassBody\" /* ClassBody */:\n        return this.visitClassBody(node);\n      case \"ClassDeclaration\" /* ClassDeclaration */:\n        return this.visitClassDeclaration(node);\n      case \"ClassExpression\" /* ClassExpression */:\n        return this.visitClassExpression(node);\n      case \"ConditionalExpression\" /* ConditionalExpression */:\n        return this.visitConditionalExpression(node);\n      case \"ContinueStatement\" /* ContinueStatement */:\n        return this.visitContinueStatement(node);\n      case \"Decorator\" /* Decorator */:\n        return this.visitDecorator(node);\n      case \"DoWhileStatement\" /* DoWhileStatement */:\n        return this.visitDoWhileStatement(node);\n      case \"DebuggerStatement\" /* DebuggerStatement */:\n        return this.visitDebuggerStatement(node);\n      case \"EmptyStatement\" /* EmptyStatement */:\n        return this.visitEmptyStatement(node);\n      case \"ExportAllDeclaration\" /* ExportAllDeclaration */:\n        return this.visitExportAllDeclaration(node);\n      case \"ExportDefaultDeclaration\" /* ExportDefaultDeclaration */:\n        return this.visitExportDefaultDeclaration(node);\n      case \"ExportNamedDeclaration\" /* ExportNamedDeclaration */:\n        return this.visitExportNamedDeclaration(node);\n      case \"ExportSpecifier\" /* ExportSpecifier */:\n        return this.visitExportSpecifier(node);\n      case \"ExpressionStatement\" /* ExpressionStatement */:\n        return this.visitExpressionStatement(node);\n      case \"ForStatement\" /* ForStatement */:\n        return this.visitForStatement(node);\n      case \"ForOfStatement\" /* ForOfStatement */:\n        return this.visitForOfStatement(node);\n      case \"ForInStatement\" /* ForInStatement */:\n        return this.visitForInStatement(node);\n      case \"FunctionDeclaration\" /* FunctionDeclaration */:\n        return this.visitFunctionDeclaration(node);\n      case \"FunctionExpression\" /* FunctionExpression */:\n        return this.visitFunctionExpression(node);\n      case \"Identifier\" /* Identifier */:\n        return this.visitIdentifier(node);\n      case \"IfStatement\" /* IfStatement */:\n        return this.visitIfStatement(node);\n      case \"ImportAttribute\" /* ImportAttribute */:\n        return this.visitImportAttribute(node);\n      case \"ImportExpression\" /* ImportExpression */:\n        return this.visitImportExpression(node);\n      case \"ImportDeclaration\" /* ImportDeclaration */:\n        return this.visitImportDeclaration(node);\n      case \"ImportDefaultSpecifier\" /* ImportDefaultSpecifier */:\n        return this.visitImportDefaultSpecifier(node);\n      case \"ImportNamespaceSpecifier\" /* ImportNamespaceSpecifier */:\n        return this.visitImportNamespaceSpecifier(node);\n      case \"ImportSpecifier\" /* ImportSpecifier */:\n        return this.visitImportSpecifier(node);\n      case \"Literal\" /* Literal */:\n        return this.visitLiteral(node);\n      case \"LabeledStatement\" /* LabeledStatement */:\n        return this.visitLabeledStatement(node);\n      case \"LogicalExpression\" /* LogicalExpression */:\n        return this.visitLogicalExpression(node);\n      case \"MemberExpression\" /* MemberExpression */:\n        return this.visitMemberExpression(node);\n      case \"MetaProperty\" /* MetaProperty */:\n        return this.visitMetaProperty(node);\n      case \"MethodDefinition\" /* MethodDefinition */:\n        return this.visitMethodDefinition(node);\n      case \"NewExpression\" /* NewExpression */:\n        return this.visitNewExpression(node);\n      case \"ObjectExpression\" /* ObjectExpression */:\n        return this.visitObjectExpression(node);\n      case \"ObjectPattern\" /* ObjectPattern */:\n        return this.visitObjectPattern(node);\n      case \"Program\" /* Program */:\n        return this.visitProgram(node);\n      case \"Property\" /* Property */:\n        return this.visitProperty(node);\n      case \"PrivateIdentifier\" /* PrivateIdentifier */:\n        return this.visitPrivateIdentifier(node);\n      case \"RestElement\" /* RestElement */:\n        return this.visitRestElement(node);\n      case \"ReturnStatement\" /* ReturnStatement */:\n        return this.visitReturnStatement(node);\n      case \"SequenceExpression\" /* SequenceExpression */:\n        return this.visitSequenceExpression(node);\n      case \"SpreadElement\" /* SpreadElement */:\n        return this.visitSpreadElement(node);\n      case \"StaticBlock\" /* StaticBlock */:\n        return this.visitStaticBlock(node);\n      case \"Super\" /* Super */:\n        return this.visitSuper(node);\n      case \"SwitchCase\" /* SwitchCase */:\n        return this.visitSwitchCase(node);\n      case \"SwitchStatement\" /* SwitchStatement */:\n        return this.visitSwitchStatement(node);\n      case \"TaggedTemplateExpression\" /* TaggedTemplateExpression */:\n        return this.visitTaggedTemplateExpression(node);\n      case \"TemplateElement\" /* TemplateElement */:\n        return this.visitTemplateElement(node);\n      case \"TemplateLiteral\" /* TemplateLiteral */:\n        return this.visitTemplateLiteral(node);\n      case \"ThisExpression\" /* ThisExpression */:\n        return this.visitThisExpression(node);\n      case \"ThrowStatement\" /* ThrowStatement */:\n        return this.visitThrowStatement(node);\n      case \"TryStatement\" /* TryStatement */:\n        return this.visitTryStatement(node);\n      case \"UnaryExpression\" /* UnaryExpression */:\n        return this.visitUnaryExpression(node);\n      case \"UpdateExpression\" /* UpdateExpression */:\n        return this.visitUpdateExpression(node);\n      case \"VariableDeclaration\" /* VariableDeclaration */:\n        return this.visitVariableDeclaration(node);\n      case \"VariableDeclarator\" /* VariableDeclarator */:\n        return this.visitVariableDeclarator(node);\n      case \"WhileStatement\" /* WhileStatement */:\n        return this.visitWhileStatement(node);\n      case \"WithStatement\" /* WithStatement */:\n        return this.visitWithStatement(node);\n      case \"YieldExpression\" /* YieldExpression */:\n        return this.visitYieldExpression(node);\n    }\n  }\n  visitNodeList(original) {\n    if (original == null)\n      return original;\n    let list = null;\n    for (let i = 0, n = original.length; i < n; i++) {\n      let p = this.visit(original[i]);\n      if (list != null) {\n        list.push(p);\n      } else if (p != original[i]) {\n        list = [];\n        for (let j = 0; j < i; j++) {\n          list.push(original[j]);\n        }\n        list.push(p);\n      }\n    }\n    if (list != null)\n      return list;\n    return original;\n  }\n  visitAssignmentExpression(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new AssignmentExpression(node.operator, left, right);\n    return node;\n  }\n  visitAssignmentPattern(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new AssignmentPattern(left, right);\n    return node;\n  }\n  visitArrayExpression(node) {\n    const elements = this.visitNodeList(node.elements);\n    if (elements !== node.elements)\n      return new ArrayExpression(elements);\n    return node;\n  }\n  visitArrayPattern(node) {\n    const elements = this.visitNodeList(node.elements);\n    if (elements !== node.elements)\n      return new ArrayPattern(elements);\n    return node;\n  }\n  visitArrowFunctionExpression(node) {\n    const id = this.visit(node.id);\n    const params = this.visitNodeList(node.params);\n    const body = this.visit(node.body);\n    if (id !== node.id || params !== node.params || body !== node.body) {\n      const ret = new ArrowFunctionExpression(params, body, node.expression, node.async);\n      ret.id = id;\n      return ret;\n    }\n    return node;\n  }\n  visitAwaitExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new AwaitExpression(argument);\n    return node;\n  }\n  visitBlockStatement(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new BlockStatement(body);\n    return node;\n  }\n  visitBinaryExpression(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new BinaryExpression(node.operator, left, right);\n    return node;\n  }\n  visitBreakStatement(node) {\n    const label = this.visit(node.label);\n    if (label !== node.label)\n      return new BreakStatement(label);\n    return node;\n  }\n  visitCallExpression(node) {\n    const callee = this.visit(node.callee);\n    const args = this.visitNodeList(node.arguments);\n    if (callee !== node.callee || args !== node.arguments)\n      return new CallExpression(callee, args, node.optional);\n    return node;\n  }\n  visitCatchClause(node) {\n    const param = this.visit(node.param);\n    const body = this.visit(node.body);\n    if (param !== node.param || body !== node.body)\n      return new CatchClause(param, body);\n    return node;\n  }\n  visitChainExpression(node) {\n    const expression = this.visit(node.expression);\n    if (expression !== node.expression)\n      return new ChainExpression(expression);\n    return node;\n  }\n  visitClassBody(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new ClassBody(body);\n    return node;\n  }\n  visitClassDeclaration(node) {\n    const id = this.visit(node.id);\n    const superClass = this.visit(node.superClass);\n    const body = this.visit(node.body);\n    const decorators = this.visitNodeList(node.decorators);\n    if (id !== node.id || superClass !== node.superClass || body !== node.body || decorators !== node.decorators)\n      return new ClassDeclaration(id, superClass, body, decorators);\n    return node;\n  }\n  visitClassExpression(node) {\n    const id = this.visit(node.id);\n    const superClass = this.visit(node.superClass);\n    const body = this.visit(node.body);\n    const decorators = this.visitNodeList(node.decorators);\n    if (id !== node.id || superClass !== node.superClass || body !== node.body || decorators !== node.decorators)\n      return new ClassExpression(id, superClass, body, decorators);\n    return node;\n  }\n  visitConditionalExpression(node) {\n    const test = this.visit(node.test);\n    const consequent = this.visit(node.consequent);\n    const alternate = this.visit(node.alternate);\n    if (test !== node.test || consequent !== node.consequent || alternate !== node.alternate)\n      return new ConditionalExpression(test, consequent, alternate);\n    return node;\n  }\n  visitContinueStatement(node) {\n    const label = this.visit(node.label);\n    if (label !== node.label)\n      return new ContinueStatement(label);\n    return node;\n  }\n  visitDecorator(node) {\n    const expression = this.visit(node.expression);\n    if (expression !== node.expression)\n      return new Decorator(expression);\n    return node;\n  }\n  visitDoWhileStatement(node) {\n    const body = this.visit(node.body);\n    const test = this.visit(node.test);\n    if (body !== node.body || test !== node.test)\n      return new DoWhileStatement(body, test);\n    return node;\n  }\n  visitDebuggerStatement(node) {\n    return node;\n  }\n  visitEmptyStatement(node) {\n    return node;\n  }\n  visitExportAllDeclaration(node) {\n    const source = this.visit(node.source);\n    const exported = this.visit(node.exported);\n    const assertions = this.visitNodeList(node.assertions);\n    if (source !== node.source || exported !== node.exported || assertions !== node.assertions)\n      return new ExportAllDeclaration(source, exported, assertions);\n    return node;\n  }\n  visitExportDefaultDeclaration(node) {\n    const declaration = this.visit(node.declaration);\n    if (declaration !== node.declaration)\n      return new ExportDefaultDeclaration(declaration);\n    return node;\n  }\n  visitExportNamedDeclaration(node) {\n    const declaration = this.visit(node.declaration);\n    const specifiers = this.visitNodeList(node.specifiers);\n    const source = this.visit(node.source);\n    const assertions = this.visitNodeList(node.assertions);\n    if (declaration !== node.declaration || specifiers !== node.specifiers || source !== node.source || assertions !== node.assertions)\n      return new ExportNamedDeclaration(declaration, specifiers, source, assertions);\n    return node;\n  }\n  visitExportSpecifier(node) {\n    const exported = this.visit(node.exported);\n    const local = this.visit(node.local);\n    if (exported !== node.exported || local !== node.local)\n      return new ExportSpecifier(exported, local);\n    return node;\n  }\n  visitExpressionStatement(node) {\n    const expression = this.visit(node.expression);\n    if (expression !== node.expression)\n      return new ExpressionStatement(expression);\n    return node;\n  }\n  visitForStatement(node) {\n    const init = this.visit(node.init);\n    const test = this.visit(node.test);\n    const update = this.visit(node.update);\n    const body = this.visit(node.body);\n    if (init !== node.init || test !== node.test || update !== node.update || body !== node.body)\n      return new ForStatement(init, test, update, body);\n    return node;\n  }\n  visitForOfStatement(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    const body = this.visit(node.body);\n    if (left !== node.left || right !== node.right || body !== node.body)\n      return new ForOfStatement(left, right, body, node.await);\n    return node;\n  }\n  visitForInStatement(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    const body = this.visit(node.body);\n    if (left !== node.left || right !== node.right || body !== node.body)\n      return new ForInStatement(left, right, body);\n    return node;\n  }\n  visitFunctionDeclaration(node) {\n    const id = this.visit(node.id);\n    const params = this.visitNodeList(node.params);\n    const body = this.visit(node.body);\n    if (id !== node.id || params !== node.params || body !== node.body)\n      return new FunctionDeclaration(id, params, body, node.generator);\n    return node;\n  }\n  visitFunctionExpression(node) {\n    const id = this.visit(node.id);\n    const params = this.visitNodeList(node.params);\n    const body = this.visit(node.body);\n    if (id !== node.id || params !== node.params || body !== node.body)\n      return new FunctionExpression(id, params, body, node.generator, node.async);\n    return node;\n  }\n  visitIdentifier(node) {\n    return node;\n  }\n  visitIfStatement(node) {\n    const test = this.visit(node.test);\n    const consequent = this.visit(node.consequent);\n    const alternate = this.visit(node.alternate);\n    if (test !== node.test || consequent !== node.consequent || alternate !== node.alternate)\n      return new IfStatement(test, consequent, alternate);\n    return node;\n  }\n  visitImportAttribute(node) {\n    const key = this.visit(node.key);\n    const value = this.visit(node.value);\n    if (key !== node.key || value !== node.value)\n      return new ImportAttribute(key, value);\n    return node;\n  }\n  visitImportExpression(node) {\n    const source = this.visit(node.source);\n    const attributes = this.visit(node.attributes);\n    if (source !== node.source || attributes !== node.attributes)\n      return new ImportExpression(source, attributes);\n    return node;\n  }\n  visitImportDeclaration(node) {\n    const specifiers = this.visitNodeList(node.specifiers);\n    const source = this.visit(node.source);\n    const assertions = this.visitNodeList(node.assertions);\n    if (specifiers !== node.specifiers || source !== node.source || assertions !== node.assertions)\n      return new ImportDeclaration(specifiers, source, assertions);\n    return node;\n  }\n  visitImportDefaultSpecifier(node) {\n    const local = this.visit(node.local);\n    if (local !== node.local)\n      return new ImportDefaultSpecifier(local);\n    return node;\n  }\n  visitImportNamespaceSpecifier(node) {\n    const local = this.visit(node.local);\n    if (local !== node.local)\n      return new ImportNamespaceSpecifier(local);\n    return node;\n  }\n  visitImportSpecifier(node) {\n    const local = this.visit(node.local);\n    const imported = this.visit(node.imported);\n    if (local !== node.local || imported !== node.imported)\n      return new ImportSpecifier(local, imported);\n    return node;\n  }\n  visitLiteral(node) {\n    return node;\n  }\n  visitLabeledStatement(node) {\n    const label = this.visit(node.label);\n    const body = this.visit(node.body);\n    if (label !== node.label || body !== node.body)\n      return new LabeledStatement(label, body);\n    return node;\n  }\n  visitLogicalExpression(node) {\n    const left = this.visit(node.left);\n    const right = this.visit(node.right);\n    if (left !== node.left || right !== node.right)\n      return new LogicalExpression(node.operator, left, right);\n    return node;\n  }\n  visitMemberExpression(node) {\n    const _object = this.visit(node.object);\n    const property = this.visit(node.property);\n    if (_object !== node.object || property !== node.property)\n      return new MemberExpression(node.computed, _object, property, node.optional);\n    return node;\n  }\n  visitMetaProperty(node) {\n    const meta = this.visit(node.meta);\n    const property = this.visit(node.property);\n    if (meta !== node.meta || property !== node.property)\n      return new MetaProperty(meta, property);\n    return node;\n  }\n  visitMethodDefinition(node) {\n    const key = this.visit(node.key);\n    const value = this.visit(node.value);\n    const decorators = this.visitNodeList(node.decorators);\n    if (key !== node.key || value !== node.value || decorators !== node.decorators)\n      return new MethodDefinition(key, node.computed, value, node.kind, node.static, decorators);\n    return node;\n  }\n  visitNewExpression(node) {\n    const callee = this.visit(node.callee);\n    const args = this.visitNodeList(node.arguments);\n    if (callee !== node.callee || args !== node.arguments)\n      return new NewExpression(callee, args);\n    return node;\n  }\n  visitObjectExpression(node) {\n    const properties = this.visitNodeList(node.properties);\n    if (properties !== node.properties)\n      return new ObjectExpression(properties);\n    return node;\n  }\n  visitObjectPattern(node) {\n    const properties = this.visitNodeList(node.properties);\n    if (properties !== node.properties)\n      return new ObjectPattern(properties);\n    return node;\n  }\n  visitProgram(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new Program(node.sourceType, body);\n    return node;\n  }\n  visitProperty(node) {\n    const key = this.visit(node.key);\n    const value = this.visit(node.value);\n    const decorators = this.visitNodeList(node.decorators);\n    if (key !== node.key || value !== node.value || decorators !== decorators) {\n      if (\"kind\" in node)\n        return new Property(node.kind, key, node.computed, value, node.method, node.shorthand);\n      else\n        return new PropertyDefinition(key, node.computed, value, node.static, decorators);\n    }\n    return node;\n  }\n  visitPrivateIdentifier(node) {\n    return node;\n  }\n  visitRestElement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new RestElement(argument);\n    return node;\n  }\n  visitReturnStatement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new ReturnStatement(argument);\n    return node;\n  }\n  visitSequenceExpression(node) {\n    const expressions = this.visitNodeList(node.expressions);\n    if (expressions !== node.expressions)\n      return new SequenceExpression(expressions);\n    return node;\n  }\n  visitSpreadElement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new SpreadElement(argument);\n    return node;\n  }\n  visitStaticBlock(node) {\n    const body = this.visitNodeList(node.body);\n    if (body !== node.body)\n      return new StaticBlock(body);\n    return node;\n  }\n  visitSuper(node) {\n    return node;\n  }\n  visitSwitchCase(node) {\n    const test = this.visit(node.test);\n    const consequent = this.visitNodeList(node.consequent);\n    if (test !== node.test || consequent !== node.consequent)\n      return new SwitchCase(test, consequent);\n    return node;\n  }\n  visitSwitchStatement(node) {\n    const discriminant = this.visit(node.discriminant);\n    const cases = this.visitNodeList(node.cases);\n    if (discriminant !== node.discriminant || cases !== node.cases)\n      return new SwitchStatement(discriminant, cases);\n    return node;\n  }\n  visitTaggedTemplateExpression(node) {\n    const tag = this.visit(node.tag);\n    const quasi = this.visit(node.quasi);\n    if (tag !== node.tag || quasi !== node.quasi)\n      return new TaggedTemplateExpression(tag, quasi);\n    return node;\n  }\n  visitTemplateElement(node) {\n    return node;\n  }\n  visitTemplateLiteral(node) {\n    const quasis = this.visitNodeList(node.quasis);\n    const expressions = this.visitNodeList(node.expressions);\n    if (quasis !== node.quasis || expressions !== node.expressions)\n      return new TemplateLiteral(quasis, expressions);\n    return node;\n  }\n  visitThisExpression(node) {\n    return node;\n  }\n  visitThrowStatement(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new ThrowStatement(argument);\n    return node;\n  }\n  visitTryStatement(node) {\n    const block = this.visit(node.block);\n    const handler = this.visit(node.handler);\n    const finalizer = this.visit(node.finalizer);\n    if (block !== node.block || handler !== node.handler || finalizer !== node.finalizer)\n      return new TryStatement(block, handler, finalizer);\n    return node;\n  }\n  visitUnaryExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new UnaryExpression(node.operator, argument);\n    return node;\n  }\n  visitUpdateExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new UpdateExpression(node.operator, argument, node.prefix);\n    return node;\n  }\n  visitVariableDeclaration(node) {\n    const declarations = this.visitNodeList(node.declarations);\n    if (declarations !== node.declarations)\n      return new VariableDeclaration(declarations, node.kind);\n    return node;\n  }\n  visitVariableDeclarator(node) {\n    const id = this.visit(node.id);\n    const init = this.visit(node.init);\n    if (id !== node.id || init !== node.init)\n      return new VariableDeclarator(id, init);\n    return node;\n  }\n  visitWhileStatement(node) {\n    const test = this.visit(node.test);\n    const body = this.visit(node.body);\n    if (test !== node.test || body !== node.body)\n      return new WhileStatement(test, body);\n    return node;\n  }\n  visitWithStatement(node) {\n    const _object = this.visit(node.object);\n    const body = this.visit(node.body);\n    if (_object !== node.object || body !== node.body)\n      return new WithStatement(_object, body);\n    return node;\n  }\n  visitYieldExpression(node) {\n    const argument = this.visit(node.argument);\n    if (argument !== node.argument)\n      return new YieldExpression(argument, node.delegate);\n    return node;\n  }\n};\n\n// src/esprima.ts\nfunction parse(code, options, delegate) {\n  let commentHandler = null;\n  const proxyDelegate = (node, metadata) => {\n    if (delegate) {\n      delegate(node, metadata);\n    }\n    if (commentHandler) {\n      commentHandler.visit(node, metadata);\n    }\n  };\n  let parserDelegate = typeof delegate === \"function\" ? proxyDelegate : null;\n  let collectComment = false;\n  if (options) {\n    collectComment = typeof options.comment === \"boolean\" && options.comment;\n    const attachComment = typeof options.attachComment === \"boolean\" && options.attachComment;\n    if (collectComment || attachComment) {\n      commentHandler = new CommentHandler();\n      commentHandler.attach = attachComment;\n      options.comment = true;\n      parserDelegate = proxyDelegate;\n    }\n  }\n  let isModule = false;\n  if (options && typeof options.sourceType === \"string\") {\n    isModule = options.sourceType === \"module\";\n  }\n  let parser;\n  if (options && typeof options.jsx === \"boolean\" && options.jsx) {\n    parser = new JSXParser(code, options, parserDelegate);\n  } else {\n    parser = new Parser(code, options, parserDelegate);\n  }\n  const program = isModule ? parser.parseModule() : parser.parseScript();\n  const ast = program;\n  if (collectComment && commentHandler) {\n    ast.comments = commentHandler.comments;\n  }\n  if (parser.config.tokens) {\n    ast.tokens = parser.tokens;\n  }\n  if (parser.config.tolerant) {\n    ast.errors = parser.errorHandler.errors;\n  }\n  return ast;\n}\nfunction parseModule(code, options, delegate) {\n  const parsingOptions = options || {};\n  parsingOptions.sourceType = \"module\";\n  return parse(code, parsingOptions, delegate);\n}\nfunction parseScript(code, options, delegate) {\n  const parsingOptions = options || {};\n  parsingOptions.sourceType = \"script\";\n  return parse(code, parsingOptions, delegate);\n}\nfunction tokenize(code, options, delegate) {\n  const tokenizer = new Tokenizer(code, options);\n  const tokens = [];\n  try {\n    while (true) {\n      let token = tokenizer.getNextToken();\n      if (!token) {\n        break;\n      }\n      if (delegate) {\n        token = delegate(token);\n      }\n      tokens.push(token);\n    }\n  } catch (e) {\n    tokenizer.errorHandler.tolerate(e);\n  }\n  if (tokenizer.errorHandler.tolerant) {\n    tokens.errors = tokenizer.errors();\n  }\n  return tokens;\n}\nvar version = \"6.0.2\";\nvar esprima_default = {\n  parse,\n  parseModule,\n  parseScript,\n  tokenize,\n  Syntax,\n  version\n};\nexport {\n  ArrayExpression,\n  ArrayPattern,\n  ArrowFunctionExpression,\n  AssignmentExpression,\n  AssignmentPattern,\n  AsyncFunctionDeclaration,\n  AwaitExpression,\n  BigIntLiteral,\n  BinaryExpression,\n  BlockStatement,\n  BreakStatement,\n  CallExpression,\n  CatchClause,\n  ChainExpression,\n  ClassBody,\n  ClassDeclaration,\n  ClassExpression,\n  ConditionalExpression,\n  ContinueStatement,\n  DebuggerStatement,\n  Decorator,\n  Directive,\n  DoWhileStatement,\n  EmptyStatement,\n  ExportAllDeclaration,\n  ExportDefaultDeclaration,\n  ExportNamedDeclaration,\n  ExportSpecifier,\n  ExpressionStatement,\n  ForInStatement,\n  ForOfStatement,\n  ForStatement,\n  FunctionDeclaration,\n  FunctionExpression,\n  Identifier,\n  IfStatement,\n  ImportAttribute,\n  ImportDeclaration,\n  ImportDefaultSpecifier,\n  ImportExpression,\n  ImportNamespaceSpecifier,\n  ImportSpecifier,\n  LabeledStatement,\n  Literal,\n  LogicalExpression,\n  MemberExpression,\n  MetaProperty,\n  MethodDefinition,\n  Module,\n  NewExpression,\n  nodes_exports as Nodes,\n  ObjectExpression,\n  ObjectPattern,\n  PrivateIdentifier,\n  Program,\n  Property,\n  PropertyDefinition,\n  RegexLiteral,\n  RestElement,\n  ReturnStatement,\n  Script,\n  SequenceExpression,\n  SpreadElement,\n  StaticBlock,\n  Super,\n  SwitchCase,\n  SwitchStatement,\n  Syntax,\n  TaggedTemplateExpression,\n  TemplateElement,\n  TemplateLiteral,\n  ThisExpression,\n  ThrowStatement,\n  TryStatement,\n  UnaryExpression,\n  UpdateExpression,\n  VariableDeclaration,\n  VariableDeclarator,\n  Visitor,\n  WhileStatement,\n  WithStatement,\n  YieldExpression,\n  esprima_default as default,\n  parse,\n  parseModule,\n  parseScript,\n  tokenize,\n  version\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE: ContentIndex \u2014 Trie-Based Search Index\r\n *\r\n * ContentIndex provides a compressed trie data structure for fast term lookup\r\n * across project content. It is the shared search engine used by:\r\n *\r\n * 1. **Omni Search (Ctrl+E)** \u2014 Bottom status bar in the editor. Uses\r\n *    `getDescendentStrings()` for autocomplete term suggestions and\r\n *    `getMatches()` for finding matched project item paths.\r\n *\r\n * 2. **Search in Files (Ctrl+Shift+F)** \u2014 ProjectSearchDialog uses the\r\n *    index to prioritize candidate files before doing brute-force text scan.\r\n *\r\n * 3. **Quick Open (Ctrl+P)** \u2014 QuickOpenDialog uses simple path includes()\r\n *    but could be enhanced to use this index in the future.\r\n *\r\n * **Data Structure:**\r\n * - `items[]` \u2014 Array of indexed values (file paths like `/bp/entities/pig.json`)\r\n * - `trie{}` \u2014 Compressed trie mapping search terms \u2192 arrays of item indices\r\n *   - Terminal nodes use `\u00B1` or `$` markers\r\n *   - Annotated entries use `IAnnotatedIndexData { n: number, a: string }`\r\n *\r\n * **Index Population (ProjectInfoSet.ts):**\r\n * - File base names (e.g., \"pig\" from \"pig.json\")\r\n * - Storage relative paths (e.g., \"entities/pig.json\")\r\n * - Parsed JSON content tokens (words > 2 chars)\r\n * - Parsed JS/TS tokens via esprima\r\n * - Entity/block/item type IDs from info generators (with annotation categories)\r\n *\r\n * **Key Methods:**\r\n * - `getMatches(searchString)` \u2014 Multi-term AND search. Splits on spaces,\r\n *   intersects results across terms. Each term is matched via both trie\r\n *   traversal and linear substring scan of items[].\r\n * - `getDescendentStrings(term)` \u2014 Returns all trie entries starting with\r\n *   the given prefix (for autocomplete dropdown).\r\n * - `getTermMatch(term)` \u2014 Single-term lookup: trie traversal + linear\r\n *   substring scan of items[] for path matching.\r\n * - `insert(key, item, annotation?)` \u2014 Inserts a term into the trie.\r\n *\r\n * **Configuration:**\r\n * - `startLength` \u2014 Minimum input length before autocomplete triggers (currently 3).\r\n * - JSON token threshold \u2014 Tokens > 2 chars are indexed from parsed content.\r\n *\r\n * Last updated: February 2026\r\n */\r\n\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IAnnotatedValue } from \"./AnnotatedValue\";\r\nimport { HashCatalog } from \"./HashUtilities\";\r\nimport IContextIndexData from \"./IContentIndexData\";\r\nimport Log from \"./Log\";\r\nimport Utilities from \"./Utilities\";\r\nimport esprima from \"esprima-next\";\r\n\r\nexport enum AnnotationCategory {\r\n  blockTextureReferenceSource = \"a\",\r\n  blockTypeDependent = \"b\",\r\n  entityComponentDependent = \"c\",\r\n  blockComponentDependent = \"d\",\r\n  entityTypeDependent = \"e\",\r\n  entityFilter = \"f\",\r\n  entityComponentDependentInGroup = \"g\",\r\n  blockTextureReferenceDependent = \"h\",\r\n  itemTypeDependent = \"i\",\r\n  itemComponentDependent = \"j\",\r\n  itemTextureReferenceSource = \"k\",\r\n  featureSource = \"l\",\r\n  featureDependent = \"m\",\r\n  featureRuleSource = \"n\",\r\n  blockComponentDependentInPermutation = \"p\",\r\n  storagePathDependent = \"s\",\r\n  textureFile = \"t\",\r\n  entityEvent = \"v\",\r\n  blockTypeSource = \"B\",\r\n  entityTypeSource = \"E\",\r\n  itemTypeSource = \"I\",\r\n  itemTextureSource = \"J\",\r\n  blockSounds = \"L\",\r\n  musicDefinitionSource = \"M\",\r\n  entitySounds = \"N\",\r\n  interactiveSounds = \"R\",\r\n  jsSource = \"S\",\r\n  terrainTextureSource = \"T\",\r\n  soundDefinitionSource = \"U\",\r\n  individualEventSoundsSource = \"V\",\r\n  worldProperty = \"W\",\r\n  experiment = \"X\",\r\n\r\n  // Cross-reference completion annotation categories\r\n  geometrySource = \"G\",\r\n  animationSource = \"A\",\r\n  animationControllerSource = \"C\",\r\n  renderControllerSource = \"D\",\r\n  particleSource = \"P\",\r\n  fogSource = \"F\",\r\n  lootTableSource = \"O\",\r\n  recipeSource = \"Q\",\r\n  biomeSource = \"Y\",\r\n  spawnRuleSource = \"Z\",\r\n  structureSource = \"r\",\r\n  dialogueSource = \"q\",\r\n  functionSource = \"u\",\r\n  soundEventSource = \"w\",\r\n\r\n  // Component-level annotation categories for biomes and particles\r\n  biomeBehaviorComponentDependent = \"x\",\r\n  biomeClientComponentDependent = \"y\",\r\n  particleEmitterComponentDependent = \"z\",\r\n  particleComponentDependent = \"pc\",\r\n}\r\n\r\nexport interface IAnnotatedIndexData {\r\n  n: number;\r\n  a: string;\r\n}\r\n\r\nexport interface IContentIndex {\r\n  getDescendentStrings(term: string): Promise<{ [fullKey: string]: IAnnotatedValue[] | undefined } | undefined>;\r\n  getMatches(\r\n    searchString: string,\r\n    wholeTermSearch?: boolean,\r\n    withAnnotation?: AnnotationCategory[]\r\n  ): Promise<IAnnotatedValue[] | undefined>;\r\n  startLength: number;\r\n}\r\n\r\nexport default class ContentIndex implements IContentIndex {\r\n  private _processedPathsCache?: string[];\r\n  private _hashCatalog: HashCatalog = {};\r\n\r\n  // O(1) lookup map: item string \u2192 index in items[]. Replaces O(n) linear scans\r\n  // in insert() and getTermMatch(). Rebuilt on setItems().\r\n  private _itemIndexMap: Map<string, number> = new Map();\r\n\r\n  #data: IContextIndexData = {\r\n    items: [],\r\n    trie: {},\r\n  };\r\n\r\n  public get hashCatalog(): HashCatalog {\r\n    return this._hashCatalog;\r\n  }\r\n\r\n  #iteration: number = Math.floor(Math.random() * 1000000);\r\n\r\n  get iteration() {\r\n    return this.#iteration;\r\n  }\r\n\r\n  set iteration(newIteration: number) {\r\n    this.#iteration = newIteration;\r\n  }\r\n\r\n  static getAnnotationCategoryKeys() {\r\n    const keys: string[] = [];\r\n\r\n    for (const key in AnnotationCategory) {\r\n      keys.push(key.toLowerCase());\r\n    }\r\n\r\n    return keys;\r\n  }\r\n\r\n  static getAnnotationCategoryFromLongString(longStr: string) {\r\n    longStr = longStr.toLowerCase();\r\n\r\n    for (const key in AnnotationCategory) {\r\n      if (key.toLowerCase() === longStr) {\r\n        return (AnnotationCategory as { [keyName: string]: string })[key];\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get data() {\r\n    return this.#data;\r\n  }\r\n\r\n  get startLength() {\r\n    return 3;\r\n  }\r\n\r\n  get items() {\r\n    return this.#data.items;\r\n  }\r\n\r\n  setItems(items: string[]) {\r\n    this.#data.items = items;\r\n    this._processedPathsCache = undefined; // reset processed paths cache\r\n\r\n    // Rebuild the O(1) lookup map from the new items array\r\n    this._itemIndexMap.clear();\r\n    for (let i = 0; i < items.length; i++) {\r\n      this._itemIndexMap.set(items[i], i);\r\n    }\r\n  }\r\n\r\n  setTrie(trie: {}) {\r\n    this.#data.trie = trie;\r\n  }\r\n\r\n  getAll(withAnnotation?: AnnotationCategory[]): { [fullKey: string]: IAnnotatedValue[] } {\r\n    const results: { [fullKey: string]: IAnnotatedValue[] } = {};\r\n\r\n    this._appendToResults(\"\", this.#data.trie, results, withAnnotation);\r\n\r\n    return results;\r\n  }\r\n\r\n  _appendToResults(\r\n    prefix: string,\r\n    node: any,\r\n    results: { [fullKey: string]: IAnnotatedValue[] | undefined },\r\n    withAnnotation?: AnnotationCategory[]\r\n  ) {\r\n    for (const token in node) {\r\n      const subNode = node[token];\r\n\r\n      if (subNode) {\r\n        if (token === \"\u00B1\" || token === \"$\") {\r\n          const arr = subNode;\r\n\r\n          if (Array.isArray(arr)) {\r\n            if (Utilities.isUsableAsObjectKey(prefix)) {\r\n              let res = this.getValuesFromIndexArray(arr, withAnnotation);\r\n\r\n              if (res) {\r\n                results[prefix] = res;\r\n              }\r\n            }\r\n          }\r\n        } else if (Array.isArray(subNode)) {\r\n          if (Utilities.isUsableAsObjectKey(prefix + token)) {\r\n            let res = this.getValuesFromIndexArray(subNode, withAnnotation);\r\n\r\n            if (res) {\r\n              results[prefix + token] = res;\r\n            }\r\n          }\r\n        } else {\r\n          this._appendToResults(prefix + token, subNode, results, withAnnotation);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  mergeFrom(index: ContentIndex, newItem: string) {\r\n    const all = index.getAll();\r\n\r\n    for (const fullKey in all) {\r\n      const annVals = all[fullKey];\r\n\r\n      let annVal: string | undefined;\r\n\r\n      for (const subVal of annVals) {\r\n        if (subVal.annotation) {\r\n          if (!annVal) {\r\n            annVal = subVal.annotation;\r\n          } else if (annVal.indexOf(subVal.annotation) < 0) {\r\n            annVal += subVal.annotation;\r\n          }\r\n        }\r\n      }\r\n\r\n      this.insert(fullKey, newItem, annVal);\r\n    }\r\n  }\r\n\r\n  static processResultValues(annotatedValues: IAnnotatedValue[] | undefined, withAnyAnnotation?: AnnotationCategory[]) {\r\n    if (!annotatedValues) {\r\n      return undefined;\r\n    }\r\n\r\n    if (withAnyAnnotation) {\r\n      let newAnnotatedValues: IAnnotatedValue[] = [];\r\n\r\n      for (const annV of annotatedValues) {\r\n        if (annV.annotation && withAnyAnnotation.includes(annV.annotation as AnnotationCategory)) {\r\n          newAnnotatedValues.push(annV);\r\n        }\r\n      }\r\n\r\n      annotatedValues = newAnnotatedValues;\r\n    }\r\n\r\n    return annotatedValues;\r\n  }\r\n\r\n  getValuesFromIndexArray(\r\n    indices: (IAnnotatedIndexData | number)[],\r\n    withAnnotation?: AnnotationCategory[]\r\n  ): IAnnotatedValue[] | undefined {\r\n    let results: IAnnotatedValue[] = [];\r\n\r\n    if (!indices) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Utilities.arrayHasNegativeAndIsNumeric(indices)) {\r\n      indices = Utilities.decodeSequentialRunLengthUsingNegative(indices as number[]);\r\n    }\r\n\r\n    for (const index of indices) {\r\n      if (typeof index === \"object\") {\r\n        const indexN = (index as IAnnotatedIndexData).n;\r\n        if (indexN >= 0 && indexN < this.#data.items.length) {\r\n          const annotate = index.a;\r\n\r\n          if (!withAnnotation || withAnnotation.includes(annotate as AnnotationCategory)) {\r\n            results.push({ value: this.#data.items[indexN], annotation: (index as IAnnotatedIndexData).a });\r\n          }\r\n        }\r\n      } else if (index >= 0 && index < this.#data.items.length && !withAnnotation) {\r\n        results.push({ value: this.#data.items[index], annotation: undefined });\r\n      }\r\n    }\r\n\r\n    if (results.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  loadFromData(data: IContextIndexData) {\r\n    this.#data = data;\r\n    this._processedPathsCache = undefined; // reset processed paths cache\r\n  }\r\n\r\n  private _getProcessedPaths() {\r\n    if (this._processedPathsCache) return this._processedPathsCache;\r\n\r\n    this._processedPathsCache = this.data.items\r\n      .filter((item) => item.startsWith(\"/\"))\r\n      .map((item) => {\r\n        const lastPeriod = item.lastIndexOf(\".\");\r\n        return lastPeriod >= 0 ? item.substring(0, lastPeriod) : item;\r\n      });\r\n\r\n    return this._processedPathsCache;\r\n  }\r\n\r\n  hasPathMatches(pathEnd: string) {\r\n    pathEnd = pathEnd.toLowerCase();\r\n\r\n    pathEnd = StorageUtilities.stripExtension(pathEnd);\r\n\r\n    return this._getProcessedPaths().some((path) => path.endsWith(pathEnd));\r\n  }\r\n\r\n  getPathMatches(pathEnd: string) {\r\n    pathEnd = pathEnd.toLowerCase();\r\n\r\n    let pathType = ProjectUtilities.inferJsonProjectItemTypeFromExtension(pathEnd);\r\n    pathEnd = StorageUtilities.stripExtension(pathEnd);\r\n\r\n    const results: string[] = [];\r\n\r\n    for (const candPath of this.data.items) {\r\n      const candType = ProjectUtilities.inferJsonProjectItemTypeFromExtension(candPath);\r\n      const candPathStripped = StorageUtilities.stripExtension(candPath.toLowerCase());\r\n\r\n      if (candPathStripped.endsWith(pathEnd) && pathType === candType) {\r\n        results.push(StorageUtilities.stripExtension(candPath));\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async getMatches(searchString: string, wholeTermSearch?: boolean, withAnyAnnotation?: AnnotationCategory[]) {\r\n    if (typeof searchString !== \"string\") {\r\n      Log.unexpectedContentState(\"CIMGMS\");\r\n      return undefined;\r\n    }\r\n\r\n    searchString = searchString.trim().toLowerCase();\r\n\r\n    let terms = [searchString];\r\n\r\n    if (!wholeTermSearch) {\r\n      terms = searchString.split(\" \");\r\n    }\r\n\r\n    let termWasSearched = false;\r\n\r\n    let andResults: number[] | undefined;\r\n\r\n    for (const term of terms) {\r\n      if (term.length > 1) {\r\n        const results = this.getTermMatch(term);\r\n        termWasSearched = true;\r\n\r\n        if (results && results.length) {\r\n          if (andResults === undefined) {\r\n            andResults = results;\r\n          } else {\r\n            const newArr = [];\r\n\r\n            for (let num of results) {\r\n              if (andResults.includes(num)) {\r\n                newArr.push(num);\r\n              }\r\n            }\r\n\r\n            andResults = newArr;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (andResults === undefined || andResults.length === 0) {\r\n      if (termWasSearched) {\r\n        return [];\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n\r\n    let annotatedValues = ContentIndex.processResultValues(this.getValuesFromIndexArray(andResults), withAnyAnnotation);\r\n\r\n    if (!annotatedValues) {\r\n      return undefined;\r\n    }\r\n\r\n    return annotatedValues.sort((a: IAnnotatedValue, b: IAnnotatedValue) => {\r\n      let aTermMatches = 0;\r\n      let bTermMatches = 0;\r\n      const aVal = a.value.toLowerCase();\r\n      const bVal = b.value.toLowerCase();\r\n\r\n      for (const term of terms) {\r\n        if (aVal.startsWith(term)) {\r\n          aTermMatches += 5;\r\n        } else if (aVal.includes(term)) {\r\n          aTermMatches++;\r\n        }\r\n\r\n        if (bVal.startsWith(term)) {\r\n          bTermMatches += 5;\r\n        } else if (bVal.includes(term)) {\r\n          bTermMatches++;\r\n        }\r\n      }\r\n\r\n      if (aTermMatches === bTermMatches) {\r\n        return Utilities.staticCompare(a.value, b.value);\r\n      }\r\n\r\n      return bTermMatches - aTermMatches;\r\n    });\r\n  }\r\n\r\n  getTermMatchStrings(term: string) {\r\n    const results = this.getTermMatch(term);\r\n\r\n    if (results === undefined) {\r\n      return results;\r\n    }\r\n\r\n    return this.getValuesFromIndexArray(results);\r\n  }\r\n\r\n  async getDescendentStrings(term: string) {\r\n    let termIndex = 0;\r\n    let curNode: any = this.#data.trie;\r\n\r\n    const results: { [fullKey: string]: IAnnotatedValue[] | undefined } = {};\r\n\r\n    let hasAdvanced = true;\r\n    let termSubstr = \"\";\r\n\r\n    while (termIndex < term.length && hasAdvanced) {\r\n      hasAdvanced = false;\r\n      if (Array.isArray(curNode)) {\r\n        return undefined;\r\n      }\r\n\r\n      let nextNode = curNode[term[termIndex]];\r\n      if (nextNode) {\r\n        curNode = nextNode;\r\n        termIndex++;\r\n\r\n        termSubstr = term.substring(0, termIndex);\r\n        hasAdvanced = true;\r\n      } else {\r\n        let nextStart = term[termIndex];\r\n\r\n        for (const item in curNode) {\r\n          // we've found part of our string in this node\r\n\r\n          if (item.startsWith(nextStart) && curNode[item] !== undefined) {\r\n            let itemIndex = 0;\r\n            hasAdvanced = true;\r\n            curNode = curNode[item];\r\n            termSubstr = term.substring(0, termIndex) + item;\r\n\r\n            while (termIndex < term.length && itemIndex < item.length && item[itemIndex] === term[termIndex]) {\r\n              itemIndex++;\r\n              termIndex++;\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (termIndex < term.length) {\r\n      const termStub = term.substring(termIndex);\r\n\r\n      for (const childNodeName in curNode) {\r\n        if (childNodeName.startsWith(termStub) && curNode[childNodeName]) {\r\n          this._appendToResults(term.substring(0, termIndex) + childNodeName, curNode[childNodeName], results);\r\n        }\r\n      }\r\n    } else {\r\n      if (Array.isArray(curNode)) {\r\n        results[termSubstr] = this.getValuesFromIndexArray(curNode);\r\n      } else if (curNode[\"\u00B1\"] !== undefined) {\r\n        this._appendToResults(termSubstr, curNode, results);\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getTermMatch(term: string) {\r\n    let termIndex = 0;\r\n    let curNode: any = this.#data.trie;\r\n\r\n    let hasAdvanced = true;\r\n\r\n    let pathMatches: number[] | undefined = undefined;\r\n\r\n    let i = 0;\r\n    for (const item of this.#data.items) {\r\n      if (item.indexOf(term) >= 0) {\r\n        if (!pathMatches) {\r\n          pathMatches = [];\r\n        }\r\n        pathMatches.push(i);\r\n      }\r\n\r\n      i++;\r\n    }\r\n\r\n    while (termIndex < term.length && hasAdvanced) {\r\n      hasAdvanced = false;\r\n      if (Array.isArray(curNode)) {\r\n        return undefined;\r\n      }\r\n\r\n      let nextNode = curNode[term[termIndex]];\r\n      if (nextNode) {\r\n        curNode = nextNode;\r\n        termIndex++;\r\n        hasAdvanced = true;\r\n      } else {\r\n        let nextStart = term[termIndex];\r\n\r\n        if (termIndex < term.length - 1) {\r\n          nextStart += term[termIndex + 1];\r\n        }\r\n\r\n        for (const item in curNode) {\r\n          // we've found part of our string in this node\r\n\r\n          if (item.startsWith(nextStart) && curNode[item] !== undefined && !hasAdvanced) {\r\n            let itemIndex = 0;\r\n            hasAdvanced = true;\r\n            curNode = curNode[item];\r\n\r\n            while (termIndex < term.length && itemIndex < item.length && item[itemIndex] === term[termIndex]) {\r\n              itemIndex++;\r\n              termIndex++;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (termIndex < term.length) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Array.isArray(curNode)) {\r\n      if (pathMatches) {\r\n        return ContentIndex.mergeResults(curNode, pathMatches);\r\n      }\r\n      return curNode;\r\n    } else if (curNode[\"\u00B1\"] !== undefined) {\r\n      if (pathMatches) {\r\n        return ContentIndex.mergeResults(curNode[\"\u00B1\"], pathMatches);\r\n      }\r\n      return curNode[\"\u00B1\"];\r\n    } else {\r\n      const arr: number[] = [];\r\n\r\n      this.aggregateIndices(curNode, arr);\r\n\r\n      if (pathMatches) {\r\n        return ContentIndex.mergeResults(arr, pathMatches);\r\n      }\r\n\r\n      return arr;\r\n    }\r\n  }\r\n\r\n  static mergeResults(resultsArrA: (IAnnotatedValue | number)[], resultsArrB: (IAnnotatedValue | number)[]) {\r\n    const results: (IAnnotatedValue | number)[] = [];\r\n    const seenNumbers = new Set<number>();\r\n    const seenObjects = new Set<string>(); // \"value|annotation\" composite key\r\n\r\n    for (const item of resultsArrA) {\r\n      if (typeof item === \"object\") {\r\n        const key = `${item.value}|${item.annotation}`;\r\n        if (!seenObjects.has(key)) {\r\n          seenObjects.add(key);\r\n          results.push(item);\r\n        }\r\n      } else {\r\n        if (!seenNumbers.has(item)) {\r\n          seenNumbers.add(item);\r\n          results.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const item of resultsArrB) {\r\n      if (typeof item === \"object\") {\r\n        const key = `${item.value}|${item.annotation}`;\r\n        if (!seenObjects.has(key)) {\r\n          seenObjects.add(key);\r\n          results.push(item);\r\n        }\r\n      } else {\r\n        if (!seenNumbers.has(item)) {\r\n          seenNumbers.add(item);\r\n          results.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  aggregateIndices(curNode: any, arr: number[], seen?: Set<number>) {\r\n    if (!seen) {\r\n      seen = new Set<number>(arr);\r\n    }\r\n\r\n    for (const childNodeName in curNode) {\r\n      const childNode = curNode[childNodeName];\r\n\r\n      if (childNode) {\r\n        if (Array.isArray(childNode)) {\r\n          for (const num of childNode) {\r\n            const n = typeof num === \"object\" ? num.n : num;\r\n            if (!seen.has(n)) {\r\n              seen.add(n);\r\n              arr.push(num);\r\n            }\r\n          }\r\n        } else if (childNode[\"\u00B1\"] !== undefined) {\r\n          for (const num of childNode[\"\u00B1\"]) {\r\n            const n = typeof num === \"object\" ? num.n : num;\r\n            if (!seen.has(n)) {\r\n              seen.add(n);\r\n              arr.push(num);\r\n            }\r\n          }\r\n        } else {\r\n          this.aggregateIndices(childNode, arr, seen);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  insertArray(key: string, items: IAnnotatedValue[]) {\r\n    for (const item of items) {\r\n      this.insert(key, item.value, item.annotation);\r\n    }\r\n  }\r\n\r\n  insert(key: string, item: string, annotationChar?: string) {\r\n    if (Utilities.isNumericIsh(key) || key.length > 70) {\r\n      return;\r\n    }\r\n\r\n    // since we treat \u00B1 as special, ban usage of \u00B1 in strings.\r\n    key = key.replace(/\u00B1/gi, \"\").toLowerCase().trim();\r\n\r\n    let keyIndex = 0;\r\n    let curNode: any = this.#data.trie;\r\n    let parentNode: any = curNode;\r\n    let curNodeIndex: string | undefined;\r\n    let dataIndex = -1;\r\n\r\n    // O(1) item lookup via Map (replaces O(n) linear scan)\r\n    const existingIndex = this._itemIndexMap.get(item);\r\n    if (existingIndex !== undefined) {\r\n      dataIndex = existingIndex;\r\n    }\r\n\r\n    if (dataIndex < 0) {\r\n      dataIndex = this.#data.items.length;\r\n      this.#data.items.push(item);\r\n      this._itemIndexMap.set(item, dataIndex);\r\n      this._processedPathsCache = undefined;\r\n    }\r\n\r\n    let hasAdvanced = true;\r\n    while (keyIndex < key.length && hasAdvanced) {\r\n      hasAdvanced = false;\r\n      if (!Array.isArray(curNode)) {\r\n        for (const item in curNode) {\r\n          // we've found part of our string in this node\r\n          if (item.startsWith(key[keyIndex]) && curNode[item] !== undefined) {\r\n            // && curNode[item].constructor !== Array) {\r\n            let itemIndex = 0;\r\n            hasAdvanced = true;\r\n            curNodeIndex = item;\r\n            parentNode = curNode;\r\n            curNode = curNode[item];\r\n\r\n            while (keyIndex < key.length && itemIndex < item.length && item[itemIndex] === key[keyIndex]) {\r\n              itemIndex++;\r\n              keyIndex++;\r\n            }\r\n\r\n            // if we're in the middle of a string like \"subset\", and we're trying add the word \"subpar\",\r\n            // create a new node called \"sub\" and place \"set\" underneath it.\r\n            // also support the case where we're adding \"sub\" but \"subset\" already exists (keyIndex === key.length)\r\n            if (item[itemIndex] !== key[keyIndex] && itemIndex < item.length && keyIndex <= key.length) {\r\n              parentNode[curNodeIndex] = undefined;\r\n              curNodeIndex = item.substring(0, itemIndex);\r\n\r\n              let newNode: any = {};\r\n\r\n              parentNode[curNodeIndex] = newNode;\r\n\r\n              const term = item.substring(itemIndex);\r\n\r\n              if (Utilities.isUsableAsObjectKey(term)) {\r\n                newNode[term] = curNode;\r\n              }\r\n\r\n              curNode = newNode;\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // we've reached the end of the trie; we need to add a new node\r\n    if (keyIndex < key.length) {\r\n      // if parent node was a leaf array, switch to an object\r\n      if (Array.isArray(curNode) && curNodeIndex) {\r\n        parentNode[curNodeIndex] = {};\r\n        parentNode[curNodeIndex][\"\u00B1\"] = curNode;\r\n\r\n        curNode = parentNode[curNodeIndex];\r\n      }\r\n\r\n      const substr = key.substring(keyIndex);\r\n\r\n      if (substr !== \"\u00B1\") {\r\n        if (Utilities.isUsableAsObjectKey(substr)) {\r\n          // create a new leaf array\r\n          curNode[substr] = this.ensureAnnotatedContentInArray([], dataIndex, annotationChar);\r\n        }\r\n      }\r\n    } else {\r\n      if (Array.isArray(curNode) && curNodeIndex) {\r\n        if (Utilities.isUsableAsObjectKey(curNodeIndex)) {\r\n          parentNode[curNodeIndex] = this.ensureAnnotatedContentInArray(curNode, dataIndex, annotationChar);\r\n        }\r\n      } else {\r\n        if (curNode[\"\u00B1\"] === undefined) {\r\n          curNode[\"\u00B1\"] = [];\r\n        }\r\n\r\n        curNode[\"\u00B1\"] = this.ensureAnnotatedContentInArray(curNode[\"\u00B1\"], dataIndex, annotationChar);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureAnnotatedContentInArray(arr: (IAnnotatedIndexData | number)[], dataIndex: number, annotationChar?: string) {\r\n    try {\r\n      for (const item of arr) {\r\n        if (typeof item === \"object\") {\r\n          if ((item as IAnnotatedIndexData).n === dataIndex) {\r\n            if (annotationChar) {\r\n              if (!(item as IAnnotatedIndexData).a) {\r\n                (item as IAnnotatedIndexData).a = annotationChar;\r\n              } else {\r\n                if ((item as IAnnotatedIndexData).a.indexOf(annotationChar) < 0) {\r\n                  (item as IAnnotatedIndexData).a += annotationChar;\r\n                }\r\n              }\r\n            }\r\n\r\n            return arr;\r\n          }\r\n        } else if (item === dataIndex) {\r\n          if (!annotationChar) {\r\n            return arr;\r\n          }\r\n\r\n          // convert simple number to annotated object\r\n          const newArr = [];\r\n\r\n          for (const existItem of arr) {\r\n            if (existItem !== dataIndex) {\r\n              newArr.push(existItem);\r\n            }\r\n          }\r\n\r\n          newArr.push({ n: dataIndex, a: annotationChar });\r\n\r\n          return newArr;\r\n        }\r\n      }\r\n\r\n      if (annotationChar) {\r\n        arr.push({ n: dataIndex, a: annotationChar });\r\n      } else {\r\n        arr.push(dataIndex);\r\n      }\r\n    } catch (e) {\r\n      Log.verbose(\"Error ensuring annotated content: \" + e + \"|\" + arr + \"|\" + JSON.stringify(arr));\r\n    }\r\n\r\n    return arr;\r\n  }\r\n\r\n  parseJsContent(sourcePath: string, content: string) {\r\n    try {\r\n      const results = esprima.tokenize(content);\r\n\r\n      if (results) {\r\n        for (const token of results) {\r\n          if (token.type === \"Identifier\" && token.value && token.value.length > 3) {\r\n            if (token.value !== \"from\") {\r\n              this.insert(token.value.toLowerCase(), sourcePath, \"S\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debugAlert(\"JS parsing error:\" + e);\r\n    }\r\n  }\r\n\r\n  parseTextContent(sourcePath: string, content: string) {\r\n    const dictionaryOfTerms: { [term: string]: boolean | undefined } = {};\r\n\r\n    let curWord = \"\";\r\n\r\n    content = content.toLowerCase();\r\n\r\n    for (let i = 0; i < content.length; i++) {\r\n      const curChar = content[i];\r\n\r\n      if (\r\n        curChar === \"{\" ||\r\n        curChar === \"}\" ||\r\n        curChar === \" \" ||\r\n        curChar === \"\\r\" ||\r\n        curChar === \"\\n\" ||\r\n        curChar === \"\\t\" ||\r\n        curChar === \"(\" ||\r\n        curChar === \")\" ||\r\n        curChar === \"[\" ||\r\n        curChar === \"]\" ||\r\n        curChar === \":\" ||\r\n        curChar === '\"' ||\r\n        curChar === \"'\"\r\n      ) {\r\n        if (curWord.length > 0) {\r\n          if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n            dictionaryOfTerms[curWord] = true;\r\n          }\r\n          curWord = \"\";\r\n        }\r\n      } else {\r\n        curWord += content[i];\r\n      }\r\n    }\r\n\r\n    for (const term in dictionaryOfTerms) {\r\n      this.insert(term, sourcePath);\r\n    }\r\n  }\r\n\r\n  parseJsonContent(sourcePath: string, content: string) {\r\n    const dictionaryOfTerms: { [term: string]: boolean | undefined } = {};\r\n\r\n    let curWord = \"\";\r\n\r\n    content = content.toLowerCase();\r\n\r\n    for (let i = 0; i < content.length; i++) {\r\n      const curChar = content[i];\r\n\r\n      if (\r\n        curChar === \"{\" ||\r\n        curChar === \"}\" ||\r\n        curChar === \" \" ||\r\n        curChar === \"\\r\" ||\r\n        curChar === \"\\n\" ||\r\n        curChar === \"\\t\" ||\r\n        curChar === \"(\" ||\r\n        curChar === \")\" ||\r\n        curChar === \"[\" ||\r\n        curChar === \"]\" ||\r\n        curChar === \":\" ||\r\n        curChar === '\"' ||\r\n        curChar === \"'\"\r\n      ) {\r\n        if (curWord.length > 0) {\r\n          if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n            dictionaryOfTerms[curWord] = true;\r\n          }\r\n          curWord = \"\";\r\n        }\r\n      } else {\r\n        curWord += content[i];\r\n      }\r\n    }\r\n\r\n    for (const term in dictionaryOfTerms) {\r\n      this.insert(term, sourcePath);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Extracts indexable tokens from a parsed JSON object by recursively walking keys and string values.\r\n   * Much faster than parseJsonContent which does character-by-character text tokenization.\r\n   * Only processes keys and string values (the same tokens that parseJsonContent would find).\r\n   */\r\n  indexJsonObject(sourcePath: string, data: object) {\r\n    const terms = new Set<string>();\r\n\r\n    const depthExceeded = ContentIndex._collectJsonTerms(data, terms, 0);\r\n\r\n    if (depthExceeded) {\r\n      Log.debug(\r\n        \"ContentIndex: JSON nesting depth exceeded \" +\r\n          ContentIndex.MAX_JSON_DEPTH +\r\n          \" in '\" +\r\n          sourcePath +\r\n          \"'; skipping deeper levels.\"\r\n      );\r\n    }\r\n\r\n    for (const term of terms) {\r\n      this.insert(term, sourcePath);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recursively collects indexable terms (keys and string values) from a parsed JSON object.\r\n   */\r\n  /** Max nesting depth for JSON term collection. Most Minecraft JSON stays under 10 levels, but features can reach ~25. */\r\n  private static readonly MAX_JSON_DEPTH = 30;\r\n\r\n  private static _collectJsonTerms(obj: any, terms: Set<string>, depth: number): boolean {\r\n    if (obj === null || obj === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (depth > ContentIndex.MAX_JSON_DEPTH) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof obj === \"string\") {\r\n      ContentIndex._addStringTerms(obj, terms);\r\n      return false;\r\n    }\r\n\r\n    // Numbers, booleans, and other primitives are not indexable terms \u2014 skip them.\r\n    if (typeof obj !== \"object\") {\r\n      return false;\r\n    }\r\n\r\n    let exceeded = false;\r\n\r\n    if (Array.isArray(obj)) {\r\n      for (const item of obj) {\r\n        if (ContentIndex._collectJsonTerms(item, terms, depth + 1)) {\r\n          exceeded = true;\r\n        }\r\n      }\r\n      return exceeded;\r\n    }\r\n\r\n    for (const key in obj) {\r\n      // Index the key itself\r\n      const lowerKey = key.toLowerCase();\r\n      if (lowerKey.length > 3 && !Utilities.isNumericIsh(lowerKey) && Utilities.isUsableAsObjectKey(lowerKey)) {\r\n        terms.add(lowerKey);\r\n      }\r\n\r\n      // Recurse into values\r\n      const val = obj[key];\r\n      if (val !== null && val !== undefined) {\r\n        if (ContentIndex._collectJsonTerms(val, terms, depth + 1)) {\r\n          exceeded = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return exceeded;\r\n  }\r\n\r\n  /**\r\n   * Splits a string on common delimiters and adds qualifying terms.\r\n   * Matches the same tokenization logic as parseJsonContent's character loop.\r\n   */\r\n  /** Characters that act as word boundaries when tokenizing strings for indexing. */\r\n  private static readonly TERM_DELIMITERS = new Set([\r\n    \"{\",\r\n    \"}\",\r\n    \" \",\r\n    \"\\r\",\r\n    \"\\n\",\r\n    \"\\t\",\r\n    \"(\",\r\n    \")\",\r\n    \"[\",\r\n    \"]\",\r\n    \":\",\r\n    '\"',\r\n    \"'\",\r\n  ]);\r\n\r\n  private static _addStringTerms(str: string, terms: Set<string>) {\r\n    const lower = str.toLowerCase();\r\n    let curWord = \"\";\r\n\r\n    for (let i = 0; i < lower.length; i++) {\r\n      const c = lower[i];\r\n      if (ContentIndex.TERM_DELIMITERS.has(c)) {\r\n        if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n          terms.add(curWord);\r\n        }\r\n        curWord = \"\";\r\n      } else {\r\n        curWord += c;\r\n      }\r\n    }\r\n    if (curWord.length > 3 && !Utilities.isNumericIsh(curWord) && Utilities.isUsableAsObjectKey(curWord)) {\r\n      terms.add(curWord);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IBlockResource, IBlocksCatalogResource } from \"./IBlocksCatalog\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport Database from \"./Database\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport BlockTypeDefinition from \"./BlockTypeDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport interface BlocksCatalogDependendencies {\r\n  unused: string[];\r\n  vanillaOverride: string[];\r\n}\r\n\r\nexport default class BlocksCatalogDefinition {\r\n  public blocksCatalog?: IBlocksCatalogResource;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<BlocksCatalogDefinition, BlocksCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<BlocksCatalogDefinition, BlocksCatalogDefinition>\r\n  ) {\r\n    let et: BlocksCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new BlocksCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof BlocksCatalogDefinition) {\r\n      et = file.manager as BlocksCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  getCatalogResource(id: string) {\r\n    if (!this.blocksCatalog) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.blocksCatalog[id]) {\r\n      return this.blocksCatalog[id];\r\n    }\r\n\r\n    const colon = id.indexOf(\":\");\r\n\r\n    if (colon >= 0) {\r\n      id = id.substring(colon + 1);\r\n    }\r\n\r\n    return this.blocksCatalog[id];\r\n  }\r\n\r\n  ensureCatalogResource(id: string) {\r\n    if (!this.blocksCatalog) {\r\n      this.blocksCatalog = {};\r\n    }\r\n\r\n    if (this.blocksCatalog[id]) {\r\n      return this.blocksCatalog[id];\r\n    }\r\n\r\n    const colon = id.indexOf(\":\");\r\n\r\n    if (colon >= 0) {\r\n      let noColonId = id.substring(colon + 1);\r\n      if (this.blocksCatalog[noColonId]) {\r\n        return this.blocksCatalog[noColonId];\r\n      }\r\n    }\r\n\r\n    this.blocksCatalog[id] = {};\r\n\r\n    return this.blocksCatalog[id];\r\n  }\r\n\r\n  setBlockDefinition(id: string, catalogResource: IBlockResource) {\r\n    if (!this.blocksCatalog) {\r\n      this.blocksCatalog = {};\r\n    }\r\n\r\n    if (this.blocksCatalog[id]) {\r\n      return this.blocksCatalog[id];\r\n    }\r\n\r\n    const colon = id.indexOf(\":\");\r\n\r\n    if (colon >= 0) {\r\n      let noColonId = id.substring(colon + 1);\r\n      if (this.blocksCatalog[noColonId]) {\r\n        return this.blocksCatalog[noColonId];\r\n      }\r\n    }\r\n\r\n    this.blocksCatalog[id] = catalogResource;\r\n\r\n    this.persist();\r\n    return this.blocksCatalog[id];\r\n  }\r\n\r\n  static async getBlockCatalog(project: Project) {\r\n    const blockCatalogItems = project.getItemsByType(ProjectItemType.blocksCatalogResourceJson);\r\n\r\n    if (blockCatalogItems && blockCatalogItems.length > 0) {\r\n      const blockCatalogItem = blockCatalogItems[0];\r\n\r\n      if (!blockCatalogItem.isContentLoaded) {\r\n        await blockCatalogItem.loadContent();\r\n      }\r\n\r\n      if (blockCatalogItem.primaryFile) {\r\n        return await BlocksCatalogDefinition.ensureOnFile(blockCatalogItem.primaryFile);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureBlockCatalog(project: Project) {\r\n    let blockCatalog = await this.getBlockCatalog(project);\r\n\r\n    if (blockCatalog) {\r\n      return blockCatalog;\r\n    }\r\n\r\n    const defaultRp = await project.getDefaultResourcePackFolder();\r\n\r\n    if (defaultRp) {\r\n      const blockCatalogFile = defaultRp.ensureFile(\"blocks.json\");\r\n      blockCatalogFile.setContent('{\"format_version\": \"1.21.40\"}');\r\n\r\n      project.ensureItemFromFile(\r\n        blockCatalogFile,\r\n        ProjectItemType.blocksCatalogResourceJson,\r\n        FolderContext.resourcePack\r\n      );\r\n\r\n      return await BlocksCatalogDefinition.ensureOnFile(blockCatalogFile);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getDefaultTextureId(id: string) {\r\n    const ref = this.getCatalogResource(id);\r\n\r\n    if (ref && ref.textures) {\r\n      if (typeof ref.textures === \"string\") {\r\n        return ref.textures;\r\n      }\r\n\r\n      if (ref.textures[\"side\"]) {\r\n        return ref.textures[\"side\"];\r\n      } else if (ref.textures[\"up\"]) {\r\n        return ref.textures[\"up\"];\r\n      } else {\r\n        for (const key in ref.textures) {\r\n          return (ref.textures as any)[key];\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getTextureReferences() {\r\n    const textureRefs: string[] = [];\r\n    if (this.blocksCatalog) {\r\n      for (const resourceId in this.blocksCatalog) {\r\n        const resource = this.blocksCatalog[resourceId];\r\n\r\n        if (resource && resource.textures) {\r\n          if (!textureRefs.includes(resourceId)) {\r\n            textureRefs.push(resourceId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureRefs;\r\n  }\r\n\r\n  async getDependenciesList(project: Project) {\r\n    const dependencies: BlocksCatalogDependendencies = {\r\n      unused: [],\r\n      vanillaOverride: [],\r\n    };\r\n\r\n    if (this.blocksCatalog) {\r\n      const myBlockIds: { [name: string]: boolean } = {};\r\n\r\n      let projectItemsCopy = project.getItemsCopy();\r\n\r\n      for (const item of projectItemsCopy) {\r\n        if (item.itemType === ProjectItemType.blockTypeBehavior) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (item.primaryFile) {\r\n            const blockTypeDef = await BlockTypeDefinition.ensureOnFile(item.primaryFile);\r\n\r\n            if (blockTypeDef && blockTypeDef.id && Utilities.isUsableAsObjectKey(blockTypeDef.id)) {\r\n              myBlockIds[blockTypeDef.id] = true;\r\n\r\n              const colon = blockTypeDef.id.indexOf(\":\");\r\n              if (colon >= 0) {\r\n                const noColonId = blockTypeDef.id.substring(colon + 1);\r\n\r\n                myBlockIds[noColonId] = true;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      for (const resourceId in this.blocksCatalog) {\r\n        if (resourceId !== \"format_version\") {\r\n          const resource = this.blocksCatalog[resourceId];\r\n\r\n          if (resource && (resource.textures || resource.sound || resource.carried_textures)) {\r\n            if (!dependencies.unused.includes(resourceId) && !dependencies.vanillaOverride.includes(resourceId)) {\r\n              let foundMatch = myBlockIds[resourceId] === true;\r\n\r\n              if (!foundMatch) {\r\n                let resourceColon = resourceId.indexOf(\":\");\r\n\r\n                if (resourceColon < 0) {\r\n                  const vanillaTermMatches = await Database.getVanillaMatches(\"minecraft:\" + resourceId, true, [\r\n                    AnnotationCategory.blockTypeSource,\r\n                  ]);\r\n\r\n                  if (vanillaTermMatches && vanillaTermMatches.length > 0) {\r\n                    dependencies.vanillaOverride.push(resourceId);\r\n                    foundMatch = true;\r\n                  }\r\n                } else if (resourceId.startsWith(\"minecraft:\")) {\r\n                  const vanillaTermMatches = await Database.getVanillaMatches(resourceId, true, [\r\n                    AnnotationCategory.blockTypeSource,\r\n                  ]);\r\n\r\n                  if (vanillaTermMatches && vanillaTermMatches.length > 0) {\r\n                    dependencies.vanillaOverride.push(resourceId);\r\n                    foundMatch = true;\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (!foundMatch) {\r\n                dependencies.unused.push(resourceId);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return dependencies;\r\n  }\r\n\r\n  removeId(id: string) {\r\n    if (this.blocksCatalog) {\r\n      (this.blocksCatalog[id] as any) = undefined;\r\n    }\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.blocksCatalog !== null, \"ITDP\");\r\n\r\n    if (!this.blocksCatalog) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.blocksCatalog);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"BCRDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this.blocksCatalog = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ITerrainTextureCatalog, ITerrainTextureDataItem } from \"./ITerrainTextureCatalog\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class TerrainTextureCatalogDefinition implements IDefinition {\r\n  private _data?: ITerrainTextureCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public id: string | undefined;\r\n\r\n  private _onLoaded = new EventDispatcher<TerrainTextureCatalogDefinition, TerrainTextureCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get textureData() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.texture_data === undefined) {\r\n      this._data.texture_data = {};\r\n    }\r\n\r\n    return this._data.texture_data;\r\n  }\r\n\r\n  public getTexturePathList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      const texturePathArr = this._data.texture_data[key];\r\n\r\n      if (texturePathArr && texturePathArr.textures) {\r\n        if (typeof texturePathArr.textures === \"string\") {\r\n          textureList.push(texturePathArr.textures.toLowerCase());\r\n        } else if (Array.isArray(texturePathArr.textures)) {\r\n          for (const texturePath of texturePathArr.textures) {\r\n            if (typeof texturePath === \"string\") {\r\n              textureList.push(texturePath.toLowerCase());\r\n            } else if (texturePath.path) {\r\n              textureList.push(texturePath.path.toLowerCase());\r\n            } else if (typeof texturePath === \"object\" && (texturePath as any).variations) {\r\n              for (const variation of (texturePath as any).variations) {\r\n                if (typeof variation === \"string\") {\r\n                  textureList.push(variation.toLowerCase());\r\n                } else if (variation.path && typeof variation.path === \"string\") {\r\n                  textureList.push(variation.path.toLowerCase());\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.texture_data) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  getTerrainTextureDefinition(id: string) {\r\n    if (!this._data || !this._data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.texture_data[id];\r\n  }\r\n\r\n  static async getTerrainTextureCatalog(project: Project) {\r\n    const terrainTextureItems = project.getItemsByType(ProjectItemType.terrainTextureCatalogResourceJson);\r\n\r\n    if (terrainTextureItems && terrainTextureItems.length > 0) {\r\n      if (!terrainTextureItems[0].isContentLoaded) {\r\n        await terrainTextureItems[0].loadContent();\r\n      }\r\n\r\n      if (terrainTextureItems[0].primaryFile) {\r\n        return await TerrainTextureCatalogDefinition.ensureOnFile(terrainTextureItems[0].primaryFile);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureTerrainTextureCatalog(project: Project) {\r\n    let terrainTextureCatalog = await this.getTerrainTextureCatalog(project);\r\n\r\n    if (terrainTextureCatalog) {\r\n      return terrainTextureCatalog;\r\n    }\r\n\r\n    const defaultRp = await project.getDefaultResourcePackFolder();\r\n\r\n    if (defaultRp) {\r\n      const terrainTextureCatalogFile = await defaultRp.ensureFileFromRelativePath(\"/textures/terrain_texture.json\");\r\n\r\n      terrainTextureCatalogFile.setContent(\r\n        JSON.stringify({\r\n          texture_name: \"atlas.terrain\",\r\n          padding: 8,\r\n          num_mip_levels: 4,\r\n          texture_data: {},\r\n        })\r\n      );\r\n\r\n      project.ensureItemFromFile(\r\n        terrainTextureCatalogFile,\r\n        ProjectItemType.terrainTextureCatalogResourceJson,\r\n        FolderContext.resourcePack\r\n      );\r\n\r\n      return await TerrainTextureCatalogDefinition.ensureOnFile(terrainTextureCatalogFile);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<TerrainTextureCatalogDefinition, TerrainTextureCatalogDefinition>\r\n  ) {\r\n    let et: TerrainTextureCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new TerrainTextureCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TerrainTextureCatalogDefinition) {\r\n      et = file.manager as TerrainTextureCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  getAllTexturePaths(textureId: string) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const elt = this.data.texture_data[textureId];\r\n\r\n    if (!elt) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof elt.textures === \"string\") {\r\n      return [elt.textures];\r\n    } else if (Array.isArray(elt.textures) && elt.textures.length > 0) {\r\n      const texturePaths: string[] = [];\r\n\r\n      for (const tex of elt.textures) {\r\n        if (typeof tex === \"string\") {\r\n          texturePaths.push(tex);\r\n        } else if (tex.path) {\r\n          texturePaths.push(tex.path);\r\n        }\r\n      }\r\n\r\n      return texturePaths;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getTexture(textureId: string) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.data.texture_data[textureId];\r\n  }\r\n\r\n  setTexture(textureId: string, textureData: ITerrainTextureDataItem) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return;\r\n    }\r\n\r\n    this.data.texture_data[textureId] = textureData;\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getDefaultTexturePath(textureId: string) {\r\n    if (!this.data || !this.data.texture_data) {\r\n      return undefined;\r\n    }\r\n\r\n    const elt = this.data.texture_data[textureId];\r\n\r\n    if (!elt) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof elt.textures === \"string\") {\r\n      return elt.textures;\r\n    } else if (Array.isArray(elt.textures) && elt.textures.length > 0) {\r\n      if (typeof elt.textures[0] === \"string\") {\r\n        return elt.textures[0];\r\n      } else if (elt.textures[0].path) {\r\n        return elt.textures[0].path;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  getTextureReferences() {\r\n    const textureRefs: string[] = [];\r\n    if (this.data?.texture_data) {\r\n      for (const resourceId in this.data.texture_data) {\r\n        const resource = this.data.texture_data[resourceId];\r\n\r\n        if (resource && resource.textures) {\r\n          if (!textureRefs.includes(resourceId)) {\r\n            textureRefs.push(resourceId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureRefs;\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let texturePathList = this.getTexturePathList();\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && texturePathList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            // texturePathList is lowercased, so we need to compare case-insensitively\r\n            const relativePathLower = relativePath.toLowerCase();\r\n            if (texturePathList && texturePathList.includes(relativePathLower)) {\r\n              item.addChildItem(candItem);\r\n\r\n              texturePathList = Utilities.removeItemInArray(relativePathLower, texturePathList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (texturePathList) {\r\n      for (const texturePath of texturePathList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.isVanillaToken(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class TypeScriptDefinition implements IDefinition {\r\n  private _data?: string;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<TypeScriptDefinition, TypeScriptDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    if (!this._file || !this._file.content || typeof this._file.content != \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    return this._file.content;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<TypeScriptDefinition, TypeScriptDefinition>) {\r\n    let tsd: TypeScriptDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      tsd = new TypeScriptDefinition();\r\n\r\n      tsd.file = file;\r\n\r\n      file.manager = tsd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TypeScriptDefinition) {\r\n      tsd = file.manager as TypeScriptDefinition;\r\n\r\n      if (!tsd.isLoaded) {\r\n        if (loadHandler) {\r\n          tsd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await tsd.load();\r\n      }\r\n    }\r\n\r\n    return tsd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    return false;\r\n  }\r\n\r\n  async load() {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TSCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockBaseType from \"./BlockBaseType\";\r\nimport { BlockRenderType } from \"./BlockRenderType\";\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IBlockTypeBehaviorPack from \"./IBlockTypeBehaviorPack\";\r\nimport IBlockTypeWrapper from \"./IBlockTypeWrapper\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport ManagedPermutation from \"./ManagedPermutation\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport BlocksCatalogDefinition from \"./BlocksCatalogDefinition\";\r\nimport { IBlockResource } from \"./IBlocksCatalog\";\r\nimport TerrainTextureCatalogDefinition from \"./TerrainTextureCatalogDefinition\";\r\nimport TypeScriptDefinition from \"./TypeScriptDefinition\";\r\nimport { IBlockTypeCreationData } from \"./IBlockTypeCreationData\";\r\nimport { ITerrainTextureDataItem } from \"./ITerrainTextureCatalog\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\n\r\nexport enum BlockStateType {\r\n  string = 0,\r\n  boolean = 1,\r\n  number = 2,\r\n}\r\n\r\nexport default class BlockTypeDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _typeId = \"\";\r\n\r\n  private _typeData: IBlockTypeData;\r\n\r\n  private _baseType?: BlockBaseType;\r\n  private _baseTypeId = \"\";\r\n\r\n  private _material = \"\";\r\n  private _isCustom = false;\r\n  private _wrapper: IBlockTypeWrapper | null = null;\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public _data?: IBlockTypeBehaviorPack;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BlockTypeDefinition, BlockTypeDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BlockTypeDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BlockTypeDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<BlockTypeDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get numericId() {\r\n    return this._typeData.lid;\r\n  }\r\n\r\n  public get baseTypeId() {\r\n    return this._baseTypeId;\r\n  }\r\n\r\n  public get mapColor() {\r\n    return this._typeData.mc;\r\n  }\r\n\r\n  public get isCustom() {\r\n    return this._isCustom;\r\n  }\r\n\r\n  public get baseType() {\r\n    if (this._baseType !== undefined) {\r\n      return this._baseType;\r\n    }\r\n\r\n    return Database.defaultBlockBaseType;\r\n  }\r\n\r\n  /**\r\n   * Returns true if this block uses a unit cube geometry.\r\n   * Unit cube blocks can be rendered with textures from blocks.json or material_instances.\r\n   *\r\n   * A block is considered a unit cube if:\r\n   * 1. It has minecraft:unit_cube component (legacy)\r\n   * 2. It has geometry = \"minecraft:geometry.full_block\" or \"geometry.full_block\"\r\n   * 3. It has no geometry component at all (defaults to unit cube)\r\n   */\r\n  public get isUnitCube(): boolean {\r\n    // Check for explicit minecraft:unit_cube component (legacy)\r\n    const unitCubeComponent = this.getComponent(\"minecraft:unit_cube\");\r\n    if (unitCubeComponent) {\r\n      return true;\r\n    }\r\n\r\n    const geoId = this.geometryIdentifier;\r\n\r\n    // No geometry = unit cube\r\n    if (!geoId) {\r\n      return true;\r\n    }\r\n\r\n    // Explicit full_block geometry\r\n    if (geoId === \"minecraft:geometry.full_block\" || geoId === \"geometry.full_block\") {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public get geometryIdentifier() {\r\n    // First check base components\r\n    const geoComponent = this.getComponent(\"minecraft:geometry\");\r\n\r\n    if (geoComponent) {\r\n      // Handle both legacy and modern formats:\r\n      // Legacy (1.16.x): \"minecraft:geometry\": \"geometry.barrier_slab\" (string directly)\r\n      // Modern (1.19.40+): \"minecraft:geometry\": { \"identifier\": \"geometry.my_block\", ... }\r\n      const data = geoComponent.getData();\r\n      if (typeof data === \"string\") {\r\n        return data;\r\n      }\r\n      const id = geoComponent.getProperty(\"identifier\");\r\n      if (id) {\r\n        return id;\r\n      }\r\n    }\r\n\r\n    // If no geometry in base components, check permutations\r\n    // This handles blocks where geometry is only defined in permutations (e.g., arc:flask)\r\n    const geometryList = this.getGeometryList();\r\n    if (geometryList && geometryList.length > 0) {\r\n      return geometryList[0];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Gets the blocks.json catalog resource for this block, if it exists.\r\n   * Returns the IBlockResource which contains texture references for unit cube blocks.\r\n   */\r\n  public async getBlockCatalogResource(project: Project): Promise<IBlockResource | undefined> {\r\n    const blockCatalog = await BlocksCatalogDefinition.getBlockCatalog(project);\r\n    if (blockCatalog && this.id) {\r\n      return blockCatalog.getCatalogResource(this.id);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  public async setBlockCatalogTexture(\r\n    project: Project,\r\n    sideId: \"north\" | \"east\" | \"west\" | \"south\" | \"up\" | \"down\",\r\n    textureId: string\r\n  ) {\r\n    if (this.geometryIdentifier === \"minecraft:geometry.full_block\") {\r\n      const blockCatalog = await BlocksCatalogDefinition.ensureBlockCatalog(project);\r\n\r\n      if (blockCatalog) {\r\n        const blockResource = blockCatalog?.ensureCatalogResource(this.id);\r\n\r\n        if (blockResource.textures && typeof blockResource.textures !== \"string\") {\r\n          blockResource.textures[sideId] = textureId;\r\n        }\r\n\r\n        blockCatalog.persist();\r\n      }\r\n    }\r\n  }\r\n\r\n  public async setTerrainTexture(project: Project, terrainTextureId: string, textureData: ITerrainTextureDataItem) {\r\n    if (this.geometryIdentifier === \"minecraft:geometry.full_block\") {\r\n      const terrainTextureCatalog = await TerrainTextureCatalogDefinition.ensureTerrainTextureCatalog(project);\r\n\r\n      if (terrainTextureCatalog) {\r\n        terrainTextureCatalog.setTexture(terrainTextureId, textureData);\r\n        terrainTextureCatalog.persist();\r\n      }\r\n    }\r\n  }\r\n\r\n  public async ensureBlockAndTerrainLinks(project: Project, creationData: IBlockTypeCreationData) {\r\n    if (this.geometryIdentifier === \"minecraft:geometry.full_block\") {\r\n      const blockCatalog = await BlocksCatalogDefinition.ensureBlockCatalog(project);\r\n      const terrainTextureCatalog = await TerrainTextureCatalogDefinition.ensureTerrainTextureCatalog(project);\r\n\r\n      if (creationData && creationData.resource && blockCatalog) {\r\n        blockCatalog?.setBlockDefinition(this.id, creationData.resource);\r\n      }\r\n      if (creationData && creationData.texture_data && terrainTextureCatalog) {\r\n        for (const textureId in creationData.texture_data) {\r\n          const textureData = creationData.texture_data[textureId];\r\n          terrainTextureCatalog.setTexture(textureId, textureData);\r\n        }\r\n\r\n        const carriedTexturesId = creationData.resource.carried_textures;\r\n\r\n        if (carriedTexturesId) {\r\n          const textureData = creationData.texture_data[carriedTexturesId];\r\n          terrainTextureCatalog.setTexture(carriedTexturesId, textureData);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getMissingPermutations() {\r\n    this.ensurePermutations();\r\n\r\n    const unspecifiedConditions: string[] = [];\r\n\r\n    for (const state of this.getExpandedStateList()) {\r\n      let isUsedInConditionalExpression = false;\r\n      for (const perm of this.getPermutations()) {\r\n        if (\r\n          perm.condition.indexOf(state) >= 0 &&\r\n          (perm.condition.indexOf(\"!=\") >= 0 || perm.condition.indexOf(\">=\") >= 0 || perm.condition.indexOf(\"<=\") >= 0)\r\n        ) {\r\n          isUsedInConditionalExpression = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!isUsedInConditionalExpression) {\r\n        unspecifiedConditions.push(state);\r\n      }\r\n    }\r\n\r\n    const stateIds: string[] = [];\r\n\r\n    const vals: (string | number | boolean)[][] = [];\r\n\r\n    for (const state of unspecifiedConditions) {\r\n      const stateValues = this.getStateValues(state);\r\n\r\n      if (stateValues) {\r\n        vals.push(stateValues);\r\n        stateIds.push(state);\r\n      }\r\n    }\r\n\r\n    let stateList: string[] = [];\r\n\r\n    let idx = 0;\r\n\r\n    for (const valArrs of vals) {\r\n      let newStateList: string[] = [];\r\n\r\n      for (let i = 0; i < valArrs.length; i++) {\r\n        let strVal = valArrs[i];\r\n\r\n        if (typeof strVal === \"string\") {\r\n          strVal = \"'\" + strVal + \"'\";\r\n        }\r\n\r\n        if (stateList.length === 0) {\r\n          let condition = \"q.block_state('\" + stateIds[idx] + \"') == \" + strVal;\r\n\r\n          if (!this.getPermutationByCondition(condition)) {\r\n            newStateList.push(condition);\r\n          }\r\n        } else {\r\n          for (let j = 0; j < stateList.length; j++) {\r\n            let condition = stateList[j] && \" && q.block_state('\" + stateIds[idx] + \"') == \" + strVal;\r\n\r\n            if (!this.getPermutationByCondition(condition)) {\r\n              newStateList.push(stateList[j] && \" && q.block_state('\" + stateIds[idx] + \"') == \" + strVal);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      idx++;\r\n      stateList = newStateList;\r\n    }\r\n\r\n    return stateList;\r\n  }\r\n\r\n  public addNextPermutation() {\r\n    this.ensurePermutations();\r\n\r\n    let missingConditions = this.getMissingPermutations();\r\n\r\n    const cond = missingConditions.length > 0 ? missingConditions[0] : \"q.block_state() == ''\";\r\n\r\n    this.addPermutation(cond);\r\n  }\r\n\r\n  public addPermutation(condition: string) {\r\n    this.ensurePermutations();\r\n\r\n    if (!this._data || !this._data.permutations) {\r\n      return;\r\n    }\r\n\r\n    this._data.permutations.push({\r\n      condition: condition,\r\n      components: {},\r\n    });\r\n  }\r\n\r\n  public ensurePermutations() {\r\n    if (!this._data) {\r\n      this._data = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n        permutations: [],\r\n        events: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data.description) {\r\n      this._data.description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n\r\n    if (!this._data.permutations) {\r\n      this._data.permutations = [];\r\n    }\r\n  }\r\n\r\n  public hasCustomPermutationConditions() {\r\n    if (!this._data || !this._data.permutations || !Array.isArray(this._data.permutations)) {\r\n      return false;\r\n    }\r\n\r\n    for (const perm of this._data.permutations) {\r\n      if (\r\n        perm.condition &&\r\n        (perm.condition.indexOf(\">=\") >= 0 || perm.condition.indexOf(\"<=\") >= 0 || perm.condition.indexOf(\"!=\") >= 0)\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public ensureDescription() {\r\n    if (!this._data) {\r\n      this._data = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data.description) {\r\n      this._data.description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n  }\r\n\r\n  getManagedPermutations() {\r\n    const permData = this.getPermutations();\r\n\r\n    if (!permData || !Array.isArray(permData)) {\r\n      return undefined;\r\n    }\r\n\r\n    const managedPerms: ManagedPermutation[] = [];\r\n\r\n    for (const permDataItem of permData) {\r\n      managedPerms.push(new ManagedPermutation(permDataItem));\r\n    }\r\n\r\n    return managedPerms;\r\n  }\r\n\r\n  getPermutations() {\r\n    if (!this._data || !this.data?.permutations) {\r\n      return [];\r\n    }\r\n\r\n    return this.data.permutations;\r\n  }\r\n\r\n  getPlacementDirectionTrait() {\r\n    if (!this._data || !this._data.description || !this._data.description.traits) {\r\n      return undefined;\r\n    }\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    return traits[\"minecraft:placement_direction\"];\r\n  }\r\n\r\n  getPlacementPositionTrait() {\r\n    if (!this._data || !this._data.description || !this._data.description.traits) {\r\n      return undefined;\r\n    }\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    return traits[\"minecraft:placement_position\"];\r\n  }\r\n\r\n  ensurePlacementDirectionTrait() {\r\n    this.ensureBlockTraits();\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (!traits[\"minecraft:placement_direction\"]) {\r\n        traits[\"minecraft:placement_direction\"] = {\r\n          enabled_states: [\"minecraft:cardinal_direction\", \"minecraft:facing_direction\"],\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  removePlacementDirectionTrait() {\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (traits[\"minecraft:placement_direction\"]) {\r\n        traits[\"minecraft:placement_direction\"] = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  ensurePlacementPositionTrait() {\r\n    this.ensureBlockTraits();\r\n\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (!traits[\"minecraft:placement_position\"]) {\r\n        traits[\"minecraft:placement_position\"] = {\r\n          enabled_states: [\"minecraft:block_face\", \"minecraft:vertical_half\"],\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  removePlacementPositionTrait() {\r\n    const traits = this._data?.description.traits;\r\n\r\n    if (traits) {\r\n      if (traits[\"minecraft:placement_position\"]) {\r\n        traits[\"minecraft:placement_position\"] = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  public ensureBlockTraits() {\r\n    this.ensureDescription();\r\n\r\n    if (this._data?.description && !this._data?.description.traits) {\r\n      this._data.description.traits = {};\r\n    }\r\n  }\r\n\r\n  public removeState(stateName: string) {\r\n    if (this._data?.description?.states) {\r\n      this._data.description.states[stateName] = undefined;\r\n    }\r\n    if (this._data?.description?.properties) {\r\n      this._data.description.properties[stateName] = undefined;\r\n    }\r\n  }\r\n\r\n  public get formatVersion(): string | undefined {\r\n    return this._wrapper?.format_version;\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._wrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._wrapper.format_version);\r\n  }\r\n\r\n  public getStateValues(stateId: string) {\r\n    if (stateId === \"minecraft:block_face\" || stateId === \"minecraft:facing_direction\") {\r\n      return [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"];\r\n    } else if (stateId === \"minecraft:vertical_half\") {\r\n      return [\"bottom\", \"top\"];\r\n    } else if (stateId === \"minecraft:cardinal_direction\") {\r\n      return [\"north\", \"south\", \"east\", \"west\"];\r\n    }\r\n\r\n    const states = this.getStates();\r\n\r\n    if (!states || !states[stateId]) {\r\n      return undefined;\r\n    }\r\n\r\n    return states[stateId];\r\n  }\r\n\r\n  public getStates() {\r\n    if (!this._wrapper || !this._data || !this._data?.description) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._data.description.states && this._data.description.properties) {\r\n      return this._data.description.properties;\r\n    }\r\n\r\n    return this._data.description.states;\r\n  }\r\n\r\n  public addState(stateName: string, stateType: BlockStateType) {\r\n    if (!this._data || !this._data.description) {\r\n      return;\r\n    }\r\n    if (!Utilities.isUsableAsObjectKey(stateName)) {\r\n      Log.unsupportedToken(stateName);\r\n      throw new Error();\r\n    }\r\n    let dataArr: string[] | number[] | boolean[] = [];\r\n\r\n    if (stateType === BlockStateType.boolean) {\r\n      dataArr = [false, true];\r\n    } else if (stateType === BlockStateType.number) {\r\n      dataArr = [0, 1, 2];\r\n    } else if (stateType === BlockStateType.string) {\r\n      dataArr = [\"value1\", \"value2\"];\r\n    }\r\n\r\n    if (!this._data.description.states) {\r\n      this._data.description.states = {};\r\n    }\r\n\r\n    this._data.description.states[stateName] = dataArr;\r\n  }\r\n\r\n  public getExpandedStateList() {\r\n    const stateList = this.getStateList();\r\n\r\n    let placementDir = this.getPlacementDirectionTrait();\r\n\r\n    if (placementDir) {\r\n      if (placementDir.enabled_states) {\r\n        stateList.push(...placementDir.enabled_states);\r\n      }\r\n    }\r\n\r\n    let placementPos = this.getPlacementPositionTrait();\r\n\r\n    if (placementPos) {\r\n      if (placementPos.enabled_states) {\r\n        stateList.push(...placementPos.enabled_states);\r\n      }\r\n    }\r\n\r\n    return stateList;\r\n  }\r\n\r\n  public getStateList() {\r\n    const states = this.getStates();\r\n\r\n    if (!states) {\r\n      return [];\r\n    }\r\n\r\n    const stateList = [];\r\n\r\n    for (const state in states) {\r\n      if (states[state] !== undefined) {\r\n        stateList.push(state);\r\n      }\r\n    }\r\n\r\n    return stateList;\r\n  }\r\n\r\n  public set baseType(baseType: BlockBaseType) {\r\n    this._baseType = baseType;\r\n    this._baseTypeId = baseType.name;\r\n  }\r\n\r\n  public get material() {\r\n    return this._material;\r\n  }\r\n\r\n  public renderType: BlockRenderType = BlockRenderType.Custom;\r\n\r\n  get icon() {\r\n    let val = this._typeData.ic;\r\n\r\n    if (val === undefined && this.baseType !== undefined) {\r\n      val = this.baseType.icon;\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  get shortTypeName() {\r\n    let name = this._typeId;\r\n\r\n    const colonIndex = name.indexOf(\":\");\r\n\r\n    if (colonIndex >= 0) {\r\n      name = name.substring(colonIndex + 1, name.length);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  get title() {\r\n    const id = this.shortTypeName;\r\n\r\n    return Utilities.humanifyMinecraftName(id);\r\n  }\r\n\r\n  constructor(name: string) {\r\n    this._typeId = name;\r\n    this._handleFileUpdated = this._handleFileUpdated.bind(this);\r\n    this._typeData = {\r\n      n: name,\r\n    };\r\n\r\n    if (name.indexOf(\":\") >= 0 && !name.startsWith(\"minecraft:\")) {\r\n      this._isCustom = true;\r\n    }\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data && this._data.description) {\r\n      return this._data.description.identifier;\r\n    }\r\n\r\n    if (!this._id) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n\r\n    if (this._data && this._data.description && newId) {\r\n      this._data.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.unsubscribe(this._handleFileUpdated);\r\n    }\r\n\r\n    this._file = newFile;\r\n\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.subscribe(this._handleFileUpdated);\r\n    }\r\n  }\r\n\r\n  _handleFileUpdated(file: IFile, fileB: IFile) {\r\n    this._data = undefined;\r\n    this._wrapper = null;\r\n    this._isLoaded = false;\r\n    this._managed = {};\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getPermutationByCondition(permutationCondition: string) {\r\n    if (!this._data || !this.data?.permutations || !Array.isArray(this.data.permutations)) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const perm of this.data.permutations) {\r\n      if (permutationCondition === perm.condition) {\r\n        return perm;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getComponentFromBaseFileName(name: string) {\r\n    let canonName = name;\r\n\r\n    if (canonName.startsWith(\"minecraft_\")) {\r\n      canonName = canonName.substring(10);\r\n    }\r\n\r\n    return canonName;\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      if (this._data.components) {\r\n        const comp = this._data.components[id];\r\n        if (comp) {\r\n          this._managed[id] = new ManagedComponent(this._data.components, id, comp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  getComponentsInBaseAndPermutations(id: string): IManagedComponent[] {\r\n    if (this._data === undefined) {\r\n      return [];\r\n    }\r\n\r\n    let results: IManagedComponent[] = [];\r\n\r\n    let comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      results.push(comp);\r\n    }\r\n\r\n    const perms = this.getManagedPermutations();\r\n\r\n    if (perms && Array.isArray(perms)) {\r\n      for (const perm of perms) {\r\n        if (perm) {\r\n          comp = perm.getComponent(id);\r\n\r\n          if (comp) {\r\n            results.push(comp);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BTNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentName in this._data.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this._data as IBlockTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data.components) {\r\n      if (name !== id) {\r\n        if (Utilities.isUsableAsObjectKey(name)) {\r\n          const component = this._data.components[name];\r\n\r\n          newBehaviorPacks[name] = component;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data.components = newBehaviorPacks;\r\n    this._managed = newComponents;\r\n  }\r\n\r\n  public async getTextureItems(\r\n    blockTypeProjectItem: ProjectItem,\r\n    project?: Project\r\n  ): Promise<{ [name: string]: ProjectItem } | undefined> {\r\n    if (!this._data || !blockTypeProjectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    let textureList = this.getTextureList();\r\n\r\n    // For unit cube blocks, also include textures from blocks.json\r\n    if (this.isUnitCube && project) {\r\n      const catalogTextures = await this.getTextureListFromBlocksCatalog(project);\r\n      if (catalogTextures && catalogTextures.length > 0) {\r\n        textureList = textureList ? [...textureList, ...catalogTextures] : catalogTextures;\r\n      }\r\n    }\r\n\r\n    const results: { [name: string]: ProjectItem } = {};\r\n\r\n    for (const childItem of blockTypeProjectItem.childItems) {\r\n      let candItem = childItem.childItem;\r\n\r\n      if (candItem.itemType === ProjectItemType.terrainTextureCatalogResourceJson) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        // Ensure the terrain texture catalog's dependencies are loaded (links to texture files)\r\n        await candItem.ensureDependencies();\r\n\r\n        if (candItem.primaryFile && candItem.childItems) {\r\n          const blockTextureCatalog = await TerrainTextureCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (blockTextureCatalog && textureList) {\r\n            for (const textureId of textureList) {\r\n              const texPaths = blockTextureCatalog.getAllTexturePaths(textureId);\r\n\r\n              if (texPaths) {\r\n                for (const texPath of texPaths) {\r\n                  const texPathLower = texPath.toLowerCase();\r\n\r\n                  for (const catalogChildItem of candItem.childItems) {\r\n                    let path = catalogChildItem.childItem.projectPath;\r\n\r\n                    if (path) {\r\n                      const lastPeriod = path.lastIndexOf(\".\");\r\n\r\n                      if (lastPeriod >= 0) {\r\n                        path = path.substring(0, lastPeriod);\r\n                      }\r\n\r\n                      // Case-insensitive matching since terrain_texture paths may have different casing\r\n                      const pathLower = path.toLowerCase();\r\n                      if (pathLower.endsWith(texPathLower)) {\r\n                        results[texPath] = catalogChildItem.childItem;\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public getGeometryList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const comps = this.getComponentsInBaseAndPermutations(\"minecraft:geometry\");\r\n\r\n    if (!comps) {\r\n      return undefined;\r\n    }\r\n\r\n    const geometryList = [];\r\n\r\n    for (const comp of comps) {\r\n      const compData = comp.getData();\r\n\r\n      if (typeof compData === \"string\") {\r\n        geometryList.push(compData);\r\n      } else {\r\n        const id = comp.getProperty(\"identifier\");\r\n\r\n        if (id) {\r\n          geometryList.push(id);\r\n        }\r\n      }\r\n    }\r\n\r\n    return geometryList;\r\n  }\r\n\r\n  /**\r\n   * Gets the list of texture IDs used by this block.\r\n   * Checks both material_instances component and blocks.json catalog.\r\n   */\r\n  public getTextureList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList: string[] = [];\r\n\r\n    // Check material_instances component\r\n    const comps = this.getComponentsInBaseAndPermutations(\"minecraft:material_instances\");\r\n\r\n    if (comps) {\r\n      for (const comp of comps) {\r\n        const compData = comp.getData();\r\n\r\n        if (typeof compData === \"object\") {\r\n          for (const materialName in compData) {\r\n            const material = (compData as any)[materialName];\r\n\r\n            if (material && material.texture) {\r\n              textureList.push(material.texture);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  /**\r\n   * Gets texture IDs from blocks.json catalog for this block.\r\n   * Used for unit cube blocks that define textures via blocks.json.\r\n   */\r\n  public async getTextureListFromBlocksCatalog(project: Project): Promise<string[]> {\r\n    const textureList: string[] = [];\r\n\r\n    const blockResource = await this.getBlockCatalogResource(project);\r\n    if (blockResource && blockResource.textures) {\r\n      if (typeof blockResource.textures === \"string\") {\r\n        textureList.push(blockResource.textures);\r\n      } else {\r\n        // IBlockTextures object with per-face textures\r\n        const textures = blockResource.textures;\r\n        if (textures.north) textureList.push(textures.north);\r\n        if (textures.south) textureList.push(textures.south);\r\n        if (textures.east) textureList.push(textures.east);\r\n        if (textures.west) textureList.push(textures.west);\r\n        if (textures.up) textureList.push(textures.up);\r\n        if (textures.down) textureList.push(textures.down);\r\n        if (textures.side) textureList.push(textures.side);\r\n      }\r\n\r\n      // Also check carried_textures\r\n      if (blockResource.carried_textures) {\r\n        textureList.push(blockResource.carried_textures);\r\n      }\r\n    }\r\n\r\n    // Deduplicate\r\n    return [...new Set(textureList)];\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this._file && this._file.parentFolder) {\r\n      let parentFolder = this._file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"blocks\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  getCustomComponentIds() {\r\n    let customComponentIds: string[] = [];\r\n    const customComponents = this.getComponentsInBaseAndPermutations(\"minecraft:custom_components\");\r\n\r\n    for (const comp of customComponents) {\r\n      let compData = comp.getData();\r\n\r\n      if (compData && Array.isArray(compData)) {\r\n        for (const str of compData) {\r\n          if (typeof str === \"string\") {\r\n            customComponentIds.push(str);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const allComponentsInUse = this.getAllComponents();\r\n\r\n    for (const component of allComponentsInUse) {\r\n      if (component && component.id && !component.id.startsWith(\"minecraft:\") && !component.id.startsWith(\"tag:\")) {\r\n        customComponentIds.push(component.id);\r\n      }\r\n    }\r\n\r\n    return customComponentIds;\r\n  }\r\n\r\n  getLootTablePaths() {\r\n    let lootTablePaths: string[] = [];\r\n\r\n    const lootComps = this.getComponentsInBaseAndPermutations(\"minecraft:loot\");\r\n\r\n    for (const comp of lootComps) {\r\n      let compData = comp.getData();\r\n\r\n      if (typeof compData === \"string\") {\r\n        lootTablePaths.push(compData);\r\n      } else {\r\n        let lootTablePath = comp.getProperty(\"table\");\r\n\r\n        if (lootTablePath) {\r\n          lootTablePaths.push(lootTablePath);\r\n        }\r\n      }\r\n    }\r\n\r\n    return lootTablePaths;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let lootTablePaths = this.getLootTablePaths();\r\n\r\n    let customComponentIds: string[] = this.getCustomComponentIds();\r\n\r\n    let textureList = this.getTextureList();\r\n\r\n    // For unit cube blocks, also get textures from blocks.json\r\n    if (this.isUnitCube) {\r\n      const catalogTextures = await this.getTextureListFromBlocksCatalog(project);\r\n      if (catalogTextures && catalogTextures.length > 0) {\r\n        textureList = textureList ? [...textureList, ...catalogTextures] : catalogTextures;\r\n      }\r\n    }\r\n\r\n    let geometryList = this.getGeometryList();\r\n\r\n    // Check TypeScript files for custom components (only if we have custom component IDs)\r\n    if (customComponentIds && customComponentIds.length > 0) {\r\n      const tsItems = project.getItemsByType(ProjectItemType.ts);\r\n      for (const candItem of tsItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          if (!candItem.primaryFile.isContentLoaded) {\r\n            await candItem.primaryFile.loadContent();\r\n          }\r\n\r\n          const tsd = await TypeScriptDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (tsd && tsd.data) {\r\n            let doAddTs = false;\r\n\r\n            for (const customCompId of customComponentIds) {\r\n              if (tsd.data.indexOf(customCompId) >= 0) {\r\n                doAddTs = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (doAddTs) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check terrain texture catalog (only if we have textures to match)\r\n    if (textureList && textureList.length > 0) {\r\n      const terrainTexItems = project.getItemsByType(ProjectItemType.terrainTextureCatalogResourceJson);\r\n      for (const candItem of terrainTexItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const blockTextureCatalog = await TerrainTextureCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (blockTextureCatalog) {\r\n            let doAddTextureCatalog = false;\r\n\r\n            for (const textureId of textureList) {\r\n              const blockResource = blockTextureCatalog.getTexture(textureId);\r\n\r\n              if (blockResource) {\r\n                doAddTextureCatalog = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (doAddTextureCatalog) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check blocks catalog\r\n    const blocksCatalogItems = project.getItemsByType(ProjectItemType.blocksCatalogResourceJson);\r\n    for (const candItem of blocksCatalogItems) {\r\n      if (!candItem.isContentLoaded) {\r\n        await candItem.loadContent();\r\n      }\r\n\r\n      if (candItem.primaryFile) {\r\n        const blockCatalog = await BlocksCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n        if (blockCatalog && this.id) {\r\n          const blockResource = blockCatalog.getCatalogResource(this.id);\r\n\r\n          if (blockResource) {\r\n            item.addChildItem(candItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check model geometry (only if we have geometries to match)\r\n    if (geometryList && geometryList.length > 0) {\r\n      if (index) {\r\n        // Use pre-built index for O(1) model lookups\r\n        const addedItems = new Set<ProjectItem>();\r\n        for (const geoId of geometryList) {\r\n          const matchingItems = index.getItemsById(index.modelsById, geoId);\r\n          for (const candItem of matchingItems) {\r\n            if (!addedItems.has(candItem)) {\r\n              addedItems.add(candItem);\r\n              item.addChildItem(candItem);\r\n              geometryList = Utilities.removeItemInArray(geoId, geometryList);\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        const modelItems = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n        for (const candItem of modelItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const model = await ModelGeometryDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (model) {\r\n              let doAddModel = false;\r\n              for (const modelId of model.identifiers) {\r\n                if (geometryList && geometryList.includes(modelId)) {\r\n                  doAddModel = true;\r\n\r\n                  geometryList = Utilities.removeItemInArray(modelId, geometryList);\r\n                }\r\n              }\r\n\r\n              if (doAddModel) {\r\n                item.addChildItem(candItem);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check loot tables (only if we have loot references)\r\n    if (lootTablePaths.length > 0) {\r\n      const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n      for (const candItem of lootTableItems) {\r\n        for (const lootTablePath of lootTablePaths) {\r\n          if (candItem.projectPath?.endsWith(lootTablePath)) {\r\n            item.addChildItem(candItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<BlockTypeDefinition, BlockTypeDefinition>,\r\n    preserveComments?: boolean\r\n  ) {\r\n    let bt: BlockTypeDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      bt = new BlockTypeDefinition(\"custom:\" + file.name);\r\n\r\n      bt.behaviorPackFile = file;\r\n\r\n      file.manager = bt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof BlockTypeDefinition) {\r\n      bt = file.manager as BlockTypeDefinition;\r\n\r\n      if (!bt.isLoaded || (preserveComments && !bt._loadedWithComments)) {\r\n        if (loadHandler) {\r\n          bt.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await bt.load(preserveComments);\r\n      }\r\n    }\r\n\r\n    return bt;\r\n  }\r\n\r\n  async addCustomComponent(blockTypeItem: ProjectItem, componentName: string) {\r\n    let componentNameShort = componentName;\r\n\r\n    const idx = componentName.indexOf(\":\");\r\n    if (idx >= 0) {\r\n      componentNameShort = componentName.substring(idx + 1);\r\n    }\r\n\r\n    this.ensureComponent(componentName, {});\r\n\r\n    const fileNameSugg = Utilities.getHumanifiedObjectNameNoSpaces(componentNameShort);\r\n\r\n    await ProjectUtilities.ensureTypeScriptFileWith(\r\n      blockTypeItem.project,\r\n      componentName,\r\n      \"new-templates\",\r\n      \"blockCustomComponent\",\r\n      fileNameSugg,\r\n      {\r\n        \"example:newComponentId\": componentName,\r\n        ExampleNewComponent: fileNameSugg,\r\n        initExampleNew: \"init\" + fileNameSugg,\r\n      }\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      blockTypeItem.project,\r\n      \"import { init\" + fileNameSugg,\r\n      \"import { init\" + fileNameSugg + ' } from \"./' + fileNameSugg + '\"\\n',\r\n      false\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      blockTypeItem.project,\r\n      \"init\" + fileNameSugg + \"()\",\r\n      \"init\" + fileNameSugg + \"();\\n\",\r\n      true\r\n    );\r\n\r\n    this.persist();\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(!this._isLoaded || this._wrapper !== null, \"BTP\");\r\n\r\n    if (!this._wrapper) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._wrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._wrapper = data;\r\n\r\n    const block = data[\"minecraft:block\"];\r\n\r\n    if (block && block.description) {\r\n      this.id = block.description.identifier;\r\n    }\r\n\r\n    this._data = block;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport const NumberInfoItemTypes = 9;\r\n\r\nexport enum InfoItemType {\r\n  testCompleteFail = 0,\r\n  testCompleteSuccess = 1,\r\n  info = 2,\r\n  error = 3,\r\n  warning = 4,\r\n  internalProcessingError = 5,\r\n  recommendation = 6,\r\n  featureAggregate = 7,\r\n  testCompleteNoApplicableItemsFound = 8,\r\n}\r\n\r\n// sorry that the fields here are truncated to save a few characters.\r\nexport default interface IInfoItemData {\r\n  iTp: InfoItemType; // type\r\n  gId: string; // generatorId\r\n  gIx: number; // generatorIndex\r\n  m: string | undefined; // message\r\n  p: string | null | undefined; // item project path\r\n  d: string | boolean | number | number[] | undefined; // data\r\n  iId: string | undefined; // item id\r\n  c: string | undefined; // content -- should be the broader context of content that is causing the info item. Sometimes, the content in question that might be problematic might be in .d?\r\n  fs: { [setName: string]: { [measureName: string]: number | undefined } | undefined } | undefined; // feature state\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport IInfoItemData from \"./IInfoItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\n\r\nexport default class ProjectInfoItem {\r\n  #data: IInfoItemData;\r\n  #projectItem?: ProjectItem;\r\n\r\n  get dataObject() {\r\n    return this.#data;\r\n  }\r\n\r\n  get itemType() {\r\n    return this.#data.iTp;\r\n  }\r\n\r\n  get message() {\r\n    return this.#data.m;\r\n  }\r\n\r\n  set message(newMessage: string | undefined) {\r\n    this.#data.m = newMessage;\r\n  }\r\n\r\n  get generatorId() {\r\n    return this.#data.gId;\r\n  }\r\n\r\n  get generatorIndex() {\r\n    return this.#data.gIx;\r\n  }\r\n\r\n  get projectItem() {\r\n    return this.#projectItem;\r\n  }\r\n\r\n  get data() {\r\n    return this.#data.d;\r\n  }\r\n\r\n  set data(data: string | boolean | number | number[] | undefined) {\r\n    this.#data.d = data;\r\n  }\r\n\r\n  get content() {\r\n    return this.#data.c;\r\n  }\r\n\r\n  get featureSets() {\r\n    return this.#data.fs;\r\n  }\r\n\r\n  set featureSets(value: { [setName: string]: { [measureName: string]: number | undefined } | undefined } | undefined) {\r\n    this.#data.fs = value;\r\n  }\r\n\r\n  get contentSummary() {\r\n    let errorContent = this.#data.c;\r\n    if (errorContent) {\r\n      errorContent = errorContent.replace(/\\n/gi, \" \");\r\n      errorContent = errorContent.replace(/\\r/gi, \" \");\r\n\r\n      // Strip JSON object/array values, keep only the path portion (e.g., 'In \"dependencies[0]\"')\r\n      errorContent = errorContent.replace(/:\\s*[\\{\\[].*$/g, \"\");\r\n\r\n      if (errorContent.length > 80) {\r\n        errorContent = errorContent.substring(0, 77) + \"...\";\r\n      }\r\n    }\r\n\r\n    return errorContent;\r\n  }\r\n\r\n  disconnect() {\r\n    this.#projectItem = undefined;\r\n  }\r\n\r\n  get typeSummary() {\r\n    switch (this.#data.iTp) {\r\n      case InfoItemType.info:\r\n        return \"Info\";\r\n\r\n      case InfoItemType.warning:\r\n        return \"Warning\";\r\n\r\n      case InfoItemType.recommendation:\r\n        return \"Recommendation\";\r\n\r\n      case InfoItemType.featureAggregate:\r\n        return \"Feature aggregation\";\r\n\r\n      case InfoItemType.testCompleteFail:\r\n        return \"Test fail\";\r\n\r\n      case InfoItemType.testCompleteSuccess:\r\n        return \"Test success\";\r\n\r\n      case InfoItemType.error:\r\n        return \"Error\";\r\n\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  get projectItemPath() {\r\n    if (this.projectItem) {\r\n      return this.projectItem.projectPath;\r\n    } else if (this.#data.p) {\r\n      return this.#data.p;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get shortProjectItemPath() {\r\n    if (this.projectItem && this.projectItem.projectPath) {\r\n      return MinecraftUtilities.getAfterPackPath(this.projectItem.projectPath);\r\n    } else if (this.#data.p) {\r\n      return MinecraftUtilities.getAfterPackPath(this.#data.p);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get typeSummaryShort() {\r\n    let short = this.typeSummary.toUpperCase();\r\n\r\n    short = short.replace(/\\s/g, \"\");\r\n\r\n    return short;\r\n  }\r\n\r\n  toString() {\r\n    let summaryString = this.typeSummaryShort + \": \";\r\n\r\n    summaryString += \"[\" + this.generatorId + Utilities.frontPadToLength(this.generatorIndex, 3, \"0\") + \"] \";\r\n\r\n    if (this.projectItem) {\r\n      summaryString += \"(\" + this.projectItem.projectPath + \") \";\r\n    } else if (this.#data.p) {\r\n      summaryString += \"(\" + this.#data.p + \") \";\r\n    }\r\n\r\n    if (this.message) {\r\n      summaryString += this.message;\r\n    }\r\n\r\n    if (this.data) {\r\n      summaryString += \": \" + this.data;\r\n    }\r\n\r\n    const errorContent = this.contentSummary;\r\n\r\n    if (errorContent) {\r\n      summaryString += \" [in \" + errorContent + \"]\";\r\n    }\r\n\r\n    return summaryString;\r\n  }\r\n\r\n  minFeature(setName: string, measureName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      Log.unsupportedToken(setName);\r\n      throw new Error();\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    let curVal = setVal[measureName];\r\n\r\n    if (curVal === undefined) {\r\n      curVal = newValue;\r\n    } else {\r\n      curVal = Math.min(curVal, newValue);\r\n    }\r\n\r\n    setVal[measureName] = curVal;\r\n  }\r\n\r\n  maxFeature(setName: string, measureName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      Log.unsupportedToken(setName);\r\n      throw new Error();\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    let curVal = setVal[measureName];\r\n\r\n    if (curVal === undefined) {\r\n      curVal = newValue;\r\n    } else {\r\n      curVal = Math.max(curVal, newValue);\r\n    }\r\n\r\n    setVal[measureName] = curVal;\r\n  }\r\n\r\n  getFeatureContaining(token: string) {\r\n    token = token.toLowerCase();\r\n\r\n    for (const setName in this.#data.fs) {\r\n      const featureSet = this.#data.fs[setName];\r\n\r\n      if (featureSet) {\r\n        for (const measureName in featureSet) {\r\n          if (measureName.toLowerCase().indexOf(token) >= 0) {\r\n            return featureSet[measureName];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getFeatureMeasureNumber(setName: string, measure: string) {\r\n    measure = measure.toLowerCase();\r\n\r\n    if (!this.#data.fs) {\r\n      return 0;\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n\r\n    const featureSet = this.#data.fs[setName];\r\n\r\n    if (featureSet) {\r\n      for (const measureName in featureSet) {\r\n        if (measureName.toLowerCase() === measure) {\r\n          return featureSet[measureName];\r\n        }\r\n      }\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  getNonZeroFeatureMeasures(): string[] {\r\n    const results: string[] = [];\r\n\r\n    if (!this.#data.fs) {\r\n      return results;\r\n    }\r\n\r\n    for (const setName in this.#data.fs) {\r\n      const featureSet = this.#data.fs[setName];\r\n\r\n      if (featureSet) {\r\n        for (const measureName in featureSet) {\r\n          const val = featureSet[measureName];\r\n          if (\r\n            val !== undefined &&\r\n            typeof val === \"number\" &&\r\n            val > 0 &&\r\n            (measureName === \"count\" || measureName === \"instanceCount\")\r\n          ) {\r\n            results.push(setName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  spectrumFeature(setName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      Log.unsupportedToken(setName);\r\n      throw new Error();\r\n    }\r\n\r\n    this.incrementFeature(setName, \"instanceCount\", 1);\r\n    this.incrementFeature(setName, \"total\", newValue);\r\n    this.maxFeature(setName, \"max\", newValue);\r\n    this.minFeature(setName, \"min\", newValue);\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    const curTotal = setVal[\"total\"];\r\n    const curCount = setVal[\"instanceCount\"];\r\n\r\n    if (curCount && curTotal !== undefined) {\r\n      setVal[\"average\"] = curTotal / curCount;\r\n    }\r\n  }\r\n\r\n  spectrumIntFeature(setName: string, newValue: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = {};\r\n\r\n      this.#data.fs[setName] = setVal;\r\n    }\r\n\r\n    this.incrementFeature(setName, \"instanceCount\", 1);\r\n    this.incrementFeature(setName, \"total\", newValue);\r\n\r\n    this.maxFeature(setName, \"max\", newValue);\r\n    this.minFeature(setName, \"min\", newValue);\r\n\r\n    const curTotal = setVal[\"total\"];\r\n    const curCount = setVal[\"instanceCount\"];\r\n\r\n    if (curCount && curTotal !== undefined) {\r\n      setVal[\"average\"] = Math.round(curTotal / curCount);\r\n    }\r\n  }\r\n\r\n  incrementFeature(setName: string, measureName: string = \"count\", incrementalValue: number = 1) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      return;\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n\r\n    if (setVal === undefined) {\r\n      setVal = this.#data.fs[setName] = {};\r\n    }\r\n\r\n    setVal[measureName] = (setVal[measureName] ?? 0) + incrementalValue;\r\n  }\r\n\r\n  setFeature(setName: string, measureName: string, value: number) {\r\n    if (this.#data.fs === undefined) {\r\n      this.#data.fs = {};\r\n    }\r\n\r\n    setName = Utilities.convertToJsonKey(setName);\r\n    measureName = Utilities.convertToJsonKey(measureName);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(setName)) {\r\n      return;\r\n    }\r\n\r\n    let setVal = this.#data.fs[setName];\r\n    if (setVal === undefined) {\r\n      setVal = this.#data.fs[setName] = {};\r\n    }\r\n\r\n    setVal[measureName] = value;\r\n  }\r\n\r\n  constructor(\r\n    itemType: InfoItemType,\r\n    generatorId: string,\r\n    generatorIndex: number,\r\n    message?: string,\r\n    projectItem?: ProjectItem,\r\n    data?: string | boolean | number | number[],\r\n    itemId?: string,\r\n    content?: string,\r\n    projectItemPath?: string\r\n  ) {\r\n    this.#data = {\r\n      iTp: itemType,\r\n      gId: generatorId,\r\n      gIx: generatorIndex,\r\n      m: message,\r\n      p: projectItem ? projectItem.projectPath : projectItemPath,\r\n      d: data,\r\n      iId: itemId,\r\n      c: content,\r\n      fs: undefined,\r\n    };\r\n\r\n    this.#projectItem = projectItem;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum UpdateResultType {\r\n  updatedFile = 1,\r\n  noChange = 0,\r\n  internalProcessingError = 99,\r\n}\r\n\r\nexport default interface IUpdateResult {\r\n  resultType: UpdateResultType;\r\n  updaterId: string;\r\n  updaterIndex: number;\r\n  message: string;\r\n  itemStoragePath: string | null | undefined;\r\n  data: string | boolean | number | object | number[] | undefined;\r\n  itemId: string | undefined;\r\n  content: string | undefined;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IUpdateResult, { UpdateResultType } from \"./IUpdateResult\";\r\n\r\nexport default class ProjectUpdateResult {\r\n  #data: IUpdateResult;\r\n\r\n  get dataObject() {\r\n    return this.#data;\r\n  }\r\n\r\n  get resultType() {\r\n    return this.#data.resultType;\r\n  }\r\n\r\n  get message() {\r\n    return this.#data.message;\r\n  }\r\n\r\n  get updaterId() {\r\n    return this.#data.updaterId;\r\n  }\r\n\r\n  get updaterIndex() {\r\n    return this.#data.updaterIndex;\r\n  }\r\n\r\n  get data() {\r\n    return this.#data.data;\r\n  }\r\n\r\n  get content() {\r\n    return this.#data.content;\r\n  }\r\n\r\n  get contentSummary() {\r\n    let errorContent = this.#data.content;\r\n    if (errorContent) {\r\n      errorContent = errorContent.replace(/\\n/gi, \" \");\r\n      errorContent = errorContent.replace(/\\r/gi, \" \");\r\n\r\n      if (errorContent.length > 80) {\r\n        errorContent = errorContent.substring(0, 77) + \"...\";\r\n      }\r\n    }\r\n\r\n    return errorContent;\r\n  }\r\n\r\n  get typeSummary() {\r\n    switch (this.#data.resultType) {\r\n      case UpdateResultType.noChange:\r\n        return \"No changes\";\r\n\r\n      case UpdateResultType.updatedFile:\r\n        return \"Updated file\";\r\n\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  get typeSummaryShort() {\r\n    let short = this.typeSummary.toUpperCase();\r\n\r\n    short = short.replace(/\\s/g, \"\");\r\n\r\n    return short;\r\n  }\r\n\r\n  toString() {\r\n    let summaryString = this.typeSummaryShort + \": \";\r\n\r\n    summaryString += \"[\" + this.updaterId + Utilities.frontPadToLength(this.updaterIndex, 3, \"0\") + \"] \";\r\n\r\n    summaryString += this.message;\r\n\r\n    if (this.data) {\r\n      summaryString += \": \" + this.data;\r\n    }\r\n\r\n    const errorContent = this.contentSummary;\r\n\r\n    if (errorContent) {\r\n      summaryString += \" [in \" + errorContent + \"]\";\r\n    }\r\n\r\n    return summaryString;\r\n  }\r\n\r\n  constructor(\r\n    resultType: UpdateResultType,\r\n    updaterId: string,\r\n    updaterIndex: number,\r\n    message: string,\r\n    projectItem?: ProjectItem,\r\n    data?: string | boolean | number | object | number[],\r\n    itemId?: string,\r\n    content?: string\r\n  ) {\r\n    this.#data = {\r\n      resultType: resultType,\r\n      updaterId: updaterId,\r\n      updaterIndex: updaterIndex,\r\n      message: message,\r\n      itemStoragePath: projectItem ? projectItem.projectPath : undefined,\r\n      data: data,\r\n      itemId: itemId,\r\n      content: content,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Project from \"../app/Project\";\r\nimport { MinecraftTrack } from \"../app/ICreatorToolsData\";\r\n\r\nexport default class EnvSettings {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<EnvSettings, EnvSettings>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<EnvSettings, EnvSettings>) {\r\n    let envf: EnvSettings | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      envf = new EnvSettings();\r\n\r\n      envf.file = file;\r\n\r\n      file.manager = envf;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof EnvSettings) {\r\n      envf = file.manager as EnvSettings;\r\n\r\n      if (!envf.isLoaded && loadHandler) {\r\n        envf.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await envf.load();\r\n\r\n      return envf;\r\n    }\r\n\r\n    return envf;\r\n  }\r\n\r\n  async ensureEnvFile(project: Project) {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    let content = this._file?.content;\r\n\r\n    if (content === null) {\r\n      content = \"\";\r\n    }\r\n\r\n    if (content && typeof content === \"string\") {\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._file.isContentLoaded && this.project && this._file.content && typeof this._file.content === \"string\") {\r\n      this._file.setContent(\r\n        await EnvSettings.getContent(this.project, this._file.content),\r\n        FileUpdateType.versionlessEdit\r\n      );\r\n    }\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent(true);\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  static async getContent(project: Project, content?: string) {\r\n    if (content === undefined) {\r\n      content = 'PROJECT_NAME=\"\"\\nMINECRAFT_PRODUCT=\"BedrockGDK\"\\nCUSTOM_DEPLOYMENT_PATH=\"\"\\n';\r\n    }\r\n\r\n    const folder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (folder) {\r\n      let projectNameIndex = content.indexOf('PROJECT_NAME=\"');\r\n\r\n      if (projectNameIndex >= 0) {\r\n        let projectNameNewQuote = content.indexOf('\"', projectNameIndex + 14);\r\n\r\n        if (projectNameNewQuote > projectNameIndex) {\r\n          content =\r\n            content.substring(0, projectNameIndex) +\r\n            'PROJECT_NAME=\"' +\r\n            folder.name +\r\n            \"\" +\r\n            content.substring(projectNameNewQuote);\r\n        }\r\n      } else {\r\n        if (!content.endsWith(\"\\n\")) {\r\n          content += \"\\n\";\r\n        }\r\n\r\n        content = content + 'PROJECT_NAME=\"' + folder.name + '\"\\n';\r\n      }\r\n    }\r\n\r\n    let minecraftProductIndex = content.indexOf('MINECRAFT_PRODUCT=\"');\r\n    const trackStr = project.track === MinecraftTrack.preview ? \"PreviewGDK\" : \"BedrockGDK\";\r\n\r\n    if (minecraftProductIndex >= 0) {\r\n      let minecraftProductIndexNextQuote = content.indexOf('\"', minecraftProductIndex + 19);\r\n\r\n      if (minecraftProductIndexNextQuote > minecraftProductIndex) {\r\n        content =\r\n          content.substring(0, minecraftProductIndex) +\r\n          'MINECRAFT_PRODUCT=\"' +\r\n          trackStr +\r\n          content.substring(minecraftProductIndexNextQuote);\r\n      }\r\n    } else {\r\n      if (!content.endsWith(\"\\n\")) {\r\n        content += \"\\n\";\r\n      }\r\n\r\n      content = content + 'MINECRAFT_PRODUCT=\"' + trackStr + '\"\\n';\r\n    }\r\n\r\n    return content;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport EnvSettings from \"../devproject/EnvSettings\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\n/**\r\n * Validates and updates script module dependencies in behavior pack manifests and npm packages.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/scriptmodule.form.json} for topic definitions\r\n */\r\nexport default class ScriptModuleManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"SCRIPTMODULE\";\r\n  title = \"Script Modules\";\r\n\r\n  modulesInUse: { [name: string]: { version: string; manifest: BehaviorManifestDefinition; item: ProjectItem }[] } = {};\r\n  packRegsInUse: { [name: string]: { package: NpmPackageDefinition; isDevDependency: boolean; version: string }[] } =\r\n    {};\r\n\r\n  getUpdaterData(topicId: number) {\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  private async generateProjectState(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    this.modulesInUse = {};\r\n    this.packRegsInUse = {};\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest && bpManifest.definition && bpManifest.definition.dependencies) {\r\n            const deps = bpManifest.definition.dependencies;\r\n\r\n            for (let j = 0; j < deps.length; j++) {\r\n              const dep = deps[j];\r\n\r\n              if (dep.module_name && dep.version) {\r\n                let verStr = \"\";\r\n                if (typeof dep.version === \"string\") {\r\n                  verStr = dep.version;\r\n                } else {\r\n                  verStr = dep.version.join(\".\");\r\n                }\r\n\r\n                if (Utilities.isUsableAsObjectKey(dep.module_name)) {\r\n                  if (!this.modulesInUse[dep.module_name]) {\r\n                    this.modulesInUse[dep.module_name] = [];\r\n                  }\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      100,\r\n                      \"Behavior pack dependency on \" + verStr + \" at \" + dep.module_name,\r\n                      pi,\r\n                      verStr,\r\n                      dep.module_name\r\n                    )\r\n                  );\r\n\r\n                  this.modulesInUse[dep.module_name].push({ version: verStr, manifest: bpManifest, item: pi });\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.packageJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const npmPackageJson = await NpmPackageDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (npmPackageJson && npmPackageJson.definition) {\r\n            const deps = npmPackageJson.definition.dependencies;\r\n            const devDeps = npmPackageJson.definition.devDependencies;\r\n\r\n            if (deps) {\r\n              for (const depKey in deps) {\r\n                if (depKey.startsWith(\"@minecraft/\")) {\r\n                  if (!this.packRegsInUse[depKey]) {\r\n                    this.packRegsInUse[depKey] = [];\r\n                  }\r\n\r\n                  this.packRegsInUse[depKey].push({\r\n                    package: npmPackageJson,\r\n                    isDevDependency: false,\r\n                    version: deps[depKey],\r\n                  });\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      101,\r\n                      \"Package.json registers usage of \" + depKey + \" at \" + deps[depKey],\r\n                      pi,\r\n                      deps[depKey],\r\n                      depKey\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n\r\n            if (devDeps) {\r\n              for (const depKey in devDeps) {\r\n                if (depKey.startsWith(\"@minecraft/\")) {\r\n                  if (!this.packRegsInUse[depKey]) {\r\n                    this.packRegsInUse[depKey] = [];\r\n                  }\r\n\r\n                  this.packRegsInUse[depKey].push({\r\n                    package: npmPackageJson,\r\n                    isDevDependency: true,\r\n                    version: devDeps[depKey],\r\n                  });\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      102,\r\n                      \"Package.json registers developer usage of \" + depKey + \" at \" + devDeps[depKey],\r\n                      pi,\r\n                      devDeps[depKey],\r\n                      depKey\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.env) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const envFile = await EnvSettings.ensureOnFile(pi.primaryFile);\r\n\r\n          await envFile?.ensureEnvFile(project);\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = await this.generateProjectState(project);\r\n\r\n    let hasPackageJson = false;\r\n\r\n    for (const item of project.items) {\r\n      if (item.itemType === ProjectItemType.packageJson) {\r\n        hasPackageJson = true;\r\n      }\r\n    }\r\n\r\n    for (const moduleName in this.modulesInUse) {\r\n      const moduleInfo = this.modulesInUse[moduleName];\r\n\r\n      if (moduleInfo) {\r\n        const npmModule = await Database.getModuleDescriptor(moduleName);\r\n\r\n        if (npmModule) {\r\n          if (npmModule.betaVersion) {\r\n            for (let k = 0; k < moduleInfo.length; k++) {\r\n              const mod = moduleInfo[k];\r\n\r\n              if (mod.version.indexOf(\"-beta\") >= 0) {\r\n                if (!mod.version.startsWith(npmModule.betaVersion)) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      114,\r\n                      \"For \" +\r\n                        moduleName +\r\n                        \", using an out of date beta version \" +\r\n                        mod.version +\r\n                        \" compared to the current version\",\r\n                      mod.item,\r\n                      mod.version\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          const packReg = this.packRegsInUse[moduleName];\r\n\r\n          if (!packReg && hasPackageJson) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                110,\r\n                \"Could not find an package.json registration for \" + moduleName,\r\n                undefined,\r\n                moduleName\r\n              )\r\n            );\r\n          }\r\n        } else if (hasPackageJson) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              111,\r\n              \"Could not find an NPMJS.org NPM module registration for \" + moduleName,\r\n              undefined,\r\n              moduleName\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateModulesToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateModulesToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    await this.generateProjectState(project);\r\n\r\n    for (const moduleName in this.modulesInUse) {\r\n      const moduleInfo = this.modulesInUse[moduleName];\r\n\r\n      if (moduleInfo) {\r\n        const npmModule = await Database.getModuleDescriptor(moduleName);\r\n\r\n        if (npmModule) {\r\n          for (let k = 0; k < moduleInfo.length; k++) {\r\n            const mod = moduleInfo[k];\r\n\r\n            if (mod.version.indexOf(\"-beta\") >= 0) {\r\n              if (npmModule.betaVersion) {\r\n                const isChanged = mod.manifest.setModuleVersion(moduleName, npmModule.betaVersion + \"-beta\");\r\n\r\n                if (isChanged) {\r\n                  await mod.manifest.save();\r\n                  results.push(\r\n                    new ProjectUpdateResult(\r\n                      UpdateResultType.updatedFile,\r\n                      this.id,\r\n                      1,\r\n                      \"Set module to latest beta version\",\r\n                      undefined,\r\n                      npmModule.betaVersion + \"-beta\"\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            } else if (mod.version.indexOf(\"-\") < 1) {\r\n              if (npmModule.latest) {\r\n                mod.manifest.setModuleVersion(moduleName, npmModule.latest);\r\n                await mod.manifest.save();\r\n\r\n                results.push(\r\n                  new ProjectUpdateResult(\r\n                    UpdateResultType.updatedFile,\r\n                    this.id,\r\n                    1,\r\n                    \"Set module to latest stable version\",\r\n                    undefined,\r\n                    npmModule.latest\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IVsCodeTasks from \"./IVsCodeTasks\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class VsCodeTasksDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _version?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: IVsCodeTasks;\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeTasksDefinition, VsCodeTasksDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<VsCodeTasksDefinition, VsCodeTasksDefinition>) {\r\n    let dt: VsCodeTasksDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeTasksDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeTasksDefinition) {\r\n      dt = file.manager as VsCodeTasksDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VCTP\");\r\n\r\n    if (this.definition) {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition || !this.definition.tasks) {\r\n      return false;\r\n    }\r\n\r\n    for (const task of this.definition.tasks) {\r\n      if (task.dependsOn && task.label === \"build\") {\r\n        for (const dependsOn of task.dependsOn) {\r\n          const strTask = Utilities.replaceAll(dependsOn.toLowerCase(), \" \", \"\");\r\n\r\n          if (strTask === \"minecraft:deploy\") {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasTasks = await this.hasMinContent();\r\n\r\n    if (hasTasks) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = {};\r\n    }\r\n\r\n    if (!this.definition.version) {\r\n      this.definition.version = \"2.0.0\";\r\n    }\r\n\r\n    if (!this.definition.tasks) {\r\n      this.definition.tasks = [];\r\n    }\r\n\r\n    let hasBuildDependsOn = false;\r\n    for (const task of this.definition.tasks) {\r\n      if (task.label === \"build\") {\r\n        if (!task.dependsOn) {\r\n          task.dependsOn = [];\r\n        }\r\n\r\n        for (const dependsOn of task.dependsOn) {\r\n          const strTask = Utilities.replaceAll(dependsOn.toLowerCase(), \" \", \"\");\r\n\r\n          if (strTask === \"minecraft:deploy\") {\r\n            hasBuildDependsOn = true;\r\n          }\r\n        }\r\n\r\n        if (!hasBuildDependsOn) {\r\n          task.dependsOn.push(\"minecraft: deploy\");\r\n          hasBuildDependsOn = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!hasBuildDependsOn) {\r\n      this.definition.tasks.push({\r\n        label: \"build\",\r\n        dependsOrder: \"sequence\",\r\n        dependsOn: [\"minecraft: deploy\"],\r\n      });\r\n\r\n      return true;\r\n    }\r\n\r\n    return hasBuildDependsOn;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDebugSettings from \"./IDebugSettings\";\r\nimport IVsCodeLaunch, { IVsCodeConfiguration } from \"./IVsCodeLaunch\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class VsCodeLaunchDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: IVsCodeLaunch;\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeLaunchDefinition, VsCodeLaunchDefinition>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<VsCodeLaunchDefinition, VsCodeLaunchDefinition>) {\r\n    let dt: VsCodeLaunchDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeLaunchDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeLaunchDefinition) {\r\n      dt = file.manager as VsCodeLaunchDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async hasMinContent(debugSettings?: IDebugSettings) {\r\n    if (!debugSettings) {\r\n      debugSettings = { isServer: false };\r\n    }\r\n\r\n    await this.load();\r\n\r\n    if (!this.definition || !this.definition.configurations) {\r\n      return false;\r\n    }\r\n\r\n    for (const config of this.definition.configurations) {\r\n      if (config.type && config.type === \"minecraft-js\") {\r\n        if (debugSettings.isServer && config.mode === \"listen\") {\r\n          return false;\r\n        }\r\n\r\n        if (!debugSettings.isServer && config.mode !== \"listen\") {\r\n          return false;\r\n        }\r\n\r\n        if (debugSettings.port && config.port !== debugSettings.port) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async ensureMinContent(debugSettings?: IDebugSettings) {\r\n    if (!debugSettings) {\r\n      debugSettings = { isServer: false };\r\n    }\r\n\r\n    const hasDebug = await this.hasMinContent(debugSettings);\r\n\r\n    if (hasDebug) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = {};\r\n    }\r\n\r\n    if (!this.definition.version || this.definition.version === \"0.2.0\") {\r\n      this.definition.version = \"0.3.0\";\r\n    }\r\n\r\n    if (!this.definition.configurations) {\r\n      this.definition.configurations = [];\r\n    }\r\n\r\n    let hasMinecraftConfig = false;\r\n    for (const config of this.definition.configurations) {\r\n      if (config.type === \"minecraft-js\") {\r\n        await this.applyDebugSettingsToConfig(config, debugSettings);\r\n        hasMinecraftConfig = true;\r\n      }\r\n    }\r\n\r\n    if (!hasMinecraftConfig) {\r\n      const minecraftConfig = {\r\n        type: \"minecraft-js\",\r\n        port: debugSettings.port ? debugSettings.port : 19144,\r\n      };\r\n\r\n      await this.applyDebugSettingsToConfig(minecraftConfig, debugSettings);\r\n\r\n      this.definition.configurations.push(minecraftConfig);\r\n\r\n      return true;\r\n    }\r\n\r\n    return hasMinecraftConfig;\r\n  }\r\n\r\n  private async applyDebugSettingsToConfig(config: IVsCodeConfiguration, debugSettings: IDebugSettings) {\r\n    if (debugSettings.isServer) {\r\n      config.mode = undefined;\r\n    } else {\r\n      config.mode = \"listen\";\r\n    }\r\n\r\n    if (config.name === undefined) {\r\n      config.name = \"Debug with Minecraft\";\r\n    }\r\n\r\n    if (config.preLaunchTask === undefined) {\r\n      config.preLaunchTask = \"build\";\r\n    }\r\n\r\n    let bpName = debugSettings.behaviorPackFolderName;\r\n\r\n    if (bpName === undefined) {\r\n      bpName = \"starterbp\";\r\n    }\r\n\r\n    if (!config.targetedModuleUuid && this.project) {\r\n      const pack = await this.project.getDefaultBehaviorPack();\r\n      if (pack) {\r\n        if (pack.manifest instanceof BehaviorManifestDefinition) {\r\n          const module = pack.manifest.getScriptModule();\r\n\r\n          if (module) {\r\n            config.targetedModuleUuid = module.uuid;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!config.sourceMapRoot) {\r\n      // eslint-disable-next-line no-template-curly-in-string\r\n      config.sourceMapRoot = \"${workspaceFolder}/dist/debug/\";\r\n    }\r\n\r\n    if (!config.generatedSourceRoot) {\r\n      // eslint-disable-next-line no-template-curly-in-string\r\n      config.generatedSourceRoot = \"${workspaceFolder}/dist/scripts/\";\r\n    }\r\n\r\n    if (debugSettings.port) {\r\n      config.port = debugSettings.port;\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VSLP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.persist();\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    this.definition = StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemStorageType, ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport VsCodeTasksDefinition from \"../devproject/VsCodeTasksDefinition\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport VsCodeLaunchDefinition from \"../devproject/VsCodeLaunchDefinition\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport IDebugSettings from \"../devproject/IDebugSettings\";\r\n\r\n/**\r\n * Validates and updates VS Code configuration files (tasks.json, launch.json).\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/vscodefile.form.json} for topic definitions\r\n */\r\nexport default class VsCodeFileManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"VSCODEFILE\";\r\n  title = \"VSCode Files\";\r\n\r\n  getUpdaterData(updateId: number) {\r\n    return {\r\n      title: updateId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.vsCodeTasksJson && pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeTasksJson = await VsCodeTasksDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (vscodeTasksJson) {\r\n            const hasMinecraftTasks = await vscodeTasksJson.hasMinContent();\r\n\r\n            if (!hasMinecraftTasks) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  100,\r\n                  \"Project has a VSCode tasks file, but no minecraft deploy tasks.\",\r\n                  pi,\r\n                  undefined,\r\n                  pi.primaryFile.storageRelativePath\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (\r\n        pi.itemType === ProjectItemType.vsCodeLaunchJson &&\r\n        pi.storageType === ProjectItemStorageType.singleFile\r\n      ) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeLaunchJson = await VsCodeLaunchDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (vscodeLaunchJson) {\r\n            vscodeLaunchJson.project = project;\r\n            const hasMinecraftDebugConfig = await vscodeLaunchJson.hasMinContent({ isServer: true });\r\n\r\n            if (!hasMinecraftDebugConfig) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  101,\r\n                  \"Project has a VSCode launch file, but is not configured for Minecraft server launch.\",\r\n                  pi,\r\n                  undefined,\r\n                  pi.primaryFile.storageRelativePath\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        results.push(...(await this.ensureMinecraftLaunchTasks(project)));\r\n        break;\r\n      case 2:\r\n        results.push(...(await this.ensureMinecraftDebugConfig(project)));\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1, 2];\r\n  }\r\n\r\n  async ensureMinecraftLaunchTasks(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.vsCodeTasksJson && pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeTasksJson = await VsCodeTasksDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (vscodeTasksJson) {\r\n            const hasTasks = await vscodeTasksJson.hasMinContent();\r\n\r\n            if (!hasTasks) {\r\n              const result = await vscodeTasksJson.ensureMinContent();\r\n\r\n              if (result) {\r\n                await vscodeTasksJson.save();\r\n                results.push(\r\n                  new ProjectUpdateResult(UpdateResultType.updatedFile, this.id, 1, \"Updated Minecraft Tasks\", pi)\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async ensureMinecraftDebugConfig(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.vsCodeLaunchJson && pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const vscodeLaunchJson = await VsCodeLaunchDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          const pack = await project.getDefaultBehaviorPack();\r\n\r\n          const debugSettings: IDebugSettings = { isServer: true };\r\n\r\n          if (pack && pack.folder) {\r\n            debugSettings.behaviorPackFolderName = pack.folder.name;\r\n          }\r\n\r\n          if (vscodeLaunchJson) {\r\n            const hasConfig = await vscodeLaunchJson.hasMinContent(debugSettings);\r\n\r\n            if (!hasConfig) {\r\n              const result = await vscodeLaunchJson.ensureMinContent(debugSettings);\r\n\r\n              if (result) {\r\n                await vscodeLaunchJson.save();\r\n                results.push(\r\n                  new ProjectUpdateResult(UpdateResultType.updatedFile, this.id, 2, \"Updated Minecraft Launch JSON\", pi)\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IWorldManifest, { IWorldManifestHeader } from \"./IWorldManifest\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class WorldTemplateManifestDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IWorldManifest;\r\n\r\n  private _onLoaded = new EventDispatcher<WorldTemplateManifestDefinition, WorldTemplateManifestDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get description() {\r\n    if (!this.definition || !this.definition.header) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.description;\r\n  }\r\n\r\n  public set description(newDescription: string | undefined) {\r\n    if (this.definition && this.definition.header && newDescription) {\r\n      this.definition.header.description = newDescription;\r\n    }\r\n  }\r\n\r\n  public get name() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.name;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set name(newName: string | undefined) {\r\n    if (this.definition && this.definition.header && newName) {\r\n      this.definition.header.name = newName;\r\n    }\r\n  }\r\n\r\n  public get uuid() {\r\n    if (this.definition && this.definition.header) {\r\n      return this.definition.header.uuid;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set uuid(newId: string | undefined) {\r\n    if (this.definition && this.definition.header && newId) {\r\n      this.definition.header.uuid = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<WorldTemplateManifestDefinition, WorldTemplateManifestDefinition>\r\n  ) {\r\n    let bmj: WorldTemplateManifestDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      bmj = new WorldTemplateManifestDefinition();\r\n\r\n      bmj.file = file;\r\n\r\n      file.manager = bmj;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof WorldTemplateManifestDefinition) {\r\n      bmj = file.manager as WorldTemplateManifestDefinition;\r\n\r\n      if (!bmj.isLoaded) {\r\n        if (loadHandler) {\r\n          bmj.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await bmj.load();\r\n      }\r\n    }\r\n\r\n    return bmj;\r\n  }\r\n\r\n  get baseGameVersion() {\r\n    if (!this.definition || !this.definition.header || !this.definition.header.base_game_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.header.base_game_version;\r\n  }\r\n\r\n  setBaseGameVersion(versionArray: number[], project: Project) {\r\n    const header = this.ensureHeaderForProject(project);\r\n\r\n    header.base_game_version = versionArray;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"WTMDF\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: 2,\r\n\r\n        header: {\r\n          name: name,\r\n          description: description,\r\n          version: [0, 0, 1],\r\n          base_game_version: [1, 20, 10],\r\n          uuid: Utilities.createUuid(),\r\n        },\r\n        modules: [],\r\n      };\r\n    }\r\n  }\r\n\r\n  public ensureHeaderForProject(project: Project): IWorldManifestHeader {\r\n    return this.ensureHeader(project.title, project.description);\r\n  }\r\n\r\n  public ensureHeader(name: string, description: string): IWorldManifestHeader {\r\n    this.ensureDefinition(name, description);\r\n\r\n    if (!this.definition) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.definition.header) {\r\n      this.definition.header = this.getDefaultHeader(name, description);\r\n    }\r\n\r\n    return this.definition.header;\r\n  }\r\n\r\n  public getDefaultHeader(name: string, description: string) {\r\n    return {\r\n      name: name,\r\n      description: description,\r\n      version: [0, 0, 1],\r\n      min_engine_version: [1, 20, 10],\r\n      uuid: Utilities.createUuid(),\r\n      base_game_version: [1, 20, 10],\r\n    };\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this.uuid = this._file.name;\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nconst VersionParts = 3;\r\n/*\r\n  immutable structure defining semantic versioning with 3 parts: major, minor, and patch\r\n*/\r\nexport default class SemanticVersion {\r\n  static parse(version?: string | number | number[] | null): SemanticVersion | undefined {\r\n    if (!version) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Array.isArray(version)) {\r\n      return SemanticVersion.fromArray(version);\r\n    }\r\n    if (typeof version === \"number\") {\r\n      return SemanticVersion.fromNumber(version);\r\n    }\r\n\r\n    return SemanticVersion.fromString(version);\r\n  }\r\n\r\n  static from(version: number[] | number | string) {\r\n    if (typeof version === \"string\") {\r\n      return SemanticVersion.fromString(version);\r\n    } else if (typeof version === \"number\") {\r\n      return SemanticVersion.fromNumber(version);\r\n    } else if (Array.isArray(version)) {\r\n      return SemanticVersion.fromArray(version);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static fromNumber(version: number): SemanticVersion | undefined {\r\n    if (version < 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const major = Math.floor(version);\r\n\r\n    return new SemanticVersion(major, version - major, 0);\r\n  }\r\n\r\n  static fromString(version: string): SemanticVersion | undefined {\r\n    const tokens = version.split(\".\");\r\n\r\n    if (tokens.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    const versionNums = tokens.map((num) => parseInt(num));\r\n    if (versionNums.some(Number.isNaN)) {\r\n      return undefined;\r\n    }\r\n\r\n    return new SemanticVersion(versionNums[0], versionNums[1] || 0, versionNums[2] || 0);\r\n  }\r\n\r\n  static fromArray(versionNums?: number[] | null): SemanticVersion | undefined {\r\n    if (!versionNums || versionNums.length !== VersionParts) {\r\n      return undefined;\r\n    }\r\n\r\n    return new SemanticVersion(versionNums[0], versionNums[1], versionNums[2]);\r\n  }\r\n\r\n  get majorVersion(): number {\r\n    return this.major;\r\n  }\r\n  get minorVersion(): number {\r\n    return this.minor;\r\n  }\r\n  get patchVersion(): number {\r\n    return this.patch;\r\n  }\r\n\r\n  constructor(private major: number, private minor: number, private patch: number) {}\r\n\r\n  asString() {\r\n    return `${this.major}.${this.minor}.${this.patch}`;\r\n  }\r\n\r\n  asArray() {\r\n    return [this.major, this.minor, this.patch];\r\n  }\r\n\r\n  equals(other: SemanticVersion): boolean {\r\n    return this.major === other.major && this.minor === other.minor && this.patch === other.patch;\r\n  }\r\n\r\n  increment(major: number = 0, minor: number = 0, patch: number = 0): SemanticVersion {\r\n    return new SemanticVersion(this.major + major, this.minor + minor, this.patch + patch);\r\n  }\r\n\r\n  /*\r\n    returns a numeric comparison value\r\n    0 is equal, <0 (i.e. negative values) mean this is less than the other value, >0 mean this is greater than the other value\r\n  */\r\n  compareTo(other: SemanticVersion): number {\r\n    return this.major - other.major || this.minor - other.minor || this.patch - other.patch;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Minecraft version rules and special-case logic for version comparisons.\r\n *\r\n * Minecraft skipped minor versions 1.22 through 1.25, jumping directly from\r\n * 1.21 to 1.26. When validating that a creator's content is at version N or\r\n * N-1, we need to treat 1.21 as the predecessor of 1.26 rather than applying\r\n * simple arithmetic (1.26 - 1 = 1.25).\r\n *\r\n * This module provides a helper that returns the effective \"previous\" minor\r\n * version for a given current version, accounting for any skipped ranges.\r\n */\r\n\r\n/**\r\n * Table of skipped minor-version ranges within a given major version.\r\n * Each entry means: for major version `major`, minor versions from\r\n * `skippedMinStart` through `skippedMinEnd` (inclusive) were never released,\r\n * so the effective predecessor of `skippedMinEnd + 1` is `skippedMinStart - 1`.\r\n */\r\nconst SKIPPED_MINOR_RANGES: { major: number; skippedMinStart: number; skippedMinEnd: number }[] = [\r\n  // Minecraft jumped from 1.21 directly to 1.26\r\n  { major: 1, skippedMinStart: 22, skippedMinEnd: 25 },\r\n];\r\n\r\n/**\r\n * Returns the effective previous minor version for a given major.minor,\r\n * taking into account any skipped Minecraft version ranges.\r\n *\r\n * For example, if current is 1.26, the effective previous minor is 21\r\n * (not 25, because 1.22\u20131.25 were skipped).\r\n *\r\n * If there is no skip affecting the given version, it simply returns\r\n * `minor - 1`.\r\n */\r\nexport function getEffectivePreviousMinor(major: number, minor: number): number {\r\n  for (const range of SKIPPED_MINOR_RANGES) {\r\n    if (major === range.major && minor === range.skippedMinEnd + 1) {\r\n      // The current version sits right after a skipped range, so the\r\n      // real predecessor is the version just before the skip started.\r\n      return range.skippedMinStart - 1;\r\n    }\r\n  }\r\n\r\n  return minor - 1;\r\n}\r\n\r\n/**\r\n * Returns true if `candidateMinor` should be considered \"too old\" relative\r\n * to `currentMinor` for the given `major` version \u2014 i.e., it is older than\r\n * the N-1 window once skipped versions are taken into account.\r\n *\r\n * This replaces the na\u00EFve check `candidateMinor < currentMinor - 1`.\r\n */\r\nexport function isMinorVersionTooOld(major: number, currentMinor: number, candidateMinor: number): boolean {\r\n  const effectivePrev = getEffectivePreviousMinor(major, currentMinor);\r\n  return candidateMinor < effectivePrev;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport { IProjectInfoTopicData } from \"../info/IProjectInfoGeneratorBase\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport SkinManifestDefinition from \"../minecraft/SkinManifestDefinition\";\r\nimport WorldTemplateManifestDefinition from \"../minecraft/WorldTemplateManifestDefinition\";\r\nimport PersonaManifestDefinition from \"../minecraft/PersonaManifestDefinition\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport SemanticVersion from \"../core/versioning/SemanticVersion\";\r\nimport { isMinorVersionTooOld } from \"../core/versioning/MinecraftVersionRules\";\r\n\r\n/**\r\n * Validates and updates min_engine_version settings in pack manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/minenginever.form.json} for topic definitions\r\n */\r\nexport enum MinEngineVersionManagerTest {\r\n  behaviorPackMinEngineVersion = 100,\r\n  behaviorPackMinEngineVersionMajorLowerThanCurrent = 110,\r\n  behaviorPackMinEngineVersionMajorHigherThanCurrent = 111,\r\n  behaviorPackMinEngineVersionMinorLowerThanCurrent = 120,\r\n  behaviorPackMinEngineVersionMinorHigherThanCurrent = 121,\r\n  behaviorPackMinEngineVersionPatchLowerThanCurrent = 130,\r\n  behaviorPackMinEngineVersionPatchHigherThanCurrent = 131,\r\n  noPackManifestFound = 180,\r\n  versionProcessingErrorsFound = 181,\r\n  resourcePackMinEngineVersion = 200,\r\n  resourcePackMinEngineVersionMajorLowerThanCurrent = 210,\r\n  resourcePackMinEngineVersionMajorHigherThanCurrent = 211,\r\n  resourcePackMinEngineVersionMinorLowerThanCurrent = 220,\r\n  resourcePackMinEngineVersionMinorHigherThanCurrent = 221,\r\n  resourcePackMinEngineVersionPatchLowerThanCurrent = 230,\r\n  resourcePackMinEngineVersionPatchHigherThanCurrent = 231,\r\n  retrieveLatestMinecraftVersion = 500,\r\n  parseLatestMinecraftVersion = 501,\r\n}\r\n\r\nexport default class MinEngineVersionManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"MINENGINEVER\";\r\n  title = \"Min Engine Version\";\r\n\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  getTopicData(topicId: number): IProjectInfoTopicData | undefined {\r\n    const updateMinEngineVersion = {\r\n      updaterId: this.id,\r\n      updaterIndex: 1,\r\n      action: \"Set min_engine_version to latest version.\",\r\n    };\r\n\r\n    switch (topicId) {\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersion:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Defined\",\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorLowerThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Major Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorHigherThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Major Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorLowerThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Minor Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorHigherThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Minor Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionPatchLowerThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Patch Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.behaviorPackMinEngineVersionPatchHigherThanCurrent:\r\n        return {\r\n          title: \"Behavior Pack Min Engine Version Patch Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersion:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Defined\",\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorLowerThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Major Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorHigherThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Major Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorLowerThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Minor Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorHigherThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Minor Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionPatchLowerThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Patch Version Lower than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.resourcePackMinEngineVersionPatchHigherThanCurrent:\r\n        return {\r\n          title: \"Resource Pack Min Engine Version Patch Version Higher than Current\",\r\n          updaters: [updateMinEngineVersion],\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.retrieveLatestMinecraftVersion:\r\n        return {\r\n          title: \"Retrieve Latest Minecraft Version\",\r\n        };\r\n\r\n      case MinEngineVersionManagerTest.parseLatestMinecraftVersion:\r\n        return {\r\n          title: \"Parse Latest Minecraft Version\",\r\n        };\r\n    }\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n    let foundBpManifest = false;\r\n    let foundRpManifest = false;\r\n    let foundSpManifest = false;\r\n    let foundWorldTemplateManifest = false;\r\n    let foundPersonaManifest = false;\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          MinEngineVersionManagerTest.retrieveLatestMinecraftVersion,\r\n          \"Could not retrieve version.\"\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          MinEngineVersionManagerTest.parseLatestMinecraftVersion,\r\n          \"Could not process latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verShort = verSplit[0] + \".\" + verSplit[1] + \".\" + verSplit[2];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          foundBpManifest = true;\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            if (\r\n              !bpManifest.definition ||\r\n              !bpManifest.definition.header ||\r\n              !bpManifest.definition.header.min_engine_version\r\n            ) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  MinEngineVersionManagerTest.behaviorPackMinEngineVersion,\r\n                  \"Behavior pack manifest does not define a header/min_engine_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  600 + (pi.itemType as number),\r\n                  ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" min_engine_version\",\r\n                  pi,\r\n                  bpManifest.minEngineVersion\r\n                )\r\n              );\r\n\r\n              const sv = SemanticVersion.from(bpManifest.definition.header.min_engine_version);\r\n\r\n              if (sv) {\r\n                const bpVer = sv.asArray();\r\n\r\n                if (bpVer[0] < parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorLowerThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a lower major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (bpVer[0] > parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMajorHigherThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a higher major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (isMinorVersionTooOld(parseInt(verSplit[0]), parseInt(verSplit[1]), bpVer[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorLowerThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a lower minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \") or its previous minor version\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (bpVer[1] > parseInt(verSplit[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.behaviorPackMinEngineVersionMinorHigherThanCurrent,\r\n                      \"Behavior pack manifest (\" +\r\n                        bpVer.join(\".\") +\r\n                        \") has a higher minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const rpManifest = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n          if (rpManifest) {\r\n            foundRpManifest = true;\r\n            if (\r\n              !rpManifest.definition ||\r\n              !rpManifest.definition.header ||\r\n              !rpManifest.definition.header.min_engine_version\r\n            ) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  MinEngineVersionManagerTest.resourcePackMinEngineVersion,\r\n                  \"Resource pack manifest does not define a header/min_engine_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  600 + (pi.itemType as number),\r\n                  ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                  pi,\r\n                  rpManifest.minEngineVersion\r\n                )\r\n              );\r\n\r\n              const sv = SemanticVersion.from(rpManifest.definition.header.min_engine_version);\r\n\r\n              if (sv) {\r\n                const rpVer = sv.asArray();\r\n\r\n                if (rpVer[0] < parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorLowerThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a lower major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (rpVer[0] > parseInt(verSplit[0])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMajorHigherThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a higher major version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (isMinorVersionTooOld(parseInt(verSplit[0]), parseInt(verSplit[1]), rpVer[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorLowerThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a lower minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \") or its previous minor version\",\r\n                      pi\r\n                    )\r\n                  );\r\n                } else if (rpVer[1] > parseInt(verSplit[1])) {\r\n                  infoItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.error,\r\n                      this.id,\r\n                      MinEngineVersionManagerTest.resourcePackMinEngineVersionMinorHigherThanCurrent,\r\n                      \"Resource pack manifest (\" +\r\n                        rpVer.join(\".\") +\r\n                        \") has a higher minor version number compared to the expected version (\" +\r\n                        verShort +\r\n                        \")\",\r\n                      pi\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const spManifest = await SkinManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (spManifest) {\r\n            foundSpManifest = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            foundWorldTemplateManifest = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.personaManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const paManifest = await PersonaManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (paManifest) {\r\n            foundPersonaManifest = true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      !foundBpManifest &&\r\n      !foundRpManifest &&\r\n      !foundSpManifest &&\r\n      !foundWorldTemplateManifest &&\r\n      !foundPersonaManifest\r\n    ) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          MinEngineVersionManagerTest.noPackManifestFound,\r\n          \"No resource/behavior/skin pack manifest or world template manifest was found.\"\r\n        )\r\n      );\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateMinEngineVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateMinEngineVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            const mev = bpManifest.minEngineVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              bpManifest.setMinEngineVersion([major, minor, patch], project);\r\n              bpManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  200,\r\n                  \"Updated behavior pack min_engine_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const rpManifest = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifest) {\r\n            const mev = rpManifest.minEngineVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              rpManifest.setMinEngineVersion([major, minor, patch], project);\r\n              rpManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  201,\r\n                  \"Updated resource pack min_engine_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport WorldTemplateManifestDefinition from \"../minecraft/WorldTemplateManifestDefinition\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport { isMinorVersionTooOld } from \"../core/versioning/MinecraftVersionRules\";\r\n\r\n/**\r\n * Validates and updates base game version settings in world template manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/basegamever.form.json} for topic definitions\r\n */\r\nexport default class BaseGameVersionManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"BASEGAMEVER\";\r\n  title = \"Base Game Version\";\r\n\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, content: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 500, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          501,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verShort = verSplit[0] + \".\" + verSplit[1] + \".\" + verSplit[2];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            if (\r\n              !bpManifest.definition ||\r\n              !bpManifest.definition.header ||\r\n              !bpManifest.definition.header.base_game_version\r\n            ) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  100,\r\n                  \"World template manifest does not define a header/base_game_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              const bpVer = bpManifest?.definition?.header.base_game_version;\r\n\r\n              if (bpVer[0] < parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                    this.id,\r\n                    110,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a lower major version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[0] > parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    111,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a higher major version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (isMinorVersionTooOld(parseInt(verSplit[0]), parseInt(verSplit[1]), bpVer[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n                    this.id,\r\n                    120,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a lower minor version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \") or its previous minor version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[1] > parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    121,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a higher minor version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[2] < parseInt(verSplit[2])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    130,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a lower patch version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (bpVer[2] > parseInt(verSplit[2]) && bpVer[1] === parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    131,\r\n                    \"World template manifest base game version (\" +\r\n                      bpVer.join(\".\") +\r\n                      \") has a higher patch version number compared to the expected version (\" +\r\n                      verShort +\r\n                      \")\",\r\n                    pi\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateBaseGameVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateBaseGameVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.baseGameVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              wtManifest.setBaseGameVersion([major, minor, patch], project);\r\n              wtManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  200,\r\n                  \"Updated world template base_game_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "import ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ITagData from \"../app/ITagData\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport interface IPackSummaryMetadata {\r\n  pack?: IPackSummaryMetadataPack;\r\n  offerStructure?: IPackSummaryMetadataOfferStructure;\r\n  offer: IPackSummaryMetadataOffer;\r\n}\r\n\r\nexport interface IPackSummaryMetadataOfferStructure {\r\n  PackCount: number;\r\n  Type: string;\r\n  Version: string;\r\n  DisplayName: string;\r\n  Id: string;\r\n}\r\n\r\nexport interface IPackSummaryMetadataPack {\r\n  Offer: IPackSummaryMetadataPackOffer;\r\n  Id: string;\r\n  OfferId: string;\r\n  Type: string;\r\n}\r\n\r\nexport interface IPackSummaryMetadataPackOffer {\r\n  Id: string;\r\n}\r\nexport interface IPackSummaryMetadataOffer {\r\n  result: IPackSummaryMetadataOfferResult;\r\n}\r\n\r\nexport interface IPackSummaryMetadataOfferResult {\r\n  offerModel: IPackSummaryMetadataOfferResultOfferModel;\r\n}\r\n\r\nexport interface IPackSummaryMetadataOfferResultOfferModel {\r\n  Id: string;\r\n  contentApproved: string;\r\n  catalogDescription: string;\r\n  offerPrice: string;\r\n  offerGenre: string;\r\n  offerSubgenre: string;\r\n  playerCount: string;\r\n  purchasable: string;\r\n  readableOfferId: string;\r\n  releaseDate: string;\r\n  retailProductId: string;\r\n  submissionDate: string;\r\n  worldType: string;\r\n  cardTitle: string;\r\n  originalReleaseDate: string;\r\n  creatorName: string;\r\n  isAnUpdate: boolean;\r\n  lastUpdated: string;\r\n  offerTitle: string;\r\n  packType: string;\r\n  offerType: string;\r\n  submissionVersion: string;\r\n}\r\n\r\n/**\r\n * Aggregates pack metadata from various sources including marketplace submissions.\r\n */\r\nexport default class PackMetaDataInformationGenerator implements IProjectInfoGenerator {\r\n  id = \"PACKMETADATA\";\r\n  title = \"General info\";\r\n  tags: string[] = [];\r\n  tagMetadata: ITagData = {};\r\n  canAlwaysProcess = true;\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId >= 101 && topicId - 201 <= this.tags.length) {\r\n      return {\r\n        title: \"Tags: \" + this.tags[topicId - 201],\r\n      };\r\n    }\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.metadataId = infoSet.getFirstStringValue(\"PACKMETADATA\", 101);\r\n    info.metadataOfferId = infoSet.getFirstStringValue(\"PACKMETADATA\", 102);\r\n    info.cardTitle = infoSet.getFirstStringValue(\"PACKMETADATA\", 141);\r\n    info.catalogDescription = infoSet.getFirstStringValue(\"PACKMETADATA\", 142);\r\n    info.contentApproved = infoSet.getFirstStringValue(\"PACKMETADATA\", 143);\r\n    info.creatorName = infoSet.getFirstStringValue(\"PACKMETADATA\", 144);\r\n    info.isUpdate = infoSet.getFirstStringValue(\"PACKMETADATA\", 146);\r\n    info.lastUpdated = infoSet.getFirstStringValue(\"PACKMETADATA\", 147);\r\n    info.offerGenre = infoSet.getFirstStringValue(\"PACKMETADATA\", 148);\r\n    info.offerPrice = infoSet.getFirstStringValue(\"PACKMETADATA\", 149);\r\n    info.offerSubgenre = infoSet.getFirstStringValue(\"PACKMETADATA\", 150);\r\n    info.offerTitle = infoSet.getFirstStringValue(\"PACKMETADATA\", 151);\r\n    info.originalReleaseDate = infoSet.getFirstStringValue(\"PACKMETADATA\", 152);\r\n    info.packType = infoSet.getFirstStringValue(\"PACKMETADATA\", 153);\r\n    info.playerCount = infoSet.getFirstStringValue(\"PACKMETADATA\", 154);\r\n    info.purchasable = infoSet.getFirstStringValue(\"PACKMETADATA\", 155);\r\n    info.readableOfferId = infoSet.getFirstStringValue(\"PACKMETADATA\", 156);\r\n    info.releaseDate = infoSet.getFirstStringValue(\"PACKMETADATA\", 157);\r\n    info.retailProductId = infoSet.getFirstStringValue(\"PACKMETADATA\", 158);\r\n    info.submissionDate = infoSet.getFirstStringValue(\"PACKMETADATA\", 159);\r\n    info.submissionVersion = infoSet.getFirstStringValue(\"PACKMETADATA\", 160);\r\n    info.worldType = infoSet.getFirstStringValue(\"PACKMETADATA\", 161);\r\n    info.offerType = infoSet.getFirstStringValue(\"PACKMETADATA\", 162);\r\n\r\n    for (let i = 0; i < this.tags.length; i++) {\r\n      info[this.tags[i]] = infoSet.getFirstStringValue(\"PACKMETADATA\", 201 + i);\r\n    }\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    let itemsCopy = project.getItemsByType(ProjectItemType.tagsMetadata);\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const projectItem = itemsCopy[i];\r\n\r\n      if (projectItem.itemType === ProjectItemType.tagsMetadata) {\r\n        this.tagMetadata = (await projectItem.getJsonObject()) as ITagData;\r\n      }\r\n    }\r\n\r\n    itemsCopy = project.getItemsByType(ProjectItemType.projectSummaryMetadata);\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const projectItem = itemsCopy[i];\r\n\r\n      let content = (await projectItem.getJsonObject()) as IPackSummaryMetadata;\r\n\r\n      if (content && content.offer) {\r\n        if (content.pack && content.pack.Id) {\r\n          items.push(\r\n            new ProjectInfoItem(InfoItemType.info, this.id, 101, \"Metadata Pack Id\", projectItem, content.pack.Id)\r\n          );\r\n        }\r\n\r\n        if (content.pack && content.pack.OfferId) {\r\n          items.push(\r\n            new ProjectInfoItem(InfoItemType.info, this.id, 102, \"Metadata Offer Id\", projectItem, content.pack.OfferId)\r\n          );\r\n\r\n          if (this.tagMetadata) {\r\n            for (const cat in this.tagMetadata) {\r\n              const catVal = this.tagMetadata[cat];\r\n\r\n              if (catVal) {\r\n                for (const tag in catVal) {\r\n                  const idList = catVal[tag];\r\n\r\n                  for (const id of idList) {\r\n                    if (Utilities.uuidEqual(id, content.pack.OfferId)) {\r\n                      let index = -1;\r\n                      for (let i = 0; i < this.tags.length; i++) {\r\n                        if (this.tags[i] === cat) {\r\n                          index = i;\r\n                        }\r\n                      }\r\n                      if (index < 0) {\r\n                        index = this.tags.length;\r\n                        this.tags.push(cat);\r\n                      }\r\n\r\n                      items.push(\r\n                        new ProjectInfoItem(InfoItemType.info, this.id, 201 + index, \"Tag: \" + cat, projectItem, tag)\r\n                      );\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        if (content.offerStructure && content.offerStructure.Id) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              102,\r\n              \"Metadata Product Id\",\r\n              projectItem,\r\n              content.offerStructure.Id\r\n            )\r\n          );\r\n        }\r\n\r\n        const om = content.offer?.result?.offerModel;\r\n\r\n        if (om) {\r\n          if (om.cardTitle) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 141, \"Card Title\", projectItem, om.cardTitle));\r\n          }\r\n\r\n          if (om.catalogDescription) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                142,\r\n                \"Catalog Description\",\r\n                projectItem,\r\n                om.catalogDescription\r\n              )\r\n            );\r\n          }\r\n\r\n          if (om.contentApproved) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 143, \"Content Approved\", projectItem, om.contentApproved)\r\n            );\r\n          }\r\n          if (om.creatorName) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 144, \"Creator Name\", projectItem, om.creatorName)\r\n            );\r\n          }\r\n\r\n          if (om.isAnUpdate) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 146, \"Is Update\", projectItem, om.isAnUpdate));\r\n          }\r\n\r\n          if (om.lastUpdated) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 147, \"Last Updated\", projectItem, om.lastUpdated)\r\n            );\r\n          }\r\n\r\n          if (om.offerGenre) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 148, \"Product Genre\", projectItem, om.offerGenre)\r\n            );\r\n          }\r\n\r\n          if (om.offerPrice) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 149, \"Product Price\", projectItem, om.offerPrice)\r\n            );\r\n          }\r\n\r\n          if (om.offerSubgenre) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 150, \"Product Subgenre\", projectItem, om.offerSubgenre)\r\n            );\r\n          }\r\n\r\n          if (om.offerTitle) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 151, \"Product Title\", projectItem, om.offerTitle)\r\n            );\r\n          }\r\n\r\n          if (om.originalReleaseDate) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                152,\r\n                \"Original Release Date\",\r\n                projectItem,\r\n                om.originalReleaseDate\r\n              )\r\n            );\r\n          }\r\n\r\n          if (om.packType) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 153, \"Pack Type\", projectItem, om.packType));\r\n          }\r\n\r\n          if (om.playerCount) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 154, \"Player Count\", projectItem, \"PC: \" + om.playerCount)\r\n            );\r\n          }\r\n\r\n          if (om.purchasable) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 155, \"Purchasable\", projectItem, om.purchasable)\r\n            );\r\n          }\r\n\r\n          if (om.readableOfferId) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 156, \"Readable Offer Id\", projectItem, om.readableOfferId)\r\n            );\r\n          }\r\n\r\n          if (om.releaseDate) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 157, \"Release Date\", projectItem, om.releaseDate)\r\n            );\r\n          }\r\n\r\n          if (om.retailProductId) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 158, \"Retail Product Id\", projectItem, om.retailProductId)\r\n            );\r\n          }\r\n\r\n          if (om.submissionDate) {\r\n            items.push(\r\n              new ProjectInfoItem(InfoItemType.info, this.id, 159, \"Submission Date\", projectItem, om.submissionDate)\r\n            );\r\n          }\r\n\r\n          if (om.submissionVersion) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                160,\r\n                \"Submission Version\",\r\n                projectItem,\r\n                om.submissionVersion\r\n              )\r\n            );\r\n          }\r\n\r\n          if (om.worldType) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 161, \"World Type\", projectItem, om.worldType));\r\n          }\r\n\r\n          if (om.offerType) {\r\n            items.push(new ProjectInfoItem(InfoItemType.info, this.id, 162, \"Offer Type\", projectItem, om.offerType));\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nconst UniqueRegEx = new RegExp(/[a-zA-Z0-9]{2,}_[a-zA-Z0-9]{2,}:[\\w]+/);\r\n\r\nconst GenericTermList = [\r\n  \"abilities\",\r\n  \"actions\",\r\n  \"adventure\",\r\n  \"animals\",\r\n  \"anims\",\r\n  \"armor\",\r\n  \"assets\",\r\n  \"attachables\",\r\n  \"banners\",\r\n  \"base\",\r\n  \"blocks\",\r\n  \"book\",\r\n  \"boss\",\r\n  \"bosses\",\r\n  \"bridge\",\r\n  \"camping\",\r\n  \"cars\",\r\n  \"characters\",\r\n  \"chests\",\r\n  \"cinema\",\r\n  \"cinematics\",\r\n  \"cloud\",\r\n  \"collectables\",\r\n  \"collectibles\",\r\n  \"custom_ui\",\r\n  \"cut_scene\",\r\n  \"cutscene\",\r\n  \"deco\",\r\n  \"decor\",\r\n  \"dev\",\r\n  \"dialogue\",\r\n  \"dinos\",\r\n  \"dinosaurs\",\r\n  \"doors\",\r\n  \"dragon\",\r\n  \"dragons\",\r\n  \"dummy\",\r\n  \"effects\",\r\n  \"enemies\",\r\n  \"enemy\",\r\n  \"entities\",\r\n  \"entity\",\r\n  \"env\",\r\n  \"equipment\",\r\n  \"events\",\r\n  \"food\",\r\n  \"furniture\",\r\n  \"furnitures\",\r\n  \"fx\",\r\n  \"game_menu\",\r\n  \"gameplay\",\r\n  \"general\",\r\n  \"glow\",\r\n  \"guide\",\r\n  \"guidebook\",\r\n  \"inanimate\",\r\n  \"interface\",\r\n  \"internal\",\r\n  \"intro\",\r\n  \"item\",\r\n  \"items\",\r\n  \"launchers\",\r\n  \"machines\",\r\n  \"magic\",\r\n  \"markers\",\r\n  \"market\",\r\n  \"marketing_banners\",\r\n  \"mastermind\",\r\n  \"mechanics\",\r\n  \"menu\",\r\n  \"menus\",\r\n  \"minigames\",\r\n  \"misc\",\r\n  \"miscellaneous\",\r\n  \"mob\",\r\n  \"mobs\",\r\n  \"monsters\",\r\n  \"morphs\",\r\n  \"mutant\",\r\n  \"neutral\",\r\n  \"npc\",\r\n  \"npcs\",\r\n  \"objectives\",\r\n  \"particles\",\r\n  \"passive\",\r\n  \"passive_mobs\",\r\n  \"pets\",\r\n  \"platform\",\r\n  \"player\",\r\n  \"players\",\r\n  \"portal\",\r\n  \"portals\",\r\n  \"preset\",\r\n  \"projectile\",\r\n  \"projectiles\",\r\n  \"properties\",\r\n  \"props\",\r\n  \"recipe_models\",\r\n  \"scanner\",\r\n  \"script\",\r\n  \"security\",\r\n  \"sequences\",\r\n  \"sfx\",\r\n  \"shop\",\r\n  \"skills\",\r\n  \"sounds\",\r\n  \"static_entity\",\r\n  \"store\",\r\n  \"structure\",\r\n  \"structures\",\r\n  \"systems\",\r\n  \"tasks\",\r\n  \"teams\",\r\n  \"teleporter\",\r\n  \"tnt\",\r\n  \"tools\",\r\n  \"towers\",\r\n  \"trinkets\",\r\n  \"tutorial\",\r\n  \"ui\",\r\n  \"user_interface\",\r\n  \"util\",\r\n  \"utilities\",\r\n  \"vanilla\",\r\n  \"vanilla_mob\",\r\n  \"vehicle\",\r\n  \"vehicles\",\r\n  \"vr\",\r\n  \"weapon\",\r\n  \"weapons\",\r\n  \"wrench\",\r\n  \"opaque\",\r\n  \"map\",\r\n  \"on\",\r\n  \"item\",\r\n  \"player\",\r\n  \"map\",\r\n  \"charged\",\r\n  \"beacon\",\r\n  \"conduit\",\r\n  \"moving\",\r\n  \"banner\",\r\n  \"bed\",\r\n  \"cow\",\r\n  \"chicken\",\r\n  \"dragon\",\r\n  \"ender\",\r\n  \"enderman\",\r\n  \"fang\",\r\n  \"fireball\",\r\n  \"mob\",\r\n  \"warden\",\r\n  \"village\",\r\n  \"pattern\",\r\n  \"wandering\",\r\n  \"trial\",\r\n  \"stray\",\r\n  \"spider\",\r\n  \"slime\",\r\n  \"chest\",\r\n  \"silverfish\",\r\n  \"polar\",\r\n  \"shield\",\r\n  \"husk\",\r\n  \"blaze\",\r\n  \"axolotl\",\r\n];\r\n\r\n// rule name/check. For validation errors, name should be a terse description of \"your problem\"\r\nexport enum CooperativeAddOnRequirementsGeneratorTest {\r\n  noLooseFileInTypeFolder = 101,\r\n  noCommonNamesInCreatorFolderName = 102,\r\n  noLooseFileInCreatorFolder = 104,\r\n  moreThanOneFolderInCreatorFolderBesidesMaybeCommon = 108,\r\n  noUnsupportedFolderNameInTypeFolder = 109,\r\n  moreThanOneFolderInTypeFolder = 110,\r\n  noLooseFilesInTypeFolder = 111,\r\n  noDimensionElements = 131,\r\n  noUiElements = 133,\r\n  notOneBehaviorPackManifest = 160,\r\n  notOneResourcePackManifest = 161,\r\n  behaviorPackManifestNotValid = 163,\r\n  resourcePackManifestNotValid = 164,\r\n  notOneDependencyFromBehaviorPackToResourcePack = 165,\r\n  dependencyFromBehaviorPackToResourcePackNotValid = 166,\r\n  notOneDependencyFromResourcePackToBehaviorPack = 168,\r\n  dependencyFromResourcePackToBehaviorPackNotValid = 169,\r\n  foundBehaviorPack = 200,\r\n  noVibrantVisualsForNow = 210,\r\n}\r\n\r\n/**\r\n * Validates cooperative add-on requirements for marketplace submissions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/caddonreq.form.json} for topic definitions\r\n */\r\nexport default class CooperativeAddOnRequirementsGenerator implements IProjectInfoGenerator {\r\n  id = \"CADDONREQ\";\r\n  title = \"Cooperative Add-On Requirements\";\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    let behaviorPackManifest: undefined | BehaviorManifestDefinition = undefined;\r\n    let behaviorPackItem: undefined | ProjectItem = undefined;\r\n    let resourcePackManifest: undefined | ResourceManifestDefinition = undefined;\r\n    let resourcePackItem: undefined | ProjectItem = undefined;\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.primaryFile) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          if (behaviorPackManifest) {\r\n            // CADDONREQ160\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnRequirementsGeneratorTest.notOneBehaviorPackManifest,\r\n                `Found more than one behavior pack manifest in a cooperative add-on, which is not a best practice`,\r\n                projectItem\r\n              )\r\n            );\r\n          } else {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                CooperativeAddOnRequirementsGeneratorTest.foundBehaviorPack,\r\n                `Behavior pack manifest found.`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n\r\n          behaviorPackManifest = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n          behaviorPackItem = projectItem;\r\n\r\n          await behaviorPackManifest?.load();\r\n        } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          if (resourcePackManifest) {\r\n            // CADDONREQ161\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnRequirementsGeneratorTest.notOneResourcePackManifest,\r\n                `Found more than one resource pack manifest in a cooperative add-on, which is not a best practice`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n\r\n          resourcePackManifest = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n          resourcePackItem = projectItem;\r\n\r\n          await resourcePackManifest?.load();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!behaviorPackManifest || !behaviorPackManifest.definition) {\r\n      // CADDONREQ163\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.behaviorPackManifestNotValid,\r\n          `Did not find a valid behavior pack manifest.`,\r\n          undefined\r\n        )\r\n      );\r\n    }\r\n\r\n    if (!resourcePackManifest || !resourcePackManifest.definition) {\r\n      //CADDONREQ164\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.resourcePackManifestNotValid,\r\n          `Did not find a valid resource pack manifest.`,\r\n          undefined\r\n        )\r\n      );\r\n    }\r\n\r\n    if (\r\n      behaviorPackManifest &&\r\n      resourcePackManifest &&\r\n      behaviorPackManifest.definition &&\r\n      resourcePackManifest.definition\r\n    ) {\r\n      const bpNonInternalDependency = behaviorPackManifest.getFirstNonScriptModuleDependency();\r\n\r\n      if (\r\n        !behaviorPackManifest.definition.dependencies ||\r\n        behaviorPackManifest.getNonScriptModuleDependencyCount() !== 1\r\n      ) {\r\n        // CADDONREQ165\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.notOneDependencyFromBehaviorPackToResourcePack,\r\n            `Did not find exactly one dependency on the corresponding resource pack in the behavior pack manifest.`,\r\n            behaviorPackItem,\r\n            behaviorPackManifest.getNonScriptModuleDependencyCount()\r\n          )\r\n        );\r\n      } else if (\r\n        !bpNonInternalDependency ||\r\n        !bpNonInternalDependency.uuid ||\r\n        !Utilities.uuidEqual(bpNonInternalDependency.uuid, resourcePackManifest.definition.header.uuid)\r\n      ) {\r\n        // CADDONREQ166\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.dependencyFromBehaviorPackToResourcePackNotValid,\r\n            `Behavior pack manifest does not have a proper dependency on the resource pack identifier.`,\r\n            behaviorPackItem\r\n          )\r\n        );\r\n      }\r\n\r\n      if (!resourcePackManifest.definition.dependencies || resourcePackManifest.definition.dependencies.length !== 1) {\r\n        // CADDONREQ168\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.notOneDependencyFromResourcePackToBehaviorPack,\r\n            `Did not find exactly one dependency on the corresponding behavior pack in the resource pack manifest.`,\r\n            resourcePackItem\r\n          )\r\n        );\r\n      } else if (\r\n        !resourcePackManifest.definition.dependencies[0].uuid ||\r\n        !Utilities.uuidEqual(\r\n          resourcePackManifest.definition.dependencies[0].uuid,\r\n          behaviorPackManifest.definition.header.uuid\r\n        )\r\n      ) {\r\n        // CADDONREQ169\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.dependencyFromResourcePackToBehaviorPackNotValid,\r\n            `Resource pack manifest does not have a proper dependency on the behavior pack identifier.`,\r\n            behaviorPackItem\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (bpFolder) {\r\n      await this.generateFromBehaviorPackFolder(project, bpFolder, items);\r\n    }\r\n\r\n    const rpFolder = await project.getDefaultResourcePackFolder();\r\n\r\n    if (rpFolder) {\r\n      await this.generateFromResourcePackFolder(project, rpFolder, items);\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generateFromBehaviorPackFolder(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n\r\n      if (folderNameCanon === \"dimensions\") {\r\n        // CADDONREQ131\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noDimensionElements,\r\n            `Found dimensions in a cooperative add-on, which is not a best practice.`,\r\n            undefined\r\n          )\r\n        );\r\n      }\r\n\r\n      if (childFolder && !folder.errorStatus) {\r\n        if (folderNameCanon === \"structures\") {\r\n          await this.generateFromFirstLevelFolderCreator_Game(project, childFolder, items);\r\n        } else if (\r\n          folderNameCanon !== \"texts\" &&\r\n          folderNameCanon !== \"entities\" &&\r\n          folderNameCanon !== \"features\" &&\r\n          folderNameCanon !== \"feature_rules\" &&\r\n          folderNameCanon !== \"particles\" &&\r\n          folderNameCanon !== \"items\" &&\r\n          folderNameCanon !== \"scripts\" &&\r\n          folderNameCanon !== \"recipes\" &&\r\n          folderNameCanon !== \"spawn_rules\" &&\r\n          folderNameCanon !== \"animations\" &&\r\n          folderNameCanon !== \"animation_controllers\" &&\r\n          folderNameCanon !== \"render_controllers\" &&\r\n          folderNameCanon !== \"blocks\"\r\n        ) {\r\n          await this.generateFromFirstLevelFolderCreatorNameGameName(project, childFolder, items);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async generateFromResourcePackFolder(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n\r\n      if (folderNameCanon === \"ui\") {\r\n        // CADDONREQ133\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noUiElements,\r\n            `Found ui elements in a cooperative add-on, which is not supported`,\r\n            undefined\r\n          )\r\n        );\r\n      }\r\n\r\n      if (childFolder && !folder.errorStatus) {\r\n        if (\r\n          folderNameCanon !== \"texts\" &&\r\n          folderNameCanon !== \"entity\" &&\r\n          folderNameCanon !== \"items\" &&\r\n          folderNameCanon !== \"particles\" &&\r\n          folderNameCanon !== \"materials\" &&\r\n          folderNameCanon !== \"blocks\" &&\r\n          folderNameCanon !== \"models\" &&\r\n          folderNameCanon !== \"attachables\" &&\r\n          folderNameCanon !== \"render_controllers\" &&\r\n          folderNameCanon !== \"animation_controllers\" &&\r\n          folderNameCanon !== \"animations\"\r\n        ) {\r\n          await this.generateFromFirstLevelFolderCreatorNameGameName(project, childFolder, items);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static isNameGenericTerm(name: string) {\r\n    name = StorageUtilities.canonicalizeName(name);\r\n\r\n    return GenericTermList.includes(name);\r\n  }\r\n\r\n  static isNamespacedIdentifier(id: string) {\r\n    let identifierSplit = id.split(\":\");\r\n\r\n    if (identifierSplit.length !== 2) {\r\n      return false;\r\n    }\r\n\r\n    if (identifierSplit[0].length < 2 || identifierSplit[1].length < 2) {\r\n      return false;\r\n    }\r\n\r\n    return this.isNamespacedString(identifierSplit[0]);\r\n  }\r\n\r\n  static isNamespacedString(name: string) {\r\n    let tokens = name.split(\"_\");\r\n\r\n    if (tokens.length < 2) {\r\n      return false;\r\n    }\r\n\r\n    return tokens[0].length >= 2 && tokens[1].length >= 2;\r\n  }\r\n\r\n  static isCommonMaterialName(name: string) {\r\n    let tokens = name.split(\"_\");\r\n\r\n    if (tokens.length < 3) {\r\n      return true;\r\n    }\r\n\r\n    return GenericTermList.includes(tokens[0]);\r\n  }\r\n\r\n  static isUniqueNamespaceOrShortName(name: string) {\r\n    name = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (name.length < 3) {\r\n      return false;\r\n    }\r\n\r\n    return UniqueRegEx.test(name);\r\n  }\r\n\r\n  async generateFromFirstLevelFolderCreator_Game(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      if (!this.isPerPackCatalogFile(folder.name, fileName)) {\r\n        const file = folder.files[fileName];\r\n\r\n        const projectItem = file?.extendedPath ? project.getItemByExtendedOrProjectPath(file?.extendedPath) : undefined;\r\n\r\n        // CADDONREQ111\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noLooseFilesInTypeFolder,\r\n            `Found a loose file in the ${folder.name} folder. Should only see files in the folder ${folder.name}\\\\creatorshortname_gamename\\\\`,\r\n            projectItem,\r\n            fileName\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    let folderCount = 0;\r\n    for (const folderName in folder.folders) {\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n      folderCount++;\r\n\r\n      if (CooperativeAddOnRequirementsGenerator.isUniqueNamespaceOrShortName(folderNameCanon)) {\r\n        // CADDONREQ109\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noUnsupportedFolderNameInTypeFolder,\r\n            `Found an add-on-blocked folder '${folderName}' in a parent folder pack\\\\${folder.name}. Should be named 'creatorshortname' and not a common term`,\r\n            undefined,\r\n            folderName\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    if (folderCount > 1) {\r\n      // CADDONREQ110\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.moreThanOneFolderInTypeFolder,\r\n          `Folder '${folder.name}' has more than one subfolder, which is not supported. There should only be one folder in pack\\\\${folder.name}\\\\<studioname>_<mygamename>`,\r\n          undefined,\r\n          folder.name\r\n        )\r\n      );\r\n    }\r\n  }\r\n\r\n  isPerPackCatalogFile(folderName: string, fileName: string) {\r\n    const fileNameCanon = StorageUtilities.canonicalizeName(fileName);\r\n\r\n    if (\r\n      (folderName !== \"functions\" || fileNameCanon !== \"tick.json\") &&\r\n      (folderName !== \"textures\" ||\r\n        (fileNameCanon !== \"flipbook_textures.json\" &&\r\n          fileNameCanon !== \"item_textures.json\" &&\r\n          fileNameCanon !== \"blocks.json\" &&\r\n          fileNameCanon !== \"block.json\" &&\r\n          fileNameCanon !== \"textures_list.json\" &&\r\n          fileNameCanon !== \"texture_list.json\" &&\r\n          fileNameCanon !== \"terrain_textures.json\" &&\r\n          fileNameCanon !== \"item_texture.json\" &&\r\n          fileNameCanon !== \"terrain_texture.json\")) &&\r\n      (folderName !== \"item_catalog\" || fileNameCanon !== \"crafting_item_catalog.json\") &&\r\n      (folderName !== \"sounds\" ||\r\n        (fileNameCanon !== \"sound_definitions.json\" &&\r\n          fileNameCanon !== \"sounds.json\" &&\r\n          fileNameCanon !== \"music_definitions.json\"))\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async generateFromFirstLevelFolderCreatorNameGameName(project: Project, folder: IFolder, items: ProjectInfoItem[]) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      if (!this.isPerPackCatalogFile(folder.name, fileName)) {\r\n        const file = folder.files[fileName];\r\n\r\n        const projectItem = file?.extendedPath ? project.getItemByExtendedOrProjectPath(file?.extendedPath) : undefined;\r\n\r\n        // CADDONREQ101\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noLooseFileInTypeFolder,\r\n            `Found a loose file in the ${folder.name} folder. Should only see files in the folder ${folder.name}\\\\creatorshortname\\\\gamename\\\\`,\r\n            projectItem,\r\n            fileName\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(folderName);\r\n      if (CooperativeAddOnRequirementsGenerator.isNameGenericTerm(folderNameCanon)) {\r\n        // CADDONREQ102\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CooperativeAddOnRequirementsGeneratorTest.noCommonNamesInCreatorFolderName,\r\n            `Found an cooperative add-on common name folder '${folderName}' in a parent folder pack\\\\${folder.name}. Should be named 'creatorshortname' and not a common term`,\r\n            undefined,\r\n            folderName\r\n          )\r\n        );\r\n      }\r\n\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder) {\r\n        await this.generateFromSecondLevelFolderGameName(project, folder.name, childFolder, items);\r\n      }\r\n    }\r\n  }\r\n\r\n  async generateFromSecondLevelFolderGameName(\r\n    project: Project,\r\n    parentFolderName: string,\r\n    folder: IFolder,\r\n    items: ProjectInfoItem[]\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      const projectItem = file?.extendedPath ? project.getItemByExtendedOrProjectPath(file.extendedPath) : undefined;\r\n\r\n      // CADDONREQ104\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.noLooseFileInCreatorFolder,\r\n          `Found a loose file '${fileName}' in ${parentFolderName}\\\\${folder.name}. Files should only be in the folder ${parentFolderName}\\\\${folder.name}\\\\<mygamename>`,\r\n          projectItem,\r\n          fileName\r\n        )\r\n      );\r\n    }\r\n\r\n    let folderCount = 0;\r\n\r\n    for (const childFolderName in folder.folders) {\r\n      const folderNameCanon = StorageUtilities.canonicalizeName(childFolderName);\r\n\r\n      if (folderNameCanon !== \"common\") {\r\n        folderCount++;\r\n      }\r\n    }\r\n\r\n    if (folderCount > 1) {\r\n      // CADDONREQ108\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnRequirementsGeneratorTest.moreThanOneFolderInCreatorFolderBesidesMaybeCommon,\r\n          `Secondary folder '${folder.name}' in ${parentFolderName} has more than one subfolder (besides 'common'), which is not supported. There should only be one folder (plus optionally 'common') in pack\\\\${parentFolderName}\\\\${folder.name}\\\\<mygamename>`,\r\n          undefined,\r\n          folder.name\r\n        )\r\n      );\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IResourceAnimationWrapper, { IAnimationResource } from \"./IAnimationResource\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class AnimationResourceDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IResourceAnimationWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<AnimationResourceDefinition, AnimationResourceDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get idList() {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const idList = new Set<string>();\r\n\r\n    for (const key in this._data.animations) {\r\n      const animation = this._data.animations[key];\r\n\r\n      if (key && animation) {\r\n        idList.add(key);\r\n      }\r\n    }\r\n\r\n    return idList;\r\n  }\r\n\r\n  public get animations() {\r\n    if (this._data && this._data.animations) {\r\n      return this._data.animations;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this.ensureDefault();\r\n\r\n    if (this._data) {\r\n      this._data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  ensureDefault() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        animations: {},\r\n      };\r\n    }\r\n\r\n    return this._data;\r\n  }\r\n\r\n  ensureAnimation(animationName: string): IAnimationResource {\r\n    this.ensureDefault();\r\n\r\n    if (!this._data || !this._data.animations || !Utilities.isUsableAsObjectKey(animationName)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._data.animations[animationName]) {\r\n      this._data.animations[animationName] = { bones: {} };\r\n    }\r\n\r\n    return this._data.animations[animationName];\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationResourceDefinition, AnimationResourceDefinition>\r\n  ) {\r\n    let rbd: AnimationResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new AnimationResourceDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationResourceDefinition) {\r\n      rbd = file.manager as AnimationResourceDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\n\r\nexport interface IProcessorIssue {\r\n  subject: string;\r\n  message: string;\r\n  path?: string;\r\n}\r\n\r\nexport enum ProcessorFixupLevel {\r\n  none = 0,\r\n  perField = 1,\r\n  full = 9,\r\n}\r\n\r\nexport default class DataFormProcessor {\r\n  static async process(\r\n    obj: { [key: string]: any },\r\n    form: IFormDefinition,\r\n    fixupLevel?: ProcessorFixupLevel,\r\n    path?: string,\r\n    issues?: IProcessorIssue[]\r\n  ) {\r\n    if (path === undefined) {\r\n      path = \"\";\r\n    } else {\r\n      path += \".\";\r\n    }\r\n\r\n    if (issues === undefined) {\r\n      issues = [];\r\n    }\r\n\r\n    for (const key in obj) {\r\n      const val = obj[key as string] as any;\r\n\r\n      let foundField = false;\r\n\r\n      for (const field of form.fields) {\r\n        if (field.id === key) {\r\n          foundField = true;\r\n\r\n          if (field.dataType === FieldDataType.objectArray && field.subForm) {\r\n            if (val && Array.isArray(val)) {\r\n              for (const obj of val) {\r\n                await DataFormProcessor.process(obj, field.subForm, fixupLevel, path + key, issues);\r\n              }\r\n            }\r\n          }\r\n          if (field.dataType === FieldDataType.keyedObjectCollection && field.subForm) {\r\n            if (val && typeof val === \"object\") {\r\n              for (const subKey in val) {\r\n                const subObj = val[subKey];\r\n\r\n                await DataFormProcessor.process(subObj, field.subForm, fixupLevel, path + key + \".\" + subKey, issues);\r\n              }\r\n            }\r\n          } else if (\r\n            (field.dataType === FieldDataType.object && field.subForm) ||\r\n            field.dataType === FieldDataType.minecraftEventTrigger ||\r\n            field.dataType === FieldDataType.minecraftFilter\r\n          ) {\r\n            if (val && typeof val === \"object\") {\r\n              let keyCount = 0;\r\n\r\n              for (const key in obj) {\r\n                if (key) {\r\n                  keyCount++;\r\n                }\r\n              }\r\n\r\n              if (\r\n                keyCount === 0 &&\r\n                (!field.retainIfEmptyOrDefault ||\r\n                  field.dataType === FieldDataType.minecraftEventTrigger ||\r\n                  field.dataType === FieldDataType.minecraftFilter)\r\n              ) {\r\n                issues.push({\r\n                  subject: key,\r\n                  message: \"Object is defined but empty; should be undefined.\",\r\n                  path: path,\r\n                });\r\n\r\n                if (\r\n                  fixupLevel === ProcessorFixupLevel.perField ||\r\n                  fixupLevel === ProcessorFixupLevel.full ||\r\n                  field.dataType === FieldDataType.minecraftEventTrigger ||\r\n                  field.dataType === FieldDataType.minecraftFilter\r\n                ) {\r\n                  if (Utilities.isUsableAsObjectKey(key)) {\r\n                    obj[key] = undefined;\r\n                  }\r\n                }\r\n              } else if (field.dataType === FieldDataType.object && field.subForm) {\r\n                await DataFormProcessor.process(val, field.subForm, fixupLevel, path + key, issues);\r\n              }\r\n            }\r\n          } else if (\r\n            field.dataType === FieldDataType.keyedStringArrayCollection ||\r\n            field.dataType === FieldDataType.keyedKeyedStringArrayCollection\r\n          ) {\r\n            if (val && typeof val === \"object\") {\r\n              let keyCount = 0;\r\n\r\n              for (const key in val) {\r\n                if (key) {\r\n                  keyCount++;\r\n                }\r\n              }\r\n\r\n              if (keyCount === 0 && !field.retainIfEmptyOrDefault) {\r\n                issues.push({\r\n                  subject: key,\r\n                  message: \"Object is defined but empty; should be undefined.\",\r\n                  path: path,\r\n                });\r\n\r\n                if (fixupLevel === ProcessorFixupLevel.perField || fixupLevel === ProcessorFixupLevel.full) {\r\n                  obj[key] = undefined;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!foundField) {\r\n        issues.push({\r\n          subject: key,\r\n          message: \"Could not find field in data definition.\",\r\n          path: path,\r\n        });\r\n\r\n        if (fixupLevel === ProcessorFixupLevel.full) {\r\n          obj[key] = undefined;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IRenderControllerSetDefinition from \"./IRenderControllerSet\";\r\nimport DataFormProcessor, { ProcessorFixupLevel } from \"../dataform/DataFormProcessor\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Database from \"./Database\";\r\n\r\nexport default class RenderControllerSetDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IRenderControllerSetDefinition;\r\n\r\n  private _onLoaded = new EventDispatcher<RenderControllerSetDefinition, RenderControllerSetDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get idList() {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const idList = new Set<string>();\r\n\r\n    for (const key in this._data.render_controllers) {\r\n      const rc = this._data.render_controllers[key];\r\n\r\n      if (key && rc) {\r\n        idList.add(key);\r\n      }\r\n    }\r\n\r\n    return idList;\r\n  }\r\n\r\n  public get renderControllers() {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const rcList = [];\r\n\r\n    for (const key in this._data.render_controllers) {\r\n      const rc = this._data.render_controllers[key];\r\n\r\n      if (key && rc) {\r\n        rcList.push(rc);\r\n      }\r\n    }\r\n\r\n    return rcList;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public async removeTexture(textureId: string) {\r\n    await this.load();\r\n\r\n    const rcs = this._data?.render_controllers;\r\n\r\n    if (!rcs) {\r\n      return;\r\n    }\r\n\r\n    for (const rcKey in rcs) {\r\n      const rc = rcs[rcKey];\r\n\r\n      if (rc) {\r\n        if (rc.arrays.textures) {\r\n          for (const textureListName in rc.arrays.textures) {\r\n            const textureList = rc.arrays.textures[textureListName];\r\n\r\n            let newTextureList: string[] | undefined = [];\r\n\r\n            if (textureList) {\r\n              for (const textureStr of textureList) {\r\n                if (textureStr !== textureId && textureStr !== \"Texture.\" + textureId) {\r\n                  newTextureList.push(textureStr);\r\n                }\r\n              }\r\n            }\r\n\r\n            if (newTextureList.length === 0) {\r\n              newTextureList = undefined;\r\n            }\r\n\r\n            rc.arrays.textures[textureListName] = newTextureList;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<RenderControllerSetDefinition, RenderControllerSetDefinition>\r\n  ) {\r\n    let rc: RenderControllerSetDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rc = new RenderControllerSetDefinition();\r\n\r\n      rc.file = file;\r\n\r\n      file.manager = rc;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof RenderControllerSetDefinition) {\r\n      rc = file.manager as RenderControllerSetDefinition;\r\n\r\n      if (!rc.isLoaded) {\r\n        if (loadHandler) {\r\n          rc.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rc.load();\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (this._data) {\r\n      const renderControllerSet = await Database.ensureFormLoaded(\"resource\", \"render_controller_set\");\r\n\r\n      if (renderControllerSet) {\r\n        await DataFormProcessor.process(this._data, renderControllerSet, ProcessorFixupLevel.perField);\r\n      }\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        render_controllers: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IAnimationBehaviorWrapper, { IAnimationBehaviorTimelineWrapper } from \"./IAnimationBehavior\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class AnimationBehaviorDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: IAnimationBehaviorWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<AnimationBehaviorDefinition, AnimationBehaviorDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getAllTimeline() {\r\n    const timelines: IAnimationBehaviorTimelineWrapper[] = [];\r\n\r\n    if (this.data && this.data.animations) {\r\n      for (const aName in this.data.animations) {\r\n        const anim = this.data.animations[aName];\r\n\r\n        if (anim && anim.timeline) {\r\n          for (const timestamp in anim.timeline) {\r\n            const timeline = anim.timeline[timestamp];\r\n            if (timeline) {\r\n              timelines.push({\r\n                animationId: aName,\r\n                timestamp: timestamp,\r\n                timeline: timeline,\r\n              });\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return timelines;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = {\r\n        format_version: \"1.12.0\",\r\n        animations: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationBehaviorDefinition, AnimationBehaviorDefinition>\r\n  ) {\r\n    let abd: AnimationBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      abd = new AnimationBehaviorDefinition();\r\n\r\n      abd.file = file;\r\n\r\n      file.manager = abd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationBehaviorDefinition) {\r\n      abd = file.manager as AnimationBehaviorDefinition;\r\n\r\n      if (!abd.isLoaded) {\r\n        if (loadHandler) {\r\n          abd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await abd.load();\r\n      }\r\n    }\r\n\r\n    return abd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.data !== null, \"ITDP\");\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IAnimationControllerBehaviorWrapper, {\r\n  IAnimationControllerBehaviorStateWrapper,\r\n} from \"./IAnimationControllerBehavior\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class AnimationControllerBehaviorDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: IAnimationControllerBehaviorWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<\r\n    AnimationControllerBehaviorDefinition,\r\n    AnimationControllerBehaviorDefinition\r\n  >();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  getAllStates() {\r\n    const states: IAnimationControllerBehaviorStateWrapper[] = [];\r\n\r\n    if (this.data && this.data.animation_controllers) {\r\n      for (const acName in this.data.animation_controllers) {\r\n        const ac = this.data.animation_controllers[acName];\r\n\r\n        if (ac && ac.states) {\r\n          for (const stateName in ac.states) {\r\n            const state = ac.states[stateName];\r\n\r\n            if (state) {\r\n              states.push({\r\n                id: stateName,\r\n                animationControllerId: acName,\r\n                state: state,\r\n              });\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return states;\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = {\r\n        format_version: \"1.12.0\",\r\n        animation_controllers: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationControllerBehaviorDefinition, AnimationControllerBehaviorDefinition>\r\n  ) {\r\n    let abcd: AnimationControllerBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      abcd = new AnimationControllerBehaviorDefinition();\r\n\r\n      abcd.file = file;\r\n\r\n      file.manager = abcd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationControllerBehaviorDefinition) {\r\n      abcd = file.manager as AnimationControllerBehaviorDefinition;\r\n\r\n      if (!abcd.isLoaded) {\r\n        if (loadHandler) {\r\n          abcd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await abcd.load();\r\n      }\r\n    }\r\n\r\n    return abcd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.data !== null, \"ITDP\");\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IResourceAnimationControllerDefinition from \"./IAnimationControllerResource\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class AnimationControllerResourceDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IResourceAnimationControllerDefinition;\r\n\r\n  private _onLoaded = new EventDispatcher<\r\n    AnimationControllerResourceDefinition,\r\n    AnimationControllerResourceDefinition\r\n  >();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get idList() {\r\n    if (!this._data || !this._data.animation_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const idList = new Set<string>();\r\n\r\n    for (const key in this._data.animation_controllers) {\r\n      const ac = this._data.animation_controllers[key];\r\n\r\n      if (key && ac) {\r\n        idList.add(key);\r\n      }\r\n    }\r\n\r\n    return idList;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      this._data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.12.0\",\r\n        animation_controllers: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AnimationControllerResourceDefinition, AnimationControllerResourceDefinition>\r\n  ) {\r\n    let rbd: AnimationControllerResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new AnimationControllerResourceDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AnimationControllerResourceDefinition) {\r\n      rbd = file.manager as AnimationControllerResourceDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"ITDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport BiomeResourceDefinition from \"./BiomeResourceDefinition\";\r\n\r\nexport interface IBiomeBehaviorData {\r\n  format_version: string;\r\n  \"minecraft:biome\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    components: { [componentName: string]: any };\r\n  };\r\n}\r\n\r\nexport default class BiomeBehaviorDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _typeId = \"\";\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public _data?: IBiomeBehaviorData;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BiomeBehaviorDefinition, BiomeBehaviorDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BiomeBehaviorDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BiomeBehaviorDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<BiomeBehaviorDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  constructor(typeId?: string) {\r\n    if (typeId) {\r\n      this._typeId = typeId;\r\n      this._id = typeId;\r\n    }\r\n  }\r\n\r\n  public get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  public set typeId(newId: string) {\r\n    this._typeId = newId;\r\n    this._id = newId;\r\n  }\r\n\r\n  public get id(): string {\r\n    return this._id || this._typeId || \"\";\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n    this._typeId = newId;\r\n  }\r\n\r\n  private _ensureBiomeDataInitialized() {\r\n    if (!this._data) {\r\n      this._data = {\r\n        format_version: \"1.16.0\",\r\n        \"minecraft:biome\": {\r\n          description: {\r\n            identifier: this._typeId,\r\n          },\r\n          components: {},\r\n        },\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:biome\"]) {\r\n      this._data[\"minecraft:biome\"] = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:biome\"].description) {\r\n      this._data[\"minecraft:biome\"].description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:biome\"].components) {\r\n      this._data[\"minecraft:biome\"].components = {};\r\n    }\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (this._data === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      if (this._data[\"minecraft:biome\"]?.components) {\r\n        const comp = this._data[\"minecraft:biome\"].components[id];\r\n        if (comp) {\r\n          this._managed[id] = new ManagedComponent(this._data[\"minecraft:biome\"].components, id, comp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BDNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined && this._data[\"minecraft:biome\"]?.components) {\r\n      for (const componentName in this._data[\"minecraft:biome\"].components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    const biomeData = this._data as IBiomeBehaviorData;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(biomeData[\"minecraft:biome\"].components, id, componentOrData);\r\n\r\n    biomeData[\"minecraft:biome\"].components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined || !this._data[\"minecraft:biome\"]?.components) {\r\n      return;\r\n    }\r\n\r\n    const newComponents: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data[\"minecraft:biome\"].components) {\r\n      if (name !== id) {\r\n        if (Utilities.isUsableAsObjectKey(name)) {\r\n          const component = this._data[\"minecraft:biome\"].components[name];\r\n          newComponents[name] = component;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newManagedComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data[\"minecraft:biome\"].components = newComponents;\r\n    this._managed = newManagedComponents;\r\n\r\n    this._onComponentRemoved.dispatch(this, id);\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<BiomeBehaviorDefinition | undefined> {\r\n    if (file.manager === undefined) {\r\n      const bd = new BiomeBehaviorDefinition();\r\n\r\n      bd._file = file;\r\n\r\n      if (!bd.isLoaded) {\r\n        await bd.load();\r\n      }\r\n\r\n      file.manager = bd;\r\n    }\r\n\r\n    if (file.manager instanceof BiomeBehaviorDefinition) {\r\n      return file.manager as BiomeBehaviorDefinition;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"BBDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    const fileContent = this._file.content;\r\n\r\n    if (fileContent === null || fileContent instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      this._data = JSON.parse(fileContent);\r\n\r\n      if (this._data && this._data[\"minecraft:biome\"]?.description?.identifier) {\r\n        this._typeId = this._data[\"minecraft:biome\"].description.identifier;\r\n        this._id = this._typeId;\r\n      }\r\n    } catch (e) {\r\n      Log.error(\"Could not load biome definition: \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const biomeResourceItems = project.getItemsByType(ProjectItemType.biomeResource);\r\n\r\n    for (const candItem of biomeResourceItems) {\r\n      const biomeResourceDef = (await MinecraftDefinitions.get(candItem)) as undefined | BiomeResourceDefinition;\r\n\r\n      if (biomeResourceDef && biomeResourceDef.id === this.id) {\r\n        item.addChildItem(candItem);\r\n      }\r\n    }\r\n  }\r\n\r\n  static getComponentFromBaseFileName(name: string) {\r\n    let canonName = name;\r\n\r\n    if (canonName.startsWith(\"minecraft_\")) {\r\n      canonName = canonName.substring(10);\r\n    }\r\n\r\n    return canonName;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(this._typeId.indexOf(\":\") + 1);\r\n    }\r\n\r\n    return this._typeId;\r\n  }\r\n\r\n  public get namespace() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(0, this._typeId.indexOf(\":\"));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensureDefinition() {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    if (this._data && this._data[\"minecraft:biome\"]?.description) {\r\n      this._data[\"minecraft:biome\"].description.identifier = this._typeId;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport ClientBiomeJSONFile, {\r\n  ClientBiomeJSONFileMinecraftClientBiome,\r\n} from \"@minecraft/bedrock-schemas/types/rp/client_biomes/ClientBiomeJSONFile\";\r\nimport { IComponentContainer } from \"./IComponentDataItem\";\r\n\r\nexport default class BiomeResourceDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _typeId = \"\";\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public _data?: ClientBiomeJSONFile;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BiomeResourceDefinition, BiomeResourceDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BiomeResourceDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BiomeResourceDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<BiomeResourceDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get clientBiomeData() {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    return (this._data as ClientBiomeJSONFile)[\"minecraft:client_biome\"] as ClientBiomeJSONFileMinecraftClientBiome;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  constructor(typeId?: string) {\r\n    if (typeId) {\r\n      this._typeId = typeId;\r\n      this._id = typeId;\r\n    }\r\n  }\r\n\r\n  public get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  public set typeId(newId: string) {\r\n    this._typeId = newId;\r\n    this._id = newId;\r\n  }\r\n\r\n  public get id(): string {\r\n    return this._id || this._typeId || \"\";\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n    this._typeId = newId;\r\n  }\r\n\r\n  private _ensureBiomeDataInitialized() {\r\n    if (!this._data || !this._data[\"minecraft:client_biome\"]) {\r\n      this._data = {\r\n        format_version: \"1.16.0\",\r\n        \"minecraft:client_biome\": {\r\n          description: {\r\n            identifier: this._typeId,\r\n          },\r\n          components: {},\r\n        },\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:client_biome\"]) {\r\n      this._data[\"minecraft:client_biome\"] = {\r\n        description: {\r\n          identifier: this._typeId,\r\n        },\r\n        components: {},\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:client_biome\"].description) {\r\n      this._data[\"minecraft:client_biome\"].description = {\r\n        identifier: this._typeId,\r\n      };\r\n    }\r\n\r\n    if (!this._data[\"minecraft:client_biome\"].components) {\r\n      this._data[\"minecraft:client_biome\"].components = {};\r\n    }\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string): IManagedComponent | undefined {\r\n    if (this._data === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      if (this._data[\"minecraft:client_biome\"]?.components) {\r\n        const comp = (this._data[\"minecraft:client_biome\"].components as IComponentContainer)[id];\r\n        if (comp) {\r\n          this._managed[id] = new ManagedComponent(\r\n            this._data[\"minecraft:client_biome\"].components as IComponentContainer,\r\n            id,\r\n            comp\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BDNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined && this._data[\"minecraft:client_biome\"]?.components) {\r\n      for (const componentName in this._data[\"minecraft:client_biome\"].components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ): IManagedComponent {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    const biomeData = this._data as ClientBiomeJSONFile;\r\n\r\n    this.ensureDefinition();\r\n\r\n    if (!biomeData || !biomeData[\"minecraft:client_biome\"] || !biomeData[\"minecraft:client_biome\"].components) {\r\n      throw new Error();\r\n    }\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(\r\n            biomeData[\"minecraft:client_biome\"].components as IComponentContainer,\r\n            id,\r\n            componentOrData\r\n          );\r\n\r\n    (biomeData[\"minecraft:client_biome\"].components as any)[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined || !this._data[\"minecraft:client_biome\"]?.components) {\r\n      return;\r\n    }\r\n\r\n    const newComponents: IComponentContainer = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data[\"minecraft:client_biome\"].components) {\r\n      if (name !== id) {\r\n        if (Utilities.isUsableAsObjectKey(name)) {\r\n          const component = (this._data[\"minecraft:client_biome\"].components as IComponentContainer)[name] as any;\r\n          newComponents[name] = component;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newManagedComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data[\"minecraft:client_biome\"].components = newComponents;\r\n    this._managed = newManagedComponents;\r\n\r\n    this._onComponentRemoved.dispatch(this, id);\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<BiomeResourceDefinition | undefined> {\r\n    if (file.manager === undefined) {\r\n      const bd = new BiomeResourceDefinition();\r\n\r\n      bd._file = file;\r\n\r\n      if (!bd.isLoaded) {\r\n        await bd.load();\r\n      }\r\n\r\n      file.manager = bd;\r\n    }\r\n\r\n    if (file.manager instanceof BiomeResourceDefinition) {\r\n      return file.manager as BiomeResourceDefinition;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"ITDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    const fileContent = this._file.content;\r\n\r\n    if (fileContent === null || fileContent instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    try {\r\n      this._data = JSON.parse(fileContent);\r\n\r\n      if (this._data && this._data[\"minecraft:client_biome\"]?.description?.identifier) {\r\n        this._typeId = this._data[\"minecraft:client_biome\"].description.identifier;\r\n        this._id = this._typeId;\r\n      }\r\n\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n    } catch (e) {\r\n      Log.error(\"Could not load biome definition: \" + e);\r\n    }\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(this._typeId.indexOf(\":\") + 1);\r\n    }\r\n\r\n    return this._typeId;\r\n  }\r\n\r\n  public get namespace() {\r\n    if (this._typeId && this._typeId.indexOf(\":\") >= 0) {\r\n      return this._typeId.substring(0, this._typeId.indexOf(\":\"));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensureDefinition() {\r\n    this._ensureBiomeDataInitialized();\r\n\r\n    if (this._data && this._data[\"minecraft:client_biome\"]?.description) {\r\n      this._data[\"minecraft:client_biome\"].description.identifier = this._typeId;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IEntityTypeResource, IEntityTypeResourceDescription, IEntityTypeResourceWrapper } from \"./IEntityTypeResource\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport AnimationControllerResourceDefinition from \"./AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"./AnimationResourceDefinition\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\n\r\nexport default class EntityTypeResourceDefinition {\r\n  private _dataWrapper?: IEntityTypeResourceWrapper;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _data?: IEntityTypeResourceDescription;\r\n\r\n  private _onLoaded = new EventDispatcher<EntityTypeResourceDefinition, EntityTypeResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get dataWrapper() {\r\n    return this._data;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.identifier;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this._data && newId !== undefined) {\r\n      this._data.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get textures() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.textures === undefined) {\r\n      this._data.textures = {};\r\n    }\r\n\r\n    return this._data.textures;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      const texturePath = TextureDefinition.canonicalizeTexturePath(this._data.textures[key]);\r\n\r\n      if (texturePath) {\r\n        textureList.push(texturePath);\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  public get renderControllerIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.render_controllers;\r\n  }\r\n\r\n  public get animationControllerIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.animation_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationControllerIdList = [];\r\n\r\n    for (const key in this._data.animation_controllers) {\r\n      animationControllerIdList.push(key);\r\n    }\r\n\r\n    return animationControllerIdList;\r\n  }\r\n\r\n  public get animationControllerList(): string[] | undefined {\r\n    if (!this._data || !this._data.animation_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationControllerList = [];\r\n\r\n    for (const key in this._data.animation_controllers) {\r\n      const val = this._data.animation_controllers[key];\r\n\r\n      if (val) {\r\n        animationControllerList.push(val);\r\n      }\r\n    }\r\n\r\n    return animationControllerList;\r\n  }\r\n\r\n  public get animationIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationIdList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      animationIdList.push(key);\r\n    }\r\n\r\n    return animationIdList;\r\n  }\r\n\r\n  public get animationList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      const val = this._data.animations[key];\r\n\r\n      if (val) {\r\n        animationList.push(val);\r\n      }\r\n    }\r\n\r\n    return animationList;\r\n  }\r\n\r\n  public get geometry() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.geometry;\r\n  }\r\n\r\n  public get geometryList() {\r\n    if (!this._data || !this._data.geometry) {\r\n      return undefined;\r\n    }\r\n\r\n    const geometryList = [];\r\n\r\n    for (const key in this._data.geometry) {\r\n      const geometryPath = this._data.geometry[key];\r\n\r\n      if (geometryPath) {\r\n        geometryList.push(geometryPath);\r\n      }\r\n    }\r\n\r\n    return geometryList;\r\n  }\r\n\r\n  /**\r\n   * Get a list of all geometry/texture variant keys (e.g., \"default\", \"warm\", \"cold\")\r\n   */\r\n  public get variantKeys(): string[] {\r\n    const keys = new Set<string>();\r\n\r\n    if (this._data?.geometry) {\r\n      for (const key in this._data.geometry) {\r\n        keys.add(key);\r\n      }\r\n    }\r\n\r\n    if (this._data?.textures) {\r\n      for (const key in this._data.textures) {\r\n        keys.add(key);\r\n      }\r\n    }\r\n\r\n    return Array.from(keys);\r\n  }\r\n\r\n  /**\r\n   * Get the geometry ID for a specific variant key (e.g., \"default\")\r\n   * Falls back to first available geometry if key not found\r\n   */\r\n  public getGeometryByKey(key: string): string | undefined {\r\n    if (!this._data?.geometry) {\r\n      return undefined;\r\n    }\r\n\r\n    // Try exact key first\r\n    if (this._data.geometry[key]) {\r\n      return this._data.geometry[key];\r\n    }\r\n\r\n    // Fall back to \"default\" if available\r\n    if (key !== \"default\" && this._data.geometry[\"default\"]) {\r\n      return this._data.geometry[\"default\"];\r\n    }\r\n\r\n    // Fall back to first available\r\n    const keys = Object.keys(this._data.geometry);\r\n    if (keys.length > 0) {\r\n      return this._data.geometry[keys[0]];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the texture path for a specific variant key (e.g., \"default\")\r\n   * Falls back to first available texture if key not found\r\n   */\r\n  public getTextureByKey(key: string): string | undefined {\r\n    if (!this._data?.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    // Try exact key first\r\n    if (this._data.textures[key]) {\r\n      return this._data.textures[key];\r\n    }\r\n\r\n    // Fall back to \"default\" if available\r\n    if (key !== \"default\" && this._data.textures[\"default\"]) {\r\n      return this._data.textures[\"default\"];\r\n    }\r\n\r\n    // Fall back to first available\r\n    const keys = Object.keys(this._data.textures);\r\n    if (keys.length > 0) {\r\n      return this._data.textures[keys[0]];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get matched geometry and texture for a specific variant key\r\n   * This ensures the geometry and texture are paired correctly\r\n   */\r\n  public getMatchedGeometryAndTexture(key: string = \"default\"): { geometryId?: string; texturePath?: string } {\r\n    return {\r\n      geometryId: this.getGeometryByKey(key),\r\n      texturePath: this.getTextureByKey(key),\r\n    };\r\n  }\r\n\r\n  public ensureAnimationAndGetShortName(animationFullName: string): string | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    let hasAnimation = false;\r\n    let animationShortName = animationFullName;\r\n\r\n    for (const key in this._data.animations) {\r\n      const val = this._data.animations[key];\r\n\r\n      if (val === animationFullName) {\r\n        animationShortName = key;\r\n        hasAnimation = true;\r\n      }\r\n    }\r\n\r\n    if (!hasAnimation) {\r\n      const lastPeriod = animationFullName.lastIndexOf(\".\");\r\n\r\n      if (lastPeriod > 0) {\r\n        animationShortName = animationFullName.substring(lastPeriod + 1).toLowerCase();\r\n      }\r\n\r\n      if (Utilities.isUsableAsObjectKey(animationShortName)) {\r\n        this._data.animations[animationShortName] = animationFullName;\r\n      }\r\n    }\r\n\r\n    return animationShortName;\r\n  }\r\n\r\n  public ensureAnimationAndScript(animationFullName: string) {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    const animationShortName = this.ensureAnimationAndGetShortName(animationFullName);\r\n\r\n    if (!animationShortName) {\r\n      return;\r\n    }\r\n\r\n    if (this.getIsVersion1_10_0OrHigher()) {\r\n      if (!this._data.scripts) {\r\n        this._data.scripts = {};\r\n      }\r\n\r\n      if (!this._data.scripts[\"animate\"]) {\r\n        this._data.scripts[\"animate\"] = [];\r\n      }\r\n\r\n      const animationList = this._data.scripts[\"animate\"];\r\n\r\n      let hasScript = false;\r\n\r\n      if (animationList && Array.isArray(animationList)) {\r\n        for (const val of animationList) {\r\n          if (typeof val === \"string\" && val === animationShortName) {\r\n            hasScript = true;\r\n          } else if (typeof val === \"object\" && val[animationShortName]) {\r\n            hasScript = true;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!hasScript) {\r\n        animationList.push(animationShortName);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getTextureItems(entityTypeResourceProjectItem: ProjectItem): { [name: string]: ProjectItem } | undefined {\r\n    if (!this._data || !this._data.geometry || !entityTypeResourceProjectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    const results: { [name: string]: ProjectItem } = {};\r\n\r\n    for (const key in this._data.textures) {\r\n      let texturePath = this._data.textures[key];\r\n\r\n      if (texturePath) {\r\n        texturePath = StorageUtilities.canonicalizePath(texturePath);\r\n\r\n        for (const projectItemRel of entityTypeResourceProjectItem.childItems) {\r\n          if (projectItemRel.childItem.itemType === ProjectItemType.texture && projectItemRel.childItem.projectPath) {\r\n            let texturePathCand = StorageUtilities.canonicalizePath(projectItemRel.childItem.projectPath);\r\n            const lastPeriod = texturePathCand.lastIndexOf(\".\");\r\n\r\n            if (lastPeriod >= 0) {\r\n              texturePathCand = texturePathCand.substring(0, lastPeriod).toLowerCase();\r\n            }\r\n\r\n            if (texturePathCand.endsWith(texturePath) && Utilities.isUsableAsObjectKey(key)) {\r\n              results[key] = projectItemRel.childItem;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public getIsVersion1_8_0OrLower() {\r\n    let fv = this.getFormatVersion();\r\n\r\n    return fv[0] <= 1 && fv[1] <= 8;\r\n  }\r\n\r\n  public getIsVersion1_10_0OrHigher() {\r\n    let fv = this.getFormatVersion();\r\n\r\n    return fv[0] >= 1 && fv[1] >= 10;\r\n  }\r\n\r\n  public getFormatVersion(): number[] {\r\n    if (!this._dataWrapper || !this._dataWrapper.format_version) {\r\n      return [0, 0, 0];\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._dataWrapper.format_version);\r\n  }\r\n\r\n  get formatVersion() {\r\n    if (!this._dataWrapper || !this._dataWrapper.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._dataWrapper.format_version;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<EntityTypeResourceDefinition, EntityTypeResourceDefinition>\r\n  ) {\r\n    let et: EntityTypeResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new EntityTypeResourceDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof EntityTypeResourceDefinition) {\r\n      et = file.manager as EntityTypeResourceDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  ensureData() {\r\n    if (this._data) {\r\n      return this._data;\r\n    }\r\n\r\n    const newDef: IEntityTypeResource = {\r\n      description: {\r\n        identifier: \"\",\r\n        materials: {},\r\n        textures: {},\r\n        geometry: {},\r\n        animation_controllers: {},\r\n        particle_effects: {},\r\n        animations: {},\r\n        render_controllers: [],\r\n        scripts: {},\r\n      },\r\n    };\r\n\r\n    if (!this._dataWrapper) {\r\n      this._dataWrapper = { format_version: \"1.10.0\", \"minecraft:client_entity\": newDef };\r\n      this._data = this._dataWrapper[\"minecraft:client_entity\"].description;\r\n      return this._data;\r\n    }\r\n\r\n    if (\r\n      this._dataWrapper[\"minecraft:client_entity\"] === undefined ||\r\n      this._dataWrapper[\"minecraft:client_entity\"].description === undefined\r\n    ) {\r\n      this._dataWrapper[\"minecraft:client_entity\"] = newDef;\r\n    }\r\n\r\n    this._data = this._dataWrapper[\"minecraft:client_entity\"].description;\r\n    return this._data;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._dataWrapper !== null, \"ETRDP\");\r\n\r\n    if (!this._dataWrapper) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._dataWrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ETRPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._dataWrapper = data;\r\n\r\n    if (this._dataWrapper && this._dataWrapper[\"minecraft:client_entity\"]) {\r\n      this._data = this._dataWrapper[\"minecraft:client_entity\"].description;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    const etrChildItems = rel.parentItem.childItems;\r\n\r\n    if (rel.childItem.itemType === ProjectItemType.texture && this._data && this._data.textures) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          for (const key in this._data.textures) {\r\n            const texturePath = this._data.textures[key];\r\n\r\n            if (texturePath === relativePath) {\r\n              this._data.textures[key] = undefined;\r\n\r\n              if (etrChildItems) {\r\n                for (const otherChild of etrChildItems) {\r\n                  if (otherChild.childItem.itemType === ProjectItemType.renderControllerJson) {\r\n                    const renderController = (await MinecraftDefinitions.get(\r\n                      otherChild.childItem\r\n                    )) as RenderControllerSetDefinition;\r\n\r\n                    renderController.removeTexture(key);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"entity\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n    let geometryList = this.geometryList;\r\n    let renderControllerIdList = this.renderControllerIdList;\r\n    let animationControllerIdList = this.animationControllerIdList;\r\n    let animationValList = this.animationList;\r\n\r\n    if (index) {\r\n      // Use pre-built index for O(1) lookups\r\n\r\n      // Animations: look up each animation ID in the index\r\n      if (animationValList && animationValList.length > 0) {\r\n        index.addUniqueChildItems(item, index.animationsById, animationValList);\r\n      }\r\n\r\n      // Animation controllers\r\n      if (animationControllerIdList && animationControllerIdList.length > 0) {\r\n        index.addUniqueChildItems(item, index.animationControllersById, animationControllerIdList);\r\n      }\r\n\r\n      // Render controllers\r\n      if (renderControllerIdList && renderControllerIdList.length > 0) {\r\n        index.addUniqueChildItems(item, index.renderControllersById, renderControllerIdList);\r\n      }\r\n\r\n      // Models / geometry\r\n      if (geometryList && geometryList.length > 0) {\r\n        const matchedGeoIds = index.addUniqueChildItems(item, index.modelsById, geometryList);\r\n        geometryList = geometryList.filter((id) => !matchedGeoIds.has(id));\r\n      }\r\n\r\n      // Textures \u2014 still need path-based matching since paths depend on pack root\r\n      if (packRootFolder && textureList && textureList.length > 0) {\r\n        const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n        for (const candItem of textureItems) {\r\n          if (candItem.primaryFile) {\r\n            let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n              StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n            );\r\n\r\n            if (relativePath) {\r\n              if (textureList && textureList.includes(relativePath)) {\r\n                item.addChildItem(candItem);\r\n                textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Fallback: original scanning behavior when index is not available\r\n\r\n      // Check animation resources\r\n      if (animationValList && animationValList.length > 0) {\r\n        const animItems = project.getItemsByType(ProjectItemType.animationResourceJson);\r\n        for (const candItem of animItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const animationDef = await AnimationResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n            const animIds = animationDef?.idList;\r\n\r\n            if (animIds) {\r\n              for (const animId of animationValList) {\r\n                if (animIds.has(animId)) {\r\n                  item.addChildItem(candItem);\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check animation controller resources\r\n      if (animationControllerIdList && animationControllerIdList.length > 0) {\r\n        const acItems = project.getItemsByType(ProjectItemType.animationControllerResourceJson);\r\n        for (const candItem of acItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const animationControllerDef = await AnimationControllerResourceDefinition.ensureOnFile(\r\n              candItem.primaryFile\r\n            );\r\n            const acIds = animationControllerDef?.idList;\r\n\r\n            if (acIds) {\r\n              for (const acId of animationControllerIdList) {\r\n                if (acIds.has(acId)) {\r\n                  item.addChildItem(candItem);\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check render controllers\r\n      if (renderControllerIdList && renderControllerIdList.length > 0) {\r\n        const rcItems = project.getItemsByType(ProjectItemType.renderControllerJson);\r\n        for (const candItem of rcItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const renderControllerDef = await RenderControllerSetDefinition.ensureOnFile(candItem.primaryFile);\r\n            const renderIds = renderControllerDef?.idList;\r\n\r\n            if (renderIds) {\r\n              for (const rcId of renderControllerIdList) {\r\n                if (renderIds.has(rcId)) {\r\n                  item.addChildItem(candItem);\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check textures\r\n      if (packRootFolder && textureList && textureList.length > 0) {\r\n        const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n        for (const candItem of textureItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n              StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n            );\r\n\r\n            if (relativePath) {\r\n              if (textureList && textureList.includes(relativePath)) {\r\n                item.addChildItem(candItem);\r\n                textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check model geometries\r\n      if (geometryList && geometryList.length > 0) {\r\n        const modelItems = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n        for (const candItem of modelItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const model = await ModelGeometryDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (model) {\r\n              let doAddModel = false;\r\n              for (const modelId of model.identifiers) {\r\n                if (geometryList && geometryList.includes(modelId)) {\r\n                  doAddModel = true;\r\n                  geometryList = Utilities.removeItemInArray(modelId, geometryList);\r\n                }\r\n              }\r\n\r\n              if (doAddModel) {\r\n                item.addChildItem(candItem);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        const isVanilla = await Database.isVanillaToken(texturePath);\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanilla);\r\n      }\r\n    }\r\n\r\n    if (geometryList) {\r\n      for (const geoId of geometryList) {\r\n        item.addUnfulfilledRelationship(geoId, ProjectItemType.modelGeometryJson, await Database.isVanillaToken(geoId));\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IFlipbookTexture } from \"./IFlipbookTexture\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class FlipbookTextureCatalogDefinition implements IDefinition {\r\n  private _data?: IFlipbookTexture[];\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<FlipbookTextureCatalogDefinition, FlipbookTextureCatalogDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get texturesList() {\r\n    if (!this._data || !Array.isArray(this._data)) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const flipbookTexture of this._data) {\r\n      const texturePath = flipbookTexture.flipbook_texture;\r\n\r\n      if (texturePath) {\r\n        textureList.push(texturePath.toLowerCase());\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<FlipbookTextureCatalogDefinition, FlipbookTextureCatalogDefinition>\r\n  ) {\r\n    let et: FlipbookTextureCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new FlipbookTextureCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FlipbookTextureCatalogDefinition) {\r\n      et = file.manager as FlipbookTextureCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"FBTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = [];\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      if (!this.isLoaded) {\r\n        await this.load();\r\n      }\r\n    }\r\n\r\n    if (!this._data || !Array.isArray(this._data)) {\r\n      return;\r\n    }\r\n    if (rel.childItem.itemType === ProjectItemType.texture) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          let newFlipbookTextures: IFlipbookTexture[] = [];\r\n\r\n          for (const flipbookTexture of this._data) {\r\n            if (flipbookTexture.flipbook_texture !== relativePath) {\r\n              newFlipbookTextures.push(flipbookTexture);\r\n            }\r\n          }\r\n\r\n          this._data = newFlipbookTextures;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getTexturePaths() {\r\n    const texturePaths: string[] = [];\r\n    if (this.data && Array.isArray(this.data)) {\r\n      for (const flipbookResource of this.data) {\r\n        const resource = flipbookResource.flipbook_texture;\r\n\r\n        if (!texturePaths.includes(resource)) {\r\n          texturePaths.push(resource);\r\n        }\r\n      }\r\n    }\r\n\r\n    return texturePaths;\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.texturesList;\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && textureList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.matchesVanillaPath(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface IJigsawProcessorRule {\r\n  input_predicate: {\r\n    predicate_type: string;\r\n    block?: string;\r\n    probability?: number;\r\n  };\r\n  output_state: {\r\n    name: string;\r\n  };\r\n}\r\n\r\nexport interface IJigsawProcessor {\r\n  processor_type: string;\r\n  rules: IJigsawProcessorRule[];\r\n}\r\n\r\nexport interface IJigsawProcessorListDefinition {\r\n  format_version: string;\r\n  \"minecraft:processor_list\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    processors: IJigsawProcessor[];\r\n  };\r\n}\r\n\r\nexport default class JigsawProcessorListDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawProcessorListDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:processor_list\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:processor_list\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get processors() {\r\n    if (this._data?.[\"minecraft:processor_list\"]?.processors) {\r\n      return this._data[\"minecraft:processor_list\"].processors;\r\n    }\r\n    return [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    // Processor lists don't typically reference other jigsaw files directly\r\n    // but they could reference block types, items, etc. in the future\r\n    // For now, we'll leave this empty as processors mainly reference\r\n    // built-in Minecraft blocks\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawProcessorListDefinition | undefined> {\r\n    let jigsawProcessorList: JigsawProcessorListDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawProcessorList = new JigsawProcessorListDefinition();\r\n      jigsawProcessorList.file = file;\r\n      file.manager = jigsawProcessorList;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawProcessorListDefinition) {\r\n      jigsawProcessorList = file.manager as JigsawProcessorListDefinition;\r\n      if (!jigsawProcessorList.isLoaded) {\r\n        await jigsawProcessorList.load();\r\n      }\r\n    }\r\n\r\n    return jigsawProcessorList;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"JPLDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport JigsawProcessorListDefinition from \"./JigsawProcessorListDefinition\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface IJigsawTemplatePoolElement {\r\n  element: {\r\n    element_type: string;\r\n    location: string;\r\n    processors?: string;\r\n  };\r\n  weight: number;\r\n}\r\n\r\nexport interface IJigsawTemplatePoolDefinition {\r\n  format_version: string;\r\n  \"minecraft:template_pool\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    elements: IJigsawTemplatePoolElement[];\r\n  };\r\n}\r\n\r\nexport default class JigsawTemplatePoolDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawTemplatePoolDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:template_pool\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:template_pool\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get elements() {\r\n    if (this._data?.[\"minecraft:template_pool\"]?.elements) {\r\n      return this._data[\"minecraft:template_pool\"].elements;\r\n    }\r\n    return [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const elements = this.elements;\r\n    if (!elements || elements.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const jigsawProcessorListItems = project.getItemsByType(ProjectItemType.jigsawProcessorList);\r\n\r\n    // Find structure files and processors referenced by this template pool\r\n    for (const element of elements) {\r\n      // Find structure files referenced by location\r\n      if (element.element.location) {\r\n        const structurePath = element.element.location + \".mcstructure\";\r\n\r\n        for (const candItem of jigsawProcessorListItems) {\r\n          if (candItem.itemType === ProjectItemType.structure) {\r\n            if (\r\n              candItem.projectPath?.endsWith(structurePath) ||\r\n              candItem.projectPath?.includes(element.element.location)\r\n            ) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // Find processors referenced by processors field\r\n      if (element.element.processors) {\r\n        for (const candItem of jigsawProcessorListItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const processorList = await JigsawProcessorListDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (processorList && processorList.id === element.element.processors) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawTemplatePoolDefinition | undefined> {\r\n    let jigsawTemplatePool: JigsawTemplatePoolDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawTemplatePool = new JigsawTemplatePoolDefinition();\r\n      jigsawTemplatePool.file = file;\r\n      file.manager = jigsawTemplatePool;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawTemplatePoolDefinition) {\r\n      jigsawTemplatePool = file.manager as JigsawTemplatePoolDefinition;\r\n      if (!jigsawTemplatePool.isLoaded) {\r\n        await jigsawTemplatePool.load();\r\n      }\r\n    }\r\n\r\n    return jigsawTemplatePool;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"ITRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport JigsawTemplatePoolDefinition from \"./JigsawTemplatePoolDefinition\";\r\n\r\nexport interface IJigsawStructureDefinition {\r\n  format_version: string;\r\n  \"minecraft:jigsaw\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    step: string;\r\n    terrain_adaptation: string;\r\n    start_pool: string;\r\n    max_depth: number;\r\n    start_height: number;\r\n    heightmap_projection: string;\r\n  };\r\n}\r\n\r\nexport default class JigsawStructureDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawStructureDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:jigsaw\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:jigsaw\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get startPool() {\r\n    if (this._data?.[\"minecraft:jigsaw\"]?.start_pool) {\r\n      return this._data[\"minecraft:jigsaw\"].start_pool;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    if (!this.startPool) {\r\n      return;\r\n    }\r\n\r\n    const templatePoolItems = project.getItemsByType(ProjectItemType.jigsawTemplatePool);\r\n\r\n    // Find template pool referenced by start_pool\r\n    for (const candItem of templatePoolItems) {\r\n      if (!candItem.isContentLoaded) {\r\n        await candItem.loadContent();\r\n      }\r\n\r\n      if (candItem.primaryFile) {\r\n        const templatePool = await JigsawTemplatePoolDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n        if (templatePool && templatePool.id === this.startPool) {\r\n          item.addChildItem(candItem);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawStructureDefinition | undefined> {\r\n    let jigsawStructure: JigsawStructureDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawStructure = new JigsawStructureDefinition();\r\n      jigsawStructure.file = file;\r\n      file.manager = jigsawStructure;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawStructureDefinition) {\r\n      jigsawStructure = file.manager as JigsawStructureDefinition;\r\n      if (!jigsawStructure.isLoaded) {\r\n        await jigsawStructure.load();\r\n      }\r\n    }\r\n\r\n    return jigsawStructure;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport JigsawStructureDefinition from \"./JigsawStructureDefinition\";\r\n\r\nexport interface IJigsawStructureSetDefinition {\r\n  format_version: string;\r\n  \"minecraft:structure_set\": {\r\n    description: {\r\n      identifier: string;\r\n    };\r\n    placement: {\r\n      type: string;\r\n      salt: number;\r\n      separation: number;\r\n      spacing: number;\r\n      spread_type: string;\r\n    };\r\n    structures: Array<{\r\n      structure: string;\r\n      weight: number;\r\n    }>;\r\n  };\r\n}\r\n\r\nexport default class JigsawStructureSetDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _data?: IJigsawStructureSetDefinition;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._data?.[\"minecraft:structure_set\"]?.description?.identifier) {\r\n      return this._data[\"minecraft:structure_set\"].description.identifier;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  public get structures() {\r\n    if (this._data?.[\"minecraft:structure_set\"]?.structures) {\r\n      return this._data[\"minecraft:structure_set\"].structures;\r\n    }\r\n    return [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    // For now, assume format version is current\r\n    return true;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const structures = this.structures;\r\n    if (!structures || structures.length === 0) {\r\n      return;\r\n    }\r\n\r\n    const jigsawItems = project.getItemsByType(ProjectItemType.jigsawStructure);\r\n\r\n    // Find jigsaw structures referenced by this structure set\r\n    for (const structureRef of structures) {\r\n      for (const candItem of jigsawItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const jigsawStructure = await JigsawStructureDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (jigsawStructure && jigsawStructure.id === structureRef.structure) {\r\n            item.addChildItem(candItem);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile): Promise<JigsawStructureSetDefinition | undefined> {\r\n    let jigsawStructureSet: JigsawStructureSetDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      jigsawStructureSet = new JigsawStructureSetDefinition();\r\n      jigsawStructureSet.file = file;\r\n      file.manager = jigsawStructureSet;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JigsawStructureSetDefinition) {\r\n      jigsawStructureSet = file.manager as JigsawStructureSetDefinition;\r\n      if (!jigsawStructureSet.isLoaded) {\r\n        await jigsawStructureSet.load();\r\n      }\r\n    }\r\n\r\n    return jigsawStructureSet;\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    const result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      this._data = result;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IMusicDefinitionCatalog } from \"./IMusicDefinitionCatalog\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport Database from \"./Database\";\r\nimport IDefinition from \"./IDefinition\";\r\n\r\nexport default class MusicDefinitionCatalogDefinition implements IDefinition {\r\n  private _data?: IMusicDefinitionCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<MusicDefinitionCatalogDefinition, MusicDefinitionCatalogDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get musicDefinitionNameList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const musicDefNameList = [];\r\n\r\n    for (const key in this._data) {\r\n      musicDefNameList.push(key);\r\n    }\r\n\r\n    return musicDefNameList;\r\n  }\r\n\r\n  public get musicDefinitionEventNameList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const musicDefNameList: string[] = [];\r\n\r\n    for (const key in this._data) {\r\n      const def = this._data[key];\r\n\r\n      if (def && def.event_name) {\r\n        if (!musicDefNameList.includes(def.event_name)) {\r\n          musicDefNameList.push(def.event_name);\r\n        }\r\n      }\r\n    }\r\n\r\n    return musicDefNameList;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<MusicDefinitionCatalogDefinition, MusicDefinitionCatalogDefinition>\r\n  ) {\r\n    let et: MusicDefinitionCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new MusicDefinitionCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof MusicDefinitionCatalogDefinition) {\r\n      et = file.manager as MusicDefinitionCatalogDefinition;\r\n\r\n      if (!et.isLoaded && loadHandler) {\r\n        et.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await et.load();\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"MUSP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const soundDefItems = project.getItemsByType(ProjectItemType.soundDefinitionCatalog);\r\n\r\n    let musicDefList = this.musicDefinitionEventNameList;\r\n\r\n    for (const candItem of soundDefItems) {\r\n      if (musicDefList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const soundDef = await SoundDefinitionCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const soundSetNames = soundDef?.getSoundDefinitionSetNameList();\r\n          if (soundSetNames) {\r\n            for (const musicDefName of musicDefList) {\r\n              if (soundSetNames.includes(musicDefName)) {\r\n                item.addChildItem(candItem);\r\n\r\n                const nextMusicDefNames: string[] = [];\r\n\r\n                for (const texturePath of musicDefList) {\r\n                  if (texturePath !== musicDefName) {\r\n                    nextMusicDefNames.push(texturePath);\r\n                  }\r\n                }\r\n\r\n                musicDefList = nextMusicDefNames;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (musicDefList) {\r\n      for (const musicDef of musicDefList) {\r\n        item.addUnfulfilledRelationship(\r\n          musicDef,\r\n          ProjectItemType.soundDefinitionCatalog,\r\n          await Database.isVanillaToken(musicDef)\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IEntitySounds, ISoundCatalog, ISoundEventCatalog, ISoundEventSet } from \"./ISoundCatalog\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport Database from \"./Database\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\n\r\nexport default class SoundCatalogDefinition implements IDefinition {\r\n  private _data?: ISoundCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<SoundCatalogDefinition, SoundCatalogDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get entityIdList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const entityIdList: string[] = [];\r\n\r\n    if (this._data.entity_sounds && this._data.entity_sounds.entities) {\r\n      for (const key in this._data.entity_sounds.entities) {\r\n        if (!entityIdList.includes(key)) {\r\n          entityIdList.push(key);\r\n        }\r\n      }\r\n    }\r\n\r\n    return entityIdList;\r\n  }\r\n\r\n  public getSoundEventNameList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundEventNameList: string[] = [];\r\n\r\n    if (this._data.entity_sounds && this._data.entity_sounds.entities) {\r\n      for (const key in this._data.entity_sounds.entities) {\r\n        const def = this._data.entity_sounds.entities[key];\r\n\r\n        if (def && def.events) {\r\n          for (const eventKey in def.events) {\r\n            const event = def.events[eventKey];\r\n\r\n            if (event) {\r\n              for (const eventInstanceKey in def.events) {\r\n                const eventInstance = def.events[eventInstanceKey];\r\n\r\n                if (typeof eventInstance === \"string\") {\r\n                  if (!soundEventNameList.includes(eventInstance)) {\r\n                    soundEventNameList.push(eventInstance);\r\n                  }\r\n                } else if (eventInstance.sound) {\r\n                  if (!soundEventNameList.includes(eventInstance.sound)) {\r\n                    soundEventNameList.push(eventInstance.sound);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._data.entity_sounds && this._data.entity_sounds.defaults && this._data.entity_sounds.defaults.events) {\r\n      for (const eventKey in this._data.entity_sounds.defaults.events) {\r\n        const eventInstance = this._data.entity_sounds.defaults.events[eventKey];\r\n\r\n        if (typeof eventInstance === \"string\") {\r\n          if (!soundEventNameList.includes(eventInstance)) {\r\n            soundEventNameList.push(eventInstance);\r\n          }\r\n        } else if (eventInstance.sound) {\r\n          if (!soundEventNameList.includes(eventInstance.sound)) {\r\n            soundEventNameList.push(eventInstance.sound);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._data.block_sounds) {\r\n      for (const key in this._data.block_sounds) {\r\n        const def = this._data.block_sounds[key];\r\n\r\n        if (def && def.events) {\r\n          for (const eventKey in def.events) {\r\n            const event = def.events[eventKey];\r\n\r\n            if (event) {\r\n              for (const eventInstanceKey in def.events) {\r\n                const eventInstance = def.events[eventInstanceKey];\r\n\r\n                if (typeof eventInstance === \"string\") {\r\n                  if (!soundEventNameList.includes(eventInstance)) {\r\n                    soundEventNameList.push(eventInstance);\r\n                  }\r\n                } else if (eventInstance.sound) {\r\n                  if (!soundEventNameList.includes(eventInstance.sound)) {\r\n                    soundEventNameList.push(eventInstance.sound);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._data.individual_event_sounds && this._data.individual_event_sounds.events) {\r\n      for (const key in this._data.individual_event_sounds.events) {\r\n        const eventInstance = this._data.individual_event_sounds.events[key];\r\n\r\n        if (typeof eventInstance === \"string\") {\r\n          if (!soundEventNameList.includes(eventInstance)) {\r\n            soundEventNameList.push(eventInstance);\r\n          }\r\n        } else if (eventInstance.sound) {\r\n          if (!soundEventNameList.includes(eventInstance.sound)) {\r\n            soundEventNameList.push(eventInstance.sound);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundEventNameList;\r\n  }\r\n\r\n  public ensureEntityEvent(idSound: string) {\r\n    this.ensureDefault();\r\n\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    let es: IEntitySounds | undefined = this._data.entity_sounds;\r\n\r\n    if (es === undefined) {\r\n      es = {\r\n        entities: {},\r\n      };\r\n\r\n      this._data.entity_sounds = es;\r\n    }\r\n\r\n    let entities: ISoundEventCatalog | undefined = es.entities;\r\n\r\n    if (entities === undefined) {\r\n      entities = {};\r\n\r\n      es.entities = entities;\r\n    }\r\n\r\n    let elt: ISoundEventSet | undefined = entities[idSound];\r\n\r\n    if (!elt) {\r\n      if (idSound.startsWith(\"minecraft:\") && Utilities.isUsableAsObjectKey(idSound.substring(10))) {\r\n        elt = entities[idSound.substring(10)];\r\n      }\r\n\r\n      if (!elt) {\r\n        elt = {\r\n          events: {},\r\n        };\r\n      }\r\n\r\n      if (Utilities.isUsableAsObjectKey(idSound)) {\r\n        entities[idSound] = elt;\r\n      }\r\n\r\n      return elt;\r\n    }\r\n\r\n    return elt;\r\n  }\r\n\r\n  public ensureDefault() {\r\n    if (this._data === undefined) {\r\n      this._data = {};\r\n    }\r\n  }\r\n\r\n  static async ensureForProject(project: Project) {\r\n    const items = project.getItemsCopy();\r\n\r\n    for (const item of items) {\r\n      if (item.itemType === ProjectItemType.soundCatalog) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (item.primaryFile) {\r\n          const soundCatalog = await SoundCatalogDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (soundCatalog) {\r\n            return soundCatalog;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const defaultRpFolder = await project.getDefaultResourcePackFolder();\r\n\r\n    if (defaultRpFolder) {\r\n      const newFile = defaultRpFolder.ensureFile(\"sounds.json\");\r\n\r\n      const soundGen = await SoundCatalogDefinition.ensureOnFile(newFile);\r\n\r\n      if (soundGen) {\r\n        soundGen.ensureDefault();\r\n\r\n        project.ensureItemFromFile(newFile, ProjectItemType.soundCatalog, FolderContext.resourcePack);\r\n\r\n        return soundGen;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<SoundCatalogDefinition, SoundCatalogDefinition>) {\r\n    let et: SoundCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new SoundCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SoundCatalogDefinition) {\r\n      et = file.manager as SoundCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  /**\r\n   * Converts ISoundEvent objects that only have {sound: \"...\"} back\r\n   * to plain strings, keeping the file compact and canonical.\r\n   */\r\n  private _downscaleEvents() {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    const catalogs: (ISoundEventCatalog | undefined)[] = [\r\n      this._data.entity_sounds?.entities,\r\n      this._data.block_sounds,\r\n      this._data.interactive_sounds?.block_sounds,\r\n      this._data.interactive_sounds?.entity_sounds?.entities,\r\n    ];\r\n\r\n    const eventSets: (ISoundEventSet | undefined)[] = [\r\n      this._data.entity_sounds?.defaults,\r\n      this._data.interactive_sounds?.entity_sounds?.defaults,\r\n    ];\r\n\r\n    for (const catalog of catalogs) {\r\n      if (catalog) {\r\n        for (const entityKey in catalog) {\r\n          eventSets.push(catalog[entityKey]);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const eventSet of eventSets) {\r\n      if (eventSet && eventSet.events) {\r\n        for (const key in eventSet.events) {\r\n          const val = eventSet.events[key];\r\n          if (typeof val === \"object\" && val.sound) {\r\n            const objKeys = Object.keys(val);\r\n            if (objKeys.length === 1 && objKeys[0] === \"sound\") {\r\n              eventSet.events[key] = val.sound;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"SCDP\");\r\n      return false;\r\n    }\r\n\r\n    this._downscaleEvents();\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let soundEventList = this.getSoundEventNameList();\r\n    let entityIdList = this.entityIdList;\r\n\r\n    // Process entity type items using index for O(1) lookups\r\n    if (entityIdList) {\r\n      if (index) {\r\n        for (const entityId of entityIdList) {\r\n          const resourceItems = index.getItemsById(index.entityResourcesById, entityId);\r\n          const behaviorItems = index.getItemsById(index.entityBehaviorsById, entityId);\r\n          const allMatches = [...resourceItems, ...behaviorItems];\r\n\r\n          for (const matchItem of allMatches) {\r\n            item.addParentItem(matchItem);\r\n          }\r\n\r\n          if (allMatches.length > 0) {\r\n            entityIdList = Utilities.removeItemInArray(entityId, entityIdList);\r\n          }\r\n        }\r\n      } else {\r\n        const entityResourceItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n        const entityBehaviorItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n        const entityItems = [...entityResourceItems, ...entityBehaviorItems];\r\n\r\n        for (const candItem of entityItems) {\r\n          const entityDef = (await MinecraftDefinitions.get(candItem)) as\r\n            | undefined\r\n            | EntityTypeResourceDefinition\r\n            | EntityTypeDefinition;\r\n\r\n          if (entityDef && entityDef.id && entityIdList?.includes(entityDef?.id)) {\r\n            item.addParentItem(candItem);\r\n\r\n            entityIdList = Utilities.removeItemInArray(entityDef.id, entityIdList);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process sound definition catalog items\r\n    if (soundEventList) {\r\n      const soundDefItems = project.getItemsByType(ProjectItemType.soundDefinitionCatalog);\r\n\r\n      for (const candItem of soundDefItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const soundDef = await SoundDefinitionCatalogDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const soundSetNames = soundDef?.getSoundDefinitionSetNameList();\r\n          if (soundSetNames) {\r\n            for (const soundEventName of soundEventList) {\r\n              if (typeof soundEventName === \"string\" && soundEventName.trim().length > 0) {\r\n                if (soundSetNames.includes(soundEventName)) {\r\n                  item.addChildItem(candItem);\r\n\r\n                  soundEventList = Utilities.removeItemInArray(soundEventName, soundEventList);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (soundEventList && Array.isArray(soundEventList)) {\r\n      for (const soundEvent of soundEventList) {\r\n        if (typeof soundEvent === \"string\" && soundEvent.trim().length > 0) {\r\n          const isVanilla = await Database.isVanillaToken(soundEvent);\r\n          item.addUnfulfilledRelationship(soundEvent, ProjectItemType.soundDefinitionCatalog, isVanilla);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (entityIdList && Array.isArray(entityIdList)) {\r\n      for (const entityId of entityIdList) {\r\n        if (entityId.length > 0) {\r\n          const isVanilla = await Database.isVanillaToken(entityId);\r\n          item.addUnfulfilledRelationship(entityId, ProjectItemType.entityTypeBehavior, isVanilla);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport TextureSet from \"@minecraft/bedrock-schemas/types/rp/visuals/TextureSet\";\r\n\r\nexport default class TextureSetDefinition implements IDefinition {\r\n  private _data?: TextureSet;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<TextureSetDefinition, TextureSetDefinition>();\r\n\r\n  public id: string | undefined;\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get texturesList() {\r\n    if (!this._data || !this._data[\"minecraft:texture_set\"]) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    const textureSet = this._data[\"minecraft:texture_set\"];\r\n\r\n    if (textureSet.metalness_emissive_roughness && typeof textureSet.metalness_emissive_roughness === \"string\") {\r\n      textureList.push(this.adaptTexturePath(textureSet.metalness_emissive_roughness));\r\n    }\r\n\r\n    if (\r\n      textureSet.metalness_emissive_roughness_subsurface &&\r\n      typeof textureSet.metalness_emissive_roughness_subsurface === \"string\"\r\n    ) {\r\n      textureList.push(this.adaptTexturePath(textureSet.metalness_emissive_roughness_subsurface));\r\n    }\r\n\r\n    if (textureSet.heightmap && typeof textureSet.heightmap === \"string\") {\r\n      textureList.push(this.adaptTexturePath(textureSet.heightmap));\r\n    }\r\n\r\n    if (textureSet.normal && typeof textureSet.normal === \"string\") {\r\n      textureList.push(this.adaptTexturePath(textureSet.normal));\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  private adaptTexturePath(path: string) {\r\n    path = path.toLowerCase();\r\n\r\n    if (path.indexOf(\"/\") >= 0) {\r\n      return path;\r\n    }\r\n\r\n    if (this._file) {\r\n      return this._file.parentFolder.fullPath + \"/\" + path;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<TextureSetDefinition, TextureSetDefinition>) {\r\n    let tsd: TextureSetDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      tsd = new TextureSetDefinition();\r\n\r\n      tsd.file = file;\r\n\r\n      file.manager = tsd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof TextureSetDefinition) {\r\n      tsd = file.manager as TextureSetDefinition;\r\n\r\n      if (!tsd.isLoaded) {\r\n        if (loadHandler) {\r\n          tsd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await tsd.load();\r\n      }\r\n    }\r\n\r\n    return tsd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"TSTDF\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TSTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = [];\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"textures\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureListInitial = this.texturesList;\r\n    let textureList: string[] = [];\r\n\r\n    if (!packRootFolder || !textureListInitial) {\r\n      return;\r\n    }\r\n\r\n    for (let texturePath of textureListInitial) {\r\n      texturePath = StorageUtilities.canonicalizePath(texturePath).toLowerCase();\r\n      const basePath = StorageUtilities.canonicalizePath(packRootFolder.fullPath).toLowerCase();\r\n\r\n      if (texturePath.startsWith(basePath)) {\r\n        textureList.push(texturePath.substring(basePath.length + 1).toLowerCase());\r\n      } else {\r\n        textureList.push(texturePath.toLowerCase());\r\n      }\r\n    }\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && textureList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        item.addUnfulfilledRelationship(\r\n          texturePath,\r\n          ProjectItemType.texture,\r\n          await Database.matchesVanillaPath(texturePath)\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "import { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport AnimationBehaviorDefinition from \"./AnimationBehaviorDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"./AnimationControllerBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"./AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"./AnimationResourceDefinition\";\r\nimport AudioDefinition from \"./AudioDefinition\";\r\nimport BehaviorManifestDefinition from \"./BehaviorManifestDefinition\";\r\nimport BiomeBehaviorDefinition from \"./BiomeBehaviorDefinition\";\r\nimport BiomeResourceDefinition from \"./BiomeResourceDefinition\";\r\nimport BlockTypeDefinition from \"./BlockTypeDefinition\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport FlipbookTextureCatalogDefinition from \"./FlipbookTextureCatalogDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport JigsawProcessorListDefinition from \"./JigsawProcessorListDefinition\";\r\nimport JigsawStructureDefinition from \"./JigsawStructureDefinition\";\r\nimport JigsawStructureSetDefinition from \"./JigsawStructureSetDefinition\";\r\nimport JigsawTemplatePoolDefinition from \"./JigsawTemplatePoolDefinition\";\r\nimport MusicDefinitionCatalogDefinition from \"./MusicDefinitionCatalogDefinition\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport ResourceManifestDefinition from \"./ResourceManifestDefinition\";\r\nimport SoundCatalogDefinition from \"./SoundCatalogDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport TextureSetDefinition from \"./TextureSetDefinition\";\r\n\r\nexport default class MinecraftDefinitions {\r\n  static async get(projectItem: ProjectItem): Promise<IDefinition | undefined> {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (\r\n      !projectItem.primaryFile ||\r\n      !projectItem.primaryFile.content ||\r\n      typeof projectItem.primaryFile.content !== \"string\"\r\n    ) {\r\n      if (!projectItem.primaryFile) {\r\n        return undefined;\r\n      }\r\n\r\n      if (!projectItem.primaryFile.isContentLoaded) {\r\n        await projectItem.primaryFile.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile.content || typeof projectItem.primaryFile.content !== \"string\") {\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    switch (projectItem.itemType) {\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return await EntityTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.entityTypeResource:\r\n        return await EntityTypeResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return await ItemTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return await BlockTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.textureSetJson:\r\n        return await TextureSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return await FlipbookTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.resourcePackManifestJson:\r\n        return await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return await AnimationControllerResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.animationResourceJson:\r\n        return await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return await SoundDefinitionCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.soundCatalog:\r\n        return await SoundCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return await MusicDefinitionCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.renderControllerJson:\r\n        return await RenderControllerSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.biomeBehavior:\r\n        return await BiomeBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.biomeResource:\r\n        return await BiomeResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawProcessorList:\r\n        return await JigsawProcessorListDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawStructureSet:\r\n        return await JigsawStructureSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawTemplatePool:\r\n        return await JigsawTemplatePoolDefinition.ensureOnFile(projectItem.primaryFile);\r\n      case ProjectItemType.jigsawStructure:\r\n        return await JigsawStructureDefinition.ensureOnFile(projectItem.primaryFile);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureFoundationalDependencies(item: ProjectItem) {\r\n    if (item.itemType === ProjectItemType.audio) {\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (item.primaryFile) {\r\n        const audioFile = await AudioDefinition.ensureOnFile(item.primaryFile);\r\n\r\n        if (audioFile) {\r\n          await audioFile.ensureSoundDefinitionsForFile(item.project);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async formatVersionIsCurrent(projectItem: ProjectItem) {\r\n    const def = await MinecraftDefinitions.get(projectItem);\r\n\r\n    if (def && (def as any).getFormatVersionIsCurrent) {\r\n      return await (def as any).getFormatVersionIsCurrent();\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static async getFormatVersion(projectItem: ProjectItem) {\r\n    const def = await MinecraftDefinitions.get(projectItem);\r\n\r\n    if (def && (def as any).getFormatVersion) {\r\n      const fv = await (def as any).getFormatVersion();\r\n\r\n      // format_version may be expressed as either a 3-number array ([1,0,2]) or a\r\n      // string (\"1.0.2\"). Normalize to a number[] so consumers can display it\r\n      // uniformly (e.g., fv.join(\".\")).\r\n      if (fv === undefined || fv === null) {\r\n        return undefined;\r\n      }\r\n\r\n      if (fv instanceof Array) {\r\n        return fv;\r\n      }\r\n\r\n      if (typeof fv === \"string\" || typeof fv === \"number\") {\r\n        return MinecraftUtilities.getVersionArrayFrom(fv);\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IClientAttachableDescription, IClientAttachableWrapper } from \"./IClientAttachable\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport AnimationResourceDefinition from \"./AnimationResourceDefinition\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport Database from \"./Database\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport MinecraftDefinitions from \"./MinecraftDefinitions\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class AttachableResourceDefinition {\r\n  private _dataWrapper?: IClientAttachableWrapper;\r\n  private _data?: IClientAttachableDescription;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<AttachableResourceDefinition, AttachableResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.identifier;\r\n  }\r\n\r\n  public get textures() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.textures === undefined) {\r\n      this._data.textures = {};\r\n    }\r\n\r\n    return this._data.textures;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      const texturePath = TextureDefinition.canonicalizeTexturePath(this._data.textures[key]);\r\n\r\n      if (texturePath) {\r\n        textureList.push(texturePath);\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get texturesIdList() {\r\n    if (!this._data || !this._data.textures) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureIdList = [];\r\n\r\n    for (const key in this._data.textures) {\r\n      textureIdList.push(key);\r\n    }\r\n\r\n    return textureIdList;\r\n  }\r\n\r\n  public get renderControllerIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.render_controllers) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.render_controllers;\r\n  }\r\n\r\n  public get animationIdList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationIdList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      animationIdList.push(key);\r\n    }\r\n\r\n    return animationIdList;\r\n  }\r\n\r\n  public get animationList(): string[] | undefined {\r\n    if (!this._data || !this._data.animations) {\r\n      return undefined;\r\n    }\r\n\r\n    const animationList = [];\r\n\r\n    for (const key in this._data.animations) {\r\n      const val = this._data.animations[key];\r\n\r\n      if (val) {\r\n        animationList.push(val);\r\n      }\r\n    }\r\n\r\n    return animationList;\r\n  }\r\n\r\n  public get geometry() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.geometry;\r\n  }\r\n\r\n  public get geometryList() {\r\n    if (!this._data || !this._data.geometry) {\r\n      return undefined;\r\n    }\r\n\r\n    const geometryList = [];\r\n\r\n    for (const key in this._data.geometry) {\r\n      const geometryPath = this._data.geometry[key];\r\n\r\n      if (geometryPath) {\r\n        geometryList.push(geometryPath);\r\n      }\r\n    }\r\n\r\n    return geometryList;\r\n  }\r\n\r\n  public getTextureItems(entityTypeResourceProjectItem: ProjectItem): { [name: string]: ProjectItem } | undefined {\r\n    if (!this._data || !this._data.geometry || !entityTypeResourceProjectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    const results: { [name: string]: ProjectItem } = {};\r\n\r\n    for (const key in this._data.textures) {\r\n      let texturePath = this._data.textures[key];\r\n\r\n      if (texturePath) {\r\n        texturePath = StorageUtilities.canonicalizePath(texturePath);\r\n\r\n        for (const projectItemRel of entityTypeResourceProjectItem.childItems) {\r\n          if (projectItemRel.childItem.itemType === ProjectItemType.texture && projectItemRel.childItem.projectPath) {\r\n            let texturePathCand = StorageUtilities.canonicalizePath(projectItemRel.childItem.projectPath);\r\n            const lastPeriod = texturePathCand.lastIndexOf(\".\");\r\n\r\n            if (lastPeriod >= 0) {\r\n              texturePathCand = texturePathCand.substring(0, lastPeriod).toLowerCase();\r\n            }\r\n\r\n            if (texturePathCand.endsWith(texturePath)) {\r\n              results[key] = projectItemRel.childItem;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._dataWrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    const fv = this._dataWrapper.format_version;\r\n\r\n    if (typeof fv === \"number\") {\r\n      return [fv];\r\n    }\r\n\r\n    if (typeof fv === \"string\") {\r\n      let fvarr = this._dataWrapper.format_version.split(\".\");\r\n\r\n      let fvarrInt: number[] = [];\r\n      for (let i = 0; i < fvarr.length; i++) {\r\n        try {\r\n          fvarrInt.push(parseInt(fvarr[i]));\r\n        } catch (e) {}\r\n      }\r\n\r\n      return fvarrInt;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get formatVersion() {\r\n    if (!this._dataWrapper || !this._dataWrapper.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._dataWrapper.format_version;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<AttachableResourceDefinition, AttachableResourceDefinition>\r\n  ) {\r\n    let attachable: AttachableResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      attachable = new AttachableResourceDefinition();\r\n\r\n      attachable.file = file;\r\n\r\n      file.manager = attachable;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AttachableResourceDefinition) {\r\n      attachable = file.manager as AttachableResourceDefinition;\r\n\r\n      if (!attachable.isLoaded) {\r\n        if (loadHandler) {\r\n          attachable.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await attachable.load();\r\n      }\r\n    }\r\n\r\n    return attachable;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._dataWrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ATTRPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._dataWrapper = data;\r\n\r\n    if (this._dataWrapper && this._dataWrapper[\"minecraft:attachable\"]) {\r\n      this._data = this._dataWrapper[\"minecraft:attachable\"].description;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n  ensureData() {\r\n    if (this._data) {\r\n      return this._data;\r\n    }\r\n\r\n    const newDef: IClientAttachableDescription = {\r\n      identifier: \"\",\r\n      materials: {},\r\n      textures: {},\r\n      geometry: {},\r\n      particle_effects: {},\r\n      animations: {},\r\n      render_controllers: [],\r\n      scripts: {},\r\n    };\r\n\r\n    if (!this._dataWrapper) {\r\n      this._dataWrapper = { format_version: \"1.10.0\", \"minecraft:attachable\": { description: newDef } };\r\n      this._data = this._dataWrapper[\"minecraft:attachable\"].description;\r\n      return this._data;\r\n    }\r\n\r\n    if (\r\n      this._dataWrapper[\"minecraft:attachable\"] === undefined ||\r\n      this._dataWrapper[\"minecraft:attachable\"].description === undefined\r\n    ) {\r\n      this._dataWrapper[\"minecraft:attachable\"] = { description: newDef };\r\n    }\r\n\r\n    this._data = this._dataWrapper[\"minecraft:attachable\"].description;\r\n\r\n    return this._data;\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    const etrChildItems = rel.parentItem.childItems;\r\n\r\n    if (rel.childItem.itemType === ProjectItemType.texture && this._data && this._data.textures) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          for (const key in this._data.textures) {\r\n            if (Utilities.isUsableAsObjectKey(key)) {\r\n              const texturePath = this._data.textures[key];\r\n\r\n              if (texturePath === relativePath) {\r\n                this._data.textures[key] = undefined;\r\n\r\n                if (etrChildItems) {\r\n                  for (const otherChild of etrChildItems) {\r\n                    if (otherChild.childItem.itemType === ProjectItemType.renderControllerJson) {\r\n                      const renderController = (await MinecraftDefinitions.get(\r\n                        otherChild.childItem\r\n                      )) as RenderControllerSetDefinition;\r\n\r\n                      renderController.removeTexture(key);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"attachables\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n    let geometryList = this.geometryList;\r\n    let renderControllerIdList = this.renderControllerIdList;\r\n    let animationIdList = this.animationIdList;\r\n\r\n    // Process animations\r\n    if (animationIdList) {\r\n      const animItems = project.getItemsByType(ProjectItemType.animationResourceJson);\r\n      for (const candItem of animItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const animationDef = await AnimationResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const animIds = animationDef?.idList;\r\n\r\n          if (animIds) {\r\n            for (const animId of animationIdList) {\r\n              if (animIds.has(animId)) {\r\n                item.addChildItem(candItem);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process render controllers\r\n    if (renderControllerIdList) {\r\n      const rcItems = project.getItemsByType(ProjectItemType.renderControllerJson);\r\n      for (const candItem of rcItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const renderControllerDef = await RenderControllerSetDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          const renderIds = renderControllerDef?.idList;\r\n\r\n          if (renderIds) {\r\n            for (const rcId of renderControllerIdList) {\r\n              if (renderIds.has(rcId)) {\r\n                item.addChildItem(candItem);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process textures\r\n    if (packRootFolder && textureList) {\r\n      const texItems = project.getItemsByType(ProjectItemType.texture);\r\n      for (const candItem of texItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n            StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n          );\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Process models\r\n    if (geometryList) {\r\n      const modelItems = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n      for (const candItem of modelItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const model = await ModelGeometryDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (model) {\r\n            let doAddModel = false;\r\n            for (const modelId of model.identifiers) {\r\n              if (geometryList && geometryList.includes(modelId)) {\r\n                doAddModel = true;\r\n\r\n                geometryList = Utilities.removeItemInArray(modelId, geometryList);\r\n              }\r\n            }\r\n\r\n            if (doAddModel) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        const isVanilla = await Database.isVanillaToken(texturePath);\r\n\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanilla);\r\n      }\r\n    }\r\n\r\n    if (geometryList) {\r\n      for (const geoId of geometryList) {\r\n        item.addUnfulfilledRelationship(geoId, ProjectItemType.modelGeometryJson, await Database.isVanillaToken(geoId));\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IComponent from \"./IComponent\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IItemTypeBehaviorPack from \"./IItemTypeBehaviorPack\";\r\nimport IItemTypeWrapper from \"./IItemTypeWrapper\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport AttachableResourceDefinition from \"./AttachableResourceDefinition\";\r\nimport TypeScriptDefinition from \"./TypeScriptDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\n\r\nexport default class ItemTypeDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _wrapper: IItemTypeWrapper | null = null;\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n\r\n  private _data?: IItemTypeBehaviorPack;\r\n\r\n  private _onLoaded = new EventDispatcher<ItemTypeDefinition, ItemTypeDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<ItemTypeDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<ItemTypeDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<ItemTypeDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.unsubscribe(this._handleFileUpdated);\r\n    }\r\n\r\n    this._file = newFile;\r\n\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.subscribe(this._handleFileUpdated);\r\n    }\r\n  }\r\n\r\n  _handleFileUpdated(file: IFile, fileB: IFile) {\r\n    this._data = undefined;\r\n    this._isLoaded = false;\r\n    this._wrapper = null;\r\n    this._managed = {};\r\n  }\r\n\r\n  public get id() {\r\n    if (this._id === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get formatVersion() {\r\n    if (this._wrapper) {\r\n      return this._wrapper.format_version;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._wrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._wrapper.format_version);\r\n  }\r\n\r\n  public setFormatVersion(version: string): void {\r\n    if (!this._wrapper) {\r\n      return;\r\n    }\r\n\r\n    this._wrapper.format_version = version;\r\n  }\r\n\r\n  constructor() {\r\n    this._handleFileUpdated = this._handleFileUpdated.bind(this);\r\n  }\r\n\r\n  ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined) {\r\n    const comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      return comp;\r\n    }\r\n\r\n    return this.addComponent(id, defaultData);\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (!this._data || !this._data.components) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const comp = this._data.components[id];\r\n      if (comp) {\r\n        this._managed[id] = new ManagedComponent(this._data.components, id, comp);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"ITNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getCustomComponentIds() {\r\n    let customComponentIds: string[] = [];\r\n    const customComponent = this.getComponent(\"minecraft:custom_components\");\r\n\r\n    if (customComponent) {\r\n      let compData = customComponent.getData();\r\n\r\n      if (compData && Array.isArray(compData)) {\r\n        for (const str of compData) {\r\n          if (typeof str === \"string\") {\r\n            customComponentIds.push(str);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const comp of this.getComponents()) {\r\n      if (!comp.id.startsWith(\"minecraft:\") && !comp.id.startsWith(\"tag:\")) {\r\n        customComponentIds.push(comp.id);\r\n      }\r\n    }\r\n\r\n    return customComponentIds;\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentName in this._data.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let customComponentIds: string[] = this.getCustomComponentIds();\r\n\r\n    // Check TypeScript files for custom components (only if we have custom component IDs)\r\n    if (customComponentIds && customComponentIds.length > 0) {\r\n      const tsItems = project.getItemsByType(ProjectItemType.ts);\r\n      for (const candItem of tsItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          if (!candItem.primaryFile.isContentLoaded) {\r\n            await candItem.primaryFile.loadContent();\r\n          }\r\n\r\n          const tsd = await TypeScriptDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (tsd && tsd.data) {\r\n            let doAddTs = false;\r\n\r\n            for (const customCompId of customComponentIds) {\r\n              if (tsd.data.indexOf(customCompId) >= 0) {\r\n                doAddTs = true;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (doAddTs) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check attachable resources\r\n    if (index && this.id) {\r\n      // Use pre-built index for O(1) lookup\r\n      const matchingAttachables = index.getItemsById(index.attachablesById, this.id);\r\n      for (const candItem of matchingAttachables) {\r\n        item.addChildItem(candItem);\r\n      }\r\n    } else {\r\n      const attachableItems = project.getItemsByType(ProjectItemType.attachableResourceJson);\r\n      for (const candItem of attachableItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const ard = await AttachableResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (ard) {\r\n            const id = ard.id;\r\n\r\n            if (id === this.id) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    if (this._wrapper) {\r\n      this._wrapper.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this._data as IItemTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data.components) {\r\n      if (name !== id) {\r\n        const component = this._data.components[name];\r\n\r\n        newBehaviorPacks[name] = component;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newManagedComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this._data.components = newBehaviorPacks;\r\n    this._managed = newManagedComponents;\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  async addCustomComponent(itemTypeItem: ProjectItem, componentName: string) {\r\n    let componentNameShort = componentName;\r\n\r\n    const idx = componentName.indexOf(\":\");\r\n    if (idx >= 0) {\r\n      componentNameShort = componentName.substring(idx + 1);\r\n    }\r\n\r\n    this.ensureComponent(componentName, {});\r\n\r\n    const fileNameSugg = Utilities.getHumanifiedObjectNameNoSpaces(componentNameShort);\r\n\r\n    this.setFormatVersion(\"1.21.100\");\r\n\r\n    await ProjectUtilities.ensureTypeScriptFileWith(\r\n      itemTypeItem.project,\r\n      componentName,\r\n      \"new-templates\",\r\n      \"itemCustomComponent\",\r\n      fileNameSugg,\r\n      {\r\n        \"example:newComponentId\": componentName,\r\n        ExampleNewComponent: fileNameSugg,\r\n        initExampleNew: \"init\" + fileNameSugg,\r\n      }\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      itemTypeItem.project,\r\n      \"import { init\" + fileNameSugg,\r\n      \"import { init\" + fileNameSugg + ' } from \"./' + fileNameSugg + '\"\\n',\r\n      false\r\n    );\r\n\r\n    await ProjectUtilities.ensureContentInDefaultScriptFile(\r\n      itemTypeItem.project,\r\n      \"init\" + fileNameSugg + \"()\",\r\n      \"init\" + fileNameSugg + \"();\\n\",\r\n      true\r\n    );\r\n\r\n    this.persist();\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ItemTypeDefinition, ItemTypeDefinition>,\r\n    preserveComments?: boolean\r\n  ) {\r\n    let itt: ItemTypeDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      itt = new ItemTypeDefinition();\r\n\r\n      itt.behaviorPackFile = file;\r\n\r\n      file.manager = itt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ItemTypeDefinition) {\r\n      itt = file.manager as ItemTypeDefinition;\r\n\r\n      if (!itt.isLoaded || (preserveComments && !itt._loadedWithComments)) {\r\n        if (loadHandler) {\r\n          itt.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await itt.load(preserveComments);\r\n      }\r\n    }\r\n\r\n    return itt;\r\n  }\r\n\r\n  static isVisualComponent(value: string) {\r\n    if (\r\n      value === \"minecraft:icon\" ||\r\n      value === \"minecraft:display_name\" ||\r\n      value === \"minecraft:glint\" ||\r\n      value === \"minecraft:hover_text_color\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(!this._isLoaded || this._wrapper !== null, \"ITDP\");\r\n\r\n    if (!this._wrapper) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._wrapper);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._wrapper = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (this._wrapper) {\r\n      const item = (this._wrapper as any)[\"minecraft:item\"];\r\n\r\n      if (item && item.description) {\r\n        this.id = item.description.identifier;\r\n      }\r\n\r\n      this._data = item;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\n\r\nexport enum StrictPlatformInfoGeneratorTest {\r\n  entityTypeUsesAMinecraftIdentifier = 100,\r\n  entityTypeUsesAMinecraftRuntimeIdentifier = 101,\r\n  itemTypeUsesAMinecraftIdentifier = 104,\r\n}\r\n\r\n/**\r\n * Validates strict platform requirements for identifiers and runtime identifiers.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/strict.form.json} for topic definitions\r\n */\r\nexport default class StrictPlatformInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"STRICT\";\r\n  title = \"Strict Platform\";\r\n  canAlwaysProcess = true;\r\n\r\n  identifierOverridesAreErrors = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    if (project.isVanillaEditSession) {\r\n      return infoItems;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpEntityType = await EntityTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpEntityType) {\r\n            await bpEntityType.load();\r\n\r\n            if (bpEntityType && bpEntityType._data && bpEntityType._data.description) {\r\n              const desc = bpEntityType._data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.identifierOverridesAreErrors ? InfoItemType.error : InfoItemType.warning,\r\n                    this.id,\r\n                    StrictPlatformInfoGeneratorTest.entityTypeUsesAMinecraftIdentifier,\r\n                    `Uses a minecraft: identifier override`,\r\n                    pi,\r\n                    desc.identifier\r\n                  )\r\n                );\r\n              }\r\n\r\n              if (\r\n                desc.runtime_identifier !== undefined &&\r\n                desc.runtime_identifier.toLowerCase !== undefined &&\r\n                desc.runtime_identifier.toLowerCase().startsWith(\"minecraft:\")\r\n              ) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.identifierOverridesAreErrors ? InfoItemType.error : InfoItemType.warning,\r\n                    this.id,\r\n                    StrictPlatformInfoGeneratorTest.entityTypeUsesAMinecraftRuntimeIdentifier,\r\n                    `Uses a runtime_identifier override`,\r\n                    pi,\r\n                    desc.runtime_identifier\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpItemType = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpItemType) {\r\n            await bpItemType.load();\r\n\r\n            if (bpItemType && bpItemType.data && bpItemType.data.description) {\r\n              const desc = bpItemType.data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    this.identifierOverridesAreErrors ? InfoItemType.error : InfoItemType.warning,\r\n                    this.id,\r\n                    StrictPlatformInfoGeneratorTest.itemTypeUsesAMinecraftIdentifier,\r\n                    `Uses a minecraft: identifier override`,\r\n                    pi,\r\n                    desc.identifier\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IMaterialWrapper } from \"./IMaterial\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class Material {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IMaterialWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<Material, Material>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get version(): string | undefined {\r\n    if (!this.definition || !this.definition.materials) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.definition.materials[\"version\"] as string;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<Material, Material>) {\r\n    let rc: Material | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rc = new Material();\r\n\r\n      rc.file = file;\r\n\r\n      file.manager = rc;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof Material) {\r\n      rc = file.manager as Material;\r\n\r\n      if (!rc.isLoaded) {\r\n        if (loadHandler) {\r\n          rc.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rc.load();\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      Log.unexpectedUndefined(\"MATP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\n\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport CooperativeAddOnRequirementsGenerator from \"./CooperativeAddOnRequirementsGenerator\";\r\nimport RenderControllerSetDefinition from \"../minecraft/RenderControllerSetDefinition\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport Material from \"../minecraft/Material\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AnimationBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationControllerBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\n\r\n/**\r\n * Validates cooperative add-on item requirements for naming conventions and identifiers.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/caddonireq.form.json} for topic definitions\r\n */\r\n// rule name/check. For validation errors, name should be a terse description of \"your problem\"\r\nexport enum CooperativeAddOnItemRequirementsGeneratorTest {\r\n  behaviorAnimationControllerIdNotInExpectedForm = 100,\r\n  behaviorAnimationControllerNameNotInExpectedForm = 101,\r\n  behaviorAnimationIdNotInExpectedForm = 110,\r\n  behaviorAnimationNameNotInExpectedForm = 111,\r\n  jsonIdentifierNotInExpectedForm = 112,\r\n  resourceAnimationControllerIdNotInExpectedForm = 120,\r\n  resourceAnimationControllerNameNotInExpectedForm = 121,\r\n  resourceAnimationIdNotInExpectedForm = 130,\r\n  resourceAnimationNameNotInExpectedForm = 131,\r\n  renderControllerIdNotInExpectedForm = 140,\r\n  renderControllerNameNotInExpectedForm = 141,\r\n  geometryIdNotInExpectedForm = 150,\r\n  geometryNameNotInExpectedForm = 151,\r\n  materialsIdentifierNotInExpectedForm = 160,\r\n  materialsFirstSegmentNotInExpectedForm = 161,\r\n  resourcePackDoesNotHavePackScopeWorld = 170,\r\n  noDimensionJson = 191,\r\n}\r\n\r\nexport default class CooperativeAddOnItemRequirementsGenerator implements IProjectInfoItemGenerator {\r\n  id = \"CADDONIREQ\";\r\n  title = \"Cooperative Add-On Item Requirements Generator\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (projectItem.itemType === ProjectItemType.dimensionJson) {\r\n      // CADDONIREQ191\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CooperativeAddOnItemRequirementsGeneratorTest.noDimensionJson,\r\n          `Dimension definition resources are not permitted in an add-on targeted behavior pack`,\r\n          projectItem\r\n        )\r\n      );\r\n    } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const rpManifest = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (rpManifest) {\r\n          await rpManifest.load();\r\n\r\n          if (!rpManifest.packScope) {\r\n            // CADDONIREQ170\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnItemRequirementsGeneratorTest.resourcePackDoesNotHavePackScopeWorld,\r\n                `Resource pack manifest does not specify that header/pack_scope that should be 'world'`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationControllerBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const bacManifest = await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (bacManifest && bacManifest.data && bacManifest.data.animation_controllers) {\r\n          for (let bacName in bacManifest.data.animation_controllers) {\r\n            let bacNameBreak = bacName.split(\".\");\r\n\r\n            if (bacNameBreak.length < 3 || bacNameBreak[0] !== \"controller\" || bacNameBreak[1] !== \"animation\") {\r\n              // CADDONIREQ100\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationControllerIdNotInExpectedForm,\r\n                  `Behavior pack animation controller identifier is not in the expected form of controller.animation.xyz`,\r\n                  projectItem,\r\n                  bacName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(bacNameBreak[2])) {\r\n              // CADDONIREQ101\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationControllerNameNotInExpectedForm,\r\n                  `Behavior pack animation controller name section is not in the expected form of controller.animation.creatorshortname_projectshortname`,\r\n                  projectItem,\r\n                  bacName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const baManifest = await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (baManifest && baManifest.data && baManifest.data.animations) {\r\n          for (let aName in baManifest.data.animations) {\r\n            let baNameBreak = aName.split(\".\");\r\n\r\n            if (baNameBreak.length < 2 || baNameBreak[0] !== \"animation\") {\r\n              // CADDONIREQ110\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationIdNotInExpectedForm,\r\n                  `Behavior animation identifier is not in the expected form of animation.xyz.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(baNameBreak[1])) {\r\n              // CADDONIREQ111\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.behaviorAnimationNameNotInExpectedForm,\r\n                  `Behavior pack animation name section is not in the expected form of animation.creatorshortname_projectshortname.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationControllerResourceJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const racManifest = await AnimationControllerResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (racManifest && racManifest.data && racManifest.data.animation_controllers) {\r\n          for (let racName in racManifest.data.animation_controllers) {\r\n            let racNameBreak = racName.split(\".\");\r\n\r\n            if (racNameBreak.length < 3 || racNameBreak[0] !== \"controller\" || racNameBreak[1] !== \"animation\") {\r\n              // CADDONIREQ120\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationControllerIdNotInExpectedForm,\r\n                  `Resource pack animation controller identifier is not in the expected form of controller.animation.xyz`,\r\n                  projectItem,\r\n                  racName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(racNameBreak[2])) {\r\n              // CADDONIREQ121\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationControllerNameNotInExpectedForm,\r\n                  `Resource pack animation controller name section is not in the expected form of controller.animation.creatorshortname_projectshortname`,\r\n                  projectItem,\r\n                  racName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationResourceJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const raManifest = await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (raManifest && raManifest.animations) {\r\n          for (let aName in raManifest.animations) {\r\n            let raNameBreak = aName.split(\".\");\r\n\r\n            if (raNameBreak.length < 2 || raNameBreak[0] !== \"animation\") {\r\n              // CADDONIREQ130\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationIdNotInExpectedForm,\r\n                  `Resource animation identifier is not in the expected form of animation.xyz.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(raNameBreak[1])) {\r\n              // CADDONIREQ131\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.resourceAnimationNameNotInExpectedForm,\r\n                  `Resource animation name section is not in the expected form of animation.creatorshortname_projectshortname.animation_name`,\r\n                  projectItem,\r\n                  aName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.renderControllerJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const racManifest = await RenderControllerSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (racManifest && racManifest.data && racManifest.data.render_controllers) {\r\n          for (let rrcName in racManifest.data.render_controllers) {\r\n            let racNameBreak = rrcName.split(\".\");\r\n\r\n            if (racNameBreak.length < 3 || racNameBreak[0] !== \"controller\" || racNameBreak[1] !== \"render\") {\r\n              // CADDONIREQ140\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.renderControllerIdNotInExpectedForm,\r\n                  `Resource pack render controller identifier is not in the expected form of controller.render.creatorshortname_projectshortname.other`,\r\n                  projectItem,\r\n                  rrcName\r\n                )\r\n              );\r\n            } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(racNameBreak[2])) {\r\n              // CADDONIREQ141\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.renderControllerNameNotInExpectedForm,\r\n                  `Resource pack render controller name section is not in the expected form of controller.render.creatorshortname_projectshortname`,\r\n                  projectItem,\r\n                  rrcName\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.modelGeometryJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n      if (projectItem.primaryFile) {\r\n        const modGeo = await ModelGeometryDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (modGeo) {\r\n          for (const modId of modGeo.identifiers) {\r\n            if (modGeo && modId) {\r\n              let modGeoBreaks = modId.split(\".\");\r\n\r\n              if (modGeoBreaks.length < 2 || modGeoBreaks[0] !== \"geometry\") {\r\n                // CADDONIREQ150\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    CooperativeAddOnItemRequirementsGeneratorTest.geometryIdNotInExpectedForm,\r\n                    `Geometry is not in the expected form of geometry.creatorshortname_projectshortname.other`,\r\n                    projectItem,\r\n                    modId\r\n                  )\r\n                );\r\n              } else if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(modGeoBreaks[1])) {\r\n                // CADDONIREQ151\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    CooperativeAddOnItemRequirementsGeneratorTest.geometryNameNotInExpectedForm,\r\n                    `Geometry identifier section is not in the expected form of geometry.creatorshortname_projectshortname`,\r\n                    projectItem,\r\n                    modId\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (\r\n      projectItem.itemType === ProjectItemType.recipeBehavior ||\r\n      projectItem.itemType === ProjectItemType.entityTypeBehavior ||\r\n      projectItem.itemType === ProjectItemType.blockTypeBehavior ||\r\n      projectItem.itemType === ProjectItemType.itemTypeBehavior\r\n    ) {\r\n      await projectItem.loadFileContent();\r\n\r\n      if (projectItem.primaryFile) {\r\n        const projectItemDef = await MinecraftDefinitions.get(projectItem);\r\n\r\n        if (projectItemDef && projectItemDef.id) {\r\n          if (!CooperativeAddOnRequirementsGenerator.isNamespacedString(projectItemDef.id)) {\r\n            // CADDONIREQ112\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CooperativeAddOnItemRequirementsGeneratorTest.jsonIdentifierNotInExpectedForm,\r\n                `JSON namespaced identifier is not in the expected form of creatorshortname_projectshortname:myitem`,\r\n                projectItem,\r\n                projectItemDef.id\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.material) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const mat = await Material.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (mat && mat.definition && mat.definition.materials) {\r\n          for (const modId in mat.definition.materials) {\r\n            let modIdBreaks = modId.split(\":\");\r\n            // CADDONIREQ160\r\n            if (modIdBreaks.length < 1) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.materialsIdentifierNotInExpectedForm,\r\n                  `Materials section identifier is not in the expected form of creatorshortname_projectshortname:other`,\r\n                  projectItem,\r\n                  modId\r\n                )\r\n              );\r\n            } else if (\r\n              modIdBreaks[0] !== \"version\" &&\r\n              (!CooperativeAddOnRequirementsGenerator.isNamespacedString(modIdBreaks[0]) ||\r\n                CooperativeAddOnRequirementsGenerator.isCommonMaterialName(modIdBreaks[0]))\r\n            ) {\r\n              // CADDONIREQ161\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CooperativeAddOnItemRequirementsGeneratorTest.materialsFirstSegmentNotInExpectedForm,\r\n                  `First segment of a Materials section identifier is not in the expected form of creatorshortname_projectshortname_materialname or creatorshortname_projectshortname_materialname:baseitem`,\r\n                  projectItem,\r\n                  modId\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFile from \"../storage/IFile\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport { PackContainerFolderHints, PackFolderHints } from \"../storage/StorageUtilities\";\r\n\r\nexport enum PathLengthFileGeneratorTest {\r\n  filePathExceeds8DirectorySegments = 102,\r\n  filePathExceedsCharacterLength = 103,\r\n  filePathContainsNonLowercaseLetters = 104,\r\n}\r\n\r\n/**\r\n * Validates file path lengths and naming conventions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/pathlength.form.json} for topic definitions\r\n */\r\nexport default class PathLengthFileGenerator implements IProjectFileInfoGenerator {\r\n  id = \"PATHLENGTH\";\r\n  title = \"Path Length\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, file: IFile, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    let path = file.storageRelativePath;\r\n    let pathSub = path;\r\n\r\n    pathSub = pathSub.replace(\"/Content/\", \"/content/\");\r\n    pathSub = pathSub.replace(\"/Marketing Art/\", \"/marketing art/\");\r\n    pathSub = pathSub.replace(\"/Store Art/\", \"/store art/\");\r\n\r\n    // we don't want to check the marketing art or store art folders, as they are not part of the content\r\n    if (pathSub.indexOf(\"/marketing art/\") >= 0 || pathSub.indexOf(\"/store art/\") >= 0) {\r\n      return items;\r\n    }\r\n\r\n    if (pathSub.startsWith(\"/content/\")) {\r\n      pathSub = pathSub.substring(9);\r\n    }\r\n\r\n    let packsIndex = pathSub.indexOf(\"_packs/\");\r\n\r\n    if (packsIndex > 0) {\r\n      packsIndex = pathSub.indexOf(\"/\", packsIndex + 7);\r\n\r\n      if (packsIndex >= 0) {\r\n        pathSub = pathSub.substring(packsIndex);\r\n      }\r\n    } else {\r\n      // else, try to find the first subfolder after the second slash\r\n      packsIndex = pathSub.indexOf(\"/\", 2);\r\n      if (packsIndex >= 0) {\r\n        pathSub = pathSub.substring(packsIndex + 1);\r\n      }\r\n    }\r\n\r\n    if (\r\n      pathSub.toLowerCase() !== pathSub &&\r\n      !pathSub.startsWith(\"/marketing art/\") &&\r\n      !pathSub.startsWith(\"/store art/\") &&\r\n      !pathSub.endsWith(\".lang\") &&\r\n      pathSub.indexOf(\"/texts/\") < 0 &&\r\n      pathSub.indexOf(\"/scripts/\") < 0\r\n    ) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.recommendation,\r\n          this.id,\r\n          PathLengthFileGeneratorTest.filePathContainsNonLowercaseLetters,\r\n          `File path contains non-lowercase letters`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          pathSub\r\n        )\r\n      );\r\n    }\r\n\r\n    for (const hint of PackContainerFolderHints) {\r\n      const hintIndex = path.toLowerCase().indexOf(\"/\" + hint + \"/\");\r\n\r\n      if (hintIndex >= 0) {\r\n        path = path.substring(hintIndex + hint.length + 2);\r\n      }\r\n    }\r\n\r\n    for (const hint of PackFolderHints) {\r\n      if (path.toLowerCase().startsWith(\"/\" + hint + \"/\")) {\r\n        path = path.substring(hint.length + 2);\r\n      }\r\n      if (path.toLowerCase().startsWith(hint + \"/\")) {\r\n        path = path.substring(hint.length + 1);\r\n      }\r\n    }\r\n\r\n    const fSlashSegments = path.split(\"/\");\r\n    const bSlashSegments = path.split(\"\\\\\");\r\n\r\n    if (fSlashSegments.length > 9 || bSlashSegments.length > 9) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PathLengthFileGeneratorTest.filePathExceeds8DirectorySegments,\r\n          `File path contains 8 or more directory segments, and may not run on all devices`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          path\r\n        )\r\n      );\r\n    }\r\n\r\n    if (path.length > 100) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PathLengthFileGeneratorTest.filePathExceedsCharacterLength,\r\n          `File path contains more than 100 characters, and may not run on all devices`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          path\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport { MaxItemTypes } from \"../app/IProjectItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nconst TopicTestIdBase = 200;\r\n\r\nexport enum ItemCountsInfoGeneratorTest {\r\n  behaviorPackManifest = 102,\r\n  resourcePackManifest = 103,\r\n}\r\n\r\n/**\r\n * Aggregates counts of various content types in a project.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/items.form.json} for topic definitions\r\n */\r\nexport default class ItemCountsInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"ITEMS\";\r\n  title = \"Minimum Definition of a Pack\";\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId > TopicTestIdBase && topicId < TopicTestIdBase + MaxItemTypes) {\r\n      return {\r\n        title: ProjectItemUtilities.getDescriptionForType(topicId - TopicTestIdBase) + \" count\",\r\n      };\r\n    }\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.behaviorPackManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.behaviorPackManifestJson\r\n    );\r\n    info.unknownJsonCount = infoSet.getFirstNumberDataValue(this.id, TopicTestIdBase + ProjectItemType.unknownJson);\r\n    info.entityTypeManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.entityTypeBehavior\r\n    );\r\n    info.itemTypeManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.itemTypeBehavior\r\n    );\r\n    info.blockTypeManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.blockTypeBehavior\r\n    );\r\n    info.resourcePackManifestCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.resourcePackManifestJson\r\n    );\r\n\r\n    info.worldCount =\r\n      infoSet.getFirstNumberDataValue(this.id, TopicTestIdBase + ProjectItemType.MCWorld) +\r\n      infoSet.getFirstNumberDataValue(this.id, TopicTestIdBase + ProjectItemType.worldFolder);\r\n\r\n    info.entityTypeResourceCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.entityTypeResource\r\n    );\r\n\r\n    info.behaviorPackAnimationCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.animationBehaviorJson\r\n    );\r\n\r\n    info.behaviorPackAnimationControllerCount = infoSet.getFirstNumberDataValue(\r\n      this.id,\r\n      TopicTestIdBase + ProjectItemType.animationControllerBehaviorJson\r\n    );\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const typeCounts: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      typeCounts[i] = 0;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      typeCounts[pi.itemType]++;\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            ItemCountsInfoGeneratorTest.behaviorPackManifest,\r\n            \"Behavior pack manifest found\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            ItemCountsInfoGeneratorTest.resourcePackManifest,\r\n            \"Resource pack manifest found\",\r\n            pi\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      if (typeCounts[i] > 0) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            TopicTestIdBase + i,\r\n            ProjectItemUtilities.getDescriptionForType(i) + \" item count\",\r\n            undefined,\r\n            typeCounts[i]\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IContextIndexData from \"../core/IContentIndexData\";\r\nimport IInfoItemData from \"./IInfoItemData\";\r\nimport IProjectInfo from \"./IProjectInfo\";\r\nimport IProjectMetaState from \"./IProjectMetaState\";\r\n\r\nexport enum ProjectInfoSuite {\r\n  defaultInDevelopment = 0,\r\n  currentPlatformVersions = 1,\r\n  cooperativeAddOn = 2,\r\n  sharing = 3,\r\n  sharingStrict = 4,\r\n}\r\n\r\nexport default interface IProjectInfoData {\r\n  info?: IProjectInfo;\r\n  items?: IInfoItemData[];\r\n  sourcePath?: string;\r\n  sourceHash?: string;\r\n  sourceName?: string;\r\n  suite?: number;\r\n  subsetReports?: IProjectMetaState[];\r\n  index?: IContextIndexData;\r\n  generatorName?: string;\r\n  generatorVersion?: string;\r\n}\r\n", "export const constants = {\r\n  version: \"0.17.0\",\r\n  name: \"Minecraft Creator Tools\",\r\n  disclaimer: \"Alpha software. License at https://github.com/mojang/minecraft-creator-tools.\",\r\n  copyright: \"Copyright 2026 Mojang AB. All rights reserved.\",\r\n  homeUrl: \"https://mctools.dev\",\r\n  repositoryUrl: \"https://github.com/mojang/minecraft-creator-tools\",\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum StatusType {\r\n  message = 0,\r\n  operationStarted = 1,\r\n  operationUpdate = 2,\r\n  operationEndedComplete = 3,\r\n  operationEndedErrors = 4,\r\n}\r\n\r\nexport enum StatusTopic {\r\n  general = 0,\r\n  validation = 1,\r\n  projectLoad = 2,\r\n  worldLoad = 3,\r\n  scriptBuild = 4,\r\n  processing = 5,\r\n  minecraft = 6,\r\n}\r\n\r\nexport default interface IStatus {\r\n  type: StatusType;\r\n  topic?: StatusTopic;\r\n  time: Date;\r\n  operationId?: number;\r\n  message: string;\r\n  context?: string;\r\n  operation?: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport { constants } from \"../core/Constants\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\n\r\nexport interface ISummaryInfoGeneratorResults {\r\n  size: number;\r\n  fileCounts: number;\r\n  folderCounts: number;\r\n  contentSize: number;\r\n  contentFileCounts: number;\r\n  contentFolderCounts: number;\r\n}\r\n\r\nexport enum SummaryInfoGeneratorTest {\r\n  resourceManifest = 101,\r\n  behaviorManifest = 102,\r\n}\r\n\r\n/**\r\n * Aggregates summary information about the project including manifests and content types.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/summary.form.json} for topic definitions\r\n */\r\nexport default class SummaryInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SUMMARY\";\r\n  title = \"Summary Information\";\r\n  canAlwaysProcess = true;\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.mctoolsVersion = MinecraftUtilities.getVersionNumber(constants.version);\r\n\r\n    let typesInUse: string[] = [];\r\n\r\n    const typesInUseSet = new Set<string>();\r\n\r\n    const resourceFeatureMeasures = infoSet.getFeaturesWithInstances(\r\n      this.id,\r\n      SummaryInfoGeneratorTest.resourceManifest\r\n    );\r\n\r\n    for (const resourceFeatureMeasure of resourceFeatureMeasures) {\r\n      if (resourceFeatureMeasure === \"pbr\") {\r\n        info.capabilities.push(\"vvcompat\");\r\n      }\r\n\r\n      if (!info.capabilities.includes(resourceFeatureMeasure)) {\r\n        info.capabilities.push(resourceFeatureMeasure);\r\n      }\r\n    }\r\n\r\n    const behaviorFeatureMeasures = infoSet.getFeaturesWithInstances(\r\n      this.id,\r\n      SummaryInfoGeneratorTest.behaviorManifest\r\n    );\r\n\r\n    for (const behaviorFeatureMeasure of behaviorFeatureMeasures) {\r\n      if (!info.capabilities.includes(behaviorFeatureMeasure)) {\r\n        info.capabilities.push(behaviorFeatureMeasure);\r\n      }\r\n    }\r\n\r\n    if (infoSet.project) {\r\n      const itemsCopy = infoSet.project.getItemsCopy();\r\n      for (const item of itemsCopy) {\r\n        const typeDesc = ProjectItemUtilities.getDescriptionForType(item.itemType);\r\n\r\n        if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          if (!info.capabilities.includes(\"behaviorPack\")) {\r\n            info.capabilities.push(\"behaviorPack\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          if (!info.capabilities.includes(\"resourcePack\")) {\r\n            info.capabilities.push(\"resourcePack\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.skinPackManifestJson) {\r\n          if (!info.capabilities.includes(\"skinPack\")) {\r\n            info.capabilities.push(\"skinPack\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.js) {\r\n          if (!info.capabilities.includes(\"scripting\")) {\r\n            info.capabilities.push(\"scripting\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.tickJson) {\r\n          if (!info.capabilities.includes(\"tickJson\")) {\r\n            info.capabilities.push(\"tickJson\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.MCFunction) {\r\n          if (!info.capabilities.includes(\"functions\")) {\r\n            info.capabilities.push(\"functions\");\r\n          }\r\n        } else if (item.itemType === ProjectItemType.animationBehaviorJson) {\r\n          if (!info.capabilities.includes(\"behaviorAnimations\")) {\r\n            info.capabilities.push(\"behaviorAnimations\");\r\n          }\r\n        } else if (ProjectItemUtilities.isVibrantVisualsRelated(item)) {\r\n          if (!info.capabilities.includes(\"vvfiles\")) {\r\n            info.capabilities.push(\"vvfiles\");\r\n          }\r\n        }\r\n\r\n        if (!typesInUseSet.has(typeDesc)) {\r\n          typesInUse.push(typeDesc);\r\n          typesInUseSet.add(typeDesc);\r\n        }\r\n      }\r\n    }\r\n\r\n    typesInUse.sort();\r\n\r\n    info.itemTypes = typesInUse;\r\n  }\r\n\r\n  // this should run after every other summarize pass has happened.\r\n  summarizePhase2(info: any, infoSet: ProjectInfoSet) {\r\n    let hasCameraJson = false;\r\n\r\n    if (infoSet.project) {\r\n      for (const item of infoSet.project.items) {\r\n        if (item.itemType === ProjectItemType.cameraBehaviorJson) {\r\n          hasCameraJson = true;\r\n          break; // Early exit once found\r\n        }\r\n      }\r\n    }\r\n\r\n    const commands = info.commands;\r\n    const apisUsed = info.apisUsed;\r\n    const capabilitiesSet = new Set(info.capabilities);\r\n\r\n    if (hasCameraJson || commands.includes(\"camera\") || apisUsed.includes(\"setCamera\")) {\r\n      if (!capabilitiesSet.has(\"camera\")) {\r\n        info.capabilities.push(\"camera\");\r\n      }\r\n    }\r\n\r\n    info.capabilities.sort();\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const resourceManifestPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      SummaryInfoGeneratorTest.resourceManifest,\r\n      \"Resource Manifests\"\r\n    );\r\n\r\n    items.push(resourceManifestPi);\r\n\r\n    const behaviorManifestPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      SummaryInfoGeneratorTest.behaviorManifest,\r\n      \"Behavior Manifests\"\r\n    );\r\n\r\n    items.push(behaviorManifestPi);\r\n\r\n    for (const item of itemsCopy) {\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        const manifestFile = item.primaryFile;\r\n\r\n        if (!manifestFile) {\r\n          continue;\r\n        }\r\n\r\n        const manifest = await BehaviorManifestDefinition.ensureOnFile(manifestFile);\r\n\r\n        if (!manifest) {\r\n          continue;\r\n        }\r\n\r\n        if (manifest.capabilities) {\r\n          for (const capability of manifest.capabilities) {\r\n            behaviorManifestPi.incrementFeature(capability);\r\n          }\r\n        }\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        const manifestFile = item.primaryFile;\r\n\r\n        if (!manifestFile) {\r\n          continue;\r\n        }\r\n\r\n        const manifest = await ResourceManifestDefinition.ensureOnFile(manifestFile);\r\n\r\n        if (!manifest) {\r\n          continue;\r\n        }\r\n\r\n        if (manifest.capabilities) {\r\n          for (const capability of manifest.capabilities) {\r\n            resourceManifestPi.incrementFeature(capability);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"./Log\";\r\nimport * as md5 from \"js-md5\";\r\nimport Utilities from \"./Utilities\";\r\n\r\nexport interface IHashCatalogEntry {\r\n  fileName: string;\r\n  propertyName: string;\r\n  filePath?: string;\r\n}\r\n\r\nexport type HashCatalog = { [hash: string]: IHashCatalogEntry };\r\n\r\nexport default class HashUtilities {\r\n  /**\r\n   * Generates hash catalog entries for a file (both complete file hash and property hashes for JSON files)\r\n   * @param file The file to generate hashes for\r\n   * @param filePath The file path to store in the catalog entry\r\n   * @param hashCatalog The hash catalog to populate\r\n   * @param onError Optional error callback for handling errors\r\n   */\r\n  static async addHashesForFile(hashCatalog: HashCatalog, file: IFile, filePath: string): Promise<void> {\r\n    try {\r\n      // Complete file hash with filename included\r\n      await file.loadContent();\r\n      if (file.content !== null && file.content !== undefined) {\r\n        const fileHash = await file.getHash();\r\n\r\n        if (fileHash) {\r\n          hashCatalog[fileHash] = {\r\n            fileName: file.name,\r\n            propertyName: \"\",\r\n            filePath: filePath,\r\n          };\r\n        }\r\n      }\r\n\r\n      // Property hashes for JSON files\r\n      if (file.name.endsWith(\".json\")) {\r\n        await file.loadContent();\r\n        if (file.isString && typeof file.content === \"string\") {\r\n          try {\r\n            // Check for BOM and handle it properly\r\n            const bytes = StorageUtilities.getContentsAsBinary(file);\r\n            const hasBOM = StorageUtilities.hasUTF8ByteOrderMark(bytes);\r\n\r\n            let cleanContent = file.content;\r\n            if (hasBOM && bytes) {\r\n              // Convert back to string without BOM\r\n              const withoutBOM = bytes.slice(3); // Remove the 3-byte UTF-8 BOM\r\n              cleanContent = new TextDecoder(\"utf-8\").decode(withoutBOM);\r\n            }\r\n\r\n            // Strip comments from JSON content and parse\r\n            const fixedContent = Utilities.fixJsonContent(cleanContent);\r\n            const jsonContent = JSON.parse(fixedContent);\r\n\r\n            // Process each top-level property\r\n            for (const key in jsonContent) {\r\n              const value = jsonContent[key];\r\n\r\n              if (value !== null && !key.includes(\":\") && typeof value === \"object\") {\r\n                const stringifiedObj = JSON.stringify(value);\r\n                const stringifiedObjAndKey = stringifiedObj + key;\r\n\r\n                const propertyHash = md5.md5(stringifiedObjAndKey).toLowerCase();\r\n\r\n                hashCatalog[propertyHash] = {\r\n                  fileName: file.name,\r\n                  propertyName: key,\r\n                  filePath: filePath,\r\n                };\r\n              }\r\n            }\r\n          } catch (error) {\r\n            Log.verbose(`Skipping property hash generation for ${file.fullPath}: ${error}`);\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      Log.verbose(`Skipping property hash generation for ${file.fullPath}: ${error}`);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Standardized telemetry event names for Minecraft Creator Tools.\r\n */\r\nexport const TelemetryEvents = {\r\n  // Application lifecycle\r\n  APP_STARTED: \"AppStarted\",\r\n  APP_CLOSED: \"AppClosed\",\r\n\r\n  // Project operations\r\n  PROJECT_CREATED: \"ProjectCreated\",\r\n  PROJECT_OPENED: \"ProjectOpened\",\r\n  PROJECT_CLOSED: \"ProjectClosed\",\r\n  PROJECT_SAVED: \"ProjectSaved\",\r\n  PROJECT_EXPORTED: \"ProjectExported\",\r\n  PROJECT_IMPORTED: \"ProjectImported\",\r\n  PROJECT_DELETED: \"ProjectDeleted\",\r\n\r\n  // File operations\r\n  FILE_CREATED: \"FileCreated\",\r\n  FILE_OPENED: \"FileOpened\",\r\n  FILE_SAVED: \"FileSaved\",\r\n  FILE_DELETED: \"FileDeleted\",\r\n  FILE_RENAMED: \"FileRenamed\",\r\n\r\n  // Editor actions\r\n  EDITOR_OPENED: \"EditorOpened\",\r\n  EDITOR_CLOSED: \"EditorClosed\",\r\n  CODE_EDITED: \"CodeEdited\",\r\n  JSON_EDITED: \"JsonEdited\",\r\n\r\n  // Validation\r\n  VALIDATION_STARTED: \"ValidationStarted\",\r\n  VALIDATION_COMPLETED: \"ValidationCompleted\",\r\n  VALIDATION_ERROR: \"ValidationError\",\r\n\r\n  // Build and deployment\r\n  BUILD_STARTED: \"BuildStarted\",\r\n  BUILD_COMPLETED: \"BuildCompleted\",\r\n  BUILD_FAILED: \"BuildFailed\",\r\n  DEPLOYMENT_STARTED: \"DeploymentStarted\",\r\n  DEPLOYMENT_COMPLETED: \"DeploymentCompleted\",\r\n  DEPLOYMENT_FAILED: \"DeploymentFailed\",\r\n\r\n  // Minecraft integration\r\n  MINECRAFT_CONNECTED: \"MinecraftConnected\",\r\n  MINECRAFT_DISCONNECTED: \"MinecraftDisconnected\",\r\n  MINECRAFT_COMMAND_SENT: \"MinecraftCommandSent\",\r\n  MINECRAFT_WORLD_LOADED: \"MinecraftWorldLoaded\",\r\n\r\n  // Gallery and templates\r\n  GALLERY_OPENED: \"GalleryOpened\",\r\n  TEMPLATE_SELECTED: \"TemplateSelected\",\r\n  SAMPLE_DOWNLOADED: \"SampleDownloaded\",\r\n\r\n  // User actions\r\n  BUTTON_CLICKED: \"ButtonClicked\",\r\n  MENU_ITEM_SELECTED: \"MenuItemSelected\",\r\n  SETTING_CHANGED: \"SettingChanged\",\r\n  SEARCH_PERFORMED: \"SearchPerformed\",\r\n  ITEM_CLICKED: \"ItemClicked\",\r\n\r\n  // Project/File Management actions\r\n  SHARE_ADDON_FILE: \"ShareAddOnFile\",\r\n  PROJECT_SETTING_CHANGED: \"ProjectSettingChanged\",\r\n  CREATOR_TOOL_SETTING_CHANGED: \"CreatorToolSettingChanged\",\r\n  VIEW_CHANGED: \"ViewChanged\",\r\n  PROJECT_MAP_CLICKED: \"ProjectMapClicked\",\r\n  SHOW_FILTER_CLICKED: \"ShowFilterClicked\",\r\n  HOME_CLICKED: \"HomeClicked\",\r\n  SAVE_CLICKED: \"SaveClicked\",\r\n  EXPORT_TO_FOLDER: \"ExportToFolder\",\r\n\r\n  // Editor-specific events\r\n  ENTITY_TYPE_EDITOR_VIEW_CHANGE: \"EntityTypeEditorViewChange\",\r\n  ENTITY_TYPE_EDITOR_COMPONENT_CLICKED: \"EntityTypeEditorComponentClicked\",\r\n  ITEM_TYPE_EDITOR_VIEW_CHANGE: \"ItemTypeEditorViewChange\",\r\n  ITEM_TYPE_EDITOR_COMPONENT_CLICKED: \"ItemTypeEditorComponentClicked\",\r\n  ADD_NEW_PROJECT_ITEM: \"AddNewProjectItem\",\r\n  ITEM_ACTION: \"ItemAction\",\r\n\r\n  // Inspector events\r\n  INSPECTOR_OPENED: \"InspectorOpened\",\r\n  INSPECTOR_SUMMARY_OPENED: \"InspectorSummaryOpened\",\r\n  INSPECTOR_ITEMS_OPENED: \"InspectorItemsOpened\",\r\n  INSPECTOR_VIEW_CHANGED: \"InspectorViewChanged\",\r\n  INSPECTOR_SUITE_CHANGED: \"InspectorSuiteChanged\",\r\n\r\n  // Share events\r\n  PROJECT_SHARED: \"ProjectShared\",\r\n\r\n  // Extension (VS Code)\r\n  EXTENSION_ACTIVATED: \"ExtensionActivated\",\r\n  EXTENSION_COMMAND_EXECUTED: \"ExtensionCommandExecuted\",\r\n  CUSTOM_EDITOR_OPENED: \"CustomEditorOpened\",\r\n\r\n  // CLI operations\r\n  CLI_COMMAND_EXECUTED: \"CliCommandExecuted\",\r\n  CLI_ERROR: \"CliError\",\r\n\r\n  // Errors and exceptions\r\n  UNHANDLED_ERROR: \"UnhandledError\",\r\n  API_ERROR: \"ApiError\",\r\n  NETWORK_ERROR: \"NetworkError\",\r\n\r\n  // Performance metrics\r\n  PERFORMANCE_METRIC: \"PerformanceMetric\",\r\n  LOAD_TIME_RECORDED: \"LoadTimeRecorded\",\r\n\r\n  // File upload operations\r\n  FILE_UPLOADED: \"FileUploaded\",\r\n  FILE_DROPPED: \"FileDropped\",\r\n\r\n  // Project list operations\r\n  PROJECT_LIST_VIEWED: \"ProjectListViewed\",\r\n  BACKUP_EXPORTED: \"BackupExported\",\r\n  FOLDER_OPENED: \"FolderOpened\",\r\n\r\n  // Download operations\r\n  FLAT_WORLD_DOWNLOADED: \"FlatWorldDownloaded\",\r\n  EDITOR_PROJECT_DOWNLOADED: \"EditorProjectDownloaded\",\r\n  CUSTOM_WORLD_DOWNLOADED: \"CustomWorldDownloaded\",\r\n\r\n  // Project lifecycle\r\n  PROJECT_LOADED: \"ProjectLoaded\",\r\n} as const;\r\n\r\n/**\r\n * Property keys for consistent telemetry properties\r\n */\r\nexport const TelemetryProperties = {\r\n  // Project properties\r\n  PROJECT_TYPE: \"projectType\",\r\n  PROJECT_ID: \"projectId\",\r\n  HAS_BEHAVIOR_PACK: \"hasBehaviorPack\",\r\n  HAS_RESOURCE_PACK: \"hasResourcePack\",\r\n  HAS_SCRIPTS: \"hasScripts\",\r\n\r\n  // View properties\r\n  VIEW_CHANGE_TYPE: \"viewChangeType\",\r\n  VIEW_MODE: \"viewMode\",\r\n  PREVIOUS_VIEW: \"previousView\",\r\n\r\n  // Item properties\r\n  ITEM_ID: \"itemId\",\r\n  ITEM_TYPE: \"itemType\",\r\n  ITEM_NAME: \"itemName\",\r\n\r\n  // Export and share properties\r\n  EXPORT_TYPE: \"exportType\",\r\n  SHARE_METHOD: \"shareMethod\",\r\n  SHARE_TYPE: \"shareType\",\r\n\r\n  // Filter properties\r\n  FILTER_TYPE: \"filterType\",\r\n  FILTER_TEXT: \"filterText\",\r\n\r\n  // Setting properties\r\n  SETTING_TYPE: \"settingType\",\r\n  SETTING_VALUE: \"settingValue\",\r\n  OLD_VALUE: \"oldValue\",\r\n  NEW_VALUE: \"newValue\",\r\n\r\n  // File properties\r\n  FILE_TYPE: \"fileType\",\r\n  FILE_SIZE: \"fileSize\",\r\n  FILE_EXTENSION: \"fileExtension\",\r\n\r\n  // Action properties\r\n  ACTION_SOURCE: \"actionSource\",\r\n  ACTION_TYPE: \"actionType\",\r\n  SUCCESS: \"success\",\r\n  ERROR_MESSAGE: \"errorMessage\",\r\n  ERROR_CODE: \"errorCode\",\r\n\r\n  // User properties\r\n  IS_AUTHENTICATED: \"isAuthenticated\",\r\n\r\n  // Environment properties\r\n  OS_TYPE: \"osType\",\r\n  BROWSER_TYPE: \"browserType\",\r\n  VSCODE_VERSION: \"vscodeVersion\",\r\n  HOST_TYPE: \"hostType\",\r\n  MCTOOLS_VERSION: \"mctoolsVersion\",\r\n\r\n  // Feature flags\r\n  FEATURE_NAME: \"featureName\",\r\n  FEATURE_ENABLED: \"featureEnabled\",\r\n\r\n  // Timing\r\n  DURATION: \"duration\",\r\n  TIMESTAMP: \"timestamp\",\r\n\r\n  // Template and Gallery properties\r\n  TEMPLATE_ID: \"templateId\",\r\n  TEMPLATE_TITLE: \"templateTitle\",\r\n  SNIPPET_ID: \"snippetId\",\r\n  SNIPPET_TITLE: \"snippetTitle\",\r\n  TRACK: \"track\",\r\n  STORAGE_TYPE: \"storageType\",\r\n\r\n  // Search properties\r\n  SEARCH_QUERY: \"searchQuery\",\r\n  SEARCH_CONTEXT: \"searchContext\",\r\n  QUERY_LENGTH: \"queryLength\",\r\n\r\n  // Link properties\r\n  LINK_TYPE: \"linkType\",\r\n  LINK_URL: \"linkUrl\",\r\n\r\n  // Menu properties\r\n  MENU_ITEM: \"menuItem\",\r\n  LOCATION: \"location\",\r\n\r\n  // Setting properties\r\n  SETTING: \"setting\",\r\n\r\n  // Component properties\r\n  COMPONENT_NAME: \"componentName\",\r\n\r\n  // File upload properties\r\n  FILE_UPLOAD_METHOD: \"fileUploadMethod\",\r\n  FILE_FORMAT: \"fileFormat\",\r\n  UPLOAD_SOURCE: \"uploadSource\",\r\n\r\n  // Folder properties\r\n  FOLDER_DEPTH: \"folderDepth\",\r\n  FOLDER_TYPE: \"folderType\",\r\n\r\n  // Export/Backup properties\r\n  EXPORT_SUCCESS: \"exportSuccess\",\r\n  EXPORT_FORMAT: \"exportFormat\",\r\n\r\n  // Editor properties\r\n  EDITOR_TYPE: \"editorType\",\r\n  MODE: \"mode\",\r\n  COMPONENT_ID: \"componentId\",\r\n  ITEM_ACTION_TYPE: \"itemActionType\",\r\n  TEMPLATE: \"template\",\r\n\r\n  // List properties\r\n  PROJECT_LIST_SIZE: \"projectListSize\",\r\n  TAB_INDEX: \"tabIndex\",\r\n\r\n  // Project date properties\r\n  CREATION_DATE: \"creationDate\",\r\n  LAST_OPENED_DATE: \"lastOpenedDate\",\r\n\r\n  // Project customization properties\r\n  IS_TITLE_CUSTOMIZED: \"isTitleCustomized\",\r\n  IS_CREATOR_CUSTOMIZED: \"isCreatorCustomized\",\r\n  IS_SHORT_NAME_CUSTOMIZED: \"isShortNameCustomized\",\r\n\r\n  // File open method properties\r\n  OPEN_METHOD: \"openMethod\",\r\n\r\n  // World download properties\r\n  ADDITIONAL_PACKS_ADDED: \"additionalPacksAdded\",\r\n  BEHAVIOR_PACKS: \"behaviorPacks\",\r\n  RESOURCE_PACKS: \"resourcePacks\",\r\n  GAME_TYPE: \"gameType\",\r\n  DIFFICULTY: \"difficulty\",\r\n  WORLD_TEMPLATE_USED: \"worldTemplateUsed\",\r\n  MAP_STYLE: \"mapStyle\",\r\n  SEED: \"seed\",\r\n\r\n  // Project and validation properties\r\n  PROJECT_ITEM_COUNT: \"projectItemCount\",\r\n  INTERNAL_PROCESSING_ERROR_COUNT: \"internalProcessingErrorCount\",\r\n  ERROR_TYPES: \"errorTypes\",\r\n  SUITE_TYPE: \"suiteType\",\r\n} as const;\r\n\r\n/**\r\n * Measurement keys for numeric metrics\r\n */\r\nexport const TelemetryMeasurements = {\r\n  // Counts\r\n  FILE_COUNT: \"fileCount\",\r\n  ERROR_COUNT: \"errorCount\",\r\n  WARNING_COUNT: \"warningCount\",\r\n  LINE_COUNT: \"lineCount\",\r\n  ACTIVE_PROJECT_COUNT: \"activeProjectCount\",\r\n\r\n  // Sizes\r\n  FILE_SIZE_BYTES: \"fileSizeBytes\",\r\n  PROJECT_SIZE_BYTES: \"projectSizeBytes\",\r\n\r\n  // Timing (in milliseconds)\r\n  LOAD_TIME_MS: \"loadTimeMs\",\r\n  BUILD_TIME_MS: \"buildTimeMs\",\r\n  VALIDATION_TIME_MS: \"validationTimeMs\",\r\n  DEPLOYMENT_TIME_MS: \"deploymentTimeMs\",\r\n  DURATION: \"duration\",\r\n\r\n  // Performance\r\n  MEMORY_USAGE_MB: \"memoryUsageMb\",\r\n  CPU_USAGE_PERCENT: \"cpuUsagePercent\",\r\n} as const;\r\n\r\nexport const TelemetrySeverity = {\r\n  VERBOSE: 0,\r\n  INFORMATION: 1,\r\n  WARNING: 2,\r\n  ERROR: 3,\r\n  CRITICAL: 4,\r\n} as const;\r\n\r\nexport type TelemetryEventName = (typeof TelemetryEvents)[keyof typeof TelemetryEvents];\r\nexport type TelemetryPropertyKey = (typeof TelemetryProperties)[keyof typeof TelemetryProperties];\r\nexport type TelemetryMeasurementKey = (typeof TelemetryMeasurements)[keyof typeof TelemetryMeasurements];\r\nexport type TelemetrySeverityLevel = (typeof TelemetrySeverity)[keyof typeof TelemetrySeverity];\r\n\r\n/**\r\n * Type-safe interfaces for telemetry event properties\r\n */\r\n\r\nexport interface WorldDownloadProperties {\r\n  [TelemetryProperties.ADDITIONAL_PACKS_ADDED]?: number;\r\n  [TelemetryProperties.BEHAVIOR_PACKS]?: string;\r\n  [TelemetryProperties.RESOURCE_PACKS]?: string;\r\n  [TelemetryProperties.GAME_TYPE]?: number;\r\n  [TelemetryProperties.DIFFICULTY]?: number;\r\n  [TelemetryProperties.WORLD_TEMPLATE_USED]?: boolean;\r\n  [TelemetryProperties.MAP_STYLE]?: string | number;\r\n  [TelemetryProperties.SEED]?: string;\r\n}\r\n\r\nexport interface ProjectExportProperties {\r\n  [TelemetryProperties.EXPORT_FORMAT]?: string;\r\n  [TelemetryProperties.EXPORT_SUCCESS]?: boolean;\r\n}\r\n\r\nexport interface ProjectProperties {\r\n  [TelemetryProperties.PROJECT_TYPE]?: string;\r\n  [TelemetryProperties.PROJECT_ID]?: string;\r\n  [TelemetryProperties.HAS_BEHAVIOR_PACK]?: boolean;\r\n  [TelemetryProperties.HAS_RESOURCE_PACK]?: boolean;\r\n  [TelemetryProperties.HAS_SCRIPTS]?: boolean;\r\n  [TelemetryProperties.PROJECT_ITEM_COUNT]?: number;\r\n}\r\n\r\nexport interface FileProperties {\r\n  [TelemetryProperties.FILE_TYPE]?: string;\r\n  [TelemetryProperties.FILE_SIZE]?: number;\r\n  [TelemetryProperties.FILE_EXTENSION]?: string;\r\n  [TelemetryProperties.FILE_FORMAT]?: string;\r\n}\r\n\r\nexport interface EditorProperties {\r\n  [TelemetryProperties.EDITOR_TYPE]?: string;\r\n  [TelemetryProperties.MODE]?: string;\r\n  [TelemetryProperties.COMPONENT_ID]?: string;\r\n  [TelemetryProperties.COMPONENT_NAME]?: string;\r\n}\r\n\r\nexport interface ViewProperties {\r\n  [TelemetryProperties.VIEW_CHANGE_TYPE]?: string;\r\n  [TelemetryProperties.VIEW_MODE]?: string;\r\n  [TelemetryProperties.PREVIOUS_VIEW]?: string;\r\n}\r\n\r\nexport interface ActionProperties {\r\n  [TelemetryProperties.ACTION_SOURCE]?: string;\r\n  [TelemetryProperties.ACTION_TYPE]?: string;\r\n  [TelemetryProperties.SUCCESS]?: boolean;\r\n  [TelemetryProperties.ERROR_MESSAGE]?: string;\r\n  [TelemetryProperties.ERROR_CODE]?: string;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Telemetry service that wraps 1DS ApplicationInsights instance.\r\n *\r\n * Telemetry is ONLY enabled when both conditions are met:\r\n *   1. ENABLE_ANALYTICS is set to true at compile time (only for mctools.dev production builds)\r\n *   2. The 1DS SDK has been initialized and exposed as window.oneDSInstance (by site.js)\r\n *\r\n * All other environments (local dev, CLI, Electron, VS Code extension, CLI-served web)\r\n * will never send telemetry because ENABLE_ANALYTICS is false at compile time.\r\n */\r\n\r\nimport type { OneDSApplicationInsights } from \"../types/oneds\";\r\nimport type {\r\n  TelemetryEventName,\r\n  TelemetryPropertyKey,\r\n  TelemetryMeasurementKey,\r\n  TelemetrySeverityLevel,\r\n} from \"./TelemetryConstants\";\r\nimport { TelemetryProperties, TelemetryMeasurements } from \"./TelemetryConstants\";\r\nimport { constants } from \"../core/Constants\";\r\n\r\n/**\r\n * Telemetry event with strict type checking\r\n * Only accepts predefined event names, property keys, and measurement keys\r\n */\r\nexport interface TelemetryEvent {\r\n  name: TelemetryEventName;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nexport interface TelemetryException {\r\n  exception: Error;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  severityLevel?: TelemetrySeverityLevel;\r\n}\r\n\r\nexport interface TelemetryPageView {\r\n  name: string;\r\n  uri?: string;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nclass TelemetryService {\r\n  private _isInitialized: boolean = false;\r\n  private _oneDSInstance: OneDSApplicationInsights | null = null;\r\n  private _activeProjectCount: number = 0;\r\n  private _mctoolsVersion: string = \"0.0.1-dev\";\r\n  private window: typeof globalThis = globalThis;\r\n\r\n  /**\r\n   * Whether telemetry is allowed by the compile-time ENABLE_ANALYTICS flag.\r\n   * This is the primary gate \u2014 if false, no telemetry methods will do anything.\r\n   */\r\n  // @ts-ignore - ENABLE_ANALYTICS is injected by webpack and vite configs\r\n  private _analyticsAllowed: boolean = typeof ENABLE_ANALYTICS !== \"undefined\" && ENABLE_ANALYTICS === true;\r\n\r\n  constructor() {\r\n    if (this._analyticsAllowed) {\r\n      this._checkInitialization();\r\n    }\r\n    this._loadVersion();\r\n  }\r\n\r\n  /**\r\n   * Load the version from constants\r\n   */\r\n  private _loadVersion(): void {\r\n    this._mctoolsVersion = constants.version;\r\n  }\r\n\r\n  /**\r\n   * Set the active project count\r\n   */\r\n  public setActiveProjectCount(count: number): void {\r\n    this._activeProjectCount = count;\r\n  }\r\n\r\n  /**\r\n   * Get common properties and measurements to include with every event\r\n   */\r\n  private _getCommonPropertiesAndMeasurements(): {\r\n    properties: Partial<Record<TelemetryPropertyKey, any>>;\r\n    measurements: Partial<Record<TelemetryMeasurementKey, number>>;\r\n  } {\r\n    const properties: Partial<Record<TelemetryPropertyKey, any>> = {};\r\n    const measurements: Partial<Record<TelemetryMeasurementKey, number>> = {};\r\n\r\n    if (this._mctoolsVersion) {\r\n      properties[TelemetryProperties.MCTOOLS_VERSION] = this._mctoolsVersion;\r\n    }\r\n\r\n    if (this._activeProjectCount > 0) {\r\n      measurements[TelemetryMeasurements.ACTIVE_PROJECT_COUNT] = this._activeProjectCount;\r\n    }\r\n\r\n    return { properties, measurements };\r\n  }\r\n\r\n  /**\r\n   * Check if 1DS is initialized and available on the window object\r\n   */\r\n  private _checkInitialization(): void {\r\n    if (typeof this.window !== \"undefined\" && (this.window as any).oneDSInstance) {\r\n      this._oneDSInstance = (this.window as any).oneDSInstance;\r\n      this._isInitialized = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get the 1DS instance, checking initialization if not already done.\r\n   * Returns null immediately if ENABLE_ANALYTICS is false at compile time.\r\n   */\r\n  private _getInstance(): OneDSApplicationInsights | null {\r\n    if (!this._analyticsAllowed) {\r\n      return null;\r\n    }\r\n\r\n    if (!this._isInitialized) {\r\n      this._checkInitialization();\r\n    }\r\n\r\n    if (!this._isInitialized && typeof this.window !== \"undefined\" && (this.window as any).oneDSInstance) {\r\n      this._oneDSInstance = (this.window as any).oneDSInstance;\r\n      this._isInitialized = true;\r\n    }\r\n\r\n    return this._oneDSInstance;\r\n  }\r\n\r\n  /**\r\n   * Check if telemetry is enabled and available\r\n   */\r\n  public isEnabled(): boolean {\r\n    return this._getInstance() !== null;\r\n  }\r\n\r\n  /**\r\n   * Track a custom event\r\n   * Only accepts predefined event names, property keys, and measurement keys from TelemetryConstants\r\n   * @param event Event with strictly typed properties and measurements\r\n   */\r\n  public trackEvent(event: TelemetryEvent): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const eventData: any = {\r\n        name: event.name,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(event.properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        eventData.data = mergedProperties;\r\n      }\r\n\r\n      const mergedMeasurements = {\r\n        ...commonData.measurements,\r\n        ...(event.measurements || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedMeasurements).length > 0) {\r\n        eventData.measurements = mergedMeasurements;\r\n      }\r\n\r\n      instance.trackEvent(eventData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking event:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track a page view\r\n   * @param pageView Page view name and optional properties\r\n   */\r\n  public trackPageView(pageView: TelemetryPageView): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const pageViewData: any = {\r\n        name: pageView.name,\r\n        uri:\r\n          pageView.uri ||\r\n          (typeof this.window !== \"undefined\" && (this.window as any).location\r\n            ? (this.window as any).location.href\r\n            : \"\"),\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(pageView.properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        pageViewData.data = mergedProperties;\r\n      }\r\n\r\n      const mergedMeasurements = {\r\n        ...commonData.measurements,\r\n        ...(pageView.measurements || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedMeasurements).length > 0) {\r\n        pageViewData.measurements = mergedMeasurements;\r\n      }\r\n\r\n      instance.trackPageView(pageViewData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking page view:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track an exception\r\n   * @param exception Exception details\r\n   */\r\n  public trackException(exception: TelemetryException): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const exceptionData: any = {\r\n        exception: exception.exception,\r\n        severityLevel: exception.severityLevel || 3,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(exception.properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        exceptionData.data = mergedProperties;\r\n      }\r\n\r\n      instance.trackException(exceptionData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking exception:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track a metric/measurement\r\n   * @param name Metric name from TelemetryMeasurements\r\n   * @param value Metric value\r\n   * @param properties Optional properties\r\n   */\r\n  public trackMetric(\r\n    name: TelemetryMeasurementKey,\r\n    value: number,\r\n    properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const metricData: any = {\r\n        name,\r\n        average: value,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        metricData.data = mergedProperties;\r\n      }\r\n\r\n      instance.trackMetric(metricData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking metric:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track a trace/log message\r\n   * @param message Log message\r\n   * @param severityLevel Severity level\r\n   * @param properties Optional properties\r\n   */\r\n  public trackTrace(\r\n    message: string,\r\n    severityLevel?: TelemetrySeverityLevel,\r\n    properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const commonData = this._getCommonPropertiesAndMeasurements();\r\n\r\n      const traceData: any = {\r\n        message,\r\n        severityLevel: severityLevel || 1,\r\n      };\r\n\r\n      const mergedProperties = {\r\n        ...commonData.properties,\r\n        ...(properties || {}),\r\n      };\r\n\r\n      if (Object.keys(mergedProperties).length > 0) {\r\n        traceData.data = mergedProperties;\r\n      }\r\n\r\n      instance.trackTrace(traceData);\r\n    } catch (error) {\r\n      console.error(\"Error tracking trace:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Flush any pending telemetry data\r\n   */\r\n  public flush(): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (instance.flush) {\r\n        instance.flush();\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error flushing telemetry:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set authenticated user context\r\n   * @param authenticatedUserId User ID\r\n   * @param accountId Optional account ID\r\n   */\r\n  public setAuthenticatedUserContext(authenticatedUserId: string, accountId?: string): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (instance.setAuthenticatedUserContext) {\r\n        instance.setAuthenticatedUserContext(authenticatedUserId, accountId);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error setting authenticated user context:\", error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clear authenticated user context\r\n   */\r\n  public clearAuthenticatedUserContext(): void {\r\n    const instance = this._getInstance();\r\n    if (!instance) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (instance.clearAuthenticatedUserContext) {\r\n        instance.clearAuthenticatedUserContext();\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error clearing authenticated user context:\", error);\r\n    }\r\n  }\r\n}\r\n\r\n// Export singleton instance as default\r\nexport default new TelemetryService();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Database from \"../minecraft/Database\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport { IProjectInfoTopicData, IProjectUpdaterReference } from \"./IProjectInfoGeneratorBase\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\n/**\r\n * Utility class for managing info generator topic data from form.json files.\r\n * Topic metadata (titles, descriptions, updaters) is stored in form.json files\r\n * in the public/data/forms/mctoolsval/ folder, with each generator having its own form file.\r\n */\r\nexport default class InfoGeneratorTopicUtilities {\r\n  private static _topicFormsByGeneratorId: { [generatorId: string]: IFormDefinition | null | undefined } = {};\r\n  private static _loadingPromises: { [generatorId: string]: Promise<IFormDefinition | null> } = {};\r\n\r\n  /**\r\n   * Gets topic data for a specific generator and topic ID from form.json files.\r\n   * Returns undefined if no form file exists for the generator or if the topic is not found.\r\n   * @param generatorId The ID of the generator (e.g., \"CADDONREQ\", \"MCFUNCTION\")\r\n   * @param topicId The numeric topic ID (typically from an enum like 101, 102, etc.)\r\n   * @returns The topic data including title and optional updaters, or undefined if not found\r\n   */\r\n  static async getTopicData(generatorId: string, topicId: number): Promise<IProjectInfoTopicData | undefined> {\r\n    const form = await this.ensureFormLoaded(generatorId);\r\n\r\n    if (!form) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.getTopicDataFromForm(form, topicId);\r\n  }\r\n\r\n  /**\r\n   * Gets topic data synchronously from already-loaded form data.\r\n   * Returns undefined if the form hasn't been loaded yet or if the topic is not found.\r\n   * @param generatorId The ID of the generator\r\n   * @param topicId The numeric topic ID\r\n   * @returns The topic data or undefined\r\n   */\r\n  static getTopicDataSync(generatorId: string, topicId: number): IProjectInfoTopicData | undefined {\r\n    const normalizedId = generatorId.toLowerCase();\r\n    const form = this._topicFormsByGeneratorId[normalizedId];\r\n\r\n    if (!form || form === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.getTopicDataFromForm(form, topicId);\r\n  }\r\n\r\n  /**\r\n   * Extracts topic data from a form definition for a given topic ID.\r\n   * For summary items (topicId 0 or 1), returns the form's root title/description if no specific field is found.\r\n   */\r\n  private static getTopicDataFromForm(form: IFormDefinition, topicId: number): IProjectInfoTopicData | undefined {\r\n    if (!form.fields) {\r\n      // If no fields but we have form-level title, return it for summary items\r\n      if ((topicId === 0 || topicId === 1) && form.title) {\r\n        return {\r\n          title: form.title,\r\n          description: form.description,\r\n        };\r\n      }\r\n      return undefined;\r\n    }\r\n\r\n    const topicIdStr = topicId.toString();\r\n\r\n    for (const field of form.fields) {\r\n      if (field.id === topicIdStr) {\r\n        const result: IProjectInfoTopicData = {\r\n          title: field.title || Utilities.humanifyJsName(field.id || \"\"),\r\n        };\r\n\r\n        // Extract description, howToUse, and technicalDescription if present\r\n        if (field.description) {\r\n          result.description = field.description;\r\n        }\r\n        if (field.howToUse) {\r\n          result.howToUse = field.howToUse;\r\n        }\r\n        if (field.technicalDescription) {\r\n          result.technicalDescription = field.technicalDescription;\r\n        }\r\n        // Extract suggestedLineToken for diagnostic line location hints\r\n        if (field.suggestedLineToken) {\r\n          result.suggestedLineToken = field.suggestedLineToken;\r\n        }\r\n        // Extract suggestedLineShouldHaveData for data-based line matching\r\n        if (field.suggestedLineShouldHaveData) {\r\n          result.suggestedLineShouldHaveData = field.suggestedLineShouldHaveData;\r\n        }\r\n\r\n        // Extract updaters from field metadata if present\r\n        if (field.matchedValues && Array.isArray(field.matchedValues)) {\r\n          const updaters: IProjectUpdaterReference[] = [];\r\n          for (const val of field.matchedValues) {\r\n            if (val && typeof val === \"object\" && \"updaterId\" in val) {\r\n              updaters.push(val as IProjectUpdaterReference);\r\n            }\r\n          }\r\n          if (updaters.length > 0) {\r\n            result.updaters = updaters;\r\n          }\r\n        }\r\n\r\n        return result;\r\n      }\r\n    }\r\n\r\n    // For summary items (topicId 0 or 1 - fail/success), return the form's root title if available\r\n    if ((topicId === 0 || topicId === 1) && form.title) {\r\n      return {\r\n        title: form.title,\r\n        description: form.description,\r\n      };\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Ensures that the form.json file for a generator is loaded.\r\n   * @param generatorId The ID of the generator\r\n   * @returns The form definition or undefined if not found\r\n   */\r\n  static async ensureFormLoaded(generatorId: string): Promise<IFormDefinition | undefined> {\r\n    const normalizedId = generatorId.toLowerCase();\r\n\r\n    // Check if already loaded (null means \"checked and not found\")\r\n    if (normalizedId in this._topicFormsByGeneratorId) {\r\n      return this._topicFormsByGeneratorId[normalizedId] ?? undefined;\r\n    }\r\n\r\n    // Check if currently loading\r\n    const loadingPromise = this._loadingPromises[normalizedId];\r\n    if (loadingPromise) {\r\n      const result = await loadingPromise;\r\n      return result ?? undefined;\r\n    }\r\n\r\n    // Start loading\r\n    this._loadingPromises[normalizedId] = this.loadForm(normalizedId);\r\n\r\n    const form = await this._loadingPromises[normalizedId];\r\n    // Cache result: store null for missing forms to avoid re-fetching\r\n    this._topicFormsByGeneratorId[normalizedId] = form ?? null;\r\n\r\n    delete this._loadingPromises[normalizedId];\r\n\r\n    return form ?? undefined;\r\n  }\r\n\r\n  /**\r\n   * Loads a form.json file for a generator.\r\n   */\r\n  private static async loadForm(generatorId: string): Promise<IFormDefinition | null> {\r\n    try {\r\n      const form = await Database.ensureFormLoaded(\"mctoolsval\", generatorId);\r\n      return form ?? null;\r\n    } catch {\r\n      // Form file doesn't exist for this generator - that's OK\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks if a form is loaded for a generator.\r\n   */\r\n  static isFormLoaded(generatorId: string): boolean {\r\n    return this._topicFormsByGeneratorId[generatorId.toLowerCase()] !== undefined;\r\n  }\r\n\r\n  /**\r\n   * Preloads forms for all known generators.\r\n   * This can be called at startup to ensure all forms are available synchronously later.\r\n   */\r\n  static async preloadAllForms(generatorIds: string[]): Promise<void> {\r\n    const loadPromises = generatorIds.map((id) => this.ensureFormLoaded(id));\r\n    await Promise.all(loadPromises);\r\n  }\r\n\r\n  /**\r\n   * Clears all cached forms. Useful for testing or hot-reloading.\r\n   */\r\n  static clearCache(): void {\r\n    this._topicFormsByGeneratorId = {};\r\n    this._loadingPromises = {};\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IParticleEffectWrapper } from \"./IParticleEffect\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Project from \"../app/Project\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IProjectItemRelationship from \"../app/IProjectItemRelationship\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class ParticleEffectResourceDefinition {\r\n  private _data?: IParticleEffectWrapper;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<ParticleEffectResourceDefinition, ParticleEffectResourceDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data || !this._data.particle_effect || !this._data.particle_effect.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.particle_effect.description.identifier;\r\n  }\r\n\r\n  public get description() {\r\n    if (!this._data || !this._data.particle_effect || !this._data.particle_effect.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.particle_effect.description;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (\r\n      !this.description ||\r\n      !this.description.basic_render_parameters ||\r\n      !this.description.basic_render_parameters.texture\r\n    ) {\r\n      return undefined;\r\n    }\r\n\r\n    const result = TextureDefinition.canonicalizeTexturePath(this.description.basic_render_parameters.texture);\r\n\r\n    return result ? [result] : [];\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return fv[0] > 1 || fv[1] >= 10;\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  get formatVersion() {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.format_version;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<ParticleEffectResourceDefinition, ParticleEffectResourceDefinition>\r\n  ) {\r\n    let et: ParticleEffectResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new ParticleEffectResourceDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ParticleEffectResourceDefinition) {\r\n      et = file.manager as ParticleEffectResourceDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"PERPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(rel: IProjectItemRelationship) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    if (\r\n      !this.description ||\r\n      !this.description.basic_render_parameters ||\r\n      !this.description.basic_render_parameters.texture\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const basicTexture = this.description.basic_render_parameters.texture;\r\n\r\n    if (rel.childItem.itemType === ProjectItemType.texture) {\r\n      if (!rel.childItem.isContentLoaded) {\r\n        await rel.childItem.loadContent();\r\n      }\r\n\r\n      if (rel.childItem.primaryFile && packRootFolder) {\r\n        let relativePath = StorageUtilities.getBaseRelativePath(rel.childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          if (basicTexture === relativePath) {\r\n            this.description.basic_render_parameters.texture = undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"particles\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n\r\n    // Textures still need path-based matching (no ID-based index possible)\r\n    if (packRootFolder && textureList && textureList.length > 0) {\r\n      const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n      for (const candItem of textureItems) {\r\n        if (candItem.primaryFile) {\r\n          let relativePath = StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        const isVanillaToken = await Database.isVanillaToken(texturePath);\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanillaToken);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IFogResource from \"./IFogResource\";\r\n\r\nexport default class FogResourceDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: IFogResource;\r\n\r\n  private _onLoaded = new EventDispatcher<FogResourceDefinition, FogResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = {};\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<FogResourceDefinition, FogResourceDefinition>) {\r\n    let rbd: FogResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new FogResourceDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FogResourceDefinition) {\r\n      rbd = file.manager as FogResourceDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IRecipeBehavior, { IRecipeShaped, IRecipeShapeless } from \"./IRecipeBehavior\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\n\r\nexport default class RecipeBehaviorDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: IRecipeBehavior;\r\n  private _interior?: IRecipeShaped | IRecipeShapeless;\r\n\r\n  private _onLoaded = new EventDispatcher<RecipeBehaviorDefinition, RecipeBehaviorDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public set data(newData: IRecipeBehavior | undefined) {\r\n    this._data = newData;\r\n\r\n    if (this._data && this._data[\"minecraft:recipe_shaped\"]) {\r\n      this._interior = this._data[\"minecraft:recipe_shaped\"];\r\n    } else if (this._data && this._data[\"minecraft:recipe_shapeless\"]) {\r\n      this._interior = this._data[\"minecraft:recipe_shapeless\"];\r\n    } else {\r\n      this._interior = undefined;\r\n    }\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._interior && this._interior.description && this._interior.description.identifier) {\r\n      return this._interior.description.identifier;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    if (this._interior && this._interior.description) {\r\n      this._interior.description.identifier = newId;\r\n    }\r\n\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !this._data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._data.format_version);\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      this._data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {};\r\n    }\r\n  }\r\n\r\n  async addChildItems(project: Project, recipeItem: ProjectItem, index?: RelationsIndex) {\r\n    const dependentItemIds: string[] = [];\r\n\r\n    // Collect all item IDs that this recipe depends on\r\n    if (this._interior) {\r\n      const ingredientsArray = (this._interior as any).ingredients;\r\n\r\n      // For shapeless recipes, collect ingredients\r\n      if (ingredientsArray && Array.isArray(ingredientsArray)) {\r\n        for (const ingredient of ingredientsArray) {\r\n          if (ingredient && ingredient.item) {\r\n            dependentItemIds.push(ingredient.item);\r\n          }\r\n        }\r\n      }\r\n\r\n      // For shaped recipes, collect key items\r\n      if (\"key\" in this._interior && this._interior.key) {\r\n        for (const keyItem of Object.values(this._interior.key)) {\r\n          if (keyItem && keyItem.item) {\r\n            dependentItemIds.push(keyItem.item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check each dependent item ID against project items\r\n    for (const dependentItemId of dependentItemIds) {\r\n      let foundMatch = false;\r\n\r\n      // Use index for O(1) lookup when available\r\n      if (index) {\r\n        const matchingItems = index.getItemsById(index.itemTypesById, dependentItemId);\r\n        if (matchingItems.length > 0) {\r\n          for (const matchItem of matchingItems) {\r\n            recipeItem.addChildItem(matchItem);\r\n          }\r\n          foundMatch = true;\r\n        }\r\n      } else {\r\n        const itemTypeItems = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n        for (const candItem of itemTypeItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const itd = await ItemTypeDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (itd && itd.id === dependentItemId) {\r\n              recipeItem.addChildItem(candItem);\r\n              foundMatch = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // If no matching item type was found, add as unfulfilled relationship\r\n      if (!foundMatch) {\r\n        recipeItem.addUnfulfilledRelationship(dependentItemId, ProjectItemType.itemTypeBehavior, false);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<RecipeBehaviorDefinition, RecipeBehaviorDefinition>\r\n  ) {\r\n    let rbd: RecipeBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      rbd = new RecipeBehaviorDefinition();\r\n\r\n      rbd.file = file;\r\n\r\n      file.manager = rbd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof RecipeBehaviorDefinition) {\r\n      rbd = file.manager as RecipeBehaviorDefinition;\r\n\r\n      if (!rbd.isLoaded) {\r\n        if (loadHandler) {\r\n          rbd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await rbd.load();\r\n      }\r\n    }\r\n\r\n    return rbd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport ISpawnRulesBehavior, { ISpawnRulesInner } from \"./ISpawnRulesBehavior\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport EntityTypeDefinition from \"./EntityTypeDefinition\";\r\n\r\nexport default class SpawnRulesBehaviorDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: ISpawnRulesBehavior;\r\n  public dataInner?: ISpawnRulesInner;\r\n\r\n  private _onLoaded = new EventDispatcher<SpawnRulesBehaviorDefinition, SpawnRulesBehaviorDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n\r\n    if (this.dataInner && this.dataInner.description && newId) {\r\n      this.dataInner.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this.data || !this.data.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this.data.format_version);\r\n  }\r\n\r\n  setFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this.data) {\r\n      this.data.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = { \"minecraft:spawn_rules\": { description: { identifier: this._id ? this._id : \"\" } } };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<SpawnRulesBehaviorDefinition, SpawnRulesBehaviorDefinition>\r\n  ) {\r\n    let srb: SpawnRulesBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      srb = new SpawnRulesBehaviorDefinition();\r\n\r\n      srb.file = file;\r\n\r\n      file.manager = srb;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SpawnRulesBehaviorDefinition) {\r\n      srb = file.manager as SpawnRulesBehaviorDefinition;\r\n\r\n      if (!srb.isLoaded) {\r\n        if (loadHandler) {\r\n          srb.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await srb.load();\r\n      }\r\n    }\r\n\r\n    return srb;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    if (!this.id) {\r\n      return;\r\n    }\r\n\r\n    let foundMatch = false;\r\n\r\n    if (index) {\r\n      // Use pre-built index for O(1) lookup\r\n      const matchingEntities = index.getItemsById(index.entityBehaviorsById, this.id);\r\n      foundMatch = matchingEntities.length > 0;\r\n    } else {\r\n      // Fallback: scan entity behaviors\r\n      const entityBehaviorItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n\r\n      for (const candItem of entityBehaviorItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const entityType = await EntityTypeDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (entityType) {\r\n            const entityId = entityType.id;\r\n\r\n            if (entityId === this.id) {\r\n              foundMatch = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // If no matching entity type was found, add as unfulfilled relationship\r\n    if (!foundMatch) {\r\n      const isVanilla = await Database.isVanillaToken(this.id);\r\n      item.addUnfulfilledRelationship(this.id, ProjectItemType.entityTypeBehavior, isVanilla);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this.dataInner = this.data?.[\"minecraft:spawn_rules\"];\r\n\r\n    if (this.dataInner && this.dataInner.description) {\r\n      this._id = this.dataInner.description.identifier;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * CrossReferenceIndexGenerator - Indexes cross-file references into ContentIndex\r\n *\r\n * ARCHITECTURE:\r\n * This generator populates the ContentIndex trie with annotated entries for all\r\n * content types that can be referenced across files. This data powers autocomplete\r\n * suggestions in both Monaco (web editor) and VS Code.\r\n *\r\n * REFERENCE TYPES INDEXED:\r\n * - Geometry identifiers (from .geo.json files)\r\n * - Animation identifiers (from animation files)\r\n * - Animation controller identifiers\r\n * - Render controller identifiers\r\n * - Particle identifiers\r\n * - Fog identifiers\r\n * - Sound event names (from sound_definitions.json)\r\n * - Loot table paths\r\n * - Recipe identifiers\r\n * - Biome identifiers\r\n * - Spawn rule identifiers\r\n * - Dialogue paths\r\n * - Function paths (.mcfunction files)\r\n * - Structure paths\r\n *\r\n * TYPES ALREADY INDEXED ELSEWHERE (not duplicated here):\r\n * - Entity IDs \u2192 TypesInfoGenerator (AnnotationCategory.entityTypeSource)\r\n * - Block IDs \u2192 TypesInfoGenerator (AnnotationCategory.blockTypeSource)\r\n * - Item IDs \u2192 TypesInfoGenerator (AnnotationCategory.itemTypeSource)\r\n * - Feature IDs \u2192 TypesInfoGenerator (AnnotationCategory.featureSource)\r\n * - Texture file paths \u2192 TextureInfoGenerator (AnnotationCategory.textureFile)\r\n *\r\n * RELATED FILES:\r\n * - ContentIndex.ts \u2014 The trie data structure and AnnotationCategory enum\r\n * - TypesInfoGenerator.ts \u2014 Indexes entity, block, item, feature IDs\r\n * - TextureInfoGenerator.ts \u2014 Indexes texture file paths\r\n * - langcore/json/CrossReferenceCompletionSource.ts \u2014 Queries this data for completions\r\n *\r\n * Last updated: February 2026\r\n */\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AnimationBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationControllerBehaviorDefinition\";\r\nimport RenderControllerSetDefinition from \"../minecraft/RenderControllerSetDefinition\";\r\nimport ParticleEffectResourceDefinition from \"../minecraft/ParticleEffectResourceDefinition\";\r\nimport FogResourceDefinition from \"../minecraft/FogResourceDefinition\";\r\nimport RecipeBehaviorDefinition from \"../minecraft/RecipeBehaviorDefinition\";\r\nimport BiomeBehaviorDefinition from \"../minecraft/BiomeBehaviorDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"../minecraft/SoundDefinitionCatalogDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\n\r\nexport default class CrossReferenceIndexGenerator implements IProjectInfoGenerator {\r\n  id = \"CROSSREFINDEX\";\r\n  title = \"Cross-Reference Index\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(_info: any, _infoSet: ProjectInfoSet) {\r\n    // No summary needed \u2014 this generator only populates the content index\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      const path = projectItem.projectPath;\r\n      if (!path) {\r\n        continue;\r\n      }\r\n\r\n      switch (projectItem.itemType) {\r\n        case ProjectItemType.modelGeometryJson:\r\n          await this.indexGeometry(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationResourceJson:\r\n          await this.indexAnimationResource(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationBehaviorJson:\r\n          await this.indexAnimationBehavior(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationControllerResourceJson:\r\n          await this.indexAnimationControllerResource(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.animationControllerBehaviorJson:\r\n          await this.indexAnimationControllerBehavior(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.renderControllerJson:\r\n          await this.indexRenderController(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.particleJson:\r\n          await this.indexParticle(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.fogResourceJson:\r\n          await this.indexFog(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.soundDefinitionCatalog:\r\n          await this.indexSoundDefinitions(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.lootTableBehavior:\r\n          this.indexLootTable(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.recipeBehavior:\r\n          await this.indexRecipe(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.biomeBehavior:\r\n          await this.indexBiome(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.spawnRuleBehavior:\r\n          await this.indexSpawnRule(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.dialogueBehaviorJson:\r\n          this.indexDialogue(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.MCFunction:\r\n          this.indexFunction(projectItem, contentIndex, path);\r\n          break;\r\n\r\n        case ProjectItemType.structure:\r\n          this.indexStructure(projectItem, contentIndex, path);\r\n          break;\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private async indexGeometry(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const modGeo = await ModelGeometryDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (modGeo && modGeo.identifiers) {\r\n        for (const geoId of modGeo.identifiers) {\r\n          contentIndex.insert(geoId, path, AnnotationCategory.geometrySource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationResource(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const animDef = await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (animDef && animDef.animations) {\r\n        for (const animName in animDef.animations) {\r\n          contentIndex.insert(animName, path, AnnotationCategory.animationSource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationBehavior(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const animDef = await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (animDef) {\r\n        const data = animDef.data;\r\n        if (data && data.animations) {\r\n          for (const animName in data.animations) {\r\n            contentIndex.insert(animName, path, AnnotationCategory.animationSource);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationControllerResource(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const acDef = await AnimationControllerResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (acDef && acDef.idList) {\r\n        for (const acId of acDef.idList) {\r\n          contentIndex.insert(acId, path, AnnotationCategory.animationControllerSource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexAnimationControllerBehavior(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const acDef = await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (acDef) {\r\n        const data = acDef.data;\r\n        if (data && data.animation_controllers) {\r\n          for (const acId in data.animation_controllers) {\r\n            contentIndex.insert(acId, path, AnnotationCategory.animationControllerSource);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexRenderController(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const rcDef = await RenderControllerSetDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (rcDef && rcDef.idList) {\r\n        for (const rcId of rcDef.idList) {\r\n          contentIndex.insert(rcId, path, AnnotationCategory.renderControllerSource);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexParticle(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const particleDef = await ParticleEffectResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (particleDef && particleDef.id) {\r\n        contentIndex.insert(particleDef.id, path, AnnotationCategory.particleSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexFog(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const fogDef = await FogResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (fogDef && fogDef.id) {\r\n        contentIndex.insert(fogDef.id, path, AnnotationCategory.fogSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexSoundDefinitions(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const soundDef = await SoundDefinitionCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (soundDef) {\r\n        const soundNames = soundDef.getSoundDefinitionSetNameList();\r\n        if (soundNames) {\r\n          for (const soundName of soundNames) {\r\n            contentIndex.insert(soundName, path, AnnotationCategory.soundEventSource);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private indexLootTable(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Loot tables are referenced by their path relative to the pack root\r\n    // e.g., \"loot_tables/entities/zombie.json\"\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const lootTablesIdx = normalizedPath.indexOf(\"loot_tables/\");\r\n    if (lootTablesIdx >= 0) {\r\n      const lootPath = normalizedPath.substring(lootTablesIdx);\r\n      contentIndex.insert(lootPath, path, AnnotationCategory.lootTableSource);\r\n    }\r\n  }\r\n\r\n  private async indexRecipe(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const recipeDef = await RecipeBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (recipeDef && recipeDef.id) {\r\n        contentIndex.insert(recipeDef.id, path, AnnotationCategory.recipeSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexBiome(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const biomeDef = await BiomeBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (biomeDef && biomeDef.id) {\r\n        contentIndex.insert(biomeDef.id, path, AnnotationCategory.biomeSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async indexSpawnRule(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.primaryFile) {\r\n      const spawnDef = await SpawnRulesBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n      if (spawnDef && spawnDef.id) {\r\n        contentIndex.insert(spawnDef.id, path, AnnotationCategory.spawnRuleSource);\r\n      }\r\n    }\r\n  }\r\n\r\n  private indexDialogue(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Dialogues are referenced by their scene tag, but we index path as well\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const baseName = StorageUtilities.getBaseFromName(normalizedPath);\r\n    if (baseName) {\r\n      contentIndex.insert(baseName, path, AnnotationCategory.dialogueSource);\r\n    }\r\n  }\r\n\r\n  private indexFunction(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Functions are referenced by path relative to functions/ folder, without extension\r\n    // e.g., \"my_function\" from \"functions/my_function.mcfunction\"\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const functionsIdx = normalizedPath.indexOf(\"functions/\");\r\n    if (functionsIdx >= 0) {\r\n      let funcPath = normalizedPath.substring(functionsIdx + \"functions/\".length);\r\n      // Remove .mcfunction extension\r\n      if (funcPath.endsWith(\".mcfunction\")) {\r\n        funcPath = funcPath.substring(0, funcPath.length - \".mcfunction\".length);\r\n      }\r\n      contentIndex.insert(funcPath, path, AnnotationCategory.functionSource);\r\n    }\r\n  }\r\n\r\n  private indexStructure(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    path: string\r\n  ) {\r\n    // Structures are referenced by namespace:name format or by path\r\n    const normalizedPath = path.replace(/\\\\/g, \"/\");\r\n    const structuresIdx = normalizedPath.indexOf(\"structures/\");\r\n    if (structuresIdx >= 0) {\r\n      let structPath = normalizedPath.substring(structuresIdx + \"structures/\".length);\r\n      // Remove .mcstructure extension\r\n      if (structPath.endsWith(\".mcstructure\")) {\r\n        structPath = structPath.substring(0, structPath.length - \".mcstructure\".length);\r\n      }\r\n      contentIndex.insert(structPath, path, AnnotationCategory.structureSource);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport MinecraftAggregateFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftAggregateFeature\";\r\nimport MinecraftBeardsAndShavers from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftBeardsAndShavers\";\r\nimport MinecraftCaveCarverFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftCaveCarverFeature\";\r\nimport MinecraftFossilFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftFossilFeature\";\r\nimport MinecraftGeodeFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftGeodeFeature\";\r\nimport MinecraftGrowingPlantFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftGrowingPlantFeature\";\r\nimport MinecraftMultifaceFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftMultifaceFeature\";\r\nimport MinecraftNetherCaveCarverFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftNetherCaveCarverFeature\";\r\nimport MinecraftOreFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftOreFeature\";\r\nimport MinecraftPartiallyExposedBlobFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftPartiallyExposedBlobFeature\";\r\nimport MinecraftRectLayout from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftRectLayout\";\r\nimport MinecraftScanSurface from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftScanSurface\";\r\nimport MinecraftScatterFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftScatterFeature\";\r\nimport MinecraftSculkPatchFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSculkPatchFeature\";\r\nimport MinecraftSearchFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSearchFeature\";\r\nimport MinecraftSequenceFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSequenceFeature\";\r\nimport MinecraftSingleBlockFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSingleBlockFeature\";\r\nimport MinecraftSnapToSurfaceFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSnapToSurfaceFeature\";\r\nimport MinecraftStructureTemplateFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftStructureTemplateFeature\";\r\nimport MinecraftSurfaceRelativeThresholdFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftSurfaceRelativeThresholdFeature\";\r\nimport MinecraftTreeFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftTreeFeature\";\r\nimport MinecraftUnderwaterCaveCarverFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftUnderwaterCaveCarverFeature\";\r\nimport MinecraftVegetationPatchFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftVegetationPatchFeature\";\r\nimport MinecraftWeightedRandomFeature from \"@minecraft/bedrock-schemas/types/bp/features/MinecraftWeightedRandomFeature\";\r\nimport MinecraftFeatureBase from \"./jsoncommon/MinecraftFeatureBase\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport const FeatureTypes = [\r\n  \"aggregate_feature\",\r\n  \"beards_and_shavers\",\r\n  \"cave_carver_feature\",\r\n  \"conditional_list\",\r\n  \"fossil_feature\",\r\n  \"geode_feature\",\r\n  \"growing_plant_feature\",\r\n  \"multiface_feature\",\r\n  \"nether_cave_carver_feature\",\r\n  \"ore_feature\",\r\n  \"partially_exposed_blob_feature\",\r\n  \"rect_layout\",\r\n  \"scan_surface\",\r\n  \"scatter_feature\",\r\n  \"sculk_patch_feature\",\r\n  \"search_feature\",\r\n  \"sequence_feature\",\r\n  \"single_block_feature\",\r\n  \"snap_to_surface_feature\",\r\n  \"structure_template_feature\",\r\n  \"surface_relative_threshold_feature\",\r\n  \"tree_feature\",\r\n  \"underwater_cave_carver_feature\",\r\n  \"vegetation_patch_feature\",\r\n  \"weighted_random_feature\",\r\n];\r\n\r\nexport default class FeatureDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?:\r\n    | MinecraftAggregateFeature\r\n    | MinecraftBeardsAndShavers\r\n    | MinecraftCaveCarverFeature\r\n    | MinecraftFossilFeature\r\n    | MinecraftGeodeFeature\r\n    | MinecraftGrowingPlantFeature\r\n    | MinecraftMultifaceFeature\r\n    | MinecraftNetherCaveCarverFeature\r\n    | MinecraftOreFeature\r\n    | MinecraftPartiallyExposedBlobFeature\r\n    | MinecraftRectLayout\r\n    | MinecraftScanSurface\r\n    | MinecraftScatterFeature\r\n    | MinecraftSculkPatchFeature\r\n    | MinecraftSearchFeature\r\n    | MinecraftSequenceFeature\r\n    | MinecraftSingleBlockFeature\r\n    | MinecraftSnapToSurfaceFeature\r\n    | MinecraftStructureTemplateFeature\r\n    | MinecraftSurfaceRelativeThresholdFeature\r\n    | MinecraftTreeFeature\r\n    | MinecraftUnderwaterCaveCarverFeature\r\n    | MinecraftVegetationPatchFeature\r\n    | MinecraftWeightedRandomFeature\r\n    | MinecraftFeatureBase;\r\n\r\n  private _onLoaded = new EventDispatcher<FeatureDefinition, FeatureDefinition>();\r\n\r\n  public get typeString() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const typeStr of FeatureTypes) {\r\n      if ((this._data as any)[\"minecraft:\" + typeStr] !== undefined) {\r\n        return typeStr;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !(this._data as MinecraftFeatureBase).format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom((this._data as MinecraftFeatureBase).format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      (this._data as MinecraftFeatureBase).format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.21.0\",\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<FeatureDefinition, FeatureDefinition>) {\r\n    let fd: FeatureDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      fd = new FeatureDefinition();\r\n\r\n      fd.file = file;\r\n\r\n      file.manager = fd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FeatureDefinition) {\r\n      fd = file.manager as FeatureDefinition;\r\n\r\n      if (!fd.isLoaded) {\r\n        if (loadHandler) {\r\n          fd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await fd.load();\r\n      }\r\n    }\r\n\r\n    return fd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"FDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    // Extract the identifier from the feature description\r\n    // Features can be of different types, so we check all known feature types\r\n    if (this._data) {\r\n      for (const typeStr of FeatureTypes) {\r\n        const featureData = (this._data as any)[\"minecraft:\" + typeStr];\r\n        if (featureData?.description?.identifier) {\r\n          this._id = featureData.description.identifier;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Extracts all feature identifiers that this feature references/depends on.\r\n   * Different feature types reference other features in different ways:\r\n   * - aggregate_feature, sequence_feature: features[] array of strings\r\n   * - weighted_random_feature: features[] array of [featureId, weight] tuples\r\n   * - scatter_feature, search_feature, beards_and_shavers: places_feature string\r\n   * - conditional_list: conditional_features[] array of objects with places_feature\r\n   * - snap_to_surface_feature: feature_to_snap string\r\n   * - surface_relative_threshold_feature: feature_to_place string\r\n   * - vegetation_patch_feature: vegetation_feature string\r\n   */\r\n  getReferencedFeatureIds(): string[] {\r\n    if (!this._data) {\r\n      return [];\r\n    }\r\n\r\n    const referencedFeatures: string[] = [];\r\n\r\n    // Check each possible feature type and extract references\r\n    for (const typeStr of FeatureTypes) {\r\n      const featureData = (this._data as any)[\"minecraft:\" + typeStr];\r\n      if (!featureData) {\r\n        continue;\r\n      }\r\n\r\n      // aggregate_feature and sequence_feature: features[] is an array of feature IDs\r\n      if (typeStr === \"aggregate_feature\" || typeStr === \"sequence_feature\") {\r\n        if (Array.isArray(featureData.features)) {\r\n          for (const feature of featureData.features) {\r\n            if (typeof feature === \"string\") {\r\n              referencedFeatures.push(feature);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // weighted_random_feature: features[] is an array of [featureId, weight] tuples\r\n      else if (typeStr === \"weighted_random_feature\") {\r\n        if (Array.isArray(featureData.features)) {\r\n          for (const feature of featureData.features) {\r\n            if (Array.isArray(feature) && feature.length >= 1 && typeof feature[0] === \"string\") {\r\n              referencedFeatures.push(feature[0]);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // scatter_feature, search_feature, beards_and_shavers: places_feature is a string\r\n      else if (typeStr === \"scatter_feature\" || typeStr === \"search_feature\" || typeStr === \"beards_and_shavers\") {\r\n        if (typeof featureData.places_feature === \"string\") {\r\n          referencedFeatures.push(featureData.places_feature);\r\n        }\r\n      }\r\n      // conditional_list: conditional_features[] is an array of objects with places_feature\r\n      else if (typeStr === \"conditional_list\") {\r\n        if (Array.isArray(featureData.conditional_features)) {\r\n          for (const condFeature of featureData.conditional_features) {\r\n            if (condFeature && typeof condFeature.places_feature === \"string\") {\r\n              referencedFeatures.push(condFeature.places_feature);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // snap_to_surface_feature: feature_to_snap is a string\r\n      else if (typeStr === \"snap_to_surface_feature\") {\r\n        if (typeof featureData.feature_to_snap === \"string\") {\r\n          referencedFeatures.push(featureData.feature_to_snap);\r\n        }\r\n      }\r\n      // surface_relative_threshold_feature: feature_to_place is a string\r\n      else if (typeStr === \"surface_relative_threshold_feature\") {\r\n        if (typeof featureData.feature_to_place === \"string\") {\r\n          referencedFeatures.push(featureData.feature_to_place);\r\n        }\r\n      }\r\n      // vegetation_patch_feature: vegetation_feature is a string\r\n      else if (typeStr === \"vegetation_patch_feature\") {\r\n        if (typeof featureData.vegetation_feature === \"string\") {\r\n          referencedFeatures.push(featureData.vegetation_feature);\r\n        }\r\n      }\r\n    }\r\n\r\n    return referencedFeatures;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    const referencedFeatureIds = this.getReferencedFeatureIds();\r\n\r\n    if (referencedFeatureIds.length === 0) {\r\n      return;\r\n    }\r\n\r\n    for (const featureId of referencedFeatureIds) {\r\n      let foundMatch = false;\r\n\r\n      // Use index for O(1) lookup when available\r\n      if (index) {\r\n        const matchingItems = index.getItemsById(index.featureBehaviorsById, featureId);\r\n        if (matchingItems.length > 0) {\r\n          for (const matchItem of matchingItems) {\r\n            item.addChildItem(matchItem);\r\n          }\r\n          foundMatch = true;\r\n        }\r\n      } else {\r\n        const featureItems = project.getItemsByType(ProjectItemType.featureBehavior);\r\n\r\n        // Look for matching feature items in the project\r\n        for (const candItem of featureItems) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const featureDef = await FeatureDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (featureDef) {\r\n              const candFeatureId = featureDef.id;\r\n\r\n              if (candFeatureId === featureId) {\r\n                item.addChildItem(candItem);\r\n                foundMatch = true;\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // If no matching feature was found, add as unfulfilled relationship\r\n      if (!foundMatch) {\r\n        const isVanilla = await Database.isVanillaToken(featureId);\r\n        item.addUnfulfilledRelationship(featureId, ProjectItemType.featureBehavior, isVanilla);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\n\r\nexport enum TypesInfoGeneratorTest {\r\n  types = 101,\r\n}\r\n\r\n/**\r\n * Aggregates content type information (entities, blocks, items) from the project.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/types.form.json} for topic definitions\r\n */\r\nexport default class TypesInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TYPES\";\r\n  title = \"Types Info Aggregation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedDataValue(this.id, TypesInfoGeneratorTest.types);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const typesCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TypesInfoGeneratorTest.types,\r\n      \"Types\"\r\n    );\r\n    items.push(typesCountPi);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const etd = await EntityTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (etd && etd.id && projectItem.projectPath) {\r\n            contentIndex.insert(etd.id, projectItem.projectPath, AnnotationCategory.entityTypeSource);\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.blockTypeBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockTypeDef = await BlockTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockTypeDef && blockTypeDef.id && projectItem.projectPath) {\r\n            contentIndex.insert(blockTypeDef.id, projectItem.projectPath, AnnotationCategory.blockTypeSource);\r\n\r\n            let colon = blockTypeDef.id.indexOf(\":\");\r\n\r\n            if (colon >= 0) {\r\n              contentIndex.insert(\r\n                blockTypeDef.id.substring(colon + 1),\r\n                projectItem.projectPath,\r\n                AnnotationCategory.blockTypeSource\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockCatalog = await BlocksCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockCatalog && projectItem.projectPath && blockCatalog.blocksCatalog) {\r\n            for (const name in blockCatalog.blocksCatalog) {\r\n              let adjustedName = name;\r\n\r\n              let colon = adjustedName.indexOf(\":\");\r\n\r\n              if (colon < 0 && project.isVanillaSourceProject) {\r\n                adjustedName = \"minecraft:\" + adjustedName;\r\n\r\n                contentIndex.insert(adjustedName, projectItem.projectPath, AnnotationCategory.blockTypeSource);\r\n              }\r\n\r\n              contentIndex.insert(name, projectItem.projectPath, AnnotationCategory.blockTypeSource);\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const itemTypeDef = await ItemTypeDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (itemTypeDef && itemTypeDef.id && projectItem.projectPath) {\r\n            contentIndex.insert(itemTypeDef.id, projectItem.projectPath, AnnotationCategory.itemTypeSource);\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.featureBehavior) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const featureDef = await FeatureDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (featureDef && featureDef.id && projectItem.projectPath) {\r\n            contentIndex.insert(featureDef.id, projectItem.projectPath, AnnotationCategory.featureSource);\r\n\r\n            // Also index without namespace prefix for easier lookup\r\n            let colon = featureDef.id.indexOf(\":\");\r\n            if (colon >= 0) {\r\n              contentIndex.insert(\r\n                featureDef.id.substring(colon + 1),\r\n                projectItem.projectPath,\r\n                AnnotationCategory.featureSource\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n * ==========================================================================================\r\n * PROJECTINFOSET - VALIDATION SYSTEM NOTES\r\n * ==========================================================================================\r\n *\r\n * OVERVIEW:\r\n * ---------\r\n * ProjectInfoSet is the central hub for project validation. It aggregates results from\r\n * multiple \"info generators\" that check different aspects of a project for errors,\r\n * warnings, recommendations, and informational items. It also coordinates \"updaters\"\r\n * that can automatically fix certain issues.\r\n *\r\n * VALIDATION ARCHITECTURE:\r\n * ------------------------\r\n *\r\n *   ProjectInfoSet\r\n *        \u2502\r\n *        \u251C\u2500\u2500 IProjectInfoGenerator[] \u2500\u2500\u2500 Checks whole project (e.g., script versions)\r\n *        \u251C\u2500\u2500 IProjectItemInfoGenerator[] \u2500\u2500\u2500 Checks individual items (e.g., entity format)\r\n *        \u2514\u2500\u2500 IProjectFileInfoGenerator[] \u2500\u2500\u2500 Checks specific files\r\n *\r\n *   Each generator produces ProjectInfoItem[] with:\r\n *   - itemType: error, warning, recommendation, info, testPass, testFail\r\n *   - generatorId: Which generator produced it (e.g., \"SCRIPTMOD\", \"FORMATVER\")\r\n *   - generatorIndex: Specific test within generator\r\n *   - message: Human-readable description\r\n *   - projectItem: Optional link to affected ProjectItem\r\n *   - data: Optional structured data for tooling\r\n *\r\n * See registered info generators in GeneratorRegistrations.ts.\r\n *\r\n * VALIDATION SUITES (ProjectInfoSuite):\r\n * -------------------------------------\r\n * Suites determine which generators run:\r\n * - defaultInDevelopment: Most generators except sharing-specific\r\n * - cooperativeAddOn: Marketplace add-on specific checks\r\n * - sharing: Checks for content to be shared\r\n * - sharingStrict: Sharing + additional strictness\r\n * - currentPlatformVersions: Version compatibility checks\r\n *\r\n * KEY METHODS:\r\n * ------------\r\n * - generateForProject(): Run all matching generators, populate items[]\r\n * - matchesSuite(): Check if generator applies to current suite\r\n * - getCountByType() / getSummaryByType(): Query results\r\n * - errorFailWarnCount: Quick error/warning count\r\n *\r\n * UPDATERS:\r\n * ---------\r\n * Some generators provide IProjectUpdater implementations:\r\n * - Can automatically fix issues (e.g., update script module versions)\r\n * - Accessed via generator.getUpdaters() method\r\n * - Applied via ProjectUpdateRunner, the implementation of which shadows ProjectInfoSet.\r\n *\r\n * AGGREGATION:\r\n * ------------\r\n * - info: IProjectInfo object with aggregated statistics\r\n * - itemsByStoragePath: Quick lookup by file path\r\n * - contentIndex: ContentIndex for text search across results\r\n *\r\n * GENERATOR OPTIONS:\r\n * ------------------\r\n * IGeneratorOptions controls generator behavior:\r\n * - performAggressiveCleanup: Release memory after processing (CLI mode)\r\n *   Set false when data needed later (e.g., world map rendering)\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IProjectInfoGenerator.ts: Generator interface\r\n * - ProjectInfoItem.ts: Individual validation result\r\n * - GeneratorRegistrations.ts: Generator registry\r\n * - ProjectUpdateRunner.ts: Applies updaters\r\n * - IInfoItemData.ts: Serialized info item format\r\n *\r\n * ==========================================================================================\r\n */\r\n\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport Project, { ProjectErrorState } from \"./../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport IProjectItemInfoGenerator from \"./IProjectItemInfoGenerator\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport IProjectInfo from \"./IProjectInfo\";\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IInfoItemData, { InfoItemType } from \"./IInfoItemData\";\r\nimport IProjectInfoGeneratorBase, { IProjectInfoTopicData } from \"./IProjectInfoGeneratorBase\";\r\nimport IProjectInfoData, { ProjectInfoSuite } from \"./IProjectInfoData\";\r\nimport { constants } from \"../core/Constants\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport GeneratorRegistrations, { TestsToExcludeFromDefaultSuite } from \"./registration/GeneratorRegistrations\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport IProjectMetaState from \"./IProjectMetaState\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport SummaryInfoGenerator from \"./SummaryInfoGenerator\";\r\nimport HashUtilities from \"../core/HashUtilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport telemetryService from \"../analytics/Telemetry\";\r\nimport { TelemetryEvents, TelemetryProperties } from \"../analytics/TelemetryConstants\";\r\nimport InfoGeneratorTopicUtilities from \"./InfoGeneratorTopicUtilities\";\r\nimport CrossReferenceIndexGenerator from \"./CrossReferenceIndexGenerator\";\r\nimport TypesInfoGenerator from \"./TypesInfoGenerator\";\r\n\r\nconst ItemBatchSize = 500;\r\n\r\n/**\r\n * Controls how aggressively generators should constrain resource consumption.\r\n * Use this to balance between thoroughness and performance/memory usage.\r\n */\r\nexport enum ResourceConsumptionConstraint {\r\n  /** No constraints - process all data regardless of resource usage */\r\n  none = 0,\r\n  /** Medium constraints - apply reasonable limits to prevent excessive resource usage */\r\n  medium = 5,\r\n}\r\n\r\n/**\r\n * Options passed to info generators to control their behavior.\r\n */\r\nexport interface IGeneratorOptions {\r\n  /**\r\n   * When true, generators may perform aggressive memory cleanup operations\r\n   * after processing (e.g., clearing LevelDB data, chunk caches).\r\n   * This is appropriate for fire-and-forget contexts like CLI validation,\r\n   * but should be false when the data may be needed by other components\r\n   * (e.g., world map rendering in the browser).\r\n   */\r\n  performAggressiveCleanup?: boolean;\r\n\r\n  /**\r\n   * Controls how aggressively generators should limit resource consumption.\r\n   * When set to .medium, generators may apply limits like MaxWorldRecordsToProcess\r\n   * to prevent excessive memory or time usage on large datasets.\r\n   * When set to .none, no such limits are applied.\r\n   * Defaults to .medium if not specified.\r\n   */\r\n  constrainResourceConsumption?: ResourceConsumptionConstraint;\r\n\r\n  /**\r\n   * Optional callback for reporting progress during generation.\r\n   * Generators can call this to provide granular progress updates,\r\n   * especially for long-running operations like world data validation.\r\n   * @param message - A descriptive message about the current operation\r\n   * @param percentComplete - Optional percentage (0-100) of completion\r\n   */\r\n  onProgress?: (message: string, percentComplete?: number) => void;\r\n}\r\n\r\nexport default class ProjectInfoSet {\r\n  project?: Project;\r\n  suite: ProjectInfoSuite;\r\n  info: IProjectInfo;\r\n  items: ProjectInfoItem[] = [];\r\n  itemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined } = {};\r\n  contentIndex: ContentIndex;\r\n  performAggressiveCleanup: boolean = false;\r\n  constrainResourceConsumption: ResourceConsumptionConstraint = ResourceConsumptionConstraint.medium;\r\n\r\n  static _generatorsById: { [name: string]: IProjectInfoGenerator } = {};\r\n  _isGenerating: boolean = false;\r\n  _completedGeneration: boolean = false;\r\n  _excludeTests?: string[];\r\n  private _pendingGenerateRequests: ((value: unknown) => void)[] = [];\r\n\r\n  static CommonCsvHeader = \"Test,TestId,Type,Item,Message,Data,Path\";\r\n\r\n  static getSuiteFromString(suiteName: string) {\r\n    switch (suiteName.toLowerCase()) {\r\n      case \"addon\":\r\n      case \"addons\":\r\n        return ProjectInfoSuite.cooperativeAddOn;\r\n\r\n      case \"sharing\":\r\n        return ProjectInfoSuite.sharing;\r\n\r\n      case \"sharingstrict\":\r\n        return ProjectInfoSuite.sharingStrict;\r\n\r\n      case \"currentplatform\":\r\n        return ProjectInfoSuite.currentPlatformVersions;\r\n\r\n      default:\r\n        return ProjectInfoSuite.defaultInDevelopment; // default is all infogenerators except cooperative add-on and sharing\r\n    }\r\n  }\r\n\r\n  static getSuiteString(suite: ProjectInfoSuite) {\r\n    switch (suite) {\r\n      case ProjectInfoSuite.sharing:\r\n        return \"sharing\";\r\n\r\n      case ProjectInfoSuite.sharingStrict:\r\n        return \"sharingstrict\";\r\n\r\n      case ProjectInfoSuite.cooperativeAddOn:\r\n        return \"addon\";\r\n\r\n      case ProjectInfoSuite.currentPlatformVersions:\r\n        return \"currentplatform\";\r\n\r\n      default:\r\n        return \"all\";\r\n    }\r\n  }\r\n\r\n  get completedGeneration() {\r\n    return this._completedGeneration;\r\n  }\r\n\r\n  /**\r\n   * Mark generation as complete. Used when results are provided externally\r\n   * (e.g., from a web worker).\r\n   */\r\n  async markGenerationCompleteAsync() {\r\n    this._completedGeneration = true;\r\n    this._isGenerating = false;\r\n\r\n    // Build the itemsByStoragePath index from items array\r\n    this._rebuildItemsByStoragePath();\r\n\r\n    // Aggregate features from info items (needed for summary display)\r\n    this.aggregateFeatures();\r\n\r\n    // Build contentIndex from project files.\r\n    // The web worker path doesn't populate the contentIndex (it only streams\r\n    // validation items), so we must build it on the main thread.\r\n    this._buildContentIndexFromProject();\r\n\r\n    // Populate cross-reference and type annotations in the contentIndex.\r\n    // These are normally populated by generators running in the worker,\r\n    // but the worker's ContentIndex is not transferred back.\r\n    await this._populateContentIndexAnnotationsAsync();\r\n  }\r\n\r\n  /**\r\n   * Runs lightweight annotation-producing generators against the contentIndex.\r\n   * This populates cross-reference annotations (geometry IDs, animation names,\r\n   * entity/block/item types, etc.) that power autocomplete suggestions.\r\n   *\r\n   * Called after _buildContentIndexFromProject() in the web worker path,\r\n   * since the worker's ContentIndex (with all annotations) is not transferred back.\r\n   * The project files are already loaded in memory, so this runs quickly.\r\n   */\r\n  private async _populateContentIndexAnnotationsAsync() {\r\n    if (!this.project || !this.contentIndex) {\r\n      return;\r\n    }\r\n\r\n    // CrossReferenceIndexGenerator: geometry, animation, animation controller,\r\n    // render controller, particle, fog, sound, loot table, recipe, biome,\r\n    // spawn rule, dialogue, function, structure annotations\r\n    const crossRefGen = new CrossReferenceIndexGenerator();\r\n    await crossRefGen.generate(this.project, this.contentIndex);\r\n\r\n    // TypesInfoGenerator: entity, block, item, feature type annotations\r\n    const typesGen = new TypesInfoGenerator();\r\n    await typesGen.generate(this.project, this.contentIndex);\r\n    // Note: generate() returns info items which we discard here \u2014\r\n    // we already have the info items from the worker stream.\r\n  }\r\n\r\n  /**\r\n   * Populates the contentIndex by scanning all project items and their files.\r\n   * This is needed when the info set was generated via a web worker, which\r\n   * doesn't build or transfer the content index.\r\n   */\r\n  private _buildContentIndexFromProject() {\r\n    if (!this.project) {\r\n      return;\r\n    }\r\n\r\n    const ci = new ContentIndex();\r\n    ci.iteration = new Date().getTime();\r\n\r\n    for (const projectItem of this.project.items) {\r\n      if (!projectItem.projectPath) {\r\n        continue;\r\n      }\r\n\r\n      const file = projectItem.defaultFile;\r\n\r\n      if (file) {\r\n        const fileName = file.name;\r\n\r\n        ci.insert(StorageUtilities.getBaseFromName(fileName), projectItem.projectPath);\r\n        ci.insert(file.storageRelativePath, projectItem.projectPath);\r\n\r\n        if (file.content && typeof file.content === \"string\") {\r\n          const fileExtension = StorageUtilities.getTypeFromName(fileName);\r\n\r\n          switch (fileExtension) {\r\n            case \"json\":\r\n              ci.parseJsonContent(projectItem.projectPath, file.content);\r\n              break;\r\n            case \"ts\":\r\n            case \"js\":\r\n            case \"mjs\":\r\n              ci.parseJsContent(projectItem.projectPath, file.content);\r\n              break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.contentIndex = ci;\r\n  }\r\n\r\n  /**\r\n   * Rebuilds the itemsByStoragePath index from the items array.\r\n   * This is needed when items are set externally (e.g., from a web worker).\r\n   */\r\n  private _rebuildItemsByStoragePath() {\r\n    this.itemsByStoragePath = {};\r\n\r\n    for (const item of this.items) {\r\n      if (item.projectItem) {\r\n        const path = item.projectItem.projectPath;\r\n        if (path && typeof path === \"string\") {\r\n          if (!this.itemsByStoragePath[path]) {\r\n            this.itemsByStoragePath[path] = [];\r\n          }\r\n          this.itemsByStoragePath[path]?.push(item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  get errorAndFailCount() {\r\n    let count = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (\r\n        item.itemType === InfoItemType.error ||\r\n        item.itemType === InfoItemType.internalProcessingError ||\r\n        item.itemType === InfoItemType.testCompleteFail\r\n      ) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  get errorFailWarnCount() {\r\n    let count = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (\r\n        item.itemType === InfoItemType.error ||\r\n        item.itemType === InfoItemType.warning ||\r\n        item.itemType === InfoItemType.internalProcessingError ||\r\n        item.itemType === InfoItemType.testCompleteFail\r\n      ) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  get errorFailWarnString() {\r\n    let str: string[] = [];\r\n\r\n    for (const item of this.items) {\r\n      if (\r\n        item.itemType === InfoItemType.error ||\r\n        item.itemType === InfoItemType.warning ||\r\n        item.itemType === InfoItemType.internalProcessingError ||\r\n        item.itemType === InfoItemType.testCompleteFail\r\n      ) {\r\n        str.push(item.toString());\r\n      }\r\n    }\r\n\r\n    return str.join(\"\\n\");\r\n  }\r\n\r\n  constructor(\r\n    project?: Project,\r\n    suite?: ProjectInfoSuite,\r\n    excludeTests?: string[],\r\n    info?: IProjectInfo,\r\n    items?: IInfoItemData[],\r\n    index?: ContentIndex,\r\n    performAggressiveCleanup?: boolean\r\n  ) {\r\n    this.project = project;\r\n    this.info = info ? info : {};\r\n    this.contentIndex = index ? index : new ContentIndex();\r\n    this.performAggressiveCleanup = performAggressiveCleanup ?? false;\r\n\r\n    if (items) {\r\n      for (const item of items) {\r\n        let projectItem = undefined;\r\n\r\n        if (item.p) {\r\n          if (project) {\r\n            projectItem = project.getItemByProjectPath(item.p);\r\n          }\r\n\r\n          if (!this.itemsByStoragePath[item.p]) {\r\n            this.itemsByStoragePath[item.p] = [];\r\n          }\r\n\r\n          let projectInfoItem = new ProjectInfoItem(\r\n            item.iTp,\r\n            item.gId,\r\n            item.gIx,\r\n            item.m,\r\n            projectItem,\r\n            item.d,\r\n            item.iId,\r\n            item.c,\r\n            item.p\r\n          );\r\n\r\n          this.itemsByStoragePath[item.p]?.push(projectInfoItem);\r\n          this.items.push(projectInfoItem);\r\n        } else {\r\n          this.items.push(\r\n            new ProjectInfoItem(item.iTp, item.gId, item.gIx, item.m, projectItem, item.d, item.iId, item.c)\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    if (suite) {\r\n      this.suite = suite;\r\n    } else {\r\n      this.suite = ProjectInfoSuite.defaultInDevelopment;\r\n    }\r\n\r\n    if (index) {\r\n      if (info) {\r\n        for (const key in info) {\r\n          const val = (info as any)[key];\r\n\r\n          if (val && typeof val === \"string\") {\r\n            if (ProjectInfoSet.isAggregableFieldName(key)) {\r\n              index.parseTextContent(\"inspector\", val);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (excludeTests) {\r\n      const excludeTestList = [];\r\n\r\n      for (const excludeTest of excludeTests) {\r\n        const vals = excludeTest.trim().split(\",\");\r\n\r\n        for (const val of vals) {\r\n          const valD = val.toUpperCase().trim();\r\n\r\n          if (valD.length > 0) {\r\n            excludeTestList.push(valD);\r\n          }\r\n        }\r\n      }\r\n\r\n      this._excludeTests = excludeTestList;\r\n    }\r\n  }\r\n\r\n  static getTopicData(id: string, index: number): IProjectInfoTopicData | undefined {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    // First, try to get topic data from form.json file (synchronously if already loaded)\r\n    const formTopicData = InfoGeneratorTopicUtilities.getTopicDataSync(id, index);\r\n    if (formTopicData) {\r\n      return formTopicData;\r\n    }\r\n\r\n    // Fall back to generator's getTopicData method if available\r\n    const gen = ProjectInfoSet._generatorsById[id];\r\n\r\n    if (gen && typeof (gen as IProjectInfoGeneratorBase).getTopicData === \"function\") {\r\n      return (gen as IProjectInfoGeneratorBase).getTopicData!(index);\r\n    }\r\n\r\n    for (const gen of GeneratorRegistrations.projectGenerators) {\r\n      if (gen.id === id) {\r\n        this._generatorsById[id] = gen;\r\n\r\n        if (typeof (gen as IProjectInfoGeneratorBase).getTopicData === \"function\") {\r\n          return (gen as IProjectInfoGeneratorBase).getTopicData!(index);\r\n        }\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private static _getLineLocationFromIndex(content: string, index: number) {\r\n    const lineNumber = content.substring(0, index).split(\"\\n\").length;\r\n    const lastLineBreak = content.lastIndexOf(\"\\n\", index - 1);\r\n    const column = index - (lastLineBreak + 1) + 1;\r\n    return { lineNumber, column };\r\n  }\r\n\r\n  static async findLineLocationForItem(\r\n    content: string,\r\n    item: ProjectInfoItem\r\n  ): Promise<{ lineNumber: number; column: number } | undefined> {\r\n    if (!content) {\r\n      return undefined;\r\n    }\r\n\r\n    const directMatch = (matchText: string | undefined) => {\r\n      if (!matchText) {\r\n        return undefined;\r\n      }\r\n\r\n      const index = content.indexOf(matchText);\r\n      if (index >= 0) {\r\n        return ProjectInfoSet._getLineLocationFromIndex(content, index);\r\n      }\r\n\r\n      return undefined;\r\n    };\r\n\r\n    const contentLocation = directMatch(item.content);\r\n    if (contentLocation) {\r\n      return contentLocation;\r\n    }\r\n\r\n    if (typeof item.data === \"string\") {\r\n      const normalizedData = item.data.startsWith(\"Relevant line: \")\r\n        ? item.data.substring(\"Relevant line: \".length)\r\n        : item.data;\r\n      const dataLocation = directMatch(normalizedData);\r\n      if (dataLocation) {\r\n        return dataLocation;\r\n      }\r\n    }\r\n\r\n    if (item.generatorId) {\r\n      try {\r\n        const topicData = await InfoGeneratorTopicUtilities.getTopicData(item.generatorId, item.generatorIndex);\r\n        if (topicData?.suggestedLineToken) {\r\n          const token = topicData.suggestedLineToken;\r\n          const escapedToken = token.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n          if (topicData.suggestedLineShouldHaveData && item.data) {\r\n            const dataStr = String(item.data);\r\n            const escapedData = dataStr.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n            const combinedPattern = new RegExp(\r\n              `\"${escapedToken}\"[^\\\\n]*${escapedData}|${escapedData}[^\\\\n]*\"${escapedToken}\"`,\r\n              \"i\"\r\n            );\r\n            const combinedMatch = content.match(combinedPattern);\r\n            if (combinedMatch && combinedMatch.index !== undefined) {\r\n              return ProjectInfoSet._getLineLocationFromIndex(content, combinedMatch.index);\r\n            }\r\n          }\r\n\r\n          const tokenPattern = new RegExp(`\"${escapedToken}\"\\\\s*:\\\\s*[^,}\\\\]]+`, \"i\");\r\n          const match = content.match(tokenPattern);\r\n          if (match && match.index !== undefined) {\r\n            return ProjectInfoSet._getLineLocationFromIndex(content, match.index);\r\n          }\r\n\r\n          const simpleIndex = content.indexOf(`\"${token}\"`);\r\n          if (simpleIndex >= 0) {\r\n            return ProjectInfoSet._getLineLocationFromIndex(content, simpleIndex);\r\n          }\r\n        }\r\n      } catch {\r\n        // Ignore errors loading topic data\r\n      }\r\n    }\r\n\r\n    if (item.generatorId === \"FORMATVER\" || item.generatorId?.includes(\"FORMAT\")) {\r\n      const versionPattern = /\"format_version\"\\s*:\\s*\"[^\"]+\"/i;\r\n      const match = content.match(versionPattern);\r\n      if (match && match.index !== undefined) {\r\n        return ProjectInfoSet._getLineLocationFromIndex(content, match.index);\r\n      }\r\n    }\r\n\r\n    if (item.generatorId === \"ENTITYTYPE\" || item.generatorId === \"BLOCKTYPE\" || item.generatorId === \"ITEMTYPE\") {\r\n      const identifierPattern = /\"identifier\"\\s*:\\s*\"[^\"]+\"/;\r\n      const match = content.match(identifierPattern);\r\n      if (match && match.index !== undefined) {\r\n        return ProjectInfoSet._getLineLocationFromIndex(content, match.index);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getCountByType(itemType: InfoItemType) {\r\n    let count = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (item.itemType === itemType) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  getSummaryByType(itemType: InfoItemType) {\r\n    let str: string[] = [];\r\n\r\n    for (const item of this.items) {\r\n      if (str.length < 15 && item.itemType === itemType) {\r\n        str.push(item.toString());\r\n      }\r\n    }\r\n\r\n    return str.join(\"\\n\");\r\n  }\r\n\r\n  matchesSuite(\r\n    generator: IProjectFileInfoGenerator | IProjectInfoGenerator | IProjectItemInfoGenerator | IProjectInfoGeneratorBase\r\n  ) {\r\n    if (\r\n      this.suite === ProjectInfoSuite.defaultInDevelopment &&\r\n      !TestsToExcludeFromDefaultSuite.includes(generator.id)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.sharing || this.suite === ProjectInfoSuite.sharingStrict) {\r\n      if (generator.id === \"SHARING\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.sharingStrict) {\r\n      if (generator.id === \"LANGFILES\" || generator.id === \"VANDUPES\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.currentPlatformVersions) {\r\n      if (\r\n        generator.id === \"MINENGINEVER\" ||\r\n        generator.id === \"BASEGAMEVER\" ||\r\n        generator.id === \"FORMATVER\" ||\r\n        generator.id === \"WORLDDATA\" ||\r\n        generator.id === \"CHKMANIF\"\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    if (this.suite === ProjectInfoSuite.cooperativeAddOn) {\r\n      if (\r\n        generator.id.indexOf(\"CADDON\") >= 0 ||\r\n        generator.id === \"PACKSIZE\" ||\r\n        generator.id === \"STRICT\" ||\r\n        generator.id === \"TEXTURE\" ||\r\n        generator.id === \"MINENGINEVER\" ||\r\n        generator.id === \"WORLDDATA\"\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Generate info items for the project.\r\n   * @param force If true, regenerate even if already completed.\r\n   * @param skipRelationsProcessing If true, skip the processRelations call (useful when relations\r\n   *        have already been processed, e.g., in a combined worker operation).\r\n   * @param onProgress Optional callback for progress updates (useful for worker thread communication).\r\n   */\r\n  async generateForProject(\r\n    force?: boolean,\r\n    skipRelationsProcessing?: boolean,\r\n    onProgress?: (message: string, percentComplete?: number) => void\r\n  ) {\r\n    if (force === true && this._completedGeneration) {\r\n      this._completedGeneration = false;\r\n      this._isGenerating = false;\r\n    }\r\n\r\n    if (this._completedGeneration) {\r\n      return;\r\n    }\r\n\r\n    if (!skipRelationsProcessing) {\r\n      await this.project?.processRelations();\r\n    }\r\n\r\n    if (this._isGenerating) {\r\n      const pendingGenerate = this._pendingGenerateRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingGenerate.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isGenerating = true;\r\n      const generationStartTime = Date.now();\r\n\r\n      if (!this.project) {\r\n        Log.throwUnexpectedUndefined(\"PISGFP\");\r\n        return;\r\n      }\r\n\r\n      let baseValidationMessage = \"Validating '\" + this.project.simplifiedName + \"'\";\r\n\r\n      const valOperId = await this.project?.creatorTools.notifyOperationStarted(\r\n        baseValidationMessage + \" (0%)\",\r\n        StatusTopic.validation\r\n      );\r\n\r\n      this.info.summary = undefined;\r\n\r\n      const projGenerators: IProjectInfoGenerator[] = GeneratorRegistrations.projectGenerators;\r\n      const itemGenerators: IProjectItemInfoGenerator[] = GeneratorRegistrations.itemGenerators;\r\n      const fileGenerators: IProjectFileInfoGenerator[] = GeneratorRegistrations.fileGenerators;\r\n\r\n      const genItems: ProjectInfoItem[] = [];\r\n      const genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined } = {};\r\n      const genContentIndex = new ContentIndex();\r\n\r\n      genContentIndex.iteration = new Date().getTime();\r\n\r\n      await this.project.loc.load();\r\n      await Database.loadVanillaCatalog();\r\n\r\n      // Preload all topic forms for generators so sync lookups work\r\n      const allGeneratorIds = [\r\n        ...projGenerators.map((g) => g.id),\r\n        ...itemGenerators.map((g) => g.id),\r\n        ...fileGenerators.map((g) => g.id),\r\n      ];\r\n      await InfoGeneratorTopicUtilities.preloadAllForms(allGeneratorIds);\r\n\r\n      if (this.project?.errorState === ProjectErrorState.cabinetFileCouldNotBeProcessed) {\r\n        genItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.internalProcessingError,\r\n            \"PROJECTMETA\",\r\n            500,\r\n            this.project.simplifiedName + \": \" + this.project.errorMessage\r\n          )\r\n        );\r\n      } else {\r\n        const projectFolder = await this.project.ensureProjectFolder();\r\n\r\n        const generatorTimings: { phase: string; id: string; durationMs: number }[] = [];\r\n\r\n        const preProcessStart = Date.now();\r\n        await this.preProcessFolder(\r\n          this.project,\r\n          projectFolder,\r\n          genItems,\r\n          genItemsByStoragePath,\r\n          genContentIndex,\r\n          fileGenerators,\r\n          0\r\n        );\r\n        generatorTimings.push({\r\n          phase: \"preprocess\",\r\n          id: \"preProcessFolder\",\r\n          durationMs: Date.now() - preProcessStart,\r\n        });\r\n\r\n        for (let i = 0; i < projGenerators.length; i++) {\r\n          const gen = projGenerators[i];\r\n\r\n          if ((!this._excludeTests || !this._excludeTests.includes(gen.id)) && gen && this.matchesSuite(gen)) {\r\n            const projGenPercent = Math.floor(10 + (i / projGenerators.length) * 20); // 10-30%\r\n            await this.project?.creatorTools.notifyOperationUpdate(\r\n              valOperId,\r\n              baseValidationMessage + \" - \" + gen.title + \" (\" + projGenPercent + \"%)\",\r\n              StatusTopic.validation\r\n            );\r\n\r\n            // Send progress to worker callback if provided\r\n            if (onProgress) {\r\n              const percent = Math.floor(10 + (i / projGenerators.length) * 20); // 10-30%\r\n              onProgress(`Validating: ${gen.title}`, percent);\r\n            }\r\n\r\n            GeneratorRegistrations.configureForSuite(gen, this.suite);\r\n\r\n            try {\r\n              const genStart = Date.now();\r\n              const results = await gen.generate(this.project, genContentIndex);\r\n              generatorTimings.push({ phase: \"project\", id: gen.id, durationMs: Date.now() - genStart });\r\n\r\n              for (const item of results) {\r\n                this.pushItem(genItems, genItemsByStoragePath, item);\r\n              }\r\n            } catch (e: any) {\r\n              // V--- add a breakpoint to the line below to catch validator exceptions (1 of 3) ---V\r\n              genItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.internalProcessingError,\r\n                  gen.id,\r\n                  500,\r\n                  this.project.simplifiedName + \": \" + e.message + (e.stack ? \" (\" + e.stack + \")\" : \"\")\r\n                )\r\n              );\r\n              if (e && (!e.message || !e.message.indexOf || e.message.indexOf(\"etwork \") < 0)) {\r\n                Log.debugAlert(e);\r\n              } else {\r\n                this.project?.creatorTools.notifyStatusUpdate(\r\n                  \"Could not connect to network to retrieve resources for validation. Details: \" + e.toString()\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        const itemsCopy = this.project.getItemsCopy();\r\n        const itemGenTimings: { [id: string]: number } = {};\r\n        for (const gen of itemGenerators) {\r\n          itemGenTimings[gen.id] = 0;\r\n        }\r\n        const itemLoopStart = Date.now();\r\n\r\n        for (let i = 0; i < itemsCopy.length; i++) {\r\n          const pi = itemsCopy[i];\r\n\r\n          if (i % ItemBatchSize === ItemBatchSize - 1) {\r\n            const itemPercent = Math.floor(30 + (i / itemsCopy.length) * 50); // 30-80%\r\n            await this.project?.creatorTools.notifyOperationUpdate(\r\n              valOperId,\r\n              baseValidationMessage + \" - items (\" + itemPercent + \"%)\",\r\n              StatusTopic.validation\r\n            );\r\n\r\n            // Send progress to worker callback if provided\r\n            if (onProgress) {\r\n              onProgress(`Validating items`, itemPercent);\r\n            }\r\n          }\r\n\r\n          if (!pi.isContentLoaded) {\r\n            await pi.loadContent();\r\n          }\r\n\r\n          for (let j = 0; j < itemGenerators.length; j++) {\r\n            const gen = itemGenerators[j];\r\n\r\n            if ((!this._excludeTests || !this._excludeTests.includes(gen.id)) && this.matchesSuite(gen)) {\r\n              GeneratorRegistrations.configureForSuite(gen, this.suite);\r\n\r\n              try {\r\n                const itemGenStart = Date.now();\r\n                const results = await gen.generate(pi, genContentIndex, {\r\n                  performAggressiveCleanup: this.performAggressiveCleanup,\r\n                  constrainResourceConsumption: this.constrainResourceConsumption,\r\n                  onProgress: onProgress,\r\n                });\r\n                itemGenTimings[gen.id] += Date.now() - itemGenStart;\r\n\r\n                for (const item of results) {\r\n                  this.pushItem(genItems, genItemsByStoragePath, item);\r\n                }\r\n              } catch (e: any) {\r\n                // V--- add a breakpoint to the line below to catch validator exceptions (2 of 3) ---V\r\n                genItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.internalProcessingError,\r\n                    gen.id,\r\n                    501,\r\n                    \"IP2:\" + this.project.simplifiedName + \": \" + e.toString()\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        generatorTimings.push({ phase: \"items-loop\", id: \"allItemGenerators\", durationMs: Date.now() - itemLoopStart });\r\n        for (const gen of itemGenerators) {\r\n          if (itemGenTimings[gen.id] > 0) {\r\n            generatorTimings.push({ phase: \"item\", id: gen.id, durationMs: itemGenTimings[gen.id] });\r\n          }\r\n        }\r\n\r\n        const processFolderStart = Date.now();\r\n        await this.processFolder(\r\n          this.project,\r\n          projectFolder,\r\n          genItems,\r\n          genItemsByStoragePath,\r\n          genContentIndex,\r\n          fileGenerators,\r\n          0\r\n        );\r\n        generatorTimings.push({\r\n          phase: \"postprocess\",\r\n          id: \"processFolder\",\r\n          durationMs: Date.now() - processFolderStart,\r\n        });\r\n\r\n        // Log timing breakdown\r\n        generatorTimings.sort((a, b) => b.durationMs - a.durationMs);\r\n        const totalValidationMs = Date.now() - generationStartTime;\r\n        Log.verbose(`[Validation] Total validation time: ${totalValidationMs}ms`);\r\n        Log.verbose(`[Validation] Top generators by time:`);\r\n        for (const t of generatorTimings.slice(0, 20)) {\r\n          Log.verbose(`[Validation]   ${t.phase.padEnd(12)} ${t.id.padEnd(45)} ${t.durationMs}ms`);\r\n        }\r\n      }\r\n\r\n      await this.project?.creatorTools.notifyOperationUpdate(\r\n        valOperId,\r\n        baseValidationMessage + \" - finishing (95%)\",\r\n        StatusTopic.validation\r\n      );\r\n\r\n      this.addTestSummations(genItems, genItemsByStoragePath, projGenerators, this._excludeTests);\r\n      this.addTestSummations(genItems, genItemsByStoragePath, itemGenerators, this._excludeTests);\r\n      this.addTestSummations(genItems, genItemsByStoragePath, fileGenerators, this._excludeTests);\r\n\r\n      genItems.sort((a: ProjectInfoItem, b: ProjectInfoItem) => {\r\n        if (a.generatorId !== b.generatorId) {\r\n          return Utilities.staticCompare(a.generatorId, b.generatorId);\r\n        }\r\n\r\n        if (a.generatorIndex !== b.generatorIndex) {\r\n          return a.generatorIndex - b.generatorIndex;\r\n        }\r\n\r\n        const aPath = a.projectItemPath;\r\n        const bPath = b.projectItemPath;\r\n\r\n        if (aPath !== bPath && aPath && bPath) {\r\n          return Utilities.staticCompare(aPath, bPath);\r\n        }\r\n\r\n        if (aPath !== bPath && aPath) {\r\n          return 1;\r\n        }\r\n\r\n        if (aPath !== bPath && bPath) {\r\n          return -1;\r\n        }\r\n\r\n        if (a.message !== b.message && a.message && b.message) {\r\n          return Utilities.staticCompare(a.message, b.message);\r\n        }\r\n\r\n        if (a.message !== b.message && a.message) {\r\n          return 1;\r\n        }\r\n\r\n        if (a.message !== b.message && b.message) {\r\n          return -1;\r\n        }\r\n\r\n        if (a.data !== b.data && a.data && b.data && typeof b.data === \"string\" && typeof a.data === \"string\") {\r\n          return Utilities.staticCompare(a.data, b.data);\r\n        }\r\n\r\n        if (a.data !== b.data && a.data) {\r\n          return 1;\r\n        }\r\n\r\n        if (a.data !== b.data && b.data) {\r\n          return -1;\r\n        }\r\n\r\n        return 0;\r\n      });\r\n\r\n      this.items = genItems;\r\n\r\n      this.itemsByStoragePath = genItemsByStoragePath;\r\n      this.contentIndex = genContentIndex;\r\n\r\n      this._completedGeneration = true;\r\n\r\n      this.generateProjectMetaInfo();\r\n\r\n      const pendingLoad = this._pendingGenerateRequests;\r\n      this._pendingGenerateRequests = [];\r\n\r\n      this.info.errorCount = this.getCountByType(InfoItemType.error);\r\n      this.info.internalProcessingErrorCount = this.getCountByType(InfoItemType.internalProcessingError);\r\n      this.info.warningCount = this.getCountByType(InfoItemType.warning);\r\n      this.info.testSuccessCount = this.getCountByType(InfoItemType.testCompleteSuccess);\r\n      this.info.testFailCount = this.getCountByType(InfoItemType.testCompleteFail);\r\n      this.info.testNotApplicableCount = this.getCountByType(InfoItemType.testCompleteNoApplicableItemsFound);\r\n\r\n      this.info.errorSummary = this.getSummaryByType(InfoItemType.error);\r\n      this.info.internalProcessingErrorSummary = this.getSummaryByType(InfoItemType.internalProcessingError);\r\n      this.info.warningSummary = this.getSummaryByType(InfoItemType.warning);\r\n      this.info.testFailSummary = this.getSummaryByType(InfoItemType.testCompleteFail);\r\n\r\n      const generationEndTime = Date.now();\r\n\r\n      this.info.infoGenerationTime = generationEndTime - generationStartTime;\r\n\r\n      if (this.project) {\r\n        this.info.endToEndGenerationTime = generationEndTime - this.project.creationTime;\r\n      }\r\n\r\n      if (\r\n        this.suite === ProjectInfoSuite.defaultInDevelopment ||\r\n        this.suite === ProjectInfoSuite.sharing ||\r\n        this.suite === ProjectInfoSuite.sharingStrict\r\n      ) {\r\n        this.info.reds = this.getRed();\r\n      }\r\n\r\n      this._isGenerating = false;\r\n\r\n      if (valOperId !== undefined) {\r\n        // End the operation - progress bar disappears immediately\r\n        await this.project?.creatorTools.notifyOperationEnded(valOperId, \"\", StatusTopic.validation);\r\n      }\r\n\r\n      if (this.project) {\r\n        const errorTypes: { [type: string]: number } = {};\r\n        for (const item of genItems) {\r\n          if (item.itemType === InfoItemType.internalProcessingError) {\r\n            const errorType = item.generatorId || \"unknown\";\r\n            errorTypes[errorType] = (errorTypes[errorType] || 0) + 1;\r\n          }\r\n        }\r\n\r\n        const properties: { [key: string]: string | number } = {\r\n          [TelemetryProperties.PROJECT_ITEM_COUNT]: this.project.items.length,\r\n          [TelemetryProperties.INTERNAL_PROCESSING_ERROR_COUNT]: this.info.internalProcessingErrorCount || 0,\r\n          [TelemetryProperties.SUITE_TYPE]: this.suite,\r\n        };\r\n\r\n        const errorTypeKeys = Object.keys(errorTypes);\r\n\r\n        if (errorTypeKeys.length > 0) {\r\n          properties[TelemetryProperties.ERROR_TYPES] = errorTypeKeys.join(\",\");\r\n        }\r\n\r\n        telemetryService.trackEvent({\r\n          name: TelemetryEvents.VALIDATION_COMPLETED,\r\n          properties,\r\n        });\r\n      }\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  disconnectFromProject() {\r\n    this.project = undefined;\r\n\r\n    for (const pi of this.items) {\r\n      pi.disconnect();\r\n    }\r\n  }\r\n\r\n  addTestSummations(\r\n    genItems: ProjectInfoItem[],\r\n    genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    generators: IProjectInfoGeneratorBase[],\r\n    excludeTests?: string[]\r\n  ) {\r\n    for (const gen of generators) {\r\n      if ((!excludeTests || !excludeTests.includes(gen.id)) && this.matchesSuite(gen)) {\r\n        const results = ProjectInfoSet.getItemsInCollection(genItems, gen.id);\r\n\r\n        if (results.length === 0 && !gen.canAlwaysProcess) {\r\n          this.pushItem(\r\n            genItems,\r\n            genItemsByStoragePath,\r\n            new ProjectInfoItem(\r\n              InfoItemType.testCompleteNoApplicableItemsFound,\r\n              gen.id,\r\n              2,\r\n              `No applicable items found for test ${gen.title} (${gen.id})`\r\n            )\r\n          );\r\n        } else {\r\n          let errorCount = 0;\r\n          let internalErrorCount = 0;\r\n          let foundTestVerdict = false;\r\n\r\n          for (const result of results) {\r\n            if (\r\n              result.itemType === InfoItemType.testCompleteFail ||\r\n              result.itemType === InfoItemType.testCompleteSuccess ||\r\n              result.itemType === InfoItemType.testCompleteNoApplicableItemsFound\r\n            ) {\r\n              foundTestVerdict = true;\r\n            } else if (result.itemType === InfoItemType.error) {\r\n              errorCount++;\r\n            } else if (result.itemType === InfoItemType.internalProcessingError) {\r\n              internalErrorCount++;\r\n            }\r\n          }\r\n\r\n          if (!foundTestVerdict) {\r\n            if (errorCount > 0 && internalErrorCount <= 0) {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(\r\n                  InfoItemType.testCompleteFail,\r\n                  gen.id,\r\n                  0,\r\n                  `Found ${errorCount} error${errorCount !== 1 ? \"s\" : \"\"} in ${gen.title} check`\r\n                )\r\n              );\r\n            } else if (internalErrorCount > 0 && errorCount <= 0) {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(\r\n                  InfoItemType.testCompleteFail,\r\n                  gen.id,\r\n                  0,\r\n                  `Found ${internalErrorCount} internal error${internalErrorCount !== 1 ? \"s\" : \"\"} in ${gen.title} check. This may be a temporary issue with the test run.`\r\n                )\r\n              );\r\n            } else if (errorCount + internalErrorCount > 0) {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(\r\n                  InfoItemType.testCompleteFail,\r\n                  gen.id,\r\n                  0,\r\n                  `Found ${errorCount} error${errorCount !== 1 ? \"s\" : \"\"} and ${internalErrorCount} internal error${internalErrorCount !== 1 ? \"s\" : \"\"} in ${gen.title} check`\r\n                )\r\n              );\r\n            } else {\r\n              this.pushItem(\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                new ProjectInfoItem(InfoItemType.testCompleteSuccess, gen.id, 1, `${gen.title} completed successfully`)\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  pushItem(\r\n    itemSet: ProjectInfoItem[],\r\n    itemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    item: ProjectInfoItem\r\n  ) {\r\n    if (\r\n      item.projectItem &&\r\n      item.projectItem.projectPath &&\r\n      item.itemType !== InfoItemType.info &&\r\n      item.itemType !== InfoItemType.featureAggregate\r\n    ) {\r\n      if (!itemsByStoragePath[item.projectItem.projectPath]) {\r\n        itemsByStoragePath[item.projectItem.projectPath] = [];\r\n      }\r\n\r\n      itemsByStoragePath[item.projectItem.projectPath]?.push(item);\r\n    }\r\n\r\n    itemSet.push(item);\r\n  }\r\n\r\n  public mergeFeatureSetsAndFieldsTo(\r\n    allFeatureSets: { [setName: string]: { [measureName: string]: number | undefined } | undefined },\r\n    allFields: { [featureName: string]: boolean | undefined }\r\n  ) {\r\n    if (!this.info || !this.info.featureSets) {\r\n      return;\r\n    }\r\n\r\n    for (const str in this.info) {\r\n      if (str !== \"features\") {\r\n        if (Utilities.isUsableAsObjectKey(str)) {\r\n          allFields[str] = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const str in allFields) {\r\n      let inf = this.info as any;\r\n\r\n      if (ProjectInfoSet.isAggregableFieldName(str) && Utilities.isUsableAsObjectKey(str)) {\r\n        if (inf[str] === undefined) {\r\n          inf[str] = \"\";\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const featureName in this.info.featureSets) {\r\n      if (Utilities.isUsableAsObjectKey(featureName)) {\r\n        const myFeature = this.info.featureSets[featureName];\r\n\r\n        if (myFeature !== undefined) {\r\n          let allFeature = allFeatureSets[featureName];\r\n\r\n          if (allFeature === undefined) {\r\n            allFeature = {};\r\n            allFeatureSets[featureName] = allFeature;\r\n          }\r\n\r\n          for (const measureName in myFeature) {\r\n            if (Utilities.isUsableAsObjectKey(measureName)) {\r\n              const measureVal = myFeature[measureName];\r\n\r\n              if (measureVal !== undefined) {\r\n                let allMeasureVal = allFeature[measureName];\r\n\r\n                if (allMeasureVal === undefined) {\r\n                  allMeasureVal = measureVal;\r\n                } else {\r\n                  allMeasureVal += measureVal;\r\n                }\r\n\r\n                allFeature[measureName] = allMeasureVal;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureGenerators() {\r\n    if (!this.info) {\r\n      return;\r\n    }\r\n\r\n    if (this.info.summary !== undefined) {\r\n      return;\r\n    }\r\n\r\n    this.info.summary = {};\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const gId = this.items[i].generatorId;\r\n      const gIndex = this.items[i].generatorIndex;\r\n\r\n      let gen = this.info.summary[gId];\r\n\r\n      if (gen === undefined) {\r\n        gen = {};\r\n\r\n        this.info.summary[gId] = gen;\r\n      }\r\n\r\n      let genI = gen[gIndex];\r\n\r\n      if (genI === undefined) {\r\n        genI = {};\r\n\r\n        gen[gIndex] = genI;\r\n      }\r\n\r\n      const topicInfo = ProjectInfoSet.getTopicData(gId, gIndex);\r\n\r\n      if (topicInfo) {\r\n        genI.title = topicInfo.title;\r\n      }\r\n\r\n      if (genI.defaultMessage === undefined && this.items[i].message !== genI.title) {\r\n        genI.defaultMessage = this.items[i].message;\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const item = this.items[i];\r\n      const gId = item.generatorId;\r\n      const gIndex = item.generatorIndex;\r\n\r\n      let gen = this.info.summary[gId];\r\n\r\n      if (gen === undefined) {\r\n        gen = {};\r\n\r\n        this.info.summary[gId] = gen;\r\n      }\r\n\r\n      let genI = gen[gIndex];\r\n\r\n      if (genI === undefined) {\r\n        genI = {};\r\n\r\n        gen[gIndex] = genI;\r\n      }\r\n\r\n      if (item.itemType !== InfoItemType.featureAggregate) {\r\n        switch (item.itemType) {\r\n          case InfoItemType.error:\r\n            genI.errors = genI.errors ? genI.errors + 1 : 1;\r\n            break;\r\n          case InfoItemType.testCompleteFail:\r\n            genI.testCompleteFails = genI.testCompleteFails ? genI.testCompleteFails + 1 : 1;\r\n            break;\r\n          case InfoItemType.testCompleteSuccess:\r\n            genI.testCompleteSuccesses = genI.testCompleteSuccesses ? genI.testCompleteSuccesses + 1 : 1;\r\n            break;\r\n          case InfoItemType.warning:\r\n            genI.warnings = genI.warnings ? genI.warnings + 1 : 1;\r\n            break;\r\n          case InfoItemType.recommendation:\r\n            genI.recommendations = genI.recommendations ? genI.recommendations + 1 : 1;\r\n            break;\r\n          case InfoItemType.internalProcessingError:\r\n            genI.internalProcessingErrors = genI.internalProcessingErrors ? genI.internalProcessingErrors + 1 : 1;\r\n            break;\r\n        }\r\n      }\r\n\r\n      if (this.items[i].message === genI.defaultMessage || this.items[i].message === genI.title) {\r\n        this.items[i].message = undefined;\r\n      }\r\n    }\r\n  }\r\n\r\n  itemToString(item: ProjectInfoItem) {\r\n    let summaryString = item.typeSummaryShort + \": \";\r\n\r\n    summaryString += \"[\" + item.generatorId + Utilities.frontPadToLength(item.generatorIndex, 3, \"0\") + \"]\";\r\n\r\n    if (item.shortProjectItemPath) {\r\n      summaryString += \" (\" + item.shortProjectItemPath + \")\";\r\n    }\r\n\r\n    let effectiveMessage = this.getEffectiveMessage(item);\r\n\r\n    if (effectiveMessage.length > 0) {\r\n      summaryString += \" \" + effectiveMessage;\r\n    }\r\n\r\n    if (item.data) {\r\n      summaryString += \": \" + item.data;\r\n    }\r\n\r\n    const errorContent = item.contentSummary;\r\n\r\n    if (errorContent) {\r\n      summaryString += \" [in \" + errorContent + \"]\";\r\n    }\r\n\r\n    return summaryString;\r\n  }\r\n\r\n  static getExtendedMessageFromData(data: IProjectInfoData, item: IInfoItemData) {\r\n    return (\r\n      this.getEffectiveMessageFromData(data, item) + (item.d ? \": \" + item.d : \"\") + (item.p ? \" - \" + item.p : \"\")\r\n    );\r\n  }\r\n\r\n  static getEffectiveMessageFromData(data: IProjectInfoData, item: IInfoItemData) {\r\n    if (item.m !== undefined) {\r\n      return item.m;\r\n    }\r\n\r\n    if (data.info === undefined || data.info.summary === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    let gen = data.info.summary[item.gId];\r\n\r\n    if (gen === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    let genI = gen[item.gIx];\r\n\r\n    if (genI === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return genI.defaultMessage;\r\n  }\r\n\r\n  getEffectiveMessage(item: ProjectInfoItem) {\r\n    if (item.message !== undefined) {\r\n      return item.message;\r\n    }\r\n\r\n    if (this.info === undefined || this.info.summary === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    let gen = this.info.summary[item.generatorId];\r\n\r\n    if (gen === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    let genI = gen[item.generatorIndex];\r\n\r\n    if (genI === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return genI.defaultMessage ? genI.defaultMessage : \"\";\r\n  }\r\n\r\n  shouldIncludeInIndex(data: IInfoItemData) {\r\n    if (data.gId === \"JSON\" || data.gId === \"ESLINT\") {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  getDataObject(\r\n    sourceName?: string,\r\n    sourcePath?: string,\r\n    sourceHash?: string,\r\n    isIndexOnly?: boolean,\r\n    subsetReports?: IProjectMetaState[]\r\n  ): IProjectInfoData {\r\n    const items: IInfoItemData[] = [];\r\n\r\n    this.ensureGenerators();\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const dataObj = this.items[i].dataObject;\r\n\r\n      if (!isIndexOnly || this.shouldIncludeInIndex(dataObj)) {\r\n        items.push(dataObj);\r\n      }\r\n    }\r\n\r\n    Utilities.encodeObjectWithSequentialRunLengthEncodeUsingNegative(this.contentIndex.data.trie);\r\n\r\n    return {\r\n      info: this.info,\r\n      items: items,\r\n      index: this.contentIndex.data,\r\n      generatorName: constants.name,\r\n      suite: this.suite,\r\n      subsetReports: subsetReports,\r\n      generatorVersion: constants.version,\r\n      sourceName: sourceName,\r\n      sourcePath: sourcePath,\r\n      sourceHash: sourceHash,\r\n    };\r\n  }\r\n\r\n  static isAggregableFieldName(name: string) {\r\n    if (name !== \"features\" && name !== \"summary\" && name !== \"featureSets\" && name !== \"defaultIcon\") {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isAggregableFeatureMeasureName(name: string) {\r\n    if (!name.startsWith(\"#\")) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getSummaryCsvHeaderLine(\r\n    projectInfo: IProjectInfo,\r\n    allFeatures: { [setName: string]: { [measureName: string]: number | undefined } | undefined }\r\n  ): string {\r\n    let csvLine = \"Name,Title,Area,\";\r\n\r\n    let fieldNames = [];\r\n\r\n    for (const str in projectInfo) {\r\n      if (ProjectInfoSet.isAggregableFieldName(str)) {\r\n        fieldNames.push(str);\r\n      }\r\n    }\r\n\r\n    fieldNames = fieldNames.sort(ProjectInfoSet.sortMinecraftFeatures);\r\n\r\n    for (const str of fieldNames) {\r\n      csvLine += Utilities.humanifyJsName(str) + \",\";\r\n    }\r\n\r\n    for (const str in projectInfo) {\r\n      if (ProjectInfoSet.isAggregableFieldName(str)) {\r\n        fieldNames.push(str);\r\n      }\r\n    }\r\n\r\n    for (const featureName in allFeatures) {\r\n      const feature = allFeatures[featureName];\r\n\r\n      if (feature) {\r\n        for (const measureName in feature) {\r\n          if (ProjectInfoSet.isAggregableFeatureMeasureName(measureName)) {\r\n            const measure = feature[measureName];\r\n\r\n            if (measure !== undefined) {\r\n              csvLine += ProjectInfoSet.getDataSummary(featureName + \" \" + measureName) + \",\";\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return csvLine;\r\n  }\r\n\r\n  getIndexJson(sourceName?: string, sourcePath?: string, sourceHash?: string) {\r\n    return JSON.stringify(this.getDataObject(sourceName, sourcePath, sourceHash, true));\r\n  }\r\n\r\n  getStrictIndexJson(sourceName?: string, sourcePath?: string, sourceHash?: string) {\r\n    const jsonO = this.getDataObject(sourceName, sourcePath, sourceHash, true);\r\n\r\n    if (jsonO) {\r\n      jsonO.info = undefined;\r\n      jsonO.items = undefined;\r\n    }\r\n\r\n    return JSON.stringify(jsonO);\r\n  }\r\n\r\n  getReportHtml(sourceName?: string, sourcePath?: string, sourceHash?: string): string {\r\n    const lines = [];\r\n\r\n    lines.push(\"<html><head>\");\r\n    lines.push(\"<script>\");\r\n    lines.push(`const _reportObjects = [];\r\n\r\nfunction _addReportJson(data) {\r\n  _reportObjects.push(data);\r\n}\r\n`);\r\n    const dataObject = this.getDataObject(sourceName, sourcePath, sourceHash);\r\n\r\n    dataObject.index = undefined;\r\n    lines.push(\"_addReportJson(\" + JSON.stringify(dataObject) + \");\");\r\n    lines.push(\"</script><script>\");\r\n    lines.push(`\r\n    function getDataName(name) {\r\n      if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n        return name.toString();\r\n      }\r\n    \r\n      let retVal = \"\";\r\n    \r\n      for (let i = 0; i < name.length; i++) {\r\n        if (i === 0) {\r\n          retVal += name[i].toUpperCase();\r\n        } else {\r\n          if (name[i] >= \"A\" && name[i] <= \"Z\") {\r\n            retVal += \" \";\r\n          }\r\n          retVal += name[i];\r\n        }\r\n      }\r\n      return retVal;\r\n    }\r\n    \r\n    function getDataSummary(data) {\r\n      if (data) {\r\n        return data;\r\n      }\r\n      \r\n      if (typeof data === \"number\" || typeof data === \"boolean\") {\r\n        return data.toString();\r\n      }\r\n      \r\n      if (typeof data === \"object\") {\r\n        return JSON.stringify(data);\r\n      }\r\n    \r\n      return \"(not defined)\";\r\n    }  \r\n    \r\n    function getEmptySummary(data) {\r\n    \r\n      if (typeof data === \"object\") {\r\n        return JSON.stringify(data);\r\n      }\r\n      \r\n      if (typeof data === \"number\" || typeof data === \"boolean\") {\r\n        return data.toString();\r\n      }\r\n    \r\n      if (data) {\r\n        return data;\r\n      }\r\n      \r\n      return \"\";\r\n    }  \r\n\r\n    function getEffectiveMessage(reportObj, item) {\r\n      if (item.m !== undefined) {\r\n        return item.m;\r\n      }\r\n\r\n      if (reportObj.info === undefined || reportObj.info.summary === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      let gen = reportObj.info.summary[item.gId];\r\n\r\n      if (gen === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      let genI = gen[item.gIx];\r\n \r\n      if (genI === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      return genI.defaultMessage;\r\n    }\t    \r\n    \r\n    function generateReports() {\r\n      for (let i=0; i<_reportObjects.length; i++) {\r\n        document.write(\"<h1>\" + _reportObjects[i].sourceName + \"</h1>\");\r\n        document.write(\"<h3>Summary</h3>\");\r\n    \r\n        document.write(\"<table class='summary-table'>\");\r\n        document.write(\"<tr><th>Measure</th><th>Value</th></tr>\");\r\n        const info = _reportObjects[i].info;\r\n    \r\n        if (info) {\r\n          for (const key in info) {\r\n            const val = info[key];\r\n    \r\n            if (key !== 'featureSets' && key !== 'defaultIcon' && key !== 'summary') {\r\n              document.write(\"<tr>\");\r\n              document.write(\"<td class='summary-key items-cell'>\" + getDataName(key) + \"</td>\");\r\n              document.write(\"<td class='summary-value items-cell'>\" + getDataSummary(val) + \"</td>\");\r\n              document.write(\"</tr>\");\r\n            }\r\n          }\r\n    \r\n          if (info[\"featureSets\"]) {\r\n            for (const featureName in info.featureSets) {\r\n              const feature = info.featureSets[featureName];\r\n    \r\n              for (const measureName in feature) {\r\n                const val = feature[measureName];\r\n\r\n                 document.write(\"<tr>\");\r\n                document.write(\"<td class='summary-key items-cell'>\" + featureName + \" \" + measureName + \"</td>\");\r\n                document.write(\"<td class='summary-value items-cell'>\" + getDataSummary(val) + \"</td>\");\r\n                document.write(\"</tr>\");\r\n              }\r\n            }\r\n          }\r\n        }\r\n        document.write(\"</table>\");\r\n      }\r\n    \r\n      for (let i=0; i<_reportObjects.length; i++) {\r\n        document.write(\"<h3>Items</h3>\");\r\n        document.write(\"<table class='items-table'>\");\r\n        document.write(\"<tr><th>Type</th><th>Test Category</th><th>Category Id</th><th>Message</th><th>Data</th><th>Path</th></tr>\");\r\n        const info = _reportObjects[i].info;\r\n        \r\n        const items = _reportObjects[i].items;\r\n    \r\n        if (items && items.length) {\r\n          for (const item of items) {\r\n            if (item.itemType !== 2) {\r\n              document.write(\"<tr>\");\r\n              document.write(\"<td class='items-type items-cell'>\" + getDescriptionForItemType(item.iTp) + \"</td>\");\r\n              document.write(\"<td class='items-generator items-cell'>\" + item.gId + \"</td>\");\r\n              document.write(\"<td class='items-generatorIndex items-cell'>\" + item.gIx + \"</td>\");\r\n              document.write(\"<td class='items-message items-cell'>\" + getEmptySummary(getEffectiveMessage(_reportObjects[i], item)) + \"</td>\");\r\n              document.write(\"<td class='items-data items-cell'>\" + getEmptySummary(item.d) + \"</td>\");\r\n              document.write(\"<td class='items-path items-cell'>\" + getEmptySummary(item.p) + \"</td>\");\r\n              document.write(\"</tr>\");\r\n            }\r\n          }\r\n        }\r\n        document.write(\"</table>\");\r\n      }\r\n    } \r\n\r\n    function getDescriptionForItemType(itemType) {\r\n      switch (itemType) {\r\n        case 0: \r\n          return \"SUCCESS\";\r\n          break;\r\n        case 1: \r\n          return \"FAIL\";\r\n          break;\r\n        case 3: \r\n          return \"ERROR\";\r\n          break;\r\n        case 4: \r\n          return \"WARN\";\r\n          break;\r\n        case 5: \r\n          return \"INTERNALERR\";\r\n          break;\r\n        case 6: \r\n          return \"RECOMMEND\";\r\n          break;          \r\n      }\r\n      return \"INFO\";\r\n    }\r\n\r\n    </script>\r\n    <style>\r\n      body {\r\n        font-family: Noto Sans, Arial, Helvetica, sans-serif;\r\n        padding: 8px;\r\n      }\r\n    \r\n      .items-table {\r\n        border: solid 1px #606060;\r\n        padding: 0px;\r\n        max-width: 100vw;\r\n      }\r\n    \r\n      .items-cell {\r\n        border: solid 1px #606060;\r\n        padding: 4px;\r\n        vertical-align: top;\r\n        font-size: x-small;\r\n        overflow-wrap: anywhere;\r\n        max-width: 25vw;\r\n      }\r\n    \r\n      .summary-table {\r\n        border: solid 1px #606060;\r\n        padding: 0px;\r\n        max-width: 100vw;\r\n      }\r\n    </style>\r\n    </head><body> \r\n`);\r\n    lines.push(\"<script>\");\r\n    lines.push(\"generateReports();\");\r\n    lines.push(\"</script>\");\r\n    lines.push(\"</body></html>\");\r\n\r\n    return lines.join(\"\\n\");\r\n  }\r\n\r\n  static getDataSummary(data: any | undefined) {\r\n    if (typeof data === \"number\" || typeof data === \"boolean\") {\r\n      return data.toString();\r\n    }\r\n    if (Array.isArray(data)) {\r\n      const repData = data.slice();\r\n\r\n      for (let i = 0; i < repData.length; i++) {\r\n        repData[i] =\r\n          \"'\" +\r\n          repData[i]\r\n            .toString()\r\n            .replace(/'/gi, \"\")\r\n            .replace(/[\\r\\n]+/g, \" \") +\r\n          \"'\";\r\n      }\r\n      let arrStr = repData.join(\", \");\r\n\r\n      arrStr = arrStr.replace(/\"/gi, \"'\");\r\n\r\n      return '\"[' + arrStr + ']\"';\r\n    } else if (data) {\r\n      return '\"' + ProjectInfoSet.csvSanitize(data) + '\"';\r\n    }\r\n\r\n    return \"(not defined)\";\r\n  }\r\n\r\n  /**\r\n   * Sanitizes a string value for safe inclusion inside a quoted CSV field.\r\n   * Replaces double quotes with single quotes, and strips newlines/carriage returns\r\n   * so that the value doesn't create phantom rows in the CSV output.\r\n   */\r\n  static csvSanitize(value: string): string {\r\n    return value.replace(/\"/gi, \"'\").replace(/[\\r\\n]+/g, \" \");\r\n  }\r\n\r\n  static sortMinecraftFeatures(a: string, b: string) {\r\n    a = a.replace(\"minecraft:\", \"_\");\r\n    b = b.replace(\"minecraft:\", \"_\");\r\n\r\n    return Utilities.staticCompare(a, b);\r\n  }\r\n\r\n  getArea(title: string) {\r\n    title = title.toLowerCase();\r\n\r\n    if (title.indexOf(\"furniture\") >= 0) {\r\n      return \"Furniture\";\r\n    }\r\n\r\n    if (title.indexOf(\"skyblock\") >= 0 || title.indexOf(\"sky block\") >= 0) {\r\n      return \"Skyblock\";\r\n    }\r\n\r\n    if (title.indexOf(\"oneblock\") >= 0 || title.indexOf(\"one block\") >= 0) {\r\n      return \"One block\";\r\n    }\r\n\r\n    if (title.indexOf(\"lucky\") >= 0) {\r\n      return \"Lucky\";\r\n    }\r\n\r\n    if (title.indexOf(\"parkour\") >= 0) {\r\n      return \"Parkour\";\r\n    }\r\n\r\n    if (title.indexOf(\"surviv\") >= 0) {\r\n      return \"Survival\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"weapon\") >= 0 ||\r\n      title.indexOf(\"potion\") >= 0 ||\r\n      title.indexOf(\"tool\") >= 0 ||\r\n      title.indexOf(\"hook\") >= 0\r\n    ) {\r\n      return \"Tools\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"roleplay\") >= 0 ||\r\n      title.indexOf(\"teen\") >= 0 ||\r\n      title.indexOf(\"illionair\") >= 0 ||\r\n      title.indexOf(\"hacker\") >= 0\r\n    ) {\r\n      return \"Roleplay\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"mob\") >= 0 ||\r\n      title.indexOf(\"pirate\") >= 0 ||\r\n      title.indexOf(\"unicorn\") >= 0 ||\r\n      title.indexOf(\"alien\") >= 0 ||\r\n      title.indexOf(\"animals\") >= 0 ||\r\n      title.indexOf(\"cats\") >= 0 ||\r\n      title.indexOf(\"dogs\") >= 0 ||\r\n      title.indexOf(\"dragon\") >= 0\r\n    ) {\r\n      return \"Mob\";\r\n    }\r\n\r\n    if (title.indexOf(\"vehicles\") >= 0 || title.indexOf(\"car\") >= 0 || title.indexOf(\"plane\") >= 0) {\r\n      return \"Vehicles\";\r\n    }\r\n\r\n    if (\r\n      title.indexOf(\"island\") >= 0 ||\r\n      title.indexOf(\"kingdom\") >= 0 ||\r\n      title.indexOf(\"tower\") >= 0 ||\r\n      title.indexOf(\"mansion\") >= 0 ||\r\n      title.indexOf(\"village\") >= 0 ||\r\n      title.indexOf(\"resort\") >= 0 ||\r\n      title.indexOf(\"castle\") >= 0 ||\r\n      title.indexOf(\"base\") >= 0 ||\r\n      title.indexOf(\"town\") >= 0 ||\r\n      title.indexOf(\"city\") >= 0 ||\r\n      title.indexOf(\"fortress\") >= 0 ||\r\n      title.indexOf(\"citadel\") >= 0 ||\r\n      title.indexOf(\"outpost\") >= 0 ||\r\n      title.indexOf(\"farm\") >= 0 ||\r\n      title.indexOf(\"hotel\") >= 0 ||\r\n      title.indexOf(\"castle\") >= 0\r\n    ) {\r\n      return \"Area\";\r\n    }\r\n\r\n    if (title.indexOf(\"simulat\") >= 0) {\r\n      return \"Simulator\";\r\n    }\r\n\r\n    return \"General\";\r\n  }\r\n\r\n  getRed() {\r\n    let red = 0;\r\n\r\n    if (!this.info || !this.info.featureSets) {\r\n      return 0;\r\n    }\r\n\r\n    let val = this.info.featureSets[\"animation.size\"]?.total;\r\n\r\n    if (val === undefined || val === null) {\r\n      val = 0;\r\n    }\r\n\r\n    if (val) {\r\n      red += val * 0.2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"animationController.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.5;\r\n    }\r\n\r\n    val = this.info.featureSets[\"attachable.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"function.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"tick.size\"]?.total;\r\n    if (val) {\r\n      red += val * 20;\r\n    }\r\n\r\n    val = this.info.featureSets[\"command.execute\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"behaviorPackAnimation.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"behaviorPackAnimationController.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1.2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"biome.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1.2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftChainCommandBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftCommandBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRepeatingCommandBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftStructureBlock\"]?.count;\r\n    if (val) {\r\n      red += val * 8;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftObserver\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftComparator\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftDropper\"]?.count;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftHopper\"]?.count;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftPressurePlate\"]?.count;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftLever\"]?.count;\r\n    if (val) {\r\n      red += val * 4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftLitRedstoneLamp\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRedstoneBlock\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRedstoneTorch\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"blocks.minecraftRedstoneWire\"]?.count;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"entityDialogue.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"entityType.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"entityTypeResources.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"itemType.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"itemTypeResources.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"javaScript.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    val = this.info.featureSets[\"lootTable.size\"]?.total;\r\n    if (val) {\r\n      red += val;\r\n    }\r\n\r\n    val = this.info.featureSets[\"model.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"particle.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"recipe.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.4;\r\n    }\r\n\r\n    val = this.info.featureSets[\"renderController.size\"]?.total;\r\n    if (val) {\r\n      red += val * 0.5;\r\n    }\r\n\r\n    val = this.info.featureSets[\"spawnRule.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"trading.size\"]?.total;\r\n    if (val) {\r\n      red += val * 1;\r\n    }\r\n\r\n    val = this.info.featureSets[\"userInterface.size\"]?.total;\r\n    if (val) {\r\n      red += val * 2;\r\n    }\r\n\r\n    return Math.round(red);\r\n  }\r\n\r\n  getSummaryCsvLine(\r\n    containerName: string,\r\n    title: string,\r\n    allFeatures: { [setName: string]: { [measureName: string]: number | undefined } | undefined } | undefined\r\n  ): string {\r\n    let line =\r\n      ProjectInfoSet.getDataSummary(containerName) +\r\n      \",\" +\r\n      ProjectInfoSet.getDataSummary(title) +\r\n      \",\" +\r\n      this.getArea(title) +\r\n      \",\";\r\n\r\n    let fieldNames = [];\r\n\r\n    for (const str in this.info) {\r\n      if (ProjectInfoSet.isAggregableFieldName(str)) {\r\n        fieldNames.push(str);\r\n      }\r\n    }\r\n\r\n    fieldNames = fieldNames.sort(ProjectInfoSet.sortMinecraftFeatures);\r\n\r\n    for (const str of fieldNames) {\r\n      // @ts-ignore\r\n      line += ProjectInfoSet.getDataSummary(this.info[str]) + \",\";\r\n    }\r\n\r\n    if (this.info.featureSets) {\r\n      for (const featureName in allFeatures) {\r\n        const allFeature = allFeatures[featureName];\r\n        const thisFeature = this.info.featureSets[featureName];\r\n\r\n        if (allFeature) {\r\n          for (const measureName in allFeature) {\r\n            if (ProjectInfoSet.isAggregableFeatureMeasureName(measureName)) {\r\n              if (thisFeature) {\r\n                const measure = thisFeature[measureName];\r\n\r\n                if (measure !== undefined) {\r\n                  if (typeof measure === \"number\") {\r\n                    line += measure;\r\n                  }\r\n                }\r\n              }\r\n              line += \",\";\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return line;\r\n  }\r\n\r\n  getItemCsvLines(): string[] {\r\n    const lines: string[] = [];\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const item = this.items[i];\r\n\r\n      if (item.itemType !== InfoItemType.featureAggregate) {\r\n        let sp = \"\";\r\n\r\n        if (item.projectItem && item.projectItem.projectPath) {\r\n          sp = item.projectItem.projectPath;\r\n        } else if (item.projectItemPath) {\r\n          sp = item.projectItemPath;\r\n        }\r\n\r\n        let line =\r\n          item.generatorId +\r\n          \",\" +\r\n          item.generatorIndex +\r\n          \",\" +\r\n          '\"' +\r\n          ProjectInfoSet.csvSanitize(item.typeSummary || \"\") +\r\n          '\"' +\r\n          \",\" +\r\n          '\"' +\r\n          ProjectInfoSet.csvSanitize(item.projectItem ? item.projectItem.name : \"\") +\r\n          '\"' +\r\n          ',\"' +\r\n          ProjectInfoSet.csvSanitize(this.getEffectiveMessage(item)) +\r\n          '\",';\r\n\r\n        if (item.data) {\r\n          if (typeof item.data === \"string\") {\r\n            line += '\"' + ProjectInfoSet.csvSanitize(item.data) + '\"';\r\n          } else {\r\n            line += item.data.toString();\r\n          }\r\n        }\r\n\r\n        line += ',\"' + ProjectInfoSet.csvSanitize(sp) + '\",';\r\n\r\n        if (item.featureSets) {\r\n          for (const featName in item.featureSets) {\r\n            const feature = item.featureSets[featName];\r\n\r\n            if (feature) {\r\n              for (const measureName in feature) {\r\n                if (ProjectInfoSet.isAggregableFeatureMeasureName(measureName)) {\r\n                  const measure = feature[measureName];\r\n\r\n                  if (measure !== undefined) {\r\n                    if (typeof measure === \"number\") {\r\n                      line += featName + \" \" + measureName + \",\" + measure + \",\";\r\n                    } else if (typeof measure === \"string\") {\r\n                      line += featName + \" \" + measureName + ',\"' + ProjectInfoSet.csvSanitize(measure) + '\",';\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        lines.push(line);\r\n      }\r\n    }\r\n\r\n    return lines;\r\n  }\r\n\r\n  getItems(generatorId: string, itemIndex: number) {\r\n    const resultItems: ProjectInfoItem[] = [];\r\n\r\n    for (const genItem of this.items) {\r\n      if (genItem.generatorId === generatorId && genItem.generatorIndex === itemIndex) {\r\n        resultItems.push(genItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n\r\n  getItemsByType(generatorId: string, itemType: InfoItemType) {\r\n    return ProjectInfoSet.getItemsInCollectionByType(this.items, generatorId, itemType);\r\n  }\r\n\r\n  getItemsByStoragePath(path: string) {\r\n    if (!this.itemsByStoragePath) {\r\n      return;\r\n    }\r\n\r\n    return this.itemsByStoragePath[path];\r\n  }\r\n\r\n  static getItemsInCollection(genItems: ProjectInfoItem[], generatorId: string) {\r\n    const resultItems: ProjectInfoItem[] = [];\r\n\r\n    for (const genItem of genItems) {\r\n      if (genItem.generatorId === generatorId) {\r\n        resultItems.push(genItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n\r\n  static getItemsInCollectionByType(genItems: ProjectInfoItem[], generatorId: string, itemType: InfoItemType) {\r\n    const resultItems: ProjectInfoItem[] = [];\r\n\r\n    for (const genItem of genItems) {\r\n      if (genItem.generatorId === generatorId && genItem.itemType === itemType) {\r\n        resultItems.push(genItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n\r\n  async preProcessFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    genItems: ProjectInfoItem[],\r\n    genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    genContentIndex: ContentIndex,\r\n    fileGenerators: IProjectFileInfoGenerator[],\r\n    depth: number\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        if (file.content !== null) {\r\n          if (StorageUtilities.isContainerFile(file.storageRelativePath)) {\r\n            const zipFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n            if (zipFolder && typeof zipFolder !== \"string\") {\r\n              await this.preProcessFolder(\r\n                project,\r\n                zipFolder,\r\n                genItems,\r\n                genItemsByStoragePath,\r\n                genContentIndex,\r\n                fileGenerators,\r\n                depth + 1\r\n              );\r\n            }\r\n          }\r\n\r\n          const projectItem = project.getItemByFile(file);\r\n\r\n          if (projectItem && projectItem.projectPath) {\r\n            await HashUtilities.addHashesForFile(genContentIndex.hashCatalog, file, projectItem.projectPath);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (depth < 15) {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus && childFolder.name) {\r\n          if (ProjectInfoSet.isFolderThatShouldBeProcessed(childFolder)) {\r\n            await this.preProcessFolder(\r\n              project,\r\n              childFolder,\r\n              genItems,\r\n              genItemsByStoragePath,\r\n              genContentIndex,\r\n              fileGenerators,\r\n              depth + 1\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async processFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    genItems: ProjectInfoItem[],\r\n    genItemsByStoragePath: { [storagePath: string]: ProjectInfoItem[] | undefined },\r\n    genContentIndex: ContentIndex,\r\n    fileGenerators: IProjectFileInfoGenerator[],\r\n    depth: number\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        if (file.content !== null) {\r\n          const projectItem = project.getItemByFile(file);\r\n\r\n          if (projectItem && projectItem.projectPath) {\r\n            genContentIndex.insert(StorageUtilities.getBaseFromName(fileName), projectItem.projectPath);\r\n            genContentIndex.insert(file.storageRelativePath, projectItem.projectPath);\r\n\r\n            if (file.content && typeof file.content === \"string\") {\r\n              const fileExtension = StorageUtilities.getTypeFromName(fileName);\r\n\r\n              if (projectItem && projectItem.projectPath) {\r\n                switch (fileExtension) {\r\n                  case \"json\":\r\n                    // Try to use already-parsed JSON object for faster indexing\r\n                    // instead of character-by-character text tokenization\r\n                    const jsonObj = StorageUtilities.getJsonObject(file);\r\n                    if (jsonObj) {\r\n                      genContentIndex.indexJsonObject(projectItem.projectPath, jsonObj);\r\n                    } else {\r\n                      genContentIndex.parseJsonContent(projectItem.projectPath, file.content);\r\n                    }\r\n                    break;\r\n                  case \"ts\":\r\n                  case \"js\":\r\n                  case \"mjs\":\r\n                    genContentIndex.parseJsContent(projectItem.projectPath, file.content);\r\n                    break;\r\n                }\r\n              }\r\n            }\r\n\r\n            for (const fileGen of fileGenerators) {\r\n              if (this.matchesSuite(fileGen)) {\r\n                try {\r\n                  const results = await fileGen.generate(project, file, genContentIndex);\r\n\r\n                  for (const item of results) {\r\n                    this.pushItem(genItems, genItemsByStoragePath, item);\r\n                  }\r\n                } catch (e: any) {\r\n                  // V--- add a breakpoint to the line below to catch validator exceptions (3 of 3) ---V\r\n                  genItems.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.internalProcessingError,\r\n                      fileGen.id,\r\n                      502,\r\n                      file.fullPath + \": \" + e.toString()\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n            if (StorageUtilities.isContainerFile(file.storageRelativePath)) {\r\n              const zipFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n              if (zipFolder && typeof zipFolder !== \"string\") {\r\n                await this.processFolder(\r\n                  project,\r\n                  zipFolder,\r\n                  genItems,\r\n                  genItemsByStoragePath,\r\n                  genContentIndex,\r\n                  fileGenerators,\r\n                  depth + 1\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (depth < 15) {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus && childFolder.name) {\r\n          if (ProjectInfoSet.isFolderThatShouldBeProcessed(childFolder)) {\r\n            await this.processFolder(\r\n              project,\r\n              childFolder,\r\n              genItems,\r\n              genItemsByStoragePath,\r\n              genContentIndex,\r\n              fileGenerators,\r\n              depth + 1\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static isFolderThatShouldBeProcessed(folder: IFolder): boolean {\r\n    const name = folder.name.toLowerCase();\r\n\r\n    if (name.startsWith(\".\") || name.startsWith(\"node_modules\")) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  generateProjectMetaInfo() {\r\n    this.info = {\r\n      capabilities: [],\r\n    };\r\n\r\n    const projGenerators: IProjectInfoGenerator[] = GeneratorRegistrations.projectGenerators;\r\n    const itemGenerators: IProjectItemInfoGenerator[] = GeneratorRegistrations.itemGenerators;\r\n    const fileGenerators: IProjectFileInfoGenerator[] = GeneratorRegistrations.fileGenerators;\r\n\r\n    for (let j = 0; j < projGenerators.length; j++) {\r\n      projGenerators[j].summarize(this.info, this);\r\n    }\r\n\r\n    for (let j = 0; j < itemGenerators.length; j++) {\r\n      itemGenerators[j].summarize(this.info, this);\r\n    }\r\n\r\n    for (let j = 0; j < fileGenerators.length; j++) {\r\n      fileGenerators[j].summarize(this.info, this);\r\n    }\r\n\r\n    for (let j = 0; j < projGenerators.length; j++) {\r\n      if (projGenerators[j] instanceof SummaryInfoGenerator) {\r\n        (projGenerators[j] as SummaryInfoGenerator).summarizePhase2(this.info, this);\r\n      }\r\n    }\r\n\r\n    this.aggregateFeatures();\r\n  }\r\n\r\n  addObjectsToArray(validatorName: string, validatorId: number, parentArray: object[]) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"object\") {\r\n          parentArray.push(item.data);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getFirstStringValue(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"string\") {\r\n          return item.data;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  removeItems(validatorName: string, validatorIds: number[]) {\r\n    const itemsNext = [];\r\n    for (const item of this.items) {\r\n      if (item.generatorId !== validatorName || !validatorIds.includes(item.generatorIndex)) {\r\n        itemsNext.push(item);\r\n      }\r\n    }\r\n\r\n    this.items = itemsNext;\r\n  }\r\n\r\n  getGeneratorForItem(item: ProjectInfoItem): IProjectInfoGeneratorBase | undefined {\r\n    const itemGens = GeneratorRegistrations.itemGenerators;\r\n\r\n    for (const itemGen of itemGens) {\r\n      if (itemGen.id === item.generatorId) {\r\n        return itemGen;\r\n      }\r\n    }\r\n\r\n    const fileGens = GeneratorRegistrations.fileGenerators;\r\n    for (const fileGen of fileGens) {\r\n      if (fileGen.id === item.generatorId) {\r\n        return fileGen;\r\n      }\r\n    }\r\n\r\n    const projGens = GeneratorRegistrations.projectGenerators;\r\n\r\n    for (const projGen of projGens) {\r\n      if (projGen.id === item.generatorId) {\r\n        return projGen;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getItemSummary(item: ProjectInfoItem) {\r\n    // First, try to get topic data from form.json file\r\n    const formTopicData = InfoGeneratorTopicUtilities.getTopicDataSync(item.generatorId, item.generatorIndex);\r\n    if (formTopicData) {\r\n      return formTopicData.title;\r\n    }\r\n\r\n    // Fall back to generator's getTopicData method if available\r\n    const gen = this.getGeneratorForItem(item);\r\n\r\n    if (gen && typeof (gen as IProjectInfoGeneratorBase).getTopicData === \"function\") {\r\n      const topic = (gen as IProjectInfoGeneratorBase).getTopicData!(item.generatorIndex);\r\n\r\n      if (topic) {\r\n        return topic.title;\r\n      }\r\n    }\r\n\r\n    return item.generatorId + \"-\" + item.generatorIndex;\r\n  }\r\n\r\n  /**\r\n   * Gets a stable key for aggregation purposes based on the form.json field title.\r\n   * Uses getItemSummary() which returns the form.json title (e.g., \"Texture Images\"),\r\n   * then convertToJsonKey() transforms it to camelCase (e.g., \"textureImages\").\r\n   * This produces consistent JSON keys in validation reports.\r\n   */\r\n  getItemAggregationKey(item: ProjectInfoItem) {\r\n    // Use getItemSummary which returns the form.json title or falls back to generator data\r\n    return this.getItemSummary(item);\r\n  }\r\n\r\n  aggregateFeatures() {\r\n    if (this.info === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.info.featureSets = {};\r\n\r\n    for (const item of this.items) {\r\n      if (item.featureSets) {\r\n        for (const featureSetName in item.featureSets) {\r\n          const featureSet = item.featureSets[featureSetName];\r\n\r\n          const aggFeatureSetName =\r\n            Utilities.convertToJsonKey(this.getItemAggregationKey(item)) +\r\n            \".\" +\r\n            Utilities.ensureFirstCharIsLowerCase(featureSetName);\r\n\r\n          for (const measureName in featureSet) {\r\n            const measure = featureSet[measureName];\r\n\r\n            if (typeof measure === \"number\") {\r\n              let feature = this.info.featureSets[aggFeatureSetName];\r\n\r\n              if (feature === undefined) {\r\n                feature = {};\r\n                this.info.featureSets[aggFeatureSetName] = feature;\r\n              }\r\n\r\n              let aggVal = feature[measureName];\r\n\r\n              if (aggVal === undefined) {\r\n                aggVal = measure;\r\n              } else if (measureName.startsWith(\"max_\")) {\r\n                aggVal = Math.max(aggVal, measure);\r\n              } else if (featureSetName.startsWith(\"min_\")) {\r\n                aggVal = Math.min(aggVal, measure);\r\n              } else {\r\n                aggVal += measure;\r\n              }\r\n\r\n              feature[measureName] = aggVal;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getFirstNumberDataValue(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"number\") {\r\n          return item.data;\r\n        }\r\n      }\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  getAverageFeatureValue(validatorName: string, validatorId: number, setName: string, measureName: string) {\r\n    let sum = 0;\r\n    let count = 0;\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        const feat = item.getFeatureMeasureNumber(setName, measureName);\r\n\r\n        if (typeof feat === \"number\") {\r\n          sum += feat;\r\n          count++;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (count === 0) {\r\n      return 0;\r\n    }\r\n\r\n    return sum / count;\r\n  }\r\n\r\n  getSummedFeatureValue(validatorName: string, validatorId: number, setName: string, measureName: string) {\r\n    let sum = 0;\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        const feat = item.getFeatureMeasureNumber(setName, measureName);\r\n\r\n        if (typeof feat === \"number\") {\r\n          sum += feat;\r\n        }\r\n      }\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  getFeaturesWithInstances(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        return item.getNonZeroFeatureMeasures();\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  getSummedDataValue(validatorName: string, validatorId: number) {\r\n    let sum = 0;\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        if (typeof item.data === \"number\") {\r\n          sum += item.data;\r\n        }\r\n      }\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  getCount(validatorName: string, validatorId: number) {\r\n    let sum = 0;\r\n\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId) {\r\n        sum++;\r\n      }\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  getMinNumberArrayValueAsVersionString(validatorName: string, validatorId: number) {\r\n    let minVerNum = -1;\r\n    let minVerStr = undefined;\r\n\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        let val = item.data;\r\n        if (typeof val === \"string\") {\r\n          const strArr = val.split(\".\");\r\n          const numArr: number[] = [];\r\n\r\n          for (const strNum of strArr) {\r\n            try {\r\n              const num = parseInt(strNum);\r\n              if (!isNaN(num)) {\r\n                numArr.push(num);\r\n              }\r\n            } catch (e) {\r\n              throw e;\r\n            }\r\n          }\r\n\r\n          val = numArr;\r\n        }\r\n\r\n        if (val instanceof Array && val.length && val.length > 0) {\r\n          let ret = \"\";\r\n          for (let i = 0; i < val.length; i++) {\r\n            if (ret.length > 0) {\r\n              ret += \".\";\r\n            }\r\n\r\n            ret += val[i];\r\n          }\r\n\r\n          const verNum = MinecraftUtilities.getVersionNumber(ret);\r\n\r\n          if (minVerNum < 0 || verNum < minVerNum) {\r\n            minVerNum = verNum;\r\n            minVerStr = ret;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return minVerStr;\r\n  }\r\n\r\n  getFirstNumberArrayValueAsVersionString(validatorName: string, validatorId: number) {\r\n    for (const item of this.items) {\r\n      if (item.generatorId === validatorName && item.generatorIndex === validatorId && item.data) {\r\n        const val = item.data;\r\n        if (typeof val === \"string\") {\r\n          return val;\r\n        } else if (val instanceof Array && val.length && val.length > 0) {\r\n          let ret = \"\";\r\n          for (let i = 0; i < val.length; i++) {\r\n            if (ret.length > 0) {\r\n              ret += \".\";\r\n            }\r\n\r\n            ret += val[i];\r\n          }\r\n\r\n          return ret;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async getInfoForItem(projectItem: ProjectItem, contentIndex: ContentIndex) {\r\n    const itemGenerators: IProjectItemInfoGenerator[] = GeneratorRegistrations.itemGenerators;\r\n    let genItems: ProjectInfoItem[] = [];\r\n\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    for (let j = 0; j < itemGenerators.length; j++) {\r\n      try {\r\n        const infoItems = await itemGenerators[j].generate(projectItem, contentIndex);\r\n\r\n        for (const infoItem of infoItems) {\r\n          genItems.push(infoItem);\r\n        }\r\n      } catch (e: any) {\r\n        genItems.push(\r\n          new ProjectInfoItem(InfoItemType.internalProcessingError, itemGenerators[j].id, 504, e.toString())\r\n        );\r\n      }\r\n    }\r\n\r\n    return genItems;\r\n  }\r\n\r\n  /**\r\n   * Gets the hash catalog as JSON string\r\n   */\r\n  getHashCatalogJson(): string {\r\n    return JSON.stringify(this.contentIndex.hashCatalog);\r\n  }\r\n}\r\n", "import Project from \"../app/Project\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { ProjectInfoSuite } from \"./IProjectInfoData\";\r\nimport IProjectMetaState from \"./IProjectMetaState\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\n\r\nexport default class ProjectInfoUtilities {\r\n  private static _generalTopicsById: Record<number, string> = {\r\n    0: \"Test Failure\",\r\n    1: \"Test Success\",\r\n    2: \"Test Not Applicable\",\r\n  };\r\n  static getTitleFromEnum(categoryEnum: { [name: number]: string }, topicId: number) {\r\n    if (categoryEnum[topicId]) {\r\n      return Utilities.humanifyJsName(categoryEnum[topicId]);\r\n    }\r\n\r\n    const generalTitle = this._generalTopicsById[topicId];\r\n    if (!!generalTitle) {\r\n      return generalTitle;\r\n    }\r\n\r\n    return \"General Item \" + topicId;\r\n  }\r\n\r\n  static getGeneralTopicTitle(topicId: number) {\r\n    return this._generalTopicsById[topicId];\r\n  }\r\n\r\n  static async getDerivedStates(project: Project, pisData: ProjectInfoSet) {\r\n    const isAddon = await ProjectUtilities.getIsAddon(project);\r\n    const derivedStates: IProjectMetaState[] = [];\r\n\r\n    if (isAddon) {\r\n      const pisAddon = new ProjectInfoSet(project, ProjectInfoSuite.cooperativeAddOn);\r\n\r\n      await pisAddon.generateForProject();\r\n\r\n      const projectSet = {\r\n        projectContainerName: project.containerName,\r\n        projectPath: project.projectFolder?.storageRelativePath,\r\n        projectName: project.name,\r\n        projectTitle: project.title,\r\n        infoSetData: pisAddon.getDataObject(),\r\n        suite: ProjectInfoSuite.cooperativeAddOn,\r\n      };\r\n\r\n      derivedStates.push(projectSet);\r\n    }\r\n\r\n    const pisSharing = new ProjectInfoSet(project, ProjectInfoSuite.sharing);\r\n    await pisSharing.generateForProject();\r\n\r\n    const sharing = {\r\n      projectContainerName: project.containerName,\r\n      projectPath: project.projectFolder?.storageRelativePath,\r\n      projectName: project.name,\r\n      projectTitle: project.title,\r\n      infoSetData: pisSharing.getDataObject(),\r\n      suite: ProjectInfoSuite.cooperativeAddOn,\r\n    };\r\n\r\n    derivedStates.push(sharing);\r\n\r\n    const shouldRunPlatformVersion = (pisData.info as any)[\"CWave\"] !== undefined;\r\n\r\n    if (shouldRunPlatformVersion) {\r\n      const pisPlatforMVersion = new ProjectInfoSet(project, ProjectInfoSuite.currentPlatformVersions);\r\n\r\n      await pisPlatforMVersion.generateForProject();\r\n\r\n      const projectSet = {\r\n        projectContainerName: project.containerName,\r\n        projectPath: project.projectFolder?.storageRelativePath,\r\n        projectName: project.name,\r\n        projectTitle: project.title,\r\n        infoSetData: pisPlatforMVersion.getDataObject(),\r\n        suite: ProjectInfoSuite.currentPlatformVersions,\r\n      };\r\n\r\n      derivedStates.push(projectSet);\r\n    }\r\n\r\n    return derivedStates;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IAddonManifest, { IResourcePackManifest } from \"../minecraft/IAddonManifest\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\n\r\nconst MemoryTierBase = 40;\r\n\r\nexport enum PackInfoGeneratorTest {\r\n  behaviorPackName = 104,\r\n  behaviorPackDescription = 105,\r\n  behaviorPackId = 106,\r\n  behaviorPackMinEngineVersion = 107,\r\n  behaviorPackUuid = 108,\r\n  behaviorPackManifest = 109,\r\n  resourcePackMinEngineVersion = 111,\r\n  resourcePackUuid = 112,\r\n  resourcePackManifest = 113,\r\n  resourcePackName = 114,\r\n  resourcePackDescription = 115,\r\n  resourcePackId = 116,\r\n  resourcePackFormatVersion = 117,\r\n  subPacks = 118,\r\n  resourcePackIcon = 121,\r\n  behaviorPackIcon = 122,\r\n  skinPackIcon = 123,\r\n  subpackTiers = 245,\r\n}\r\n\r\n/**\r\n * Aggregates general pack information from manifests (names, descriptions, UUIDs, etc.).\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/pack.form.json} for topic definitions\r\n */\r\nexport default class PackInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"PACK\";\r\n  title = \"General info\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.defaultBehaviorPackUuid = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.behaviorPackUuid);\r\n\r\n    info.defaultIcon = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.resourcePackIcon);\r\n\r\n    if (info.defaultIcon === undefined) {\r\n      info.defaultIcon = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.behaviorPackIcon);\r\n    }\r\n\r\n    // because it's heavy, remove pack icon from this list of issues. Though the summarize op is probably\r\n    // the wrong place to do this.\r\n    infoSet.removeItems(this.id, [PackInfoGeneratorTest.resourcePackIcon, PackInfoGeneratorTest.behaviorPackIcon]);\r\n\r\n    info.defaultBehaviorPackMinEngineVersion = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n    );\r\n\r\n    info.minBehaviorPackMinEngineVersionString = infoSet.getMinNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n    );\r\n\r\n    info.minBehaviorPackMinEngineVersion = MinecraftUtilities.getVersionNumber(\r\n      info.minBehaviorPackMinEngineVersionString\r\n    );\r\n\r\n    info.defaultBehaviorPackName = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackName\r\n    );\r\n\r\n    info.defaultBehaviorPackDescription = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.behaviorPackDescription\r\n    );\r\n\r\n    info.defaultResourcePackUuid = infoSet.getFirstStringValue(this.id, PackInfoGeneratorTest.resourcePackUuid);\r\n\r\n    info.defaultResourcePackMinEngineVersion = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackMinEngineVersion\r\n    );\r\n\r\n    info.minResourcePackMinEngineVersionString = infoSet.getMinNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackMinEngineVersion\r\n    );\r\n\r\n    info.minResourcePackMinEngineVersion = MinecraftUtilities.getVersionNumber(\r\n      info.minResourcePackMinEngineVersionString\r\n    );\r\n\r\n    info.defaultResourcePackName = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackName\r\n    );\r\n\r\n    info.defaultResourcePackDescription = infoSet.getFirstNumberArrayValueAsVersionString(\r\n      this.id,\r\n      PackInfoGeneratorTest.resourcePackDescription\r\n    );\r\n\r\n    info.subpackCount = infoSet.getFirstNumberDataValue(this.id, PackInfoGeneratorTest.subPacks);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const memoryTiersPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      PackInfoGeneratorTest.subpackTiers,\r\n      \"Entity Geometry\"\r\n    );\r\n\r\n    const items: ProjectInfoItem[] = [memoryTiersPi];\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.packIconImage) {\r\n        const itemFile = pi.primaryFile;\r\n        if (itemFile) {\r\n          if (\r\n            StorageUtilities.getBaseFromName(itemFile.name) === \"pack_icon\" &&\r\n            StorageUtilities.getTypeFromName(itemFile.name) === \"png\"\r\n          ) {\r\n            if (!itemFile.isContentLoaded) {\r\n              await itemFile.loadContent(false);\r\n            }\r\n\r\n            if (itemFile.content && typeof itemFile.content !== \"string\") {\r\n              let index = PackInfoGeneratorTest.resourcePackIcon;\r\n\r\n              if (MinecraftUtilities.pathLooksLikeBehaviorPackName(itemFile.storageRelativePath)) {\r\n                index = PackInfoGeneratorTest.behaviorPackIcon;\r\n              } else if (MinecraftUtilities.pathLooksLikeSkinPackName(itemFile.storageRelativePath)) {\r\n                index = PackInfoGeneratorTest.skinPackIcon;\r\n              }\r\n\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  index,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, index),\r\n                  pi,\r\n                  Utilities.uint8ArrayToBase64(itemFile.content)\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        const obj = (await pi.getJsonObject()) as IAddonManifest;\r\n\r\n        if (obj) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              PackInfoGeneratorTest.behaviorPackManifest,\r\n              ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackManifest),\r\n              pi\r\n            )\r\n          );\r\n\r\n          if (obj.format_version) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                PackInfoGeneratorTest.behaviorPackMinEngineVersion,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  PackInfoGeneratorTest,\r\n                  PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n                ),\r\n                pi,\r\n                obj.format_version\r\n              )\r\n            );\r\n          }\r\n\r\n          if (obj.header) {\r\n            if (obj.header.uuid) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackUuid,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackUuid),\r\n                  pi,\r\n                  obj.header.uuid\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.uuid && obj.header.version) {\r\n              if (obj.header.version.length === 3) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.info,\r\n                    this.id,\r\n                    PackInfoGeneratorTest.behaviorPackId,\r\n                    ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackId),\r\n                    pi,\r\n                    obj.header.uuid +\r\n                      \"|\" +\r\n                      obj.header.version[0] +\r\n                      \".\" +\r\n                      obj.header.version[1] +\r\n                      \".\" +\r\n                      obj.header.version[2]\r\n                  )\r\n                );\r\n              }\r\n            }\r\n\r\n            if (obj.header.name) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackName,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.behaviorPackName),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.name)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.description) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackDescription,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.behaviorPackDescription\r\n                  ),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.description)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.min_engine_version) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.behaviorPackMinEngineVersion,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.behaviorPackMinEngineVersion\r\n                  ),\r\n                  pi,\r\n                  obj.header.min_engine_version\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        const obj = (await pi.getJsonObject()) as IResourcePackManifest;\r\n\r\n        if (obj) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              PackInfoGeneratorTest.resourcePackManifest,\r\n              ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackManifest),\r\n              pi\r\n            )\r\n          );\r\n\r\n          if (obj.subpacks) {\r\n            if (Array.isArray(obj.subpacks)) {\r\n              items.push(new ProjectInfoItem(InfoItemType.info, this.id, 18, \"Subpacks\", pi, obj.subpacks.length));\r\n\r\n              for (const sp of obj.subpacks) {\r\n                if (sp.memory_tier) {\r\n                  memoryTiersPi.spectrumIntFeature(\"Memory Tier\", sp.memory_tier);\r\n\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.info,\r\n                      this.id,\r\n                      MemoryTierBase + sp.memory_tier,\r\n                      \"Subpack Memory Tier \" + sp.memory_tier,\r\n                      pi,\r\n                      sp.name\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          if (obj.format_version) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                PackInfoGeneratorTest.resourcePackFormatVersion,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  PackInfoGeneratorTest,\r\n                  PackInfoGeneratorTest.resourcePackFormatVersion\r\n                ),\r\n                pi,\r\n                obj.format_version\r\n              )\r\n            );\r\n          }\r\n\r\n          if (obj.header) {\r\n            if (obj.header.uuid) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackUuid,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackUuid),\r\n                  pi,\r\n                  obj.header.uuid\r\n                )\r\n              );\r\n            }\r\n            if (obj.header.uuid && obj.header.version) {\r\n              if (obj.header.version.length === 3) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.info,\r\n                    this.id,\r\n                    PackInfoGeneratorTest.resourcePackId,\r\n                    ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackId),\r\n                    pi,\r\n                    obj.header.uuid +\r\n                      \"|\" +\r\n                      obj.header.version[0] +\r\n                      \".\" +\r\n                      obj.header.version[1] +\r\n                      \".\" +\r\n                      obj.header.version[2]\r\n                  )\r\n                );\r\n              }\r\n            }\r\n\r\n            if (obj.header.name) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackName,\r\n                  ProjectInfoUtilities.getTitleFromEnum(PackInfoGeneratorTest, PackInfoGeneratorTest.resourcePackName),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.name)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.description) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackDescription,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.resourcePackDescription\r\n                  ),\r\n                  pi,\r\n                  project.loc.getExpandedValue(obj.header.description)\r\n                )\r\n              );\r\n            }\r\n\r\n            if (obj.header.min_engine_version) {\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.info,\r\n                  this.id,\r\n                  PackInfoGeneratorTest.resourcePackMinEngineVersion,\r\n                  ProjectInfoUtilities.getTitleFromEnum(\r\n                    PackInfoGeneratorTest,\r\n                    PackInfoGeneratorTest.resourcePackMinEngineVersion\r\n                  ),\r\n                  pi,\r\n                  obj.header.min_engine_version\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemStorageType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport { MaxItemTypes } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nconst TopicTestIdBase = 100;\r\n\r\n/**\r\n * Aggregates file line counts and size information by content type.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/linesize.form.json} for topic definitions\r\n */\r\nexport default class LineSizeInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"LINESIZE\";\r\n  title = \"File Line/Size Information\";\r\n  canAlwaysProcess = true;\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId >= TopicTestIdBase) {\r\n      return {\r\n        title: ProjectItemUtilities.getDescriptionForType(topicId - TopicTestIdBase),\r\n      };\r\n    }\r\n\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const itemsByType: { [index: number]: ProjectInfoItem } = {};\r\n    const lineSizeCounts: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      lineSizeCounts[i] = 0;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n      let projInfoItem = undefined;\r\n\r\n      if (itemsByType[pi.itemType] !== undefined) {\r\n        projInfoItem = itemsByType[pi.itemType];\r\n      } else {\r\n        const name =\r\n          ProjectItemUtilities.getDescriptionForType(pi.itemType) +\r\n          \" file \" +\r\n          (ProjectItemUtilities.isBinaryType(pi.itemType) ? \"size\" : \"lines\");\r\n\r\n        projInfoItem = new ProjectInfoItem(InfoItemType.featureAggregate, this.id, TopicTestIdBase + pi.itemType, name);\r\n        itemsByType[pi.itemType] = projInfoItem;\r\n        items.push(projInfoItem);\r\n      }\r\n\r\n      if (pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        const file = pi.primaryFile;\r\n\r\n        if (file) {\r\n          if (!file.isContentLoaded) {\r\n            await file.loadContent();\r\n          }\r\n\r\n          projInfoItem.spectrumIntFeature(\"size\", file.coreContentLength);\r\n\r\n          const content = file.content;\r\n          if (content && typeof content === \"string\") {\r\n            projInfoItem.spectrumIntFeature(\"lines\", Utilities.countSignificantLines(content));\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum ComparisonType {\r\n  equals = \"=\",\r\n  lessThan = \"<\",\r\n  lessThanOrEqualTo = \"<=\",\r\n  greaterThan = \">\",\r\n  greaterThanOrEqualTo = \">=\",\r\n  isDefined = \"defined\",\r\n  isLiterallyDefined = \"literallyDefined\",\r\n  isNonEmpty = \"nonempty\",\r\n  matchesPattern = \"pattern\",\r\n}\r\n\r\n/**\r\n * Represents a condition that can be evaluated against data.\r\n *\r\n * Conditions are used to determine visibility of fields, validity of data,\r\n * and for summarizer token switching logic.\r\n *\r\n * @example\r\n * // Check if a field equals a specific value\r\n * { \"field\": \"max\", \"comparison\": \"=\", \"value\": 100 }\r\n *\r\n * @example\r\n * // Check if a boolean field is true\r\n * { \"field\": \"can_fly\", \"comparison\": \"=\", \"value\": true }\r\n *\r\n * @example\r\n * // Check if a numeric field is greater than a threshold\r\n * { \"field\": \"health\", \"comparison\": \">\", \"value\": 50 }\r\n *\r\n * @example\r\n * // Check if a field is defined (not undefined/null)\r\n * { \"field\": \"loot_table\", \"comparison\": \"defined\" }\r\n */\r\nexport default interface ICondition {\r\n  /**\r\n   * The field path to check. Supports dot notation for nested fields.\r\n   * @example \"max\", \"damage.min\", \"components.health\"\r\n   */\r\n  field?: string;\r\n\r\n  /**\r\n   * The comparison operation to perform.\r\n   */\r\n  comparison: ComparisonType | string;\r\n\r\n  /**\r\n   * The value to compare against.\r\n   * Supports numbers, strings, and booleans.\r\n   */\r\n  value?: number | string | boolean;\r\n\r\n  /**\r\n   * Alternative: match if the field value equals ANY of these values.\r\n   * Useful for enum-like checks.\r\n   */\r\n  anyValues?: number[] | string[] | boolean[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * # Summarizer Token Types\r\n *\r\n * This file defines the token types used to build summarizer phrases. A summarizer\r\n * produces natural language descriptions of structured data by evaluating a tree\r\n * of tokens against the data.\r\n *\r\n * ## Design Philosophy\r\n *\r\n * Summarizer tokens are designed to be:\r\n * - **AI-friendly**: Clear, self-documenting JSON that models can generate\r\n * - **Composable**: Tokens can be nested to build complex phrases\r\n * - **Conditional**: Any token can be hidden based on data conditions\r\n * - **Grammatically aware**: Built-in support for lists, plurals, and conjunctions\r\n *\r\n * ## Mini Style Guide for Writing Summarizers\r\n *\r\n * ### Phrase Structure\r\n * Phrases are designed to complete \"This object ____\", so they typically:\r\n * - Start with a verb: \"has\", \"can\", \"will\", \"is\", \"deals\", \"takes\"\r\n * - Use present tense for capabilities: \"can fly\", \"deals fire damage\"\r\n * - Use descriptive adjectives: \"extremely high\", \"dangerously low\", \"moderate\"\r\n *\r\n * ### Good Examples:\r\n * - \"has extremely high health (500 HP, stronger than an Ender Dragon)\"\r\n * - \"will catch fire when exposed to sunlight\"\r\n * - \"can teleport when attacked\"\r\n * - \"deals 15 damage per hit, which is enough to one-shot most passive mobs\"\r\n * - \"has a 25% chance to drop rare loot\"\r\n *\r\n * ### Avoid:\r\n * - Starting with articles: \"a high health mob\" \u274C\r\n * - Sentence fragments: \"health: 500\" \u274C\r\n * - Just stating values: \"has 500 health\" (prefer comparisons when possible)\r\n * - Passive voice when active is clearer: \"is damaged by fire\" vs \"takes fire damage\"\r\n *\r\n * ### Comparisons Make Data Meaningful\r\n * Raw numbers often mean little to readers. Use comparisons to known entities:\r\n * - \"stronger than an Iron Golem\" (100 HP)\r\n * - \"as fast as a Spider\" (0.3 speed)\r\n * - \"more health than an Ender Dragon\" (200 HP)\r\n * - \"can one-shot a Zombie\" (20 HP)\r\n *\r\n * ### When to Use Each Token Type\r\n *\r\n * | Token Type | Use When... | Example |\r\n * |------------|-------------|---------|\r\n * | literal | Static text that never changes | \"has \", \"HP\", \"per second\" |\r\n * | value | Showing the actual field value | \"{damage} damage\" \u2192 \"15 damage\" |\r\n * | switch | Describing value in qualitative terms | value>100 \u2192 \"extremely high\" |\r\n * | list | Multiple conditional items | \"can fly, swim, and teleport\" |\r\n * | template | Inserting values into sentences | \"deals {damage} {type} damage\" |\r\n * | plural | Singular/plural based on count | \"1 item\" vs \"5 items\" |\r\n * | reference | Comparing to known values | \"more than a Zombie's health\" |\r\n * | sample | Using example values from the form | \"like the Warden (500 HP)\" |\r\n * | unit | Formatting values with units | \"200 ticks (10 seconds)\" |\r\n * | exists | Checking if field is defined | \"has custom loot\" (if loot_table defined) |\r\n * | group | Grouping tokens for visibility | Wrap related tokens together |\r\n */\r\n\r\nimport ICondition from \"./ICondition\";\r\n\r\n/**\r\n * Semantic emphasis level for token display.\r\n *\r\n * Use semantic emphasis rather than literal styling (bold, italic) so that\r\n * the rendering can adapt to different themes and contexts.\r\n *\r\n * @example\r\n * // Make a value stand out\r\n * { \"type\": \"value\", \"field\": \"max\", \"effects\": { \"emphasis\": \"strong\" } }\r\n */\r\nexport enum SummarizerEmphasis {\r\n  /** Normal text weight, no special styling */\r\n  normal = \"normal\",\r\n  /** Make text stand out (typically bold or highlighted) */\r\n  strong = \"strong\",\r\n  /** De-emphasize text (typically lighter/smaller) */\r\n  subtle = \"subtle\",\r\n}\r\n\r\n/**\r\n * Semantic sentiment for color-coding tokens.\r\n *\r\n * Sentiment indicates the \"meaning\" of a value, allowing the renderer to\r\n * apply appropriate colors that work across themes.\r\n *\r\n * @example\r\n * // Show high health as positive (green)\r\n * { \"type\": \"value\", \"field\": \"max\", \"effects\": { \"sentiment\": \"positive\" } }\r\n *\r\n * // Show low health as negative (red)\r\n * { \"type\": \"literal\", \"text\": \"very low health\", \"effects\": { \"sentiment\": \"negative\" } }\r\n */\r\nexport enum SummarizerSentiment {\r\n  /** No special color treatment */\r\n  neutral = \"neutral\",\r\n  /** Good/desirable value (typically green) */\r\n  positive = \"positive\",\r\n  /** Bad/dangerous value (typically red) */\r\n  negative = \"negative\",\r\n  /** Caution/attention needed (typically yellow/orange) */\r\n  warning = \"warning\",\r\n  /** Informational highlight (typically blue) */\r\n  info = \"info\",\r\n}\r\n\r\n/**\r\n * Semantic role for consistent styling of different token types.\r\n *\r\n * This provides a way to ensure consistent styling for similar content\r\n * across different summarizers.\r\n *\r\n * @example\r\n * // Style as a value (might be monospace or highlighted)\r\n * { \"type\": \"value\", \"field\": \"damage\", \"effects\": { \"role\": \"value\" } }\r\n */\r\nexport enum SummarizerRole {\r\n  /** Plain text, no special role */\r\n  text = \"text\",\r\n  /** A data value (number, identifier) */\r\n  value = \"value\",\r\n  /** A unit label (HP, blocks, seconds) */\r\n  unit = \"unit\",\r\n  /** A label or category name */\r\n  label = \"label\",\r\n  /** A comparison or reference */\r\n  comparison = \"comparison\",\r\n}\r\n\r\n/**\r\n * Visual effects that can be applied to tokens for richer display.\r\n *\r\n * Effects are OPTIONAL and purely for enhanced rendering. The summarizer\r\n * will always produce valid plain text output regardless of effects.\r\n *\r\n * ## Design Philosophy\r\n *\r\n * Effects use SEMANTIC values (positive/negative, strong/subtle) rather than\r\n * literal styling (red, bold) so that:\r\n * - They adapt to light/dark themes\r\n * - They work with accessibility requirements\r\n * - They degrade gracefully to plain text\r\n *\r\n * ## When to Use Effects\r\n *\r\n * - **emphasis: \"strong\"** - For key values you want to stand out\r\n * - **emphasis: \"subtle\"** - For parenthetical context or units\r\n * - **sentiment: \"positive\"** - High health, good stats, buffs\r\n * - **sentiment: \"negative\"** - Low health, weaknesses, debuffs\r\n * - **sentiment: \"warning\"** - Dangerous abilities, caution needed\r\n * - **badge: true** - For categories, tags, or short labels\r\n * - **icon** - For visual flair (emoji work well)\r\n *\r\n * @example\r\n * // A token with multiple effects\r\n * {\r\n *   \"type\": \"value\",\r\n *   \"field\": \"max\",\r\n *   \"effects\": {\r\n *     \"emphasis\": \"strong\",\r\n *     \"sentiment\": \"positive\",\r\n *     \"icon\": \"\u2764\uFE0F\"\r\n *   }\r\n * }\r\n */\r\nexport interface ISummarizerEffects {\r\n  /**\r\n   * Emphasis level for the token.\r\n   * @default \"normal\"\r\n   */\r\n  emphasis?: SummarizerEmphasis | string;\r\n\r\n  /**\r\n   * Semantic sentiment for color-coding.\r\n   * @default \"neutral\"\r\n   */\r\n  sentiment?: SummarizerSentiment | string;\r\n\r\n  /**\r\n   * Semantic role for consistent styling.\r\n   * @default \"text\"\r\n   */\r\n  role?: SummarizerRole | string;\r\n\r\n  /**\r\n   * Render as a badge/pill shape.\r\n   * Good for short categories or tags like \"ranged\", \"explosive\", \"boss\".\r\n   * @default false\r\n   */\r\n  badge?: boolean;\r\n\r\n  /**\r\n   * Optional icon to display before the token text.\r\n   * Can be an emoji (\u2764\uFE0F, \u2694\uFE0F, \uD83C\uDFC3) or an icon identifier.\r\n   *\r\n   * @example\r\n   * // Emoji icon\r\n   * { \"icon\": \"\u2764\uFE0F\" }\r\n   *\r\n   * // Named icon (for icon font integration)\r\n   * { \"icon\": \"heart\" }\r\n   */\r\n  icon?: string;\r\n\r\n  /**\r\n   * Position of the icon relative to the text.\r\n   * @default \"before\"\r\n   */\r\n  iconPosition?: \"before\" | \"after\";\r\n}\r\n\r\n/**\r\n * Enumeration of all summarizer token types.\r\n *\r\n * @example\r\n * // A simple literal token\r\n * { \"type\": \"literal\", \"text\": \"has \" }\r\n *\r\n * @example\r\n * // A switch token for qualitative descriptions\r\n * {\r\n *   \"type\": \"switch\",\r\n *   \"cases\": [\r\n *     { \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"extremely high health\" }] }\r\n *   ]\r\n * }\r\n */\r\nexport enum SummarizerTokenType {\r\n  /**\r\n   * Outputs a static text string. The most basic token type.\r\n   * @example { \"type\": \"literal\", \"text\": \"has \" }\r\n   */\r\n  literal = \"literal\",\r\n\r\n  /**\r\n   * Inserts the value of a field from the data object.\r\n   * @example { \"type\": \"value\", \"field\": \"max\", \"format\": \"number\" }\r\n   */\r\n  value = \"value\",\r\n\r\n  /**\r\n   * Selects one of several token arrays based on conditions.\r\n   * Essential for qualitative descriptions (\"low\", \"medium\", \"high\").\r\n   * @example See ISwitchToken for full example\r\n   */\r\n  switch = \"switch\",\r\n\r\n  /**\r\n   * Renders a grammatically correct list of items.\r\n   * Handles \"a\", \"a and b\", \"a, b, and c\" automatically.\r\n   * @example See IListToken for full example\r\n   */\r\n  list = \"list\",\r\n\r\n  /**\r\n   * String interpolation with named placeholders.\r\n   * Useful for complex phrases with multiple values.\r\n   * @example { \"type\": \"template\", \"template\": \"deals {damage} {type} damage\" }\r\n   */\r\n  template = \"template\",\r\n\r\n  /**\r\n   * Handles singular/plural forms based on a numeric field.\r\n   * @example \"1 heart\" vs \"5 hearts\"\r\n   */\r\n  plural = \"plural\",\r\n\r\n  /**\r\n   * Pulls a sample value from the form definition to use as a reference.\r\n   * Encourages AI to use real-world examples from the data.\r\n   * @example { \"type\": \"sample\", \"samplePath\": \"entities/warden\", \"field\": \"max\" }\r\n   */\r\n  sample = \"sample\",\r\n\r\n  /**\r\n   * Formats a value with units and optional conversion.\r\n   * @example \"200 ticks (10 seconds)\"\r\n   */\r\n  unit = \"unit\",\r\n\r\n  /**\r\n   * Outputs tokens only if a field is defined (or undefined).\r\n   * @example \"has a custom loot table\" (only if loot_table exists)\r\n   */\r\n  exists = \"exists\",\r\n\r\n  /**\r\n   * Groups tokens together, useful for applying visibility to multiple tokens.\r\n   * @example Wrap \"(stronger than X)\" in a group with visibility condition\r\n   */\r\n  group = \"group\",\r\n\r\n  /**\r\n   * Joins child token arrays with a conjunction (\"and\", \"or\", \"but\").\r\n   * @example \"can fly and swim\" or \"immune to fire but weak to water\"\r\n   */\r\n  conjunction = \"conjunction\",\r\n}\r\n\r\n/**\r\n * Algorithms for making values more human-readable.\r\n *\r\n * @example\r\n * // In a value token:\r\n * { \"type\": \"value\", \"field\": \"entity_type\", \"humanify\": \"minecraft\" }\r\n * // Converts \"minecraft:zombie_pigman\" \u2192 \"Zombie Pigman\"\r\n */\r\nexport enum SummarizerHumanifyType {\r\n  /**\r\n   * No transformation, output the raw value.\r\n   */\r\n  none = \"none\",\r\n\r\n  /**\r\n   * General humanification: underscores to spaces, title case.\r\n   * \"my_cool_thing\" \u2192 \"My Cool Thing\"\r\n   */\r\n  general = \"general\",\r\n\r\n  /**\r\n   * Minecraft-specific humanification: removes namespace, converts to title case.\r\n   * \"minecraft:zombie_pigman\" \u2192 \"Zombie Pigman\"\r\n   * \"custom:my_entity\" \u2192 \"My Entity\"\r\n   */\r\n  minecraft = \"minecraft\",\r\n\r\n  /**\r\n   * Capitalize first letter only.\r\n   * \"hello world\" \u2192 \"Hello world\"\r\n   */\r\n  sentence = \"sentence\",\r\n}\r\n\r\n/**\r\n * Base interface for all summarizer tokens.\r\n *\r\n * Every token can have:\r\n * - Conditional visibility (appears only when conditions are met)\r\n * - Priority for truncation (lower number = more important)\r\n *\r\n * @example\r\n * // A token that only appears when health > 100\r\n * {\r\n *   \"type\": \"literal\",\r\n *   \"text\": \" (that's really tanky!)\",\r\n *   \"visibility\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }]\r\n * }\r\n */\r\nexport interface ISummarizerTokenBase {\r\n  /**\r\n   * The type of token. Determines how the token is evaluated.\r\n   */\r\n  type: SummarizerTokenType | string;\r\n\r\n  /**\r\n   * Optional conditions that must ALL be true for this token to appear.\r\n   * Uses the same ICondition format as field visibility in forms.\r\n   *\r\n   * @example\r\n   * // Only show when health is defined and greater than 100\r\n   * \"visibility\": [\r\n   *   { \"field\": \"max\", \"comparison\": \"defined\" },\r\n   *   { \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }\r\n   * ]\r\n   */\r\n  visibility?: ICondition[];\r\n\r\n  /**\r\n   * Priority for truncation when space is limited.\r\n   * Lower numbers are more important and will be kept.\r\n   * - Priority 1: Essential information, always show\r\n   * - Priority 2: Important details\r\n   * - Priority 3: Nice-to-have comparisons\r\n   * - Priority 4+: Optional flavor text\r\n   *\r\n   * @default 2\r\n   */\r\n  priority?: number;\r\n\r\n  /**\r\n   * Visual effects for enhanced rendering.\r\n   *\r\n   * Effects are optional and purely for display enhancement.\r\n   * The summarizer always produces valid plain text regardless of effects.\r\n   *\r\n   * @example\r\n   * // Make a value stand out with icon and positive sentiment\r\n   * {\r\n   *   \"type\": \"value\",\r\n   *   \"field\": \"max\",\r\n   *   \"effects\": {\r\n   *     \"emphasis\": \"strong\",\r\n   *     \"sentiment\": \"positive\",\r\n   *     \"icon\": \"\u2764\uFE0F\"\r\n   *   }\r\n   * }\r\n   */\r\n  effects?: ISummarizerEffects;\r\n}\r\n\r\n/**\r\n * Literal token: outputs static text.\r\n *\r\n * @example\r\n * // Simple text\r\n * { \"type\": \"literal\", \"text\": \"has \" }\r\n *\r\n * @example\r\n * // With conditional visibility - only show parenthetical for high values\r\n * {\r\n *   \"type\": \"literal\",\r\n *   \"text\": \" (that's incredibly powerful!)\",\r\n *   \"visibility\": [{ \"field\": \"damage\", \"comparison\": \">\", \"value\": 50 }],\r\n *   \"priority\": 3\r\n * }\r\n */\r\nexport interface ILiteralToken extends ISummarizerTokenBase {\r\n  type: \"literal\";\r\n\r\n  /**\r\n   * The literal text to output.\r\n   */\r\n  text: string;\r\n}\r\n\r\n/**\r\n * Value token: inserts a field value from the data object.\r\n *\r\n * @example\r\n * // Simple value insertion\r\n * { \"type\": \"value\", \"field\": \"max\" }\r\n * // With data { \"max\": 100 } \u2192 \"100\"\r\n *\r\n * @example\r\n * // With humanification for Minecraft identifiers\r\n * { \"type\": \"value\", \"field\": \"entity_type\", \"humanify\": \"minecraft\" }\r\n * // With data { \"entity_type\": \"minecraft:zombie\" } \u2192 \"Zombie\"\r\n *\r\n * @example\r\n * // With number formatting\r\n * { \"type\": \"value\", \"field\": \"chance\", \"format\": \"percent\" }\r\n * // With data { \"chance\": 0.25 } \u2192 \"25%\"\r\n */\r\nexport interface IValueToken extends ISummarizerTokenBase {\r\n  type: \"value\";\r\n\r\n  /**\r\n   * The field path to get the value from.\r\n   * Supports dot notation for nested fields: \"damage.min\"\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * Optional format for the value.\r\n   * - \"number\": Format as locale number (1,000)\r\n   * - \"percent\": Multiply by 100 and add % (0.25 \u2192 \"25%\")\r\n   * - \"decimal:N\": Round to N decimal places\r\n   */\r\n  format?: string;\r\n\r\n  /**\r\n   * Algorithm to make the value more human-readable.\r\n   * @default \"none\"\r\n   */\r\n  humanify?: SummarizerHumanifyType | string;\r\n\r\n  /**\r\n   * Fallback text if the field is undefined.\r\n   * @default \"\" (empty string)\r\n   */\r\n  fallback?: string;\r\n}\r\n\r\n/**\r\n * A single case in a switch token.\r\n *\r\n * @example\r\n * {\r\n *   \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 200 }],\r\n *   \"tokens\": [{ \"type\": \"literal\", \"text\": \"extremely high health\" }]\r\n * }\r\n */\r\nexport interface ISwitchCase {\r\n  /**\r\n   * Conditions that must ALL be true for this case to be selected.\r\n   */\r\n  conditions: ICondition[];\r\n\r\n  /**\r\n   * Tokens to output when this case is selected.\r\n   */\r\n  tokens: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * Switch token: selects tokens based on conditions.\r\n *\r\n * Cases are evaluated in order, and the first matching case is used.\r\n * If no case matches, the default tokens are used (if provided).\r\n *\r\n * ## Best Practice: Order Cases from Most to Least Specific\r\n *\r\n * @example\r\n * // Describing health levels with rich comparisons\r\n * {\r\n *   \"type\": \"switch\",\r\n *   \"cases\": [\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 500 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"god-tier health, rivaling a Wither\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 200 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"extremely high health, tougher than an Ender Dragon\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"high health, like an Iron Golem\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 40 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"above-average health\" }]\r\n *     },\r\n *     {\r\n *       \"conditions\": [{ \"field\": \"max\", \"comparison\": \"<\", \"value\": 10 }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"very fragile, weaker than a Chicken\" }]\r\n *     }\r\n *   ],\r\n *   \"default\": [{ \"type\": \"literal\", \"text\": \"typical health for a mob\" }]\r\n * }\r\n */\r\nexport interface ISwitchToken extends ISummarizerTokenBase {\r\n  type: \"switch\";\r\n\r\n  /**\r\n   * Ordered list of cases. First matching case wins.\r\n   */\r\n  cases: ISwitchCase[];\r\n\r\n  /**\r\n   * Tokens to output if no case matches.\r\n   */\r\n  default?: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * List token: renders items as a grammatically correct list.\r\n *\r\n * Automatically handles:\r\n * - Empty list: outputs emptyText or nothing\r\n * - Single item: just the item\r\n * - Two items: \"A and B\"\r\n * - Three+ items: \"A, B, and C\"\r\n *\r\n * Only items whose tokens produce non-empty output are included.\r\n *\r\n * @example\r\n * // List of capabilities\r\n * {\r\n *   \"type\": \"list\",\r\n *   \"items\": [\r\n *     {\r\n *       \"visibility\": [{ \"field\": \"can_fly\", \"comparison\": \"=\", \"value\": true }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"fly\" }]\r\n *     },\r\n *     {\r\n *       \"visibility\": [{ \"field\": \"can_swim\", \"comparison\": \"=\", \"value\": true }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"swim\" }]\r\n *     },\r\n *     {\r\n *       \"visibility\": [{ \"field\": \"can_teleport\", \"comparison\": \"=\", \"value\": true }],\r\n *       \"tokens\": [{ \"type\": \"literal\", \"text\": \"teleport\" }]\r\n *     }\r\n *   ],\r\n *   \"prefix\": [{ \"type\": \"literal\", \"text\": \"can \" }],\r\n *   \"emptyText\": \"has no special movement abilities\"\r\n * }\r\n * // With can_fly=true, can_teleport=true \u2192 \"can fly and teleport\"\r\n * // With all three true \u2192 \"can fly, swim, and teleport\"\r\n */\r\nexport interface IListToken extends ISummarizerTokenBase {\r\n  type: \"list\";\r\n\r\n  /**\r\n   * Each item is an object with optional visibility and required tokens.\r\n   */\r\n  items: IListItem[];\r\n\r\n  /**\r\n   * Separator between items (except the last two).\r\n   * @default \", \"\r\n   */\r\n  separator?: string;\r\n\r\n  /**\r\n   * Separator before the last item when there are 3+ items.\r\n   * @default \", and \"\r\n   */\r\n  finalSeparator?: string;\r\n\r\n  /**\r\n   * Separator when there are exactly 2 items.\r\n   * @default \" and \"\r\n   */\r\n  twoItemSeparator?: string;\r\n\r\n  /**\r\n   * Text to output when no items are visible.\r\n   * If not provided, the entire list token outputs nothing.\r\n   */\r\n  emptyText?: string;\r\n\r\n  /**\r\n   * Tokens to output before the list (only if list is non-empty).\r\n   */\r\n  prefix?: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens to output after the list (only if list is non-empty).\r\n   */\r\n  suffix?: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * A single item in a list token.\r\n */\r\nexport interface IListItem {\r\n  /**\r\n   * Conditions for this item to be included in the list.\r\n   */\r\n  visibility?: ICondition[];\r\n\r\n  /**\r\n   * Tokens that make up this list item.\r\n   */\r\n  tokens: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * Template token: string interpolation with named placeholders.\r\n *\r\n * Placeholders use {name} syntax and are replaced with evaluated token arrays.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"template\",\r\n *   \"template\": \"deals {damage} {damageType} damage per hit\",\r\n *   \"values\": {\r\n *     \"damage\": [{ \"type\": \"value\", \"field\": \"damage\" }],\r\n *     \"damageType\": [{ \"type\": \"value\", \"field\": \"damage_type\", \"humanify\": \"minecraft\" }]\r\n *   }\r\n * }\r\n * // With { damage: 15, damage_type: \"minecraft:fire\" }\r\n * // \u2192 \"deals 15 Fire damage per hit\"\r\n */\r\nexport interface ITemplateToken extends ISummarizerTokenBase {\r\n  type: \"template\";\r\n\r\n  /**\r\n   * Template string with {placeholder} syntax.\r\n   */\r\n  template: string;\r\n\r\n  /**\r\n   * Map of placeholder names to token arrays.\r\n   */\r\n  values: { [key: string]: ISummarizerToken[] };\r\n}\r\n\r\n/**\r\n * Plural token: handles singular/plural forms based on a count.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"plural\",\r\n *   \"countField\": \"item_count\",\r\n *   \"singular\": [{ \"type\": \"literal\", \"text\": \"item\" }],\r\n *   \"plural\": [{ \"type\": \"literal\", \"text\": \"items\" }],\r\n *   \"includeCount\": true\r\n * }\r\n * // With { item_count: 1 } \u2192 \"1 item\"\r\n * // With { item_count: 5 } \u2192 \"5 items\"\r\n *\r\n * @example\r\n * // Without including the count\r\n * {\r\n *   \"type\": \"plural\",\r\n *   \"countField\": \"heart_count\",\r\n *   \"singular\": [{ \"type\": \"literal\", \"text\": \"heart\" }],\r\n *   \"plural\": [{ \"type\": \"literal\", \"text\": \"hearts\" }],\r\n *   \"zero\": [{ \"type\": \"literal\", \"text\": \"no hearts\" }],\r\n *   \"includeCount\": false\r\n * }\r\n */\r\nexport interface IPluralToken extends ISummarizerTokenBase {\r\n  type: \"plural\";\r\n\r\n  /**\r\n   * Field containing the count value.\r\n   */\r\n  countField: string;\r\n\r\n  /**\r\n   * Tokens for singular form (count === 1).\r\n   */\r\n  singular: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens for plural form (count !== 1).\r\n   */\r\n  plural: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens for zero count. If not provided, uses plural.\r\n   */\r\n  zero?: ISummarizerToken[];\r\n\r\n  /**\r\n   * Whether to prepend the count value.\r\n   * @default true\r\n   */\r\n  includeCount?: boolean;\r\n}\r\n\r\n/**\r\n * Sample token: pulls a sample value from form.json to use as a reference.\r\n *\r\n * This encourages AI to create rich comparisons using real examples from the data.\r\n * The form.json can contain samples like:\r\n * ```json\r\n * {\r\n *   \"samples\": {\r\n *     \"entities/warden\": { \"max\": 500, \"value\": 500 },\r\n *     \"entities/zombie\": { \"max\": 20, \"value\": 20 }\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"sample\",\r\n *   \"samplePath\": \"entities/warden\",\r\n *   \"field\": \"max\",\r\n *   \"template\": [\r\n *     { \"type\": \"literal\", \"text\": \"like a Warden (\" },\r\n *     { \"type\": \"value\", \"field\": \"__sampleValue\" },\r\n *     { \"type\": \"literal\", \"text\": \" HP)\" }\r\n *   ]\r\n * }\r\n * // \u2192 \"like a Warden (500 HP)\"\r\n */\r\nexport interface ISampleToken extends ISummarizerTokenBase {\r\n  type: \"sample\";\r\n\r\n  /**\r\n   * Path to the sample in the form's samples collection.\r\n   * e.g., \"entities/warden\", \"items/diamond_sword\"\r\n   */\r\n  samplePath: string;\r\n\r\n  /**\r\n   * Field within the sample to extract.\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * Tokens to output. Use { \"type\": \"value\", \"field\": \"__sampleValue\" }\r\n   * to insert the extracted sample value.\r\n   */\r\n  template: ISummarizerToken[];\r\n\r\n  /**\r\n   * Humanify algorithm for the sample name (derived from samplePath).\r\n   * @default \"minecraft\"\r\n   */\r\n  humanifySampleName?: SummarizerHumanifyType | string;\r\n}\r\n\r\n/**\r\n * Unit token: formats a value with units and optional conversion.\r\n *\r\n * @example\r\n * // Simple unit display\r\n * {\r\n *   \"type\": \"unit\",\r\n *   \"field\": \"health\",\r\n *   \"unit\": \"HP\"\r\n * }\r\n * // With { health: 100 } \u2192 \"100 HP\"\r\n *\r\n * @example\r\n * // With unit conversion\r\n * {\r\n *   \"type\": \"unit\",\r\n *   \"field\": \"duration\",\r\n *   \"unit\": \"ticks\",\r\n *   \"conversion\": {\r\n *     \"targetUnit\": \"seconds\",\r\n *     \"factor\": 0.05\r\n *   },\r\n *   \"showBoth\": true\r\n * }\r\n * // With { duration: 200 } \u2192 \"200 ticks (10 seconds)\"\r\n *\r\n * @example\r\n * // Blocks/meters conversion\r\n * {\r\n *   \"type\": \"unit\",\r\n *   \"field\": \"range\",\r\n *   \"unit\": \"blocks\",\r\n *   \"pluralize\": true\r\n * }\r\n * // With { range: 1 } \u2192 \"1 block\"\r\n * // With { range: 5 } \u2192 \"5 blocks\"\r\n */\r\nexport interface IUnitToken extends ISummarizerTokenBase {\r\n  type: \"unit\";\r\n\r\n  /**\r\n   * Field containing the numeric value.\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * The unit name (e.g., \"HP\", \"blocks\", \"ticks\", \"seconds\").\r\n   */\r\n  unit: string;\r\n\r\n  /**\r\n   * Plural form of the unit (e.g., \"block\" \u2192 \"blocks\").\r\n   * If not provided and pluralize is true, adds \"s\".\r\n   */\r\n  unitPlural?: string;\r\n\r\n  /**\r\n   * Whether to pluralize the unit based on the value.\r\n   * @default false\r\n   */\r\n  pluralize?: boolean;\r\n\r\n  /**\r\n   * Optional conversion to another unit.\r\n   */\r\n  conversion?: {\r\n    /**\r\n     * Name of the converted unit.\r\n     */\r\n    targetUnit: string;\r\n\r\n    /**\r\n     * Multiply original value by this factor to get converted value.\r\n     */\r\n    factor: number;\r\n\r\n    /**\r\n     * Plural form of target unit.\r\n     */\r\n    targetUnitPlural?: string;\r\n\r\n    /**\r\n     * Decimal places for converted value.\r\n     * @default 1\r\n     */\r\n    decimals?: number;\r\n  };\r\n\r\n  /**\r\n   * If conversion is defined, whether to show both values.\r\n   * @default true\r\n   */\r\n  showBoth?: boolean;\r\n\r\n  /**\r\n   * Format for the parenthetical when showBoth is true.\r\n   * @default \"({value} {unit})\"\r\n   */\r\n  bothFormat?: string;\r\n}\r\n\r\n/**\r\n * Exists token: outputs tokens only if a field is defined (or undefined).\r\n *\r\n * Useful for optional fields where presence/absence is meaningful.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"exists\",\r\n *   \"field\": \"loot_table\",\r\n *   \"whenDefined\": [\r\n *     { \"type\": \"literal\", \"text\": \"has a custom loot table\" }\r\n *   ],\r\n *   \"whenUndefined\": [\r\n *     { \"type\": \"literal\", \"text\": \"uses default loot\" }\r\n *   ]\r\n * }\r\n *\r\n * @example\r\n * // Only show something when defined, nothing otherwise\r\n * {\r\n *   \"type\": \"exists\",\r\n *   \"field\": \"on_death_event\",\r\n *   \"whenDefined\": [\r\n *     { \"type\": \"literal\", \"text\": \"triggers an event on death\" }\r\n *   ]\r\n * }\r\n */\r\nexport interface IExistsToken extends ISummarizerTokenBase {\r\n  type: \"exists\";\r\n\r\n  /**\r\n   * Field to check for existence.\r\n   */\r\n  field: string;\r\n\r\n  /**\r\n   * Tokens to output when the field IS defined.\r\n   */\r\n  whenDefined: ISummarizerToken[];\r\n\r\n  /**\r\n   * Tokens to output when the field is NOT defined.\r\n   * If not provided, outputs nothing when undefined.\r\n   */\r\n  whenUndefined?: ISummarizerToken[];\r\n\r\n  /**\r\n   * If true, also treat empty strings, empty arrays, and empty objects as \"undefined\".\r\n   * @default false\r\n   */\r\n  treatEmptyAsUndefined?: boolean;\r\n}\r\n\r\n/**\r\n * Group token: groups tokens together, useful for shared visibility.\r\n *\r\n * @example\r\n * // A parenthetical that only appears under certain conditions\r\n * {\r\n *   \"type\": \"group\",\r\n *   \"visibility\": [{ \"field\": \"max\", \"comparison\": \">\", \"value\": 100 }],\r\n *   \"tokens\": [\r\n *     { \"type\": \"literal\", \"text\": \" (\" },\r\n *     { \"type\": \"reference\", \"field\": \"max\", \"referenceId\": \"iron_golem_health\", ... },\r\n *     { \"type\": \"literal\", \"text\": \")\" }\r\n *   ]\r\n * }\r\n */\r\nexport interface IGroupToken extends ISummarizerTokenBase {\r\n  type: \"group\";\r\n\r\n  /**\r\n   * Tokens in this group.\r\n   */\r\n  tokens: ISummarizerToken[];\r\n}\r\n\r\n/**\r\n * Conjunction token: joins child token arrays with a conjunction.\r\n *\r\n * @example\r\n * {\r\n *   \"type\": \"conjunction\",\r\n *   \"conjunction\": \"and\",\r\n *   \"items\": [\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"can fly\" }] },\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"can swim\" }] }\r\n *   ]\r\n * }\r\n * // \u2192 \"can fly and can swim\"\r\n *\r\n * @example\r\n * // With \"but\" for contrasts\r\n * {\r\n *   \"type\": \"conjunction\",\r\n *   \"conjunction\": \"but\",\r\n *   \"items\": [\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"is immune to fire\" }] },\r\n *     { \"tokens\": [{ \"type\": \"literal\", \"text\": \"is weak to water\" }] }\r\n *   ]\r\n * }\r\n * // \u2192 \"is immune to fire but is weak to water\"\r\n */\r\nexport interface IConjunctionToken extends ISummarizerTokenBase {\r\n  type: \"conjunction\";\r\n\r\n  /**\r\n   * The conjunction word to use.\r\n   */\r\n  conjunction: \"and\" | \"or\" | \"but\" | string;\r\n\r\n  /**\r\n   * Items to join with the conjunction.\r\n   */\r\n  items: IListItem[];\r\n}\r\n\r\n/**\r\n * Union type of all summarizer token types.\r\n */\r\nexport type ISummarizerToken =\r\n  | ILiteralToken\r\n  | IValueToken\r\n  | ISwitchToken\r\n  | IListToken\r\n  | ITemplateToken\r\n  | IPluralToken\r\n  | ISampleToken\r\n  | IUnitToken\r\n  | IExistsToken\r\n  | IGroupToken\r\n  | IConjunctionToken;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * # Summarizer Evaluator\r\n *\r\n * This class evaluates a summarizer definition against data to produce\r\n * natural language phrases describing the data.\r\n *\r\n * ## Usage\r\n *\r\n * ```typescript\r\n * const evaluator = new SummarizerEvaluator();\r\n * const result = evaluator.evaluate(summarizer, data, options);\r\n *\r\n * console.log(result.phrases);\r\n * // [\"has extremely high health (500 HP)\", \"can fly and teleport\"]\r\n *\r\n * console.log(result.asCompleteSentence);\r\n * // \"This entity has extremely high health (500 HP), can fly and teleport.\"\r\n * ```\r\n */\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ICondition, { ComparisonType } from \"./ICondition\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\nimport ISummarizer, {\r\n  ISummarizerEvaluatedPhrase,\r\n  ISummarizerEvaluatedResult,\r\n  ISummarizerEvaluatedToken,\r\n  ISummarizerOptions,\r\n  ISummarizerResult,\r\n} from \"./ISummarizer\";\r\nimport {\r\n  IConjunctionToken,\r\n  IExistsToken,\r\n  IGroupToken,\r\n  IListToken,\r\n  ILiteralToken,\r\n  IPluralToken,\r\n  ISampleToken,\r\n  ISummarizerEffects,\r\n  ISummarizerToken,\r\n  ISummarizerTokenBase,\r\n  ISwitchToken,\r\n  ITemplateToken,\r\n  IUnitToken,\r\n  IValueToken,\r\n  SummarizerHumanifyType,\r\n  SummarizerTokenType,\r\n} from \"./ISummarizerToken\";\r\n\r\n/**\r\n * Evaluates summarizer definitions against data objects.\r\n *\r\n * ## Design Philosophy\r\n *\r\n * Summarizers are **authored**, not dynamically generated. When creating a\r\n * summarizer (by AI or human), the author looks at form samples and bakes in\r\n * meaningful comparisons as literal text (e.g., \"stronger than an Iron Golem\").\r\n *\r\n * This evaluator focuses on:\r\n * - Evaluating conditions to select which phrases/tokens to display\r\n * - Formatting values with units and humanification\r\n * - Combining phrases with proper grammar\r\n *\r\n * It does NOT maintain a catalog of reference values - comparisons are\r\n * baked into the summarizer definition as literal text.\r\n */\r\nexport default class SummarizerEvaluator {\r\n  private formDefinition?: IFormDefinition;\r\n  private currentData?: object;\r\n  private options: ISummarizerOptions;\r\n\r\n  /**\r\n   * Create a new SummarizerEvaluator.\r\n   */\r\n  constructor() {\r\n    this.options = {};\r\n  }\r\n\r\n  /**\r\n   * Evaluate a summarizer against data to produce natural language phrases.\r\n   *\r\n   * @param summarizer The summarizer definition\r\n   * @param data The data object to summarize\r\n   * @param formDefinition Optional form definition for sample lookup\r\n   * @param options Evaluation options\r\n   * @returns Result containing phrases and formatted output\r\n   *\r\n   * @example\r\n   * const result = evaluator.evaluate(\r\n   *   healthSummarizer,\r\n   *   { max: 500, value: 500 },\r\n   *   healthForm\r\n   * );\r\n   * // result.phrases = [\"has god-tier health (500 HP)\"]\r\n   * // result.asCompleteSentence = \"This entity has god-tier health (500 HP).\"\r\n   */\r\n  evaluate(\r\n    summarizer: ISummarizer,\r\n    data: object,\r\n    formDefinition?: IFormDefinition,\r\n    options?: ISummarizerOptions\r\n  ): ISummarizerResult {\r\n    this.formDefinition = formDefinition;\r\n    this.currentData = data;\r\n    this.options = options || {};\r\n\r\n    const debug = this.options.debug\r\n      ? {\r\n          includedPhrases: [] as string[],\r\n          excludedPhrases: [] as string[],\r\n          truncatedPhrases: [] as string[],\r\n        }\r\n      : undefined;\r\n\r\n    // Evaluate all phrases\r\n    const evaluatedPhrases: { text: string; priority: number; id?: string }[] = [];\r\n\r\n    for (const phrase of summarizer.phrases) {\r\n      const phraseId = phrase.id || `phrase_${evaluatedPhrases.length}`;\r\n\r\n      // Check category filters\r\n      if (this.options.includeCategories && phrase.category) {\r\n        if (!this.options.includeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      if (this.options.excludeCategories && phrase.category) {\r\n        if (this.options.excludeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      // Check visibility conditions\r\n      if (phrase.visibility && !this.checkConditions(phrase.visibility, data)) {\r\n        debug?.excludedPhrases.push(phraseId);\r\n        continue;\r\n      }\r\n\r\n      // Evaluate the phrase tokens\r\n      const text = this.evaluateTokens(phrase.tokens, data);\r\n\r\n      if (text.trim().length > 0) {\r\n        const priority = phrase.priority ?? 2;\r\n\r\n        // Check priority filter\r\n        if (this.options.maxPriority !== undefined && priority > this.options.maxPriority) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n\r\n        evaluatedPhrases.push({\r\n          text: text.trim(),\r\n          priority,\r\n          id: phraseId,\r\n        });\r\n        debug?.includedPhrases.push(phraseId);\r\n      } else {\r\n        debug?.excludedPhrases.push(phraseId);\r\n      }\r\n    }\r\n\r\n    // Sort by priority (lower = more important)\r\n    evaluatedPhrases.sort((a, b) => a.priority - b.priority);\r\n\r\n    // Apply max phrases limit\r\n    let phrases = evaluatedPhrases.map((p) => p.text);\r\n    if (this.options.maxPhrases !== undefined && phrases.length > this.options.maxPhrases) {\r\n      const truncated = evaluatedPhrases.slice(this.options.maxPhrases);\r\n      debug?.truncatedPhrases.push(...truncated.map((p) => p.id || \"unknown\"));\r\n      phrases = phrases.slice(0, this.options.maxPhrases);\r\n    }\r\n\r\n    // Build result\r\n    const asSentence = this.joinPhrases(phrases);\r\n    const asCompleteSentence = phrases.length > 0 ? `This entity ${asSentence}.` : \"\";\r\n\r\n    return {\r\n      phrases,\r\n      asSentence,\r\n      asCompleteSentence,\r\n      debug,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Evaluate a summarizer against data with structured token output for rich rendering.\r\n   *\r\n   * This method is similar to evaluate() but returns structured data that preserves\r\n   * token boundaries and effects, allowing the UI to render tokens with styling.\r\n   *\r\n   * @param summarizer The summarizer definition\r\n   * @param data The data object to summarize\r\n   * @param formDefinition Optional form definition for sample lookup\r\n   * @param options Evaluation options\r\n   * @returns Result containing structured tokens with effects\r\n   *\r\n   * @example\r\n   * const result = evaluator.evaluateWithEffects(\r\n   *   healthSummarizer,\r\n   *   { max: 500, value: 500 },\r\n   *   healthForm\r\n   * );\r\n   * // result.evaluatedPhrases[0].tokens = [\r\n   * //   { text: \"has \", effects: undefined },\r\n   * //   { text: \"god-tier health\", effects: { emphasis: \"strong\", sentiment: \"positive\" } },\r\n   * //   { text: \" (\", effects: { emphasis: \"subtle\" } },\r\n   * //   { text: \"500 HP\", effects: { emphasis: \"strong\", role: \"value\" } },\r\n   * //   { text: \")\", effects: { emphasis: \"subtle\" } }\r\n   * // ]\r\n   */\r\n  evaluateWithEffects(\r\n    summarizer: ISummarizer,\r\n    data: object,\r\n    formDefinition?: IFormDefinition,\r\n    options?: ISummarizerOptions\r\n  ): ISummarizerEvaluatedResult {\r\n    this.formDefinition = formDefinition;\r\n    this.currentData = data;\r\n    this.options = options || {};\r\n\r\n    const debug = this.options.debug\r\n      ? {\r\n          includedPhrases: [] as string[],\r\n          excludedPhrases: [] as string[],\r\n          truncatedPhrases: [] as string[],\r\n        }\r\n      : undefined;\r\n\r\n    // Evaluate all phrases with structured output\r\n    const evaluatedPhrases: ISummarizerEvaluatedPhrase[] = [];\r\n\r\n    for (const phrase of summarizer.phrases) {\r\n      const phraseId = phrase.id || `phrase_${evaluatedPhrases.length}`;\r\n\r\n      // Check category filters\r\n      if (this.options.includeCategories && phrase.category) {\r\n        if (!this.options.includeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      if (this.options.excludeCategories && phrase.category) {\r\n        if (this.options.excludeCategories.includes(phrase.category)) {\r\n          debug?.excludedPhrases.push(phraseId);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      // Check visibility conditions\r\n      if (phrase.visibility && !this.checkConditions(phrase.visibility, data)) {\r\n        debug?.excludedPhrases.push(phraseId);\r\n        continue;\r\n      }\r\n\r\n      // Check priority filter\r\n      const priority = phrase.priority ?? 2;\r\n      if (this.options.maxPriority !== undefined && priority > this.options.maxPriority) {\r\n        debug?.excludedPhrases.push(phraseId);\r\n        continue;\r\n      }\r\n\r\n      // Evaluate the phrase tokens with effects\r\n      const tokens = this.evaluateTokensWithEffects(phrase.tokens, data);\r\n      const plainText = tokens.map((t) => t.text).join(\"\");\r\n\r\n      if (plainText.trim().length > 0) {\r\n        evaluatedPhrases.push({\r\n          id: phraseId,\r\n          category: phrase.category,\r\n          priority,\r\n          tokens,\r\n          plainText: plainText.trim(),\r\n        });\r\n        debug?.includedPhrases.push(phraseId);\r\n      } else {\r\n        debug?.excludedPhrases.push(phraseId);\r\n      }\r\n    }\r\n\r\n    // Sort by priority (lower = more important)\r\n    evaluatedPhrases.sort((a, b) => a.priority - b.priority);\r\n\r\n    // Apply max phrases limit\r\n    let resultPhrases = evaluatedPhrases;\r\n    if (this.options.maxPhrases !== undefined && resultPhrases.length > this.options.maxPhrases) {\r\n      const truncated = resultPhrases.slice(this.options.maxPhrases);\r\n      debug?.truncatedPhrases.push(...truncated.map((p) => p.id || \"unknown\"));\r\n      resultPhrases = resultPhrases.slice(0, this.options.maxPhrases);\r\n    }\r\n\r\n    // Build result\r\n    const phrases = resultPhrases.map((p) => p.plainText);\r\n    const asSentence = this.joinPhrases(phrases);\r\n    const asCompleteSentence = phrases.length > 0 ? `This entity ${asSentence}.` : \"\";\r\n\r\n    return {\r\n      evaluatedPhrases: resultPhrases,\r\n      phrases,\r\n      asSentence,\r\n      asCompleteSentence,\r\n      debug,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Join phrases into a grammatically correct sentence.\r\n   */\r\n  private joinPhrases(phrases: string[]): string {\r\n    if (phrases.length === 0) {\r\n      return \"\";\r\n    }\r\n    if (phrases.length === 1) {\r\n      return phrases[0];\r\n    }\r\n    if (phrases.length === 2) {\r\n      return `${phrases[0]} and ${phrases[1]}`;\r\n    }\r\n\r\n    const allButLast = phrases.slice(0, -1).join(\", \");\r\n    return `${allButLast}, and ${phrases[phrases.length - 1]}`;\r\n  }\r\n\r\n  /**\r\n   * Evaluate an array of tokens and return structured output with effects.\r\n   *\r\n   * This method preserves token boundaries and effects for rich rendering.\r\n   */\r\n  private evaluateTokensWithEffects(tokens: ISummarizerToken[], data: object): ISummarizerEvaluatedToken[] {\r\n    const result: ISummarizerEvaluatedToken[] = [];\r\n\r\n    for (const token of tokens) {\r\n      // Check token visibility\r\n      if (token.visibility && !this.checkConditions(token.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const evaluatedTokens = this.evaluateTokenWithEffects(token, data);\r\n      result.push(...evaluatedTokens);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a single token and return structured output with effects.\r\n   *\r\n   * Some token types (like switch, list, template) recursively evaluate\r\n   * child tokens and inherit effects from the parent.\r\n   */\r\n  private evaluateTokenWithEffects(token: ISummarizerToken, data: object): ISummarizerEvaluatedToken[] {\r\n    const baseEffects = token.effects;\r\n\r\n    switch (token.type) {\r\n      case SummarizerTokenType.literal:\r\n      case \"literal\": {\r\n        const text = (token as ILiteralToken).text;\r\n        if (text) {\r\n          return [{ text, effects: baseEffects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.value:\r\n      case \"value\": {\r\n        const text = this.evaluateValueToken(token as IValueToken, data);\r\n        if (text) {\r\n          // Value tokens default to \"value\" role if no effects specified\r\n          const effects = baseEffects || { role: \"value\" };\r\n          return [{ text, effects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.switch:\r\n      case \"switch\": {\r\n        const switchToken = token as ISwitchToken;\r\n        for (const switchCase of switchToken.cases) {\r\n          if (this.checkConditions(switchCase.conditions, data)) {\r\n            const childTokens = this.evaluateTokensWithEffects(switchCase.tokens, data);\r\n            // Apply parent effects to children that don't have their own\r\n            return this.applyEffectsToChildren(childTokens, baseEffects);\r\n          }\r\n        }\r\n        if (switchToken.default) {\r\n          const childTokens = this.evaluateTokensWithEffects(switchToken.default, data);\r\n          return this.applyEffectsToChildren(childTokens, baseEffects);\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.list:\r\n      case \"list\": {\r\n        const listToken = token as IListToken;\r\n        const visibleItems: ISummarizerEvaluatedToken[][] = [];\r\n\r\n        for (const item of listToken.items) {\r\n          if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n            continue;\r\n          }\r\n          const itemTokens = this.evaluateTokensWithEffects(item.tokens, data);\r\n          const itemText = itemTokens.map((t) => t.text).join(\"\");\r\n          if (itemText.trim().length > 0) {\r\n            visibleItems.push(itemTokens);\r\n          }\r\n        }\r\n\r\n        if (visibleItems.length === 0) {\r\n          if (listToken.emptyText) {\r\n            return [{ text: listToken.emptyText, effects: baseEffects }];\r\n          }\r\n          return [];\r\n        }\r\n\r\n        // Build the list with separators\r\n        const result: ISummarizerEvaluatedToken[] = [];\r\n\r\n        // Add prefix\r\n        if (listToken.prefix) {\r\n          result.push(...this.evaluateTokensWithEffects(listToken.prefix, data));\r\n        }\r\n\r\n        for (let i = 0; i < visibleItems.length; i++) {\r\n          result.push(...visibleItems[i]);\r\n\r\n          if (i < visibleItems.length - 1) {\r\n            let sep: string;\r\n            if (visibleItems.length === 2) {\r\n              sep = listToken.twoItemSeparator ?? \" and \";\r\n            } else if (i === visibleItems.length - 2) {\r\n              sep = listToken.finalSeparator ?? \", and \";\r\n            } else {\r\n              sep = listToken.separator ?? \", \";\r\n            }\r\n            result.push({ text: sep, effects: { emphasis: \"subtle\" } });\r\n          }\r\n        }\r\n\r\n        // Add suffix\r\n        if (listToken.suffix) {\r\n          result.push(...this.evaluateTokensWithEffects(listToken.suffix, data));\r\n        }\r\n\r\n        return this.applyEffectsToChildren(result, baseEffects);\r\n      }\r\n\r\n      case SummarizerTokenType.template:\r\n      case \"template\": {\r\n        const templateToken = token as ITemplateToken;\r\n        // For templates, we need to parse the template and insert evaluated values\r\n        const result: ISummarizerEvaluatedToken[] = [];\r\n        const template = templateToken.template;\r\n        const parts = template.split(/(\\{[^}]+\\})/);\r\n\r\n        for (const part of parts) {\r\n          if (part.startsWith(\"{\") && part.endsWith(\"}\")) {\r\n            const key = part.slice(1, -1);\r\n            const valueTokens = templateToken.values[key];\r\n            if (valueTokens) {\r\n              result.push(...this.evaluateTokensWithEffects(valueTokens, data));\r\n            }\r\n          } else if (part.length > 0) {\r\n            result.push({ text: part, effects: undefined });\r\n          }\r\n        }\r\n\r\n        return this.applyEffectsToChildren(result, baseEffects);\r\n      }\r\n\r\n      case SummarizerTokenType.plural:\r\n      case \"plural\": {\r\n        const text = this.evaluatePluralToken(token as IPluralToken, data);\r\n        if (text) {\r\n          return [{ text, effects: baseEffects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.sample:\r\n      case \"sample\": {\r\n        const text = this.evaluateSampleToken(token as ISampleToken, data);\r\n        if (text) {\r\n          return [{ text, effects: baseEffects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.unit:\r\n      case \"unit\": {\r\n        const text = this.evaluateUnitToken(token as IUnitToken, data);\r\n        if (text) {\r\n          // Unit tokens get \"value\" role for the number and \"unit\" role overall\r\n          const effects = baseEffects || { role: \"value\" };\r\n          return [{ text, effects }];\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.exists:\r\n      case \"exists\": {\r\n        const existsToken = token as IExistsToken;\r\n        const value = this.getFieldValue(existsToken.field, data);\r\n        let isDefined = value !== undefined && value !== null;\r\n\r\n        if (isDefined && existsToken.treatEmptyAsUndefined) {\r\n          if (typeof value === \"string\" && value.length === 0) {\r\n            isDefined = false;\r\n          } else if (Array.isArray(value) && value.length === 0) {\r\n            isDefined = false;\r\n          } else if (typeof value === \"object\" && Object.keys(value).length === 0) {\r\n            isDefined = false;\r\n          }\r\n        }\r\n\r\n        if (isDefined) {\r\n          const childTokens = this.evaluateTokensWithEffects(existsToken.whenDefined, data);\r\n          return this.applyEffectsToChildren(childTokens, baseEffects);\r\n        } else if (existsToken.whenUndefined) {\r\n          const childTokens = this.evaluateTokensWithEffects(existsToken.whenUndefined, data);\r\n          return this.applyEffectsToChildren(childTokens, baseEffects);\r\n        }\r\n        return [];\r\n      }\r\n\r\n      case SummarizerTokenType.group:\r\n      case \"group\": {\r\n        const childTokens = this.evaluateTokensWithEffects((token as IGroupToken).tokens, data);\r\n        return this.applyEffectsToChildren(childTokens, baseEffects);\r\n      }\r\n\r\n      case SummarizerTokenType.conjunction:\r\n      case \"conjunction\": {\r\n        const conjunctionToken = token as IConjunctionToken;\r\n        const visibleItems: ISummarizerEvaluatedToken[][] = [];\r\n\r\n        for (const item of conjunctionToken.items) {\r\n          if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n            continue;\r\n          }\r\n          const itemTokens = this.evaluateTokensWithEffects(item.tokens, data);\r\n          const itemText = itemTokens.map((t) => t.text).join(\"\");\r\n          if (itemText.trim().length > 0) {\r\n            visibleItems.push(itemTokens);\r\n          }\r\n        }\r\n\r\n        if (visibleItems.length === 0) {\r\n          return [];\r\n        }\r\n\r\n        const result: ISummarizerEvaluatedToken[] = [];\r\n        for (let i = 0; i < visibleItems.length; i++) {\r\n          result.push(...visibleItems[i]);\r\n          if (i < visibleItems.length - 1) {\r\n            result.push({\r\n              text: ` ${conjunctionToken.conjunction} `,\r\n              effects: { emphasis: \"subtle\" },\r\n            });\r\n          }\r\n        }\r\n\r\n        return this.applyEffectsToChildren(result, baseEffects);\r\n      }\r\n\r\n      default:\r\n        Log.debug(`Unknown summarizer token type: ${(token as ISummarizerTokenBase).type}`);\r\n        return [];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Apply parent effects to child tokens that don't have their own effects.\r\n   *\r\n   * Child effects take precedence. This allows a parent switch token to\r\n   * set a sentiment (e.g., \"positive\" for high health) that applies to\r\n   * all its children unless they override it.\r\n   */\r\n  private applyEffectsToChildren(\r\n    children: ISummarizerEvaluatedToken[],\r\n    parentEffects?: ISummarizerEffects\r\n  ): ISummarizerEvaluatedToken[] {\r\n    if (!parentEffects) {\r\n      return children;\r\n    }\r\n\r\n    return children.map((child) => {\r\n      if (!child.effects) {\r\n        return { ...child, effects: parentEffects };\r\n      }\r\n      // Merge: child effects take precedence\r\n      return {\r\n        ...child,\r\n        effects: { ...parentEffects, ...child.effects },\r\n      };\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Evaluate an array of tokens and concatenate their output.\r\n   */\r\n  private evaluateTokens(tokens: ISummarizerToken[], data: object): string {\r\n    const parts: string[] = [];\r\n\r\n    for (const token of tokens) {\r\n      // Check token visibility\r\n      if (token.visibility && !this.checkConditions(token.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const text = this.evaluateToken(token, data);\r\n      if (text !== undefined && text !== null) {\r\n        parts.push(text);\r\n      }\r\n    }\r\n\r\n    return parts.join(\"\");\r\n  }\r\n\r\n  /**\r\n   * Evaluate a single token and return its string output.\r\n   */\r\n  private evaluateToken(token: ISummarizerToken, data: object): string | undefined {\r\n    switch (token.type) {\r\n      case SummarizerTokenType.literal:\r\n      case \"literal\":\r\n        return (token as ILiteralToken).text;\r\n\r\n      case SummarizerTokenType.value:\r\n      case \"value\":\r\n        return this.evaluateValueToken(token as IValueToken, data);\r\n\r\n      case SummarizerTokenType.switch:\r\n      case \"switch\":\r\n        return this.evaluateSwitchToken(token as ISwitchToken, data);\r\n\r\n      case SummarizerTokenType.list:\r\n      case \"list\":\r\n        return this.evaluateListToken(token as IListToken, data);\r\n\r\n      case SummarizerTokenType.template:\r\n      case \"template\":\r\n        return this.evaluateTemplateToken(token as ITemplateToken, data);\r\n\r\n      case SummarizerTokenType.plural:\r\n      case \"plural\":\r\n        return this.evaluatePluralToken(token as IPluralToken, data);\r\n\r\n      case SummarizerTokenType.sample:\r\n      case \"sample\":\r\n        return this.evaluateSampleToken(token as ISampleToken, data);\r\n\r\n      case SummarizerTokenType.unit:\r\n      case \"unit\":\r\n        return this.evaluateUnitToken(token as IUnitToken, data);\r\n\r\n      case SummarizerTokenType.exists:\r\n      case \"exists\":\r\n        return this.evaluateExistsToken(token as IExistsToken, data);\r\n\r\n      case SummarizerTokenType.group:\r\n      case \"group\":\r\n        return this.evaluateTokens((token as IGroupToken).tokens, data);\r\n\r\n      case SummarizerTokenType.conjunction:\r\n      case \"conjunction\":\r\n        return this.evaluateConjunctionToken(token as IConjunctionToken, data);\r\n\r\n      default:\r\n        Log.debug(`Unknown summarizer token type: ${(token as ISummarizerTokenBase).type}`);\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluate a value token: insert a field value from the data.\r\n   */\r\n  private evaluateValueToken(token: IValueToken, data: object): string {\r\n    const value = this.getFieldValue(token.field, data);\r\n\r\n    if (value === undefined || value === null) {\r\n      return token.fallback ?? \"\";\r\n    }\r\n\r\n    let result: string;\r\n\r\n    // Format the value\r\n    if (token.format) {\r\n      result = this.formatValue(value, token.format);\r\n    } else {\r\n      result = String(value);\r\n    }\r\n\r\n    // Apply humanification\r\n    if (token.humanify && token.humanify !== SummarizerHumanifyType.none && token.humanify !== \"none\") {\r\n      result = this.humanifyValue(result, token.humanify);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a switch token: select tokens based on conditions.\r\n   */\r\n  private evaluateSwitchToken(token: ISwitchToken, data: object): string | undefined {\r\n    for (const switchCase of token.cases) {\r\n      if (this.checkConditions(switchCase.conditions, data)) {\r\n        return this.evaluateTokens(switchCase.tokens, data);\r\n      }\r\n    }\r\n\r\n    if (token.default) {\r\n      return this.evaluateTokens(token.default, data);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a list token: render items as a grammatically correct list.\r\n   */\r\n  private evaluateListToken(token: IListToken, data: object): string {\r\n    const visibleItems: string[] = [];\r\n\r\n    for (const item of token.items) {\r\n      // Check item visibility\r\n      if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const itemText = this.evaluateTokens(item.tokens, data);\r\n      if (itemText.trim().length > 0) {\r\n        visibleItems.push(itemText.trim());\r\n      }\r\n    }\r\n\r\n    if (visibleItems.length === 0) {\r\n      return token.emptyText ?? \"\";\r\n    }\r\n\r\n    // Build the list with proper grammar\r\n    let listText: string;\r\n    if (visibleItems.length === 1) {\r\n      listText = visibleItems[0];\r\n    } else if (visibleItems.length === 2) {\r\n      const sep = token.twoItemSeparator ?? \" and \";\r\n      listText = `${visibleItems[0]}${sep}${visibleItems[1]}`;\r\n    } else {\r\n      const separator = token.separator ?? \", \";\r\n      const finalSep = token.finalSeparator ?? \", and \";\r\n      const allButLast = visibleItems.slice(0, -1).join(separator);\r\n      listText = `${allButLast}${finalSep}${visibleItems[visibleItems.length - 1]}`;\r\n    }\r\n\r\n    // Add prefix and suffix\r\n    let result = listText;\r\n    if (token.prefix) {\r\n      result = this.evaluateTokens(token.prefix, data) + result;\r\n    }\r\n    if (token.suffix) {\r\n      result = result + this.evaluateTokens(token.suffix, data);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a template token: string interpolation.\r\n   */\r\n  private evaluateTemplateToken(token: ITemplateToken, data: object): string {\r\n    let result = token.template;\r\n\r\n    for (const key in token.values) {\r\n      const valueTokens = token.values[key];\r\n      const valueText = this.evaluateTokens(valueTokens, data);\r\n      result = result.replace(new RegExp(`\\\\{${key}\\\\}`, \"g\"), valueText);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a plural token: handle singular/plural forms.\r\n   */\r\n  private evaluatePluralToken(token: IPluralToken, data: object): string {\r\n    const count = this.getFieldValue(token.countField, data);\r\n    const numCount = typeof count === \"number\" ? count : parseInt(String(count), 10) || 0;\r\n\r\n    let formTokens: ISummarizerToken[];\r\n    if (numCount === 0 && token.zero) {\r\n      formTokens = token.zero;\r\n    } else if (numCount === 1) {\r\n      formTokens = token.singular;\r\n    } else {\r\n      formTokens = token.plural;\r\n    }\r\n\r\n    const formText = this.evaluateTokens(formTokens, data);\r\n    const includeCount = token.includeCount !== false;\r\n\r\n    if (includeCount) {\r\n      return `${numCount} ${formText}`;\r\n    }\r\n\r\n    return formText;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a sample token: pull a sample value from the form definition.\r\n   */\r\n  private evaluateSampleToken(token: ISampleToken, data: object): string | undefined {\r\n    if (!this.formDefinition) {\r\n      Log.debug(\"Sample token used but no form definition provided\");\r\n      return undefined;\r\n    }\r\n\r\n    // Look for the sample in the form definition\r\n    // Samples are stored in fields as: samples: { \"path\": [{ content: ... }] }\r\n    let sampleValue: any = undefined;\r\n\r\n    // Try to find the sample in the form's fields\r\n    for (const field of this.formDefinition.fields) {\r\n      if (field.samples) {\r\n        const sample = field.samples[token.samplePath];\r\n        if (sample && sample.length > 0) {\r\n          const sampleContent = sample[0].content;\r\n          if (typeof sampleContent === \"object\" && sampleContent !== null) {\r\n            sampleValue = (sampleContent as any)[token.field];\r\n          } else if (field.id === token.field) {\r\n            sampleValue = sampleContent;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (sampleValue === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    // Evaluate the template with sample value available\r\n    const augmentedData = {\r\n      ...data,\r\n      __sampleValue: sampleValue,\r\n      __samplePath: token.samplePath,\r\n      __sampleName: this.humanifyValue(\r\n        token.samplePath.split(\"/\").pop() || token.samplePath,\r\n        token.humanifySampleName || SummarizerHumanifyType.minecraft\r\n      ),\r\n    };\r\n\r\n    return this.evaluateTokens(token.template, augmentedData);\r\n  }\r\n\r\n  /**\r\n   * Evaluate a unit token: format value with units.\r\n   */\r\n  private evaluateUnitToken(token: IUnitToken, data: object): string {\r\n    const value = this.getFieldValue(token.field, data);\r\n    const numValue = typeof value === \"number\" ? value : parseFloat(String(value));\r\n\r\n    if (isNaN(numValue)) {\r\n      return \"\";\r\n    }\r\n\r\n    // Get the unit string with optional pluralization\r\n    let unitStr = token.unit;\r\n    if (token.pluralize && numValue !== 1) {\r\n      unitStr = token.unitPlural ?? token.unit + \"s\";\r\n    }\r\n\r\n    let result = `${numValue} ${unitStr}`;\r\n\r\n    // Add conversion if specified\r\n    if (token.conversion) {\r\n      const convertedValue = numValue * token.conversion.factor;\r\n      const decimals = token.conversion.decimals ?? 1;\r\n      const formattedConverted = convertedValue.toFixed(decimals).replace(/\\.?0+$/, \"\");\r\n\r\n      let targetUnit = token.conversion.targetUnit;\r\n      if (token.pluralize && convertedValue !== 1) {\r\n        targetUnit = token.conversion.targetUnitPlural ?? token.conversion.targetUnit + \"s\";\r\n      }\r\n\r\n      if (token.showBoth !== false) {\r\n        const format = token.bothFormat ?? \"({value} {unit})\";\r\n        const parenthetical = format.replace(\"{value}\", formattedConverted).replace(\"{unit}\", targetUnit);\r\n        result = `${result} ${parenthetical}`;\r\n      } else {\r\n        result = `${formattedConverted} ${targetUnit}`;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Evaluate an exists token: check if a field is defined.\r\n   */\r\n  private evaluateExistsToken(token: IExistsToken, data: object): string {\r\n    const value = this.getFieldValue(token.field, data);\r\n\r\n    let isDefined = value !== undefined && value !== null;\r\n\r\n    // Optionally treat empty values as undefined\r\n    if (isDefined && token.treatEmptyAsUndefined) {\r\n      if (typeof value === \"string\" && value.length === 0) {\r\n        isDefined = false;\r\n      } else if (Array.isArray(value) && value.length === 0) {\r\n        isDefined = false;\r\n      } else if (typeof value === \"object\" && Object.keys(value).length === 0) {\r\n        isDefined = false;\r\n      }\r\n    }\r\n\r\n    if (isDefined) {\r\n      return this.evaluateTokens(token.whenDefined, data);\r\n    } else if (token.whenUndefined) {\r\n      return this.evaluateTokens(token.whenUndefined, data);\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  /**\r\n   * Evaluate a conjunction token: join items with a conjunction.\r\n   */\r\n  private evaluateConjunctionToken(token: IConjunctionToken, data: object): string {\r\n    const visibleItems: string[] = [];\r\n\r\n    for (const item of token.items) {\r\n      if (item.visibility && !this.checkConditions(item.visibility, data)) {\r\n        continue;\r\n      }\r\n\r\n      const itemText = this.evaluateTokens(item.tokens, data);\r\n      if (itemText.trim().length > 0) {\r\n        visibleItems.push(itemText.trim());\r\n      }\r\n    }\r\n\r\n    if (visibleItems.length === 0) {\r\n      return \"\";\r\n    }\r\n\r\n    if (visibleItems.length === 1) {\r\n      return visibleItems[0];\r\n    }\r\n\r\n    return visibleItems.join(` ${token.conjunction} `);\r\n  }\r\n\r\n  /**\r\n   * Get a field value from the data object only (literal value).\r\n   * Does NOT fall back to default values from the form definition.\r\n   * Use this when you need to check if a value is explicitly set.\r\n   * Supports dot notation for nested fields: \"damage.min\"\r\n   */\r\n  private getLiteralFieldValue(fieldPath: string, data: object): any {\r\n    const parts = fieldPath.split(\".\");\r\n    let current: any = data;\r\n\r\n    for (const part of parts) {\r\n      if (current === undefined || current === null) {\r\n        return undefined;\r\n      }\r\n      current = current[part];\r\n    }\r\n\r\n    return current;\r\n  }\r\n\r\n  /**\r\n   * Get the default value for a field from the form definition.\r\n   */\r\n  private getFieldDefaultValue(fieldPath: string): any {\r\n    if (!this.formDefinition || !this.formDefinition.fields) {\r\n      return undefined;\r\n    }\r\n\r\n    // For simple field paths, look up directly\r\n    // For nested paths like \"damage.min\", we'd need to traverse subforms\r\n    const parts = fieldPath.split(\".\");\r\n    const fieldId = parts[0];\r\n\r\n    for (const field of this.formDefinition.fields) {\r\n      if (field.id === fieldId) {\r\n        if (parts.length === 1) {\r\n          return field.defaultValue;\r\n        }\r\n        // KNOWN LIMITATION: Nested subform default value lookup not implemented.\r\n        // For paths like \"damage.min\", we would need to:\r\n        // 1. Load the subForm referenced by field.subFormId\r\n        // 2. Look up the remaining path parts in that subForm's fields\r\n        // This is a rare edge case as most summarizers don't reference nested defaults.\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a field value from the data object, falling back to the\r\n   * form definition's default value if not explicitly set.\r\n   *\r\n   * This is the \"effective\" value - what the user would see in the form.\r\n   * Supports dot notation for nested fields: \"damage.min\"\r\n   */\r\n  private getFieldValue(fieldPath: string, data: object): any {\r\n    // First try to get the literal value from the data\r\n    const literalValue = this.getLiteralFieldValue(fieldPath, data);\r\n\r\n    // If it's explicitly set (not undefined), use it\r\n    if (literalValue !== undefined) {\r\n      return literalValue;\r\n    }\r\n\r\n    // Fall back to the default value from the form definition\r\n    return this.getFieldDefaultValue(fieldPath);\r\n  }\r\n\r\n  /**\r\n   * Check if all conditions are met.\r\n   */\r\n  private checkConditions(conditions: ICondition[], data: object): boolean {\r\n    for (const condition of conditions) {\r\n      if (!this.checkCondition(condition, data)) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Check a single condition against data.\r\n   * Uses effective values (data + defaults) unless checking for literallyDefined.\r\n   */\r\n  private checkCondition(condition: ICondition, data: object): boolean {\r\n    const comparison = condition.comparison.toLowerCase();\r\n\r\n    // For literallyDefined, we check only the actual data, not defaults\r\n    if (comparison === ComparisonType.isLiterallyDefined || comparison === \"literallydefined\") {\r\n      const literalValue = condition.field ? this.getLiteralFieldValue(condition.field, data) : undefined;\r\n      return literalValue !== undefined && literalValue !== null;\r\n    }\r\n\r\n    // For all other comparisons, use effective value (data + defaults)\r\n    const fieldValue = condition.field ? this.getFieldValue(condition.field, data) : undefined;\r\n\r\n    switch (comparison) {\r\n      case ComparisonType.equals:\r\n      case \"=\":\r\n      case \"==\":\r\n      case \"equals\":\r\n        if (condition.value !== undefined) {\r\n          return fieldValue === condition.value;\r\n        }\r\n        if (condition.anyValues !== undefined) {\r\n          return (condition.anyValues as (string | number | boolean)[]).includes(\r\n            fieldValue as string | number | boolean\r\n          );\r\n        }\r\n        return false;\r\n\r\n      case ComparisonType.lessThan:\r\n      case \"<\":\r\n        return typeof fieldValue === \"number\" && fieldValue < (condition.value as number);\r\n\r\n      case ComparisonType.lessThanOrEqualTo:\r\n      case \"<=\":\r\n        return typeof fieldValue === \"number\" && fieldValue <= (condition.value as number);\r\n\r\n      case ComparisonType.greaterThan:\r\n      case \">\":\r\n        return typeof fieldValue === \"number\" && fieldValue > (condition.value as number);\r\n\r\n      case ComparisonType.greaterThanOrEqualTo:\r\n      case \">=\":\r\n        return typeof fieldValue === \"number\" && fieldValue >= (condition.value as number);\r\n\r\n      case ComparisonType.isDefined:\r\n      case \"defined\":\r\n        return fieldValue !== undefined && fieldValue !== null;\r\n\r\n      case ComparisonType.isNonEmpty:\r\n      case \"nonempty\":\r\n        if (fieldValue === undefined || fieldValue === null) {\r\n          return false;\r\n        }\r\n        if (typeof fieldValue === \"string\") {\r\n          return fieldValue.length > 0;\r\n        }\r\n        if (Array.isArray(fieldValue)) {\r\n          return fieldValue.length > 0;\r\n        }\r\n        return true;\r\n\r\n      case \"!=\":\r\n      case \"notequals\":\r\n        return fieldValue !== condition.value;\r\n\r\n      default:\r\n        Log.debug(`Unknown comparison type: ${condition.comparison}`);\r\n        return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Format a value according to a format string.\r\n   */\r\n  private formatValue(value: any, format: string): string {\r\n    const locale = this.options.locale ?? \"en-US\";\r\n\r\n    if (format === \"number\") {\r\n      const num = typeof value === \"number\" ? value : parseFloat(String(value));\r\n      if (!isNaN(num)) {\r\n        return num.toLocaleString(locale);\r\n      }\r\n    }\r\n\r\n    if (format === \"percent\") {\r\n      const num = typeof value === \"number\" ? value : parseFloat(String(value));\r\n      if (!isNaN(num)) {\r\n        return `${(num * 100).toFixed(0)}%`;\r\n      }\r\n    }\r\n\r\n    if (format.startsWith(\"decimal:\")) {\r\n      const decimals = parseInt(format.substring(8), 10);\r\n      const num = typeof value === \"number\" ? value : parseFloat(String(value));\r\n      if (!isNaN(num)) {\r\n        return num.toFixed(decimals);\r\n      }\r\n    }\r\n\r\n    return String(value);\r\n  }\r\n\r\n  /**\r\n   * Apply humanification to a value.\r\n   */\r\n  private humanifyValue(value: string, humanifyType: SummarizerHumanifyType | string): string {\r\n    switch (humanifyType) {\r\n      case SummarizerHumanifyType.minecraft:\r\n      case \"minecraft\":\r\n        return Utilities.humanifyMinecraftName(value) as string;\r\n\r\n      case SummarizerHumanifyType.general:\r\n      case \"general\":\r\n        return Utilities.humanifyJsName(value);\r\n\r\n      case SummarizerHumanifyType.sentence:\r\n      case \"sentence\":\r\n        return value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\n      default:\r\n        return value;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ========================================================================\r\n * ARCHITECTURE: DataFormUtilities\r\n * ========================================================================\r\n *\r\n * DataFormUtilities provides static utility functions for the DataForm\r\n * system, including field selection, type checking, and form manipulation.\r\n *\r\n * This file is a key part of the \"upscale/downscale\" UI layer pattern.\r\n * See FormPropertyManager.ts for the complete architecture documentation.\r\n *\r\n * KEY FUNCTION: selectFieldForValue()\r\n *\r\n *   This function implements the UI-layer part of the upscale pattern.\r\n *   When a field has multiple \"alternates\" (different type representations),\r\n *   this function selects the variant that best matches the actual data.\r\n *\r\n *   Example: A repair_items field might have:\r\n *     - Primary: stringArray (for simple item list)\r\n *     - Alternate: objectArray with subForm (for complex items with amounts)\r\n *\r\n *   If the data is an array of objects, selectFieldForValue returns the\r\n *   objectArray alternate so the UI renders the appropriate editor.\r\n *\r\n * RELATED FILES:\r\n *    - src/dataform/FormPropertyManager.ts - Data-layer upscale/downscale\r\n *    - src/dataformux/DataForm.tsx - Uses selectFieldForValue() in render\r\n *    - src/dataform/IField.ts - Field definitions with alternates\r\n *\r\n * ========================================================================\r\n */\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition, { IFormSample } from \"./IFormDefinition\";\r\nimport ISummarizer, { ISummarizerOptions, ISummarizerResult } from \"./ISummarizer\";\r\nimport SummarizerEvaluator from \"./SummarizerEvaluator\";\r\n\r\nexport default class DataFormUtilities {\r\n  public static generateDefaultItem(formDefinition: IFormDefinition) {\r\n    const newDataObject: any = {};\r\n\r\n    for (let i = 0; i < formDefinition.fields.length; i++) {\r\n      const field = formDefinition.fields[i];\r\n\r\n      if (field.defaultValue !== undefined) {\r\n        if (\r\n          typeof field.defaultValue === \"string\" &&\r\n          DataFormUtilities.isObjectFieldType(field.dataType) &&\r\n          Utilities.isUsableAsObjectKey(field.id)\r\n        ) {\r\n          // sometimes our docs say the default value for an object is \"N/A\", which is not awesome\r\n          newDataObject[field.id] = {};\r\n        } else {\r\n          newDataObject[field.id] = field.defaultValue;\r\n        }\r\n      }\r\n    }\r\n\r\n    return newDataObject;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the component data only contains default or empty values\r\n   * relative to the form definition \u2014 meaning it can be safely removed from\r\n   * the persisted JSON without losing any user intent.\r\n   */\r\n  public static isDefaultOrEmpty(formDefinition: IFormDefinition, data: unknown): boolean {\r\n    if (data === undefined || data === null) {\r\n      return true;\r\n    }\r\n\r\n    if (typeof data !== \"object\") {\r\n      return false;\r\n    }\r\n\r\n    const record = data as Record<string, unknown>;\r\n\r\n    for (const field of formDefinition.fields) {\r\n      const actual = record[field.id];\r\n\r\n      if (actual === undefined || actual === null) {\r\n        continue;\r\n      }\r\n\r\n      if (field.defaultValue !== undefined) {\r\n        if (typeof actual === \"object\" && typeof field.defaultValue === \"object\") {\r\n          if (JSON.stringify(actual) !== JSON.stringify(field.defaultValue)) {\r\n            return false;\r\n          }\r\n        } else if (actual !== field.defaultValue) {\r\n          return false;\r\n        }\r\n      } else {\r\n        if (typeof actual === \"object\") {\r\n          if (Array.isArray(actual) ? actual.length > 0 : Object.keys(actual as object).length > 0) {\r\n            return false;\r\n          }\r\n        } else if (actual !== \"\" && actual !== 0 && actual !== false) {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n\r\n    const fieldIds = new Set(formDefinition.fields.map((f) => f.id));\r\n    for (const key of Object.keys(record)) {\r\n      if (!fieldIds.has(key) && record[key] !== undefined && record[key] !== null) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public static selectSubForm(form: IFormDefinition, select: string) {\r\n    const selectors = select.split(\"/\");\r\n\r\n    for (const selector of selectors) {\r\n      if (selector.length > 0) {\r\n        const field = DataFormUtilities.getFieldById(form, selector);\r\n\r\n        if (!field || !field.subForm) {\r\n          throw new Error(\"Unable to find field \" + selector + \" in form \" + form.id);\r\n        }\r\n\r\n        form = field.subForm;\r\n      }\r\n    }\r\n\r\n    return form;\r\n  }\r\n\r\n  public static mergeFields(form: IFormDefinition) {\r\n    let fields: IField[] = [];\r\n    const fieldsByName: { [name: string]: IField } = {};\r\n\r\n    for (const field of form.fields) {\r\n      if (fieldsByName[field.id]) {\r\n        const origField = fieldsByName[field.id];\r\n\r\n        if (!origField.alternates) {\r\n          origField.alternates = [];\r\n        }\r\n\r\n        origField.alternates.push(field);\r\n\r\n        if (field.alternates) {\r\n          for (const subField of field.alternates) {\r\n            origField.alternates.push(subField);\r\n          }\r\n\r\n          field.alternates = undefined;\r\n        }\r\n      } else {\r\n        fields.push(field);\r\n        if (Utilities.isUsableAsObjectKey(field.id)) {\r\n          fieldsByName[field.id] = field;\r\n        }\r\n      }\r\n    }\r\n\r\n    form.fields = fields;\r\n\r\n    for (const field of fields) {\r\n      if (field.subForm) {\r\n        DataFormUtilities.mergeFields(field.subForm);\r\n      }\r\n\r\n      if (field.alternates) {\r\n        for (let addField of field.alternates) {\r\n          if (addField.subForm) {\r\n            DataFormUtilities.mergeFields(addField.subForm);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    DataFormUtilities.sortAndCleanAlternateFields(form);\r\n  }\r\n\r\n  /**\r\n   * Selects the most appropriate field definition (primary or alternate) based on the actual value type.\r\n   *\r\n   * This is the UI-layer component of the \"upscale/downscale\" pattern. It ensures that\r\n   * when rendering a form, the correct editor is used for the actual data type.\r\n   *\r\n   * BACKGROUND:\r\n   *   Minecraft JSON often supports multiple representations of the same field:\r\n   *   - A scalar: \"hello\"\r\n   *   - An array: [\"a\", \"b\"]\r\n   *   - An object: { items: [\"a\"], amount: 5 }\r\n   *\r\n   *   Field definitions can have \"alternates\" - additional field definitions that\r\n   *   represent the same logical field but with different dataTypes and potentially\r\n   *   different subForms.\r\n   *\r\n   * HOW IT WORKS:\r\n   *   1. Collects all field variants (primary + alternates)\r\n   *   2. Scores each variant based on how well its dataType matches the value\r\n   *   3. Returns the highest-scoring variant\r\n   *\r\n   * SCORING RULES:\r\n   *   - Array values prefer stringArray, numberArray, objectArray types\r\n   *   - Object values prefer object types, especially with subForms\r\n   *   - Scalar values prefer matching primitive types (string, int, boolean)\r\n   *\r\n   * USAGE IN DataForm.tsx:\r\n   *   const effectiveField = DataFormUtilities.selectFieldForValue(field, curVal);\r\n   *   // effectiveField is now the variant that best represents curVal\r\n   *   // Use effectiveField.dataType, effectiveField.subForm, etc.\r\n   *\r\n   * RELATED:\r\n   *   - FormPropertyManager.upscaleDirectObject() - Data-layer scalar\u2192object\r\n   *   - FormPropertyManager.downscaleDirectObject() - Data-layer object\u2192scalar\r\n   *\r\n   * @param field - The primary field definition (may have alternates)\r\n   * @param value - The actual value to match against\r\n   * @returns The best-matching field definition (primary or an alternate)\r\n   */\r\n  public static selectFieldForValue(field: IField, value: any): IField {\r\n    if (value === undefined || value === null) {\r\n      return field;\r\n    }\r\n\r\n    // Collect all field variants (primary + alternates)\r\n    const allFields = [field];\r\n    if (field.alternates) {\r\n      allFields.push(...field.alternates);\r\n    }\r\n\r\n    // If only one field, return it\r\n    if (allFields.length === 1) {\r\n      return field;\r\n    }\r\n\r\n    const valueType = typeof value;\r\n    const isArray = Array.isArray(value);\r\n    const isObject = valueType === \"object\" && !isArray;\r\n\r\n    // Score each field based on how well it matches the value type\r\n    let bestField = field;\r\n    let bestScore = -1;\r\n\r\n    for (const candidate of allFields) {\r\n      let score = 0;\r\n      const dt = candidate.dataType;\r\n\r\n      if (isArray) {\r\n        // Value is an array - prefer array types\r\n        if (\r\n          dt === FieldDataType.stringArray ||\r\n          dt === FieldDataType.numberArray ||\r\n          dt === FieldDataType.objectArray ||\r\n          dt === FieldDataType.longFormStringArray\r\n        ) {\r\n          score = 10;\r\n        }\r\n      } else if (isObject) {\r\n        // Value is an object - prefer object types (especially those with subForms)\r\n        if (DataFormUtilities.isObjectFieldType(dt)) {\r\n          score = 10;\r\n          if (candidate.subForm || candidate.subFormId) {\r\n            score = 15; // Prefer objects with subForms\r\n          }\r\n        } else if (dt === FieldDataType.keyedObjectCollection || dt === FieldDataType.keyedStringCollection) {\r\n          score = 8;\r\n        }\r\n      } else if (valueType === \"string\") {\r\n        // Value is a string - prefer string types\r\n        // Note: isString includes stringEnum, so it gets score 10\r\n        if (DataFormUtilities.isString(dt)) {\r\n          score = 10;\r\n        }\r\n      } else if (valueType === \"number\") {\r\n        // Value is a number - prefer numeric types\r\n        if (\r\n          dt === FieldDataType.int ||\r\n          dt === FieldDataType.float ||\r\n          dt === FieldDataType.number ||\r\n          dt === FieldDataType.long\r\n        ) {\r\n          score = 10;\r\n        } else if (dt === FieldDataType.intEnum) {\r\n          score = 9;\r\n        }\r\n      } else if (valueType === \"boolean\") {\r\n        // Value is a boolean - prefer boolean types\r\n        if (dt === FieldDataType.boolean || dt === FieldDataType.intBoolean) {\r\n          score = 10;\r\n        }\r\n      }\r\n\r\n      if (score > bestScore) {\r\n        bestScore = score;\r\n        bestField = candidate;\r\n      }\r\n    }\r\n\r\n    return bestField;\r\n  }\r\n\r\n  public static isObjectFieldType(fieldDataType: FieldDataType) {\r\n    return (\r\n      fieldDataType === FieldDataType.object ||\r\n      fieldDataType === FieldDataType.minecraftFilter ||\r\n      fieldDataType === FieldDataType.minecraftEventTrigger\r\n    );\r\n  }\r\n\r\n  public static isScalarFieldType(fieldDataType: FieldDataType) {\r\n    return (\r\n      fieldDataType === FieldDataType.boolean ||\r\n      fieldDataType === FieldDataType.float ||\r\n      fieldDataType === FieldDataType.int ||\r\n      fieldDataType === FieldDataType.intBoolean ||\r\n      fieldDataType === FieldDataType.intEnum ||\r\n      fieldDataType === FieldDataType.string ||\r\n      fieldDataType === FieldDataType.molang\r\n    );\r\n  }\r\n\r\n  public static sortFieldsBySignificance(fieldA: IField, fieldB: IField): number {\r\n    if (fieldA.subForm && !fieldB.subForm) {\r\n      return -1;\r\n    }\r\n\r\n    if (!fieldA.subForm && fieldB.subForm) {\r\n      return 1;\r\n    }\r\n\r\n    const isAComplex = !DataFormUtilities.isScalarFieldType(fieldA.dataType);\r\n    const isBComplex = !DataFormUtilities.isScalarFieldType(fieldB.dataType);\r\n\r\n    if (isAComplex && !isBComplex) {\r\n      return -1;\r\n    }\r\n\r\n    if (!isAComplex && isBComplex) {\r\n      return 1;\r\n    }\r\n\r\n    if (fieldA.dataType < fieldB.dataType) {\r\n      return -1;\r\n    }\r\n    if (fieldA.dataType > fieldB.dataType) {\r\n      return 1;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  public static sortFieldsByPriority(fieldA: IField, fieldB: IField): number {\r\n    if (fieldA.isDeprecated && !fieldB.isDeprecated) {\r\n      return 1;\r\n    }\r\n\r\n    if (!fieldA.isDeprecated && fieldB.isDeprecated) {\r\n      return -1;\r\n    }\r\n\r\n    if (fieldA.priority && !fieldB.priority) {\r\n      return -1;\r\n    }\r\n\r\n    if (fieldB.priority && !fieldA.priority) {\r\n      return 1;\r\n    }\r\n\r\n    if (fieldA.priority && fieldB.priority) {\r\n      return fieldA.priority - fieldB.priority;\r\n    }\r\n\r\n    if (fieldA.title && fieldB.title) {\r\n      return fieldA.title.localeCompare(fieldB.title);\r\n    }\r\n\r\n    if (fieldA.id && fieldB.id) {\r\n      return Utilities.staticCompare(fieldA.id, fieldB.id);\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  public static async loadSubForms(\r\n    form: IFormDefinition,\r\n    loadedForms?: string | undefined\r\n  ): Promise<string | undefined> {\r\n    if (!loadedForms) {\r\n      loadedForms = \"\";\r\n    }\r\n\r\n    if (form && form.fields) {\r\n      for (const field of form.fields) {\r\n        let subForm: IFormDefinition | undefined = undefined;\r\n\r\n        if (field.subForm) {\r\n          subForm = field.subForm;\r\n        } else if (field.subFormId) {\r\n          if (loadedForms.indexOf(\"|\" + field.subFormId + \"|\") < 0) {\r\n            subForm = await Database.ensureFormLoadedByPath(field.subFormId);\r\n\r\n            loadedForms += \"|\" + field.subFormId + \"|\";\r\n          }\r\n        }\r\n\r\n        if (subForm) {\r\n          await this.loadSubForms(subForm, loadedForms);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (loadedForms === \"\") {\r\n      return undefined;\r\n    }\r\n\r\n    return loadedForms;\r\n  }\r\n\r\n  public static sortAndCleanAlternateFields(form: IFormDefinition) {\r\n    let fields: IField[] = [];\r\n\r\n    for (const field of form.fields) {\r\n      if (field.alternates) {\r\n        const allFields: IField[] = [];\r\n        allFields.push(field);\r\n        allFields.push(...field.alternates);\r\n        field.alternates = undefined;\r\n\r\n        allFields.sort(DataFormUtilities.sortFieldsBySignificance);\r\n\r\n        allFields[0].alternates = [];\r\n\r\n        fields.push(allFields[0]);\r\n\r\n        for (let i = 1; i < allFields.length; i++) {\r\n          if (allFields[i].title === allFields[0].title) {\r\n            allFields[i].title = undefined;\r\n          }\r\n          allFields[0].alternates.push(allFields[i]);\r\n        }\r\n      } else {\r\n        fields.push(field);\r\n      }\r\n    }\r\n\r\n    form.fields = fields;\r\n\r\n    for (const field of fields) {\r\n      if (field.subForm) {\r\n        DataFormUtilities.sortAndCleanAlternateFields(field.subForm);\r\n      }\r\n\r\n      if (field.alternates) {\r\n        for (let addField of field.alternates) {\r\n          if (addField.subForm) {\r\n            DataFormUtilities.sortAndCleanAlternateFields(addField.subForm);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public static fixupFields(form: IFormDefinition, parentField?: IField) {\r\n    let fields: IField[] = [];\r\n\r\n    for (const field of form.fields) {\r\n      if (\r\n        (field.dataType === FieldDataType.stringArray || field.dataType === FieldDataType.numberArray) &&\r\n        field.subForm &&\r\n        field.subForm.fields &&\r\n        field.subForm.fields.length >= 1\r\n      ) {\r\n        const subField = field.subForm.fields[0];\r\n\r\n        if (subField.id.indexOf(\"<\") >= 0) {\r\n          if (subField.dataType === FieldDataType.molang) {\r\n            field.dataType = FieldDataType.molangArray;\r\n          }\r\n\r\n          field.subForm = undefined;\r\n        }\r\n\r\n        fields.push(field);\r\n      } else if (field.id.startsWith(\"<\") && parentField) {\r\n        if (!parentField.alternates) {\r\n          parentField.alternates = [];\r\n        }\r\n        field.keyDescription = field.id;\r\n        field.id = parentField.id;\r\n\r\n        if (field.dataType === FieldDataType.molangArray || field.dataType === FieldDataType.stringArray) {\r\n          field.dataType = FieldDataType.keyedStringCollection;\r\n        }\r\n\r\n        parentField.alternates.push(field);\r\n      } else {\r\n        fields.push(field);\r\n      }\r\n    }\r\n\r\n    form.fields = fields;\r\n\r\n    for (const field of fields) {\r\n      if (field.subForm) {\r\n        DataFormUtilities.fixupFields(field.subForm, field);\r\n      }\r\n\r\n      if (field.alternates) {\r\n        for (let addField of field.alternates) {\r\n          if (addField.subForm) {\r\n            DataFormUtilities.fixupFields(addField.subForm, field);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static generateFormFromObject(id: string, obj: object, exampleSourcePath?: string) {\r\n    let fields: IField[] = [];\r\n\r\n    for (const fieldName in obj) {\r\n      const fieldData = (obj as any)[fieldName];\r\n\r\n      let fieldType = FieldDataType.string;\r\n\r\n      if (typeof fieldData === \"number\") {\r\n        fieldType = FieldDataType.number;\r\n      }\r\n\r\n      const samples: { [name: string]: IFormSample[] } = {};\r\n\r\n      samples[exampleSourcePath ? exampleSourcePath : \"generated_doNotEdit\"] = [\r\n        {\r\n          path: fieldName,\r\n          content: fieldData,\r\n        },\r\n      ];\r\n\r\n      fields.push({\r\n        id: fieldName,\r\n        title: Utilities.humanifyJsName(fieldName),\r\n        dataType: fieldType,\r\n        samples: samples,\r\n      });\r\n    }\r\n\r\n    return {\r\n      id: id,\r\n      title: Utilities.humanifyJsName(id),\r\n      fields: fields,\r\n    };\r\n  }\r\n\r\n  static getFieldAndAlternates(fieldDefinition: IField) {\r\n    const fields = [fieldDefinition];\r\n\r\n    if (fieldDefinition.alternates) {\r\n      for (const altField of fieldDefinition.alternates) {\r\n        fields.push(...DataFormUtilities.getFieldAndAlternates(altField));\r\n      }\r\n    }\r\n\r\n    return fields;\r\n  }\r\n\r\n  static getScalarField(formDefinition: IFormDefinition) {\r\n    if (formDefinition.scalarField) {\r\n      return formDefinition.scalarField;\r\n    }\r\n\r\n    if (formDefinition.scalarFieldUpgradeName && formDefinition.fields) {\r\n      for (const field of formDefinition.fields) {\r\n        if (field.id === formDefinition.scalarFieldUpgradeName) {\r\n          return field;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static isString(fieldType: FieldDataType) {\r\n    return (\r\n      fieldType === FieldDataType.string ||\r\n      fieldType === FieldDataType.molang ||\r\n      fieldType === FieldDataType.longFormString ||\r\n      fieldType === FieldDataType.stringLookup ||\r\n      fieldType === FieldDataType.stringEnum ||\r\n      fieldType === FieldDataType.localizableString\r\n    );\r\n  }\r\n\r\n  static getFieldById(formDefinition: IFormDefinition, fieldId: string) {\r\n    if (!formDefinition.fields) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const field of formDefinition.fields) {\r\n      if (field.id === fieldId) {\r\n        return field;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getFieldTypeDescription(fieldType: FieldDataType) {\r\n    switch (fieldType) {\r\n      case FieldDataType.int:\r\n        return \"Integer number\";\r\n      case FieldDataType.boolean:\r\n        return \"Boolean true/false\";\r\n      case FieldDataType.float:\r\n        return \"Decimal number\";\r\n      case FieldDataType.stringEnum:\r\n        return \"String from a list of choices\";\r\n      case FieldDataType.intEnum:\r\n        return \"Integer number from a list of choices\";\r\n      case FieldDataType.intBoolean:\r\n        return \"Boolean 0/1\";\r\n      case FieldDataType.number:\r\n        return \"Decimal number\";\r\n      case FieldDataType.long:\r\n        return \"Large number\";\r\n      case FieldDataType.stringLookup:\r\n        return \"String from a list of choices\";\r\n      case FieldDataType.intValueLookup:\r\n        return \"Integer number from a list of choices\";\r\n      case FieldDataType.point3:\r\n        return \"x, y, z coordinate array\";\r\n      case FieldDataType.intPoint3:\r\n        return \"integer x, y, z coordinate array\";\r\n      case FieldDataType.longFormString:\r\n        return \"Longer descriptive text\";\r\n      case FieldDataType.keyedObjectCollection:\r\n        return \"Named set of objects\";\r\n      case FieldDataType.objectArray:\r\n        return \"Array of objects\";\r\n      case FieldDataType.object:\r\n        return \"Object\";\r\n      case FieldDataType.stringArray:\r\n        return \"Array of strings\";\r\n      case FieldDataType.intRange:\r\n        return \"Range of integers\";\r\n      case FieldDataType.floatRange:\r\n        return \"Range of floats\";\r\n      case FieldDataType.minecraftFilter:\r\n        return \"Minecraft filter\";\r\n      case FieldDataType.minecraftEventTriggerArray:\r\n        return \"Array of Minecraft Event Triggers\";\r\n      case FieldDataType.percentRange:\r\n        return \"Percent Range\";\r\n      case FieldDataType.minecraftEventTrigger:\r\n        return \"Minecraft Event Trigger\";\r\n      case FieldDataType.minecraftEventReference:\r\n        return \"Minecraft Event Reference\";\r\n      case FieldDataType.longFormStringArray:\r\n        return \"Array of longer descriptive text\";\r\n      case FieldDataType.keyedStringCollection:\r\n        return \"Keyed set of strings\";\r\n      case FieldDataType.version:\r\n        return \"Version\";\r\n      case FieldDataType.uuid:\r\n        return \"Unique Id\";\r\n      case FieldDataType.keyedBooleanCollection:\r\n        return \"Keyed collection of boolean values\";\r\n      case FieldDataType.keyedStringArrayCollection:\r\n        return \"Keyed collection of string arrays\";\r\n      case FieldDataType.arrayOfKeyedStringCollection:\r\n        return \"Array of keyed string sets\";\r\n      case FieldDataType.keyedKeyedStringArrayCollection:\r\n        return \"Keyed set of keyed string sets\";\r\n      case FieldDataType.keyedNumberCollection:\r\n        return \"Keyed set of numbers\";\r\n      case FieldDataType.numberArray:\r\n        return \"Array of numbers\";\r\n      case FieldDataType.point2:\r\n        return \"a, b coordinate array\";\r\n      case FieldDataType.localizableString:\r\n        return \"Localizable String\";\r\n      case FieldDataType.string:\r\n        return \"String\";\r\n      case FieldDataType.molang:\r\n        return \"Molang\";\r\n      case FieldDataType.molangArray:\r\n        return \"Molang array\";\r\n      default:\r\n        return \"String\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a natural language summary of an object based on its form definition.\r\n   *\r\n   * This method loads the summarizer associated with the form (if one exists)\r\n   * and evaluates it against the provided data to produce human-readable phrases.\r\n   *\r\n   * @param data The data object to summarize\r\n   * @param formPath Path to the form definition (e.g., \"entity/minecraft_health\")\r\n   * @param options Optional evaluation options\r\n   * @returns Result containing phrases and formatted output\r\n   *\r\n   * @example\r\n   * const result = await DataFormUtilities.generateSummary(\r\n   *   { max: 500, value: 500 },\r\n   *   \"entity/minecraft_health\"\r\n   * );\r\n   * console.log(result.asCompleteSentence);\r\n   * // \"This entity has god-tier health (500 HP).\"\r\n   */\r\n  static async generateSummary(\r\n    data: object,\r\n    formPath: string,\r\n    options?: ISummarizerOptions\r\n  ): Promise<ISummarizerResult> {\r\n    // Load the form definition\r\n    const form = await Database.ensureFormLoadedByPath(formPath);\r\n\r\n    // Extract category from the path (e.g., \"entity\" from \"entity/minecraft_health.form.json\")\r\n    let category: string | undefined;\r\n    const lastSlash = formPath.lastIndexOf(\"/\");\r\n    if (lastSlash > 0) {\r\n      category = formPath.substring(0, lastSlash);\r\n    }\r\n\r\n    // Derive the summarizer ID from the form path (same name, different extension)\r\n    const summarizerName = formPath.substring(lastSlash + 1).replace(\".form.json\", \"\");\r\n\r\n    // Try to load the summarizer\r\n    const summarizer = await DataFormUtilities.loadSummarizerById(summarizerName, category);\r\n\r\n    if (!summarizer) {\r\n      // No summarizer defined, return empty result\r\n      return {\r\n        phrases: [],\r\n        asSentence: \"\",\r\n        asCompleteSentence: \"\",\r\n      };\r\n    }\r\n\r\n    const evaluator = new SummarizerEvaluator();\r\n    return evaluator.evaluate(summarizer, data, form, options);\r\n  }\r\n\r\n  /**\r\n   * Generate a summary and format it as a complete sentence.\r\n   *\r\n   * @param data The data object to summarize\r\n   * @param formPath Path to the form definition\r\n   * @param prefix Optional prefix for the sentence (default: \"This entity \")\r\n   * @returns A complete sentence describing the object, or empty string if no summarizer\r\n   *\r\n   * @example\r\n   * const sentence = await DataFormUtilities.generateSummaryAsSentence(\r\n   *   { max: 100 },\r\n   *   \"entity/minecraft_health\",\r\n   *   \"This mob \"\r\n   * );\r\n   * // \"This mob has extremely high health, on par with an Iron Golem (100 HP).\"\r\n   */\r\n  static async generateSummaryAsSentence(\r\n    data: object,\r\n    formPath: string,\r\n    prefix: string = \"This entity \"\r\n  ): Promise<string> {\r\n    const result = await DataFormUtilities.generateSummary(data, formPath);\r\n\r\n    if (result.phrases.length === 0) {\r\n      return \"\";\r\n    }\r\n\r\n    return `${prefix}${result.asSentence}.`;\r\n  }\r\n\r\n  /**\r\n   * Load a summarizer definition by ID.\r\n   *\r\n   * The ID format matches subFormId: \"category/name\" or just \"name\".\r\n   * Does NOT include the .summarizer.json suffix.\r\n   *\r\n   * @param summarizerId ID of the summarizer (e.g., \"entity/minecraft_health\" or \"minecraft_health\")\r\n   * @param category Optional category subfolder (e.g., \"entity\", \"block\") - used if ID doesn't include category\r\n   * @returns The summarizer definition, or undefined if not found\r\n   *\r\n   * @example\r\n   * // These are equivalent:\r\n   * loadSummarizerById(\"entity/minecraft_health\")\r\n   * loadSummarizerById(\"minecraft_health\", \"entity\")\r\n   */\r\n  static async loadSummarizerById(summarizerId: string, category?: string): Promise<ISummarizer | undefined> {\r\n    try {\r\n      // Parse the ID to extract category and name\r\n      const lastSlash = summarizerId.lastIndexOf(\"/\");\r\n      let resolvedCategory: string | undefined;\r\n      let name: string;\r\n\r\n      if (lastSlash >= 0) {\r\n        // ID includes category: \"entity/minecraft_health\"\r\n        resolvedCategory = summarizerId.substring(0, lastSlash);\r\n        name = summarizerId.substring(lastSlash + 1);\r\n      } else {\r\n        // ID is just name: \"minecraft_health\"\r\n        resolvedCategory = category;\r\n        name = summarizerId;\r\n      }\r\n\r\n      // Build the full path - use contentWebRoot for Electron compatibility\r\n      let relativePath = \"data/forms/\";\r\n      if (resolvedCategory) {\r\n        relativePath += resolvedCategory + \"/\";\r\n      }\r\n      relativePath += name + \".summarizer.json\";\r\n\r\n      const fullPath = CreatorToolsHost.contentWebRoot + relativePath;\r\n\r\n      // Load the summarizer JSON\r\n      const response = await fetch(fullPath);\r\n      if (!response.ok) {\r\n        return undefined;\r\n      }\r\n\r\n      const data: unknown = await response.json();\r\n      if (!data || typeof data !== \"object\" || !Array.isArray((data as ISummarizer).phrases)) {\r\n        return undefined;\r\n      }\r\n\r\n      return data as ISummarizer;\r\n    } catch (e) {\r\n      // Summarizer not found or invalid\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluate a summarizer directly against data.\r\n   *\r\n   * Use this when you already have the summarizer loaded and want to\r\n   * avoid the overhead of loading it from disk.\r\n   *\r\n   * @param summarizer The summarizer definition\r\n   * @param data The data object to summarize\r\n   * @param form Optional form definition for sample lookup\r\n   * @param options Optional evaluation options\r\n   * @returns Result containing phrases and formatted output\r\n   */\r\n  static evaluateSummarizer(\r\n    summarizer: ISummarizer,\r\n    data: object,\r\n    form?: IFormDefinition,\r\n    options?: ISummarizerOptions\r\n  ): ISummarizerResult {\r\n    const evaluator = new SummarizerEvaluator();\r\n    return evaluator.evaluate(summarizer, data, form, options);\r\n  }\r\n\r\n  // ========================================================================\r\n  // FIELD PROPERTY UTILITIES\r\n  // These are shared utilities for inspecting field structures, used by\r\n  // JSON schema generators, hover providers, and other field-analysis code.\r\n  // ========================================================================\r\n\r\n  /**\r\n   * Get a preview of property names for an object field.\r\n   * Returns a string like \"{ description, components, events, ... }\" for objects with many properties,\r\n   * or \"{ prop1, prop2 }\" for objects with few properties.\r\n   *\r\n   * This is useful for displaying concise type information in hovers and tooltips.\r\n   *\r\n   * @param field The field to inspect\r\n   * @returns A formatted string preview of property names, or null if not applicable\r\n   */\r\n  static getObjectPropertyPreview(field: IField): string | null {\r\n    let fieldNames: string[] = [];\r\n\r\n    // Helper to clean field IDs - removes embedded enum syntax like `render_distance_type\"<\"fixed\", \"render\"`\r\n    const cleanFieldId = (id: string): string => {\r\n      const lessThanIndex = id.indexOf('\"<\"');\r\n      if (lessThanIndex > 0) {\r\n        return id.substring(0, lessThanIndex);\r\n      }\r\n      return id;\r\n    };\r\n\r\n    // Check subFields (direct field definitions)\r\n    if (field.subFields) {\r\n      fieldNames = Object.keys(field.subFields)\r\n        .filter((k) => !k.startsWith(\"_\"))\r\n        .map(cleanFieldId);\r\n    }\r\n    // Check subForm (embedded form definition)\r\n    else if (field.subForm?.fields) {\r\n      fieldNames = field.subForm.fields.filter((f) => f.id && !f.id.startsWith(\"_\")).map((f) => cleanFieldId(f.id!));\r\n    }\r\n\r\n    if (fieldNames.length === 0) {\r\n      return null;\r\n    }\r\n\r\n    // Show up to 3 property names with ellipsis if more\r\n    const maxToShow = 3;\r\n    if (fieldNames.length <= maxToShow) {\r\n      return `{ ${fieldNames.join(\", \")} }`;\r\n    }\r\n    const shown = fieldNames.slice(0, maxToShow).join(\", \");\r\n    return `{ ${shown}, ... }`;\r\n  }\r\n\r\n  /**\r\n   * Get the child properties of a field (what this field contains).\r\n   * Returns the field's own subForm/subFields, or the referenced subFormId's fields.\r\n   * Returns null if the field doesn't have child properties.\r\n   *\r\n   * This supports multiple resolution strategies:\r\n   * 1. subFormId reference - looks up in the provided forms dictionary\r\n   * 2. Inline subForm - embedded form definition\r\n   * 3. subFields - dictionary-style field definitions\r\n   *\r\n   * @param field The field to inspect\r\n   * @param formsBySubFormId Optional dictionary of forms keyed by subFormId for resolving references\r\n   * @returns Array of child fields, or null if none found\r\n   */\r\n  static getFieldChildProperties(field: IField, formsBySubFormId?: Record<string, IFormDefinition>): IField[] | null {\r\n    // First check if field references a subFormId\r\n    if (field.subFormId && formsBySubFormId && formsBySubFormId[field.subFormId]) {\r\n      const referencedForm = formsBySubFormId[field.subFormId];\r\n      if (referencedForm.fields && referencedForm.fields.length > 0) {\r\n        return referencedForm.fields;\r\n      }\r\n    }\r\n\r\n    // Check inline subForm\r\n    if (field.subForm?.fields && field.subForm.fields.length > 0) {\r\n      return field.subForm.fields;\r\n    }\r\n\r\n    // Check subFields (dictionary style)\r\n    if (field.subFields) {\r\n      const subFieldsArray: IField[] = [];\r\n      for (const [key, subField] of Object.entries(field.subFields)) {\r\n        if (!key.startsWith(\"_\")) {\r\n          subFieldsArray.push({ ...subField, id: key } as IField);\r\n        }\r\n      }\r\n      if (subFieldsArray.length > 0) {\r\n        return subFieldsArray;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ICondition, { ComparisonType } from \"./ICondition\";\r\nimport IDataContainer from \"./IDataContainer\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\n\r\nexport default class FieldUtilities {\r\n  static getFieldValueAsBoolean(name: string, defaultValue: boolean, container: IDataContainer) {\r\n    let value = undefined;\r\n\r\n    if (container.dataPropertyObject !== undefined) {\r\n      const prop = container.dataPropertyObject.getProperty(name);\r\n\r\n      if (prop !== undefined) {\r\n        value = prop.value;\r\n      }\r\n    }\r\n\r\n    if (container.getsetPropertyObject !== undefined) {\r\n      value = container.getsetPropertyObject.getProperty(name);\r\n    }\r\n\r\n    if (container.directObject !== undefined) {\r\n      value = container.directObject[name];\r\n    }\r\n\r\n    if (value === undefined) {\r\n      return defaultValue;\r\n    }\r\n\r\n    if (typeof value === \"boolean\") {\r\n      return value;\r\n    } else if (typeof value === \"number\") {\r\n      if (value === 0) {\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    } else if (typeof value === \"string\") {\r\n      if (value === \"false\") {\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return defaultValue;\r\n  }\r\n\r\n  static async getSubForm(field: IField): Promise<IFormDefinition | undefined> {\r\n    if (field.subForm) {\r\n      return field.subForm;\r\n    }\r\n\r\n    if (field.subFormId) {\r\n      const subForm = await Database.ensureFormLoadedByPath(field.subFormId);\r\n      return subForm;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getFieldValue(field: IField, container: IDataContainer) {\r\n    let curVal = undefined;\r\n\r\n    const dataObj = container.dataPropertyObject;\r\n\r\n    if (dataObj !== undefined) {\r\n      let prop = dataObj.getProperty(field.id);\r\n\r\n      if (prop === undefined && field.altId !== undefined) {\r\n        prop = dataObj.getProperty(field.altId);\r\n      }\r\n\r\n      if (prop !== undefined) {\r\n        curVal = prop.value;\r\n      }\r\n    }\r\n\r\n    const gsObj = container.getsetPropertyObject;\r\n\r\n    if (gsObj !== undefined) {\r\n      if (field.id === \"__scalar\") {\r\n        const res = gsObj.getBaseValue();\r\n\r\n        if (typeof res === \"object\") {\r\n          return undefined;\r\n        }\r\n\r\n        return res;\r\n      }\r\n\r\n      curVal = gsObj.getProperty(field.id);\r\n\r\n      if (curVal === undefined && field.altId !== undefined) {\r\n        curVal = gsObj.getProperty(field.altId);\r\n      }\r\n    }\r\n\r\n    const dirObj = container.directObject;\r\n\r\n    if (dirObj !== undefined) {\r\n      if (field.id === \"__scalar\") {\r\n        if (typeof dirObj === \"object\") {\r\n          return undefined;\r\n        }\r\n\r\n        return dirObj;\r\n      }\r\n\r\n      curVal = dirObj[field.id];\r\n    }\r\n\r\n    return curVal;\r\n  }\r\n\r\n  static getFieldTitle(field: IField) {\r\n    let title = field.id;\r\n\r\n    if (field.title !== undefined) {\r\n      title = field.title;\r\n    } else {\r\n      title = Utilities.humanifyMinecraftName(title);\r\n    }\r\n\r\n    if (title === undefined) {\r\n      title = \"Untitled\";\r\n    }\r\n\r\n    return title;\r\n  }\r\n\r\n  static getFieldId(field: IField) {\r\n    if (field.id) {\r\n      return field.id;\r\n    }\r\n\r\n    if (field.title) {\r\n      return field.title;\r\n    }\r\n\r\n    return \"<no id>\";\r\n  }\r\n\r\n  static getFieldById(id: string, form: IFormDefinition) {\r\n    const fields = form.fields;\r\n\r\n    for (let i = 0; i < fields.length; i++) {\r\n      const field = fields[i];\r\n\r\n      if (field.id === id) {\r\n        return field;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Legacy numeric-to-string mapping for FieldDataType.\r\n   * Some form.json files still contain numeric dataType values from that era. \r\n   * This map converts them to the current string-based FieldDataType values.\r\n   */\r\n  private static readonly _legacyNumericDataTypeMap: { [key: number]: FieldDataType } = {\r\n    0: FieldDataType.int,\r\n    1: FieldDataType.boolean,\r\n    2: FieldDataType.string,\r\n    3: FieldDataType.float,\r\n    4: FieldDataType.stringEnum,\r\n    5: FieldDataType.intEnum,\r\n    6: FieldDataType.intBoolean,\r\n    7: FieldDataType.number,\r\n    8: FieldDataType.stringLookup,\r\n    9: FieldDataType.intValueLookup,\r\n    10: FieldDataType.long,\r\n    11: FieldDataType.point3,\r\n    12: FieldDataType.intPoint3,\r\n    13: FieldDataType.longFormString,\r\n    14: FieldDataType.keyedObjectCollection,\r\n    15: FieldDataType.objectArray,\r\n    16: FieldDataType.object,\r\n    17: FieldDataType.stringArray,\r\n    18: FieldDataType.intRange,\r\n    19: FieldDataType.floatRange,\r\n    20: FieldDataType.minecraftFilter,\r\n    21: FieldDataType.percentRange,\r\n    22: FieldDataType.minecraftEventTrigger,\r\n    23: FieldDataType.longFormStringArray,\r\n    24: FieldDataType.keyedStringCollection,\r\n    25: FieldDataType.version,\r\n    26: FieldDataType.uuid,\r\n    27: FieldDataType.keyedBooleanCollection,\r\n    28: FieldDataType.keyedStringArrayCollection,\r\n    29: FieldDataType.arrayOfKeyedStringCollection,\r\n    30: FieldDataType.keyedKeyedStringArrayCollection,\r\n    31: FieldDataType.keyedNumberCollection,\r\n    32: FieldDataType.numberArray,\r\n    33: FieldDataType.checkboxListAsStringArray,\r\n    34: FieldDataType.molang,\r\n    35: FieldDataType.molangArray,\r\n    36: FieldDataType.point2,\r\n    37: FieldDataType.localizableString,\r\n    38: FieldDataType.keyedNumberArrayCollection,\r\n    39: FieldDataType.minecraftEventReference,\r\n  };\r\n\r\n  /**\r\n   * Converts a legacy numeric FieldDataType value to its string equivalent.\r\n   * If the value is already a string, returns it as-is.\r\n   */\r\n  static normalizeFieldDataType(dataType: FieldDataType | number): FieldDataType {\r\n    if (typeof dataType === \"number\") {\r\n      return FieldUtilities._legacyNumericDataTypeMap[dataType] ?? FieldDataType.string;\r\n    }\r\n    return dataType;\r\n  }\r\n\r\n  /**\r\n   * Normalizes all numeric dataType values in a form definition (and its nested\r\n   * subForms/alternates) to string-based FieldDataType values.\r\n   */\r\n  static normalizeFormFieldDataTypes(form: IFormDefinition) {\r\n    if (!form.fields) {\r\n      return;\r\n    }\r\n\r\n    for (const field of form.fields) {\r\n      FieldUtilities.normalizeFieldDataTypes(field);\r\n    }\r\n\r\n    if (form.scalarField) {\r\n      FieldUtilities.normalizeFieldDataTypes(form.scalarField);\r\n    }\r\n  }\r\n\r\n  private static normalizeFieldDataTypes(field: IField) {\r\n    if (field.dataType !== undefined) {\r\n      field.dataType = FieldUtilities.normalizeFieldDataType(field.dataType);\r\n    }\r\n\r\n    if (field.alternates) {\r\n      for (const alt of field.alternates) {\r\n        FieldUtilities.normalizeFieldDataTypes(alt);\r\n      }\r\n    }\r\n\r\n    if (field.subForm) {\r\n      FieldUtilities.normalizeFormFieldDataTypes(field.subForm);\r\n    }\r\n  }\r\n\r\n  static getStringKeyedFieldType(fieldType: FieldDataType) {\r\n    switch (fieldType) {\r\n      case FieldDataType.string:\r\n        return FieldDataType.keyedStringCollection;\r\n      case FieldDataType.number:\r\n        return FieldDataType.keyedNumberCollection;\r\n      case FieldDataType.stringArray:\r\n        return FieldDataType.keyedStringArrayCollection;\r\n      case FieldDataType.numberArray:\r\n        return FieldDataType.keyedNumberArrayCollection;\r\n      case FieldDataType.boolean:\r\n        return FieldDataType.keyedBooleanCollection;\r\n      case FieldDataType.object:\r\n        return FieldDataType.keyedObjectCollection;\r\n    }\r\n\r\n    return fieldType;\r\n  }\r\n\r\n  static evaluate(form: IFormDefinition, conditions: ICondition[], container: IDataContainer, defaultField?: IField) {\r\n    for (let condition of conditions) {\r\n      let field: IField | undefined;\r\n\r\n      if (condition.field) {\r\n        field = FieldUtilities.getFieldById(condition.field, form);\r\n      }\r\n\r\n      if (!field && defaultField) {\r\n        field = defaultField;\r\n      }\r\n\r\n      if (!field) {\r\n        Log.fail(\"Could not find field '\" + condition.field + \"'\");\r\n        return false;\r\n      }\r\n\r\n      const actualVal = FieldUtilities.getFieldValue(field, container);\r\n\r\n      if (condition.comparison) {\r\n        const comp = condition.comparison.toLowerCase();\r\n\r\n        if (comp === ComparisonType.equals) {\r\n          if (condition.value !== undefined && actualVal !== condition.value) {\r\n            return false;\r\n          }\r\n\r\n          if (condition.anyValues !== undefined) {\r\n            let foundMatch = false;\r\n\r\n            for (const val of condition.anyValues) {\r\n              if (val === actualVal) {\r\n                foundMatch = true;\r\n              }\r\n            }\r\n\r\n            if (!foundMatch) {\r\n              return false;\r\n            }\r\n          }\r\n        } else if (comp === ComparisonType.isDefined && (actualVal === undefined || actualVal === null)) {\r\n          return false;\r\n        } else if (\r\n          comp === ComparisonType.isNonEmpty &&\r\n          (actualVal === undefined || actualVal === null || (typeof actualVal === \"string\" && actualVal.length <= 0))\r\n        ) {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport DataFormUtilities from \"./DataFormUtilities\";\r\nimport FieldUtilities from \"./FieldUtilities\";\r\nimport { ComparisonType } from \"./ICondition\";\r\nimport IField, { FieldDataType } from \"./IField\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\n\r\n/**\r\n * Cleans a field ID by removing the embedded enum syntax that appears in some form files.\r\n * For example: 'render_distance_type\"<\"fixed\", \"render\"' becomes 'render_distance_type'\r\n * This syntax is used in forms to specify enum choices but should not appear in property names.\r\n */\r\nfunction cleanFieldId(fieldId: string): string {\r\n  const quoteIndex = fieldId.indexOf('\"<\"');\r\n  if (quoteIndex !== -1) {\r\n    return fieldId.substring(0, quoteIndex);\r\n  }\r\n  return fieldId;\r\n}\r\n\r\n/**\r\n * Maximum recursion depth for validation to prevent exponential time complexity\r\n * when validating deeply nested structures. Beyond this depth, validation will\r\n * skip recursive subForm validation.\r\n */\r\nconst MAX_VALIDATION_DEPTH = 10;\r\n\r\n/**\r\n * Cache for subForm lookups during a single validation call chain.\r\n * This prevents repeated async lookups for the same subFormId during recursive validation.\r\n * Exported so it can be shared across items with the same formPath for performance.\r\n */\r\nexport interface IValidationContext {\r\n  depth: number;\r\n  subFormCache: Map<string, IFormDefinition | null>;\r\n}\r\n\r\nexport enum DataFormIssueType {\r\n  unexpectedStringUsedWhenObjectExpected = 101,\r\n  unexpectedBooleanUsedWhenObjectExpected = 102,\r\n  unexpectedNumberUsedWhenObjectExpected = 103,\r\n  dataTypeMismatch = 110,\r\n  valueBelowMinimum = 111,\r\n  valueAboveMaximum = 112,\r\n  stringTooShort = 113,\r\n  stringTooLong = 114,\r\n  valueNotInChoices = 115,\r\n  patternMismatch = 116,\r\n  arrayLengthMismatch = 117,\r\n  pointSizeMismatch = 118,\r\n  keyNotAllowed = 119,\r\n  unexpectedProperty = 120,\r\n  missingRequiredField = 121,\r\n}\r\n\r\nexport interface IDataFormValidationIssue {\r\n  message: string;\r\n  type: DataFormIssueType;\r\n}\r\n\r\nexport default class DataFormValidator {\r\n  static async validate(\r\n    data: object | string | number | boolean,\r\n    form: IFormDefinition,\r\n    issues?: IDataFormValidationIssue[],\r\n    path?: string,\r\n    context?: IValidationContext\r\n  ): Promise<IDataFormValidationIssue[]> {\r\n    // Initialize context on first call (top-level validation)\r\n    if (!context) {\r\n      context = {\r\n        depth: 0,\r\n        subFormCache: new Map<string, IFormDefinition | null>(),\r\n      };\r\n    }\r\n\r\n    // Check recursion depth limit - skip deep validation to prevent exponential complexity\r\n    if (context.depth >= MAX_VALIDATION_DEPTH) {\r\n      return issues || [];\r\n    }\r\n\r\n    if (path === undefined) {\r\n      path = \"\";\r\n    } else {\r\n      path = path + \".\";\r\n    }\r\n\r\n    if (!issues) {\r\n      issues = [];\r\n    }\r\n\r\n    if (typeof data === \"string\" || typeof data === \"number\" || typeof data === \"boolean\") {\r\n      const scalarField = DataFormUtilities.getScalarField(form);\r\n\r\n      if (!scalarField) {\r\n        if (typeof data === \"string\") {\r\n          issues.push(DataFormValidator.getValidationIssue(DataFormIssueType.unexpectedStringUsedWhenObjectExpected));\r\n        } else if (typeof data === \"number\") {\r\n          issues.push(DataFormValidator.getValidationIssue(DataFormIssueType.unexpectedNumberUsedWhenObjectExpected));\r\n        } else if (typeof data === \"boolean\") {\r\n          issues.push(DataFormValidator.getValidationIssue(DataFormIssueType.unexpectedBooleanUsedWhenObjectExpected));\r\n        }\r\n\r\n        return issues;\r\n      }\r\n\r\n      await this.validateField(data, scalarField, issues, path + \"<default value>\", context);\r\n    }\r\n\r\n    const fields = form.fields;\r\n\r\n    // Guard against forms with undefined or null fields array\r\n    if (fields && Array.isArray(fields)) {\r\n      for (const field of fields) {\r\n        if (field.id) {\r\n          // Clean the field ID to remove embedded enum syntax like 'render_distance_type\"<\"fixed\", \"render\"'\r\n          const cleanedFieldId = cleanFieldId(field.id);\r\n\r\n          // Check if the cleaned field ID is a regex pattern (contains metacharacters like [, ], +, *, etc.)\r\n          if (\r\n            this.isPatternFieldId(cleanedFieldId) &&\r\n            typeof data === \"object\" &&\r\n            data !== null &&\r\n            !Array.isArray(data)\r\n          ) {\r\n            // For pattern-based field IDs, find all matching keys in the data\r\n            await this.validatePatternField(data, field, issues, path, context, cleanedFieldId);\r\n          } else {\r\n            // Use the cleaned field ID for data lookup\r\n            const fieldData = (data as any)[cleanedFieldId];\r\n            await this.validateField(fieldData, field, issues, path + cleanedFieldId, context);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check for unexpected properties not defined in the form\r\n    if (typeof data === \"object\" && data !== null && !Array.isArray(data)) {\r\n      await this.validateUnexpectedProperties(data, form, issues, path);\r\n    }\r\n\r\n    return issues;\r\n  }\r\n\r\n  /**\r\n   * Validates that an object doesn't have properties not defined in the form.\r\n   * This check only runs when form.strictAdditionalProperties is true, as most Minecraft\r\n   * content formats allow additional properties not explicitly defined in the schema.\r\n   */\r\n  static async validateUnexpectedProperties(\r\n    data: object,\r\n    form: IFormDefinition,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string\r\n  ): Promise<void> {\r\n    // Skip if the form allows additional properties (default behavior for Minecraft content)\r\n    if (!form.strictAdditionalProperties) {\r\n      return;\r\n    }\r\n\r\n    // Skip if the form explicitly allows custom fields\r\n    if (form.customField) {\r\n      return;\r\n    }\r\n\r\n    // Skip if form.fields is not available\r\n    if (!form.fields || !Array.isArray(form.fields)) {\r\n      return;\r\n    }\r\n\r\n    const definedFieldIds = new Set<string>();\r\n\r\n    for (const field of form.fields) {\r\n      if (field.id) {\r\n        definedFieldIds.add(field.id);\r\n      }\r\n      if (field.altId) {\r\n        definedFieldIds.add(field.altId);\r\n      }\r\n    }\r\n\r\n    const dataKeys = Object.keys(data);\r\n    for (const key of dataKeys) {\r\n      if (!definedFieldIds.has(key)) {\r\n        issues.push({\r\n          message: `At ${path}${key}, unexpected property '${key}' is not defined in the schema.`,\r\n          type: DataFormIssueType.unexpectedProperty,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  static async validateField(\r\n    data: object | string | number | boolean | undefined | null,\r\n    field: IField,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string,\r\n    context: IValidationContext\r\n  ) {\r\n    const allFields = DataFormUtilities.getFieldAndAlternates(field);\r\n\r\n    let dataMismatchErrors = \"\";\r\n    let hasOneMatch = false;\r\n    let isRequired = false;\r\n    let matchingField: IField | undefined;\r\n\r\n    for (const altField of allFields) {\r\n      if (data !== undefined && data !== null) {\r\n        const mismatchError = DataFormValidator.getDataMismatchError(data, altField.dataType);\r\n\r\n        if (!mismatchError) {\r\n          hasOneMatch = true;\r\n          matchingField = altField;\r\n        } else {\r\n          dataMismatchErrors += mismatchError;\r\n        }\r\n      }\r\n\r\n      if (altField.isRequired) {\r\n        isRequired = true;\r\n      }\r\n    }\r\n\r\n    if (data === undefined || data === null) {\r\n      if (isRequired) {\r\n        // Use cleaned field ID in error message\r\n        const cleanedId = field.id ? cleanFieldId(field.id) : field.id;\r\n        issues.push({\r\n          message: \"At \" + path + \", data is missing required field '\" + cleanedId + \"'.\",\r\n          type: DataFormIssueType.missingRequiredField,\r\n        });\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    if (!hasOneMatch) {\r\n      if (allFields.length > 1) {\r\n        issues.push({\r\n          message: \"At \" + path + \", data does not match any one of the expected types: \" + dataMismatchErrors,\r\n          type: DataFormIssueType.dataTypeMismatch,\r\n        });\r\n      } else {\r\n        issues.push({\r\n          message: \"At \" + path + \", data does not match expected type. \" + dataMismatchErrors,\r\n          type: DataFormIssueType.dataTypeMismatch,\r\n        });\r\n      }\r\n      return; // Don't continue validation if type doesn't match\r\n    }\r\n\r\n    // Use the matching field for remaining validations\r\n    const activeField = matchingField || field;\r\n\r\n    // Validate numeric ranges\r\n    if (typeof data === \"number\") {\r\n      this.validateNumericRange(data, activeField, issues, path);\r\n    }\r\n\r\n    // Validate string length\r\n    if (typeof data === \"string\") {\r\n      this.validateStringLength(data, activeField, issues, path);\r\n    }\r\n\r\n    // Validate choices/enum values\r\n    this.validateChoices(data, activeField, issues, path);\r\n\r\n    // Validate patterns from validity conditions\r\n    this.validatePatterns(data, activeField, issues, path);\r\n\r\n    // Validate array lengths\r\n    if (Array.isArray(data)) {\r\n      this.validateArrayLength(data, activeField, issues, path);\r\n    }\r\n\r\n    // Validate point sizes (point2, point3, etc.)\r\n    this.validatePointSize(data, activeField, issues, path);\r\n\r\n    // Validate keyed collection keys\r\n    if (typeof data === \"object\" && data !== null && !Array.isArray(data)) {\r\n      await this.validateKeyedCollection(data, activeField, issues, path, context);\r\n    }\r\n\r\n    if (typeof data === \"object\" && data === null && field.id && Utilities.isUsableAsObjectKey(field.id)) {\r\n      const fieldData = (data as any)[field.id];\r\n\r\n      const subForm = await this.getCachedSubForm(field, context);\r\n\r\n      if (subForm && fieldData !== undefined && fieldData !== null) {\r\n        await this.validate(fieldData, subForm, issues, path, {\r\n          depth: context.depth + 1,\r\n          subFormCache: context.subFormCache,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  static getDataMismatchError(data: object | string | number | boolean | string[] | number[], type: FieldDataType) {\r\n    if (Array.isArray(data)) {\r\n      // Determine array element type by checking first element\r\n      const elementType = data.length > 0 ? typeof data[0] : undefined;\r\n\r\n      if (elementType === \"string\") {\r\n        if (\r\n          type === FieldDataType.stringArray ||\r\n          type === FieldDataType.checkboxListAsStringArray ||\r\n          type === FieldDataType.longFormStringArray\r\n        ) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data '\" +\r\n          data +\r\n          \"' is of type string array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      } else if (elementType === \"number\") {\r\n        // Number arrays can match numberArray, floatRange, intRange, percentRange, point2, point3, intPoint3, version\r\n        if (\r\n          type === FieldDataType.numberArray ||\r\n          type === FieldDataType.floatRange ||\r\n          type === FieldDataType.intRange ||\r\n          type === FieldDataType.percentRange ||\r\n          type === FieldDataType.point2 ||\r\n          type === FieldDataType.point3 ||\r\n          type === FieldDataType.intPoint3 ||\r\n          type === FieldDataType.version ||\r\n          type === FieldDataType.location ||\r\n          type === FieldDataType.locationOffset\r\n        ) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data '\" +\r\n          data +\r\n          \"' is of type number array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      } else if (elementType === \"object\") {\r\n        // Array of objects - valid for objectArray, minecraftEventTriggerArray, etc.\r\n        if (\r\n          type === FieldDataType.objectArray ||\r\n          type === FieldDataType.minecraftEventTriggerArray ||\r\n          type === FieldDataType.arrayOfKeyedStringCollection\r\n        ) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data is of type object array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      } else if (Array.isArray(data[0])) {\r\n        // Two-dimensional array\r\n        if (type === FieldDataType.twoDStringArray) {\r\n          return undefined;\r\n        }\r\n\r\n        return (\r\n          \"Data is of type 2D array, which does not match type '\" +\r\n          DataFormUtilities.getFieldTypeDescription(type) +\r\n          \"'.\"\r\n        );\r\n      }\r\n\r\n      // Empty array - allow it for any array type\r\n      if (data.length === 0) {\r\n        return undefined;\r\n      }\r\n    } else if (typeof data === \"string\") {\r\n      // Strings can match many types including enums, molang expressions, UUIDs, etc.\r\n      if (\r\n        type === FieldDataType.localizableString ||\r\n        type === FieldDataType.longFormString ||\r\n        type === FieldDataType.version ||\r\n        type === FieldDataType.stringLookup ||\r\n        type === FieldDataType.string ||\r\n        type === FieldDataType.stringEnum ||\r\n        type === FieldDataType.molang ||\r\n        type === FieldDataType.uuid ||\r\n        type === FieldDataType.minecraftEventReference\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        data +\r\n        \"' is of type string, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    } else if (typeof data === \"number\") {\r\n      // A single number can match many types including range types (collapsed ranges)\r\n      // According to IField.ts docs, intRange/floatRange/percentRange can be a single number\r\n      if (\r\n        type === FieldDataType.float ||\r\n        type === FieldDataType.intBoolean ||\r\n        type === FieldDataType.int ||\r\n        type === FieldDataType.intEnum ||\r\n        type === FieldDataType.intValueLookup ||\r\n        type === FieldDataType.number ||\r\n        type === FieldDataType.long ||\r\n        type === FieldDataType.intRange ||\r\n        type === FieldDataType.floatRange ||\r\n        type === FieldDataType.percentRange\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        data +\r\n        \"' is of type number, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    } else if (typeof data === \"boolean\") {\r\n      if (type === FieldDataType.boolean) {\r\n        return undefined;\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        data +\r\n        \"' is of type boolean, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    } else if (typeof data === \"object\") {\r\n      // Objects can match many types - keyed collections, range types (with min/max), filters, event triggers, etc.\r\n      if (\r\n        type === FieldDataType.object ||\r\n        type === FieldDataType.keyedBooleanCollection ||\r\n        type === FieldDataType.keyedKeyedStringArrayCollection ||\r\n        type === FieldDataType.keyedNumberArrayCollection ||\r\n        type === FieldDataType.keyedNumberCollection ||\r\n        type === FieldDataType.keyedObjectCollection ||\r\n        type === FieldDataType.keyedStringArrayCollection ||\r\n        type === FieldDataType.keyedStringCollection ||\r\n        // Range types can also be objects with min/max properties\r\n        type === FieldDataType.intRange ||\r\n        type === FieldDataType.floatRange ||\r\n        type === FieldDataType.percentRange ||\r\n        // Minecraft-specific object types\r\n        type === FieldDataType.minecraftFilter ||\r\n        type === FieldDataType.minecraftEventTrigger ||\r\n        type === FieldDataType.minecraftEventReference ||\r\n        // Point types can be objects with x/y/z properties\r\n        type === FieldDataType.point2 ||\r\n        type === FieldDataType.point3 ||\r\n        type === FieldDataType.intPoint3 ||\r\n        type === FieldDataType.location ||\r\n        type === FieldDataType.locationOffset\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      let dataStr = JSON.stringify(data);\r\n\r\n      if (dataStr.length > 60) {\r\n        dataStr = dataStr.substring(0, 60) + \"...\";\r\n      }\r\n\r\n      return (\r\n        \"Data '\" +\r\n        dataStr +\r\n        \"' is an object, which does not match type '\" +\r\n        DataFormUtilities.getFieldTypeDescription(type) +\r\n        \"'.\"\r\n      );\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Validates that a numeric value is within the allowed range.\r\n   */\r\n  static validateNumericRange(data: number, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (field.minValue !== undefined && data < field.minValue) {\r\n      issues.push({\r\n        message: `At ${path}, value ${data} is below minimum value ${field.minValue}.`,\r\n        type: DataFormIssueType.valueBelowMinimum,\r\n      });\r\n    }\r\n\r\n    if (field.maxValue !== undefined && data > field.maxValue) {\r\n      issues.push({\r\n        message: `At ${path}, value ${data} is above maximum value ${field.maxValue}.`,\r\n        type: DataFormIssueType.valueAboveMaximum,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that a string value is within the allowed length.\r\n   */\r\n  static validateStringLength(data: string, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (field.minLength !== undefined && data.length < field.minLength) {\r\n      issues.push({\r\n        message: `At ${path}, string length ${data.length} is below minimum length ${field.minLength}.`,\r\n        type: DataFormIssueType.stringTooShort,\r\n      });\r\n    }\r\n\r\n    if (field.maxLength !== undefined && data.length > field.maxLength) {\r\n      issues.push({\r\n        message: `At ${path}, string length ${data.length} is above maximum length ${field.maxLength}.`,\r\n        type: DataFormIssueType.stringTooLong,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that a value matches one of the allowed choices.\r\n   */\r\n  static validateChoices(data: unknown, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    // If no choices defined or mustMatchChoices is explicitly false, skip\r\n    if (!field.choices || field.choices.length === 0) {\r\n      return;\r\n    }\r\n\r\n    // If mustMatchChoices is explicitly false, skip validation\r\n    if (field.mustMatchChoices === false) {\r\n      return;\r\n    }\r\n\r\n    // For lookup fields without mustMatchChoices explicitly set, skip by default\r\n    // since lookups may have dynamic values\r\n    if (\r\n      field.mustMatchChoices === undefined &&\r\n      (field.dataType === FieldDataType.stringLookup || field.dataType === FieldDataType.intValueLookup)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const dataValue = typeof data === \"string\" || typeof data === \"number\" ? data : undefined;\r\n    if (dataValue === undefined) {\r\n      return;\r\n    }\r\n\r\n    const validChoiceIds = field.choices.map((choice) => choice.id);\r\n    const valueStr = String(dataValue);\r\n\r\n    if (!validChoiceIds.includes(valueStr)) {\r\n      const choiceList = validChoiceIds.slice(0, 5).join(\", \") + (validChoiceIds.length > 5 ? \", ...\" : \"\");\r\n      issues.push({\r\n        message: `At ${path}, value '${valueStr}' is not one of the allowed choices: ${choiceList}.`,\r\n        type: DataFormIssueType.valueNotInChoices,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that a value matches patterns defined in field.validity conditions.\r\n   */\r\n  static validatePatterns(data: unknown, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (!field.validity || field.validity.length === 0) {\r\n      return;\r\n    }\r\n\r\n    if (typeof data !== \"string\") {\r\n      return;\r\n    }\r\n\r\n    for (const condition of field.validity) {\r\n      if (condition.comparison === ComparisonType.matchesPattern && condition.value !== undefined) {\r\n        try {\r\n          const pattern = new RegExp(String(condition.value));\r\n          if (!pattern.test(data)) {\r\n            issues.push({\r\n              message: `At ${path}, value '${data}' does not match required pattern '${condition.value}'.`,\r\n              type: DataFormIssueType.patternMismatch,\r\n            });\r\n          }\r\n        } catch (e) {\r\n          // Invalid regex pattern - skip validation but don't crash\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that an array has the correct length if fixedLength is specified.\r\n   */\r\n  static validateArrayLength(data: unknown[], field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (field.fixedLength !== undefined && data.length !== field.fixedLength) {\r\n      issues.push({\r\n        message: `At ${path}, array has ${data.length} elements but expected exactly ${field.fixedLength}.`,\r\n        type: DataFormIssueType.arrayLengthMismatch,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates that point arrays (point2, point3, etc.) have the correct number of elements.\r\n   */\r\n  static validatePointSize(data: unknown, field: IField, issues: IDataFormValidationIssue[], path: string): void {\r\n    if (!Array.isArray(data)) {\r\n      return;\r\n    }\r\n\r\n    let expectedSize: number | undefined;\r\n\r\n    switch (field.dataType) {\r\n      case FieldDataType.point2:\r\n        expectedSize = 2;\r\n        break;\r\n      case FieldDataType.point3:\r\n        expectedSize = 3;\r\n        break;\r\n      case FieldDataType.floatRange:\r\n        expectedSize = 2;\r\n        break;\r\n      case FieldDataType.intRange:\r\n        expectedSize = 2;\r\n        break;\r\n    }\r\n\r\n    if (expectedSize !== undefined && data.length !== expectedSize) {\r\n      const typeName = DataFormUtilities.getFieldTypeDescription(field.dataType);\r\n      issues.push({\r\n        message: `At ${path}, ${typeName} has ${data.length} elements but expected exactly ${expectedSize}.`,\r\n        type: DataFormIssueType.pointSizeMismatch,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets a subForm for a field, using the validation context cache to avoid repeated lookups.\r\n   * This significantly improves performance when validating deeply nested structures.\r\n   */\r\n  static async getCachedSubForm(field: IField, context: IValidationContext): Promise<IFormDefinition | null> {\r\n    // If there's an inline subForm, return it directly (no caching needed)\r\n    if (field.subForm) {\r\n      return field.subForm;\r\n    }\r\n\r\n    // If there's no subFormId, nothing to look up\r\n    if (!field.subFormId) {\r\n      return null;\r\n    }\r\n\r\n    const cacheKey = field.subFormId;\r\n\r\n    if (context.subFormCache.has(cacheKey)) {\r\n      return context.subFormCache.get(cacheKey) || null;\r\n    }\r\n\r\n    const subForm = await FieldUtilities.getSubForm(field);\r\n    context.subFormCache.set(cacheKey, subForm || null);\r\n    return subForm || null;\r\n  }\r\n\r\n  /**\r\n   * Validates that keys in a keyed collection are allowed if allowedKeys is specified.\r\n   */\r\n  static async validateKeyedCollection(\r\n    data: object,\r\n    field: IField,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string,\r\n    context: IValidationContext\r\n  ): Promise<void> {\r\n    const isKeyedCollection =\r\n      field.dataType === FieldDataType.keyedObjectCollection ||\r\n      field.dataType === FieldDataType.keyedStringCollection ||\r\n      field.dataType === FieldDataType.keyedNumberCollection ||\r\n      field.dataType === FieldDataType.keyedBooleanCollection ||\r\n      field.dataType === FieldDataType.keyedStringArrayCollection ||\r\n      field.dataType === FieldDataType.keyedNumberArrayCollection ||\r\n      field.dataType === FieldDataType.keyedKeyedStringArrayCollection;\r\n\r\n    if (!isKeyedCollection) {\r\n      // For regular objects, validate subForm if available\r\n      const subForm = await this.getCachedSubForm(field, context);\r\n      if (subForm) {\r\n        await this.validate(data, subForm, issues, path, {\r\n          depth: context.depth + 1,\r\n          subFormCache: context.subFormCache,\r\n        });\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Validate allowedKeys if specified\r\n    if (field.allowedKeys && field.allowedKeys.length > 0) {\r\n      const dataKeys = Object.keys(data);\r\n      for (const key of dataKeys) {\r\n        if (!field.allowedKeys.includes(key)) {\r\n          issues.push({\r\n            message: `At ${path}, key '${key}' is not in the allowed keys list.`,\r\n            type: DataFormIssueType.keyNotAllowed,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    // If there's a subForm, validate each value in the keyed collection\r\n    if (field.dataType === FieldDataType.keyedObjectCollection) {\r\n      const subForm = await this.getCachedSubForm(field, context);\r\n      if (subForm) {\r\n        for (const key of Object.keys(data)) {\r\n          const value = (data as Record<string, unknown>)[key];\r\n          if (value !== undefined && value !== null && typeof value === \"object\") {\r\n            await this.validate(value as object, subForm, issues, `${path}.${key}`, {\r\n              depth: context.depth + 1,\r\n              subFormCache: context.subFormCache,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks if a field ID contains regex metacharacters, indicating it's a pattern\r\n   * that should be matched against data keys rather than used as a literal property name.\r\n   * Common patterns in Minecraft forms: \"geometry.[a-zA-Z0-9_.'-:]+\" for legacy geometry.\r\n   */\r\n  static isPatternFieldId(fieldId: string): boolean {\r\n    // Check for common regex metacharacters that indicate a pattern\r\n    return /[[\\]{}()*+?\\\\^$|]/.test(fieldId);\r\n  }\r\n\r\n  /**\r\n   * Validates a pattern-based field ID against the data object.\r\n   * For pattern fields, iterates through all data keys and validates those matching the pattern.\r\n   * If the field is required, at least one matching key must exist.\r\n   * @param cleanedFieldId - The field ID after cleaning (removing embedded enum syntax)\r\n   */\r\n  static async validatePatternField(\r\n    data: object,\r\n    field: IField,\r\n    issues: IDataFormValidationIssue[],\r\n    path: string,\r\n    context: IValidationContext,\r\n    cleanedFieldId?: string\r\n  ): Promise<void> {\r\n    const fieldIdToUse = cleanedFieldId || (field.id ? cleanFieldId(field.id) : undefined);\r\n    if (!fieldIdToUse) {\r\n      return;\r\n    }\r\n\r\n    let pattern: RegExp;\r\n    try {\r\n      // Anchor the pattern to match the full key\r\n      pattern = new RegExp(\"^\" + fieldIdToUse + \"$\");\r\n    } catch (e) {\r\n      // Invalid regex - treat as literal field ID (fallback)\r\n      const fieldData = (data as any)[fieldIdToUse];\r\n      await this.validateField(fieldData, field, issues, path + fieldIdToUse, context);\r\n      return;\r\n    }\r\n\r\n    const dataKeys = Object.keys(data);\r\n    const matchingKeys = dataKeys.filter((key) => pattern.test(key));\r\n\r\n    if (matchingKeys.length === 0) {\r\n      if (field.isRequired) {\r\n        issues.push({\r\n          message: `At ${path}${fieldIdToUse}, data is missing required field matching pattern '${fieldIdToUse}'.`,\r\n          type: DataFormIssueType.missingRequiredField,\r\n        });\r\n      }\r\n      return;\r\n    }\r\n\r\n    // Validate each matching key against the field's subForm or validation rules\r\n    for (const matchingKey of matchingKeys) {\r\n      const fieldData = (data as any)[matchingKey];\r\n      await this.validateField(fieldData, field, issues, path + matchingKey, context);\r\n    }\r\n  }\r\n\r\n  static getValidationIssue(type: DataFormIssueType): IDataFormValidationIssue {\r\n    return {\r\n      message: Utilities.getTitleFromEnum(DataFormIssueType, type),\r\n      type: type,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\nimport axios from \"axios\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport Database from \"../minecraft/Database\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport DataFormValidator, { IValidationContext } from \"../dataform/DataFormValidator\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\n\r\nexport enum FormSchemaItemInfoGeneratorTest {\r\n  couldNotParseJson = 401,\r\n  couldNotFindForm = 402,\r\n}\r\n\r\n/**\r\n * Validates JSON files against Minecraft documentation-based form schemas.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/jsonf.form.json} for topic definitions\r\n */\r\nexport default class FormSchemaItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"JSONF\";\r\n  title = \"JSON Structure\";\r\n  canAlwaysProcess = true;\r\n\r\n  _schemaContentByPath: { [id: string]: object } = {};\r\n\r\n  /**\r\n   * Cache of loaded form definitions keyed by formPath.\r\n   * Avoids redundant Database.ensureFormLoadedByPath() calls for items sharing the same form.\r\n   *\r\n   * Lifecycle: This generator is instantiated once per validation run by GeneratorRegistrations.\r\n   * Caches are valid for the duration of a single ProjectInfoSet.generate() call and are\r\n   * naturally discarded when the generator instance is garbage-collected after the run.\r\n   */\r\n  _formCache: Map<string, IFormDefinition | null> = new Map();\r\n\r\n  /**\r\n   * Cache of validation contexts keyed by formPath.\r\n   * Items with the same form share a subForm cache, avoiding repeated async subForm lookups.\r\n   *\r\n   * Lifecycle: Same as _formCache \u2014 scoped to a single validation run.\r\n   */\r\n  _contextCache: Map<string, IValidationContext> = new Map();\r\n\r\n  uuidRegex = new RegExp(\"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\");\r\n\r\n  constructor() {\r\n    this.testUuid = this.testUuid.bind(this);\r\n    this.testUri = this.testUri.bind(this);\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async loadSchema(uri: string) {\r\n    const res = await axios.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + uri);\r\n\r\n    return res.data;\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    // Fast path: skip items that can never have a form.\r\n    // getFormPathForType returns undefined for most item types (textures, audio, etc.).\r\n    // Only geometry items need special logic via getFormPath().\r\n    if (\r\n      projectItem.itemType !== ProjectItemType.modelGeometryJson &&\r\n      ProjectItemUtilities.getFormPathForType(projectItem.itemType) === undefined\r\n    ) {\r\n      return items;\r\n    }\r\n\r\n    if (\r\n      projectItem.primaryFile &&\r\n      projectItem.primaryFile.content &&\r\n      typeof projectItem.primaryFile.content === \"string\"\r\n    ) {\r\n      const formPath = projectItem.getFormPath();\r\n\r\n      if (formPath) {\r\n        // Use cached form definition to avoid repeated Database lookups\r\n        let form: IFormDefinition | null | undefined = this._formCache.get(formPath);\r\n        if (form === undefined) {\r\n          const loaded = await Database.ensureFormLoadedByPath(formPath);\r\n          form = loaded || null;\r\n          this._formCache.set(formPath, form);\r\n        }\r\n\r\n        if (form) {\r\n          const data = StorageUtilities.getJsonObject(projectItem.primaryFile);\r\n\r\n          if (!data) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                FormSchemaItemInfoGeneratorTest.couldNotParseJson,\r\n                \"Could not parse JSON. \" +\r\n                  (projectItem.primaryFile.errorStateMessage ? projectItem.primaryFile.errorStateMessage : \"\"),\r\n                projectItem,\r\n                formPath\r\n              )\r\n            );\r\n          } else {\r\n            // Share validation context (and its subForm cache) across items\r\n            // with the same formPath for massive speedup on repeated forms.\r\n            let context = this._contextCache.get(formPath);\r\n            if (!context) {\r\n              context = {\r\n                depth: 0,\r\n                subFormCache: new Map<string, IFormDefinition | null>(),\r\n              };\r\n              this._contextCache.set(formPath, context);\r\n            }\r\n\r\n            // Reset depth for each new item (subFormCache is intentionally preserved)\r\n            const itemContext: IValidationContext = {\r\n              depth: 0,\r\n              subFormCache: context.subFormCache,\r\n            };\r\n\r\n            const results = await DataFormValidator.validate(data, form, undefined, undefined, itemContext);\r\n\r\n            if (results) {\r\n              for (const result of results) {\r\n                items.push(\r\n                  new ProjectInfoItem(InfoItemType.warning, this.id, result.type, result.message, projectItem)\r\n                );\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.internalProcessingError,\r\n              this.id,\r\n              FormSchemaItemInfoGeneratorTest.couldNotFindForm,\r\n              \"Could not find expected form\",\r\n              undefined,\r\n              formPath\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  testUuid(uuidString: string) {\r\n    return this.uuidRegex.test(uuidString);\r\n  }\r\n\r\n  testUnknownFormat(formatString: string) {\r\n    return true;\r\n  }\r\n\r\n  testUri(uriString: string) {\r\n    // could get much more sophisticated here...\r\n    return uriString.indexOf(\"://\") >= 0;\r\n  }\r\n}\r\n", "import ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nexport enum UnknownItemGeneratorTest {\r\n  unknownItemTypeFound = 101,\r\n}\r\n\r\n/**\r\n * Detects JSON files with unknown or unrecognized structure.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/unkjson.form.json} for topic definitions\r\n */\r\nexport default class UnknownItemGenerator implements IProjectInfoItemGenerator {\r\n  id = \"UNKJSON\";\r\n  title = \"Unknown JSON\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (projectItem.itemType === ProjectItemType.unknownJson) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          UnknownItemGeneratorTest.unknownItemTypeFound,\r\n          \"Unknown JSON file found\",\r\n          projectItem\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nexport enum UnknownFileGeneratorTest {\r\n  unknownTypeFileFound = 102,\r\n}\r\n\r\n/**\r\n * Detects files with unknown or unrecognized extensions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/unkfile.form.json} for topic definitions\r\n */\r\nexport default class UnknownFileGenerator implements IProjectFileInfoGenerator {\r\n  id = \"UNKFILE\";\r\n  title = \"Unknown files\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, file: IFile, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (!StorageUtilities.isUsableFile(file.storageRelativePath)) {\r\n      const ext = StorageUtilities.getTypeFromName(file.name);\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          UnknownFileGeneratorTest.unknownTypeFileFound,\r\n          `Unknown type ${ext} file found`,\r\n          project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n          file.extendedPath\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport Log from \"../core/Log\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport IFlatWorldLayerSet from \"./IFlatWorldLayerSet\";\r\nimport { BackupType, IWorldSettings } from \"./IWorldSettings\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum GameType {\r\n  survival = 0,\r\n  creative = 1,\r\n  adventure = 2,\r\n}\r\n\r\nexport enum Generator {\r\n  old = 0,\r\n  infinite = 1,\r\n  flat = 2,\r\n}\r\n\r\nexport enum Difficulty {\r\n  peaceful = 0,\r\n  easy = 1,\r\n  normal = 2,\r\n  hard = 3,\r\n}\r\n\r\nexport enum PlayerPermissionsLevel {\r\n  visitor = 0,\r\n  member = 1,\r\n  operator = 2,\r\n  custom = 3,\r\n}\r\n\r\nexport const TOPMOST_BLOCK = 32767;\r\nexport const DEFAULT_SPAWN_COORD = -2147483648;\r\n\r\nexport default class WorldLevelDat implements IWorldSettings, IErrorable {\r\n  public nbt: NbtBinary | undefined;\r\n\r\n  public levelName?: string;\r\n  public spawnX?: number;\r\n  public spawnY?: number;\r\n  public spawnZ?: number;\r\n  public gameType?: GameType;\r\n  public editorWorldType?: number;\r\n  public generator?: Generator;\r\n  public commandsEnabled?: boolean; // same as \"are cheats enabled\".. or maybe not?\r\n  public commandBlocksEnabled?: boolean;\r\n  public experimentalGameplay?: boolean;\r\n  public betaApisExperiment?: boolean;\r\n  public deferredTechnicalPreviewExperiment?: boolean;\r\n  public dataDrivenItemsExperiment?: boolean;\r\n  public savedWithToggledExperiments?: boolean;\r\n  public experimentsEverUsed?: boolean;\r\n  public cheatsEnabled?: boolean;\r\n  public attackMobs?: boolean;\r\n  public attackPlayers?: boolean;\r\n  public build?: boolean;\r\n  public doorsAndSwitches?: boolean;\r\n  public flySpeed?: number;\r\n  public flying?: boolean;\r\n  public instaBuild?: boolean;\r\n  public invulnerable?: boolean;\r\n  public lightning?: boolean;\r\n  public mayFly?: boolean;\r\n  public mine?: boolean;\r\n  public op?: boolean;\r\n  public openContainers?: boolean;\r\n  public teleport?: boolean;\r\n  public walkSpeed?: number;\r\n\r\n  public isCreatedInEditor?: boolean;\r\n  public isExportedFromEditor?: boolean;\r\n  public isRandomSeedAllowed?: boolean;\r\n  public biomeOverride?: string;\r\n  public centerMapsToOrigin?: boolean;\r\n  public confirmedPlatformLockedContent?: boolean;\r\n  public difficulty?: Difficulty;\r\n  public flatWorldLayers?: IFlatWorldLayerSet;\r\n  public forceGameType?: boolean;\r\n  public inventoryVersion?: string;\r\n  public lanBroadcast?: boolean;\r\n  public lanBroadcastIntent?: boolean;\r\n  public lastPlayed?: bigint;\r\n  public limitedWorldOriginX?: number;\r\n  public limitedWorldOriginY?: number;\r\n  public limitedWorldOriginZ?: number;\r\n  public minimumCompatibleClientVersion?: number[];\r\n  public multiplayerGame?: boolean;\r\n  public multiplayerGameIntent?: boolean;\r\n  public netherScale?: number;\r\n  public networkVersion?: number;\r\n  public platform?: number;\r\n  public platformBroadcastIntent?: number;\r\n  public randomSeed?: string;\r\n  public spawnV1Villagers?: boolean;\r\n  public storageVersion?: number;\r\n  public time?: bigint;\r\n  public worldVersion?: number;\r\n  public xblBroadcastIntent?: number;\r\n  public abilities?: any[];\r\n  public baseGameVersion?: string;\r\n  public bonusChestEnabled?: boolean;\r\n  public bonusChestSpawned?: boolean;\r\n  public commandBlockOutput?: boolean;\r\n  public currentTick?: bigint;\r\n  public doDaylightCycle?: boolean;\r\n\r\n  public daylightCycle?: number;\r\n  public doEntityDrops?: boolean;\r\n  public doFireTick?: boolean;\r\n  public doImmediateRespawn?: boolean;\r\n  public doInsomnia?: boolean;\r\n  public doMobLoot?: boolean;\r\n  public doMobSpawning?: boolean;\r\n  public doTileDrops?: boolean;\r\n  public doWeatherCycle?: boolean;\r\n  public drowningDamage?: boolean;\r\n  public eduOffer?: number;\r\n  public educationFeaturesEnabled?: boolean;\r\n  public fallDamage?: boolean;\r\n  public fireDamage?: boolean;\r\n  public freezeDamage?: boolean;\r\n  public functionCommandLimit?: number;\r\n  public hasBeenLoadedInCreative?: boolean;\r\n  public hasLockedBehaviorPack?: boolean;\r\n  public hasLockedResourcePack?: boolean;\r\n  public immutableWorld?: boolean;\r\n  public isFromLockedTemplate?: boolean;\r\n  public isFromWorldTemplate?: boolean;\r\n  public isSingleUseWorld?: boolean;\r\n  public isWorldTemplateOptionLocked?: boolean;\r\n  public keepInventory?: boolean;\r\n  public lastOpenedWithVersion?: number[];\r\n  public lightningTime?: number;\r\n  public lightningLevel?: number;\r\n  public limitedWorldDepth?: number;\r\n  public limitedWorldWidth?: number;\r\n  public maxCommandChainLength?: number;\r\n  public mobGriefing?: boolean;\r\n  public naturalRegeneration?: boolean;\r\n  public permissionsLevel?: PlayerPermissionsLevel;\r\n  public playerPermissionsLevel?: PlayerPermissionsLevel;\r\n  public prid?: string;\r\n  public pvp?: boolean;\r\n  public rainLevel?: number;\r\n  public rainTime?: number;\r\n  public randomTickSpeed?: number;\r\n  public requiresCopiedPackRemovalCheck?: boolean;\r\n  public respawnBlocksExplode?: boolean;\r\n  public sendCommandFeedback?: boolean;\r\n  public serverChunkTickRange?: number;\r\n  public showBorderEffect?: boolean;\r\n  public showCoordinates?: boolean;\r\n  public showDeathMessages?: boolean;\r\n  public showTags?: boolean;\r\n  public spawnMobs?: boolean;\r\n  public spawnRadius?: number;\r\n  public startWithMapEnabled?: boolean;\r\n  public texturePacksRequired?: boolean;\r\n  public tntExplodes?: boolean;\r\n  public useMsaGamertagsOnly?: boolean;\r\n  public worldStartCount?: bigint;\r\n  public worldPolicies?: number;\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  context?: string;\r\n\r\n  // inert in this class, but added for compatibility w/ IWorldSettings\r\n  backupType?: BackupType;\r\n  useCustomSettings?: boolean;\r\n\r\n  createNbt() {\r\n    const nbt = new NbtBinary();\r\n\r\n    nbt.context = this.context;\r\n\r\n    return nbt;\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    Log.error(message + (contextIn ? \" \" + contextIn : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextIn,\r\n    });\r\n  }\r\n\r\n  loadFromNbtBytes(bytes: Uint8Array, context?: string) {\r\n    this.isInErrorState = false;\r\n    this.errorMessages = undefined;\r\n\r\n    const tag = new NbtBinary();\r\n\r\n    tag.context = this.context;\r\n\r\n    const fileType = DataUtilities.getUnsignedInteger(bytes[0], bytes[1], bytes[2], bytes[3], true);\r\n    const restOfLength = DataUtilities.getUnsignedInteger(bytes[4], bytes[5], bytes[6], bytes[7], true);\r\n\r\n    if (fileType < 4 || fileType === 7 || fileType > 10) {\r\n      /* 10 has been recently observed? */\r\n      this._pushError(\"Unexpected world level dat type (\" + fileType + \")\", context);\r\n      return;\r\n    }\r\n\r\n    // some type 8 maps have restOfLength === bytes.length - 16 (?)\r\n    if (restOfLength !== bytes.length - 8 && restOfLength !== bytes.length - 16) {\r\n      this._pushError(\"Unexpected world level dat length.\", context);\r\n    }\r\n\r\n    tag.fromBinary(bytes, true, false, 8);\r\n\r\n    this.nbt = tag;\r\n\r\n    this.loadFromNbt(tag);\r\n\r\n    Utilities.appendErrors(this, tag, context);\r\n  }\r\n\r\n  ensureNbt() {\r\n    if (this.nbt !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const tag = new NbtBinary();\r\n\r\n    tag.context = this.context;\r\n\r\n    tag.ensureSingleRoot();\r\n\r\n    this.nbt = tag;\r\n  }\r\n\r\n  getBytes() {\r\n    this.ensureNbt();\r\n\r\n    if (this.nbt !== undefined) {\r\n      const bytes = this.nbt.toBinary();\r\n\r\n      if (bytes !== undefined) {\r\n        const fullBytes = new Uint8Array(bytes.length + 8);\r\n\r\n        for (let i = 0; i < bytes.length; i++) {\r\n          fullBytes[i + 8] = bytes[i];\r\n        }\r\n\r\n        DataUtilities.writeUnsignedInteger(fullBytes, 0, 10, true);\r\n        DataUtilities.writeUnsignedInteger(fullBytes, 4, bytes.length, true);\r\n\r\n        return fullBytes;\r\n      }\r\n    }\r\n\r\n    Log.fail(\"Could not create MC level bytes for updating.\");\r\n\r\n    return undefined;\r\n  }\r\n\r\n  persist(): boolean {\r\n    this.ensureNbt();\r\n\r\n    if (this.nbt !== undefined) {\r\n      this._saveToNbt(this.nbt);\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  ensureDefaults() {\r\n    if (this.biomeOverride === undefined) {\r\n      this.biomeOverride = \"\";\r\n    }\r\n\r\n    if (this.centerMapsToOrigin === undefined) {\r\n      this.centerMapsToOrigin = false;\r\n    }\r\n\r\n    if (this.confirmedPlatformLockedContent === undefined) {\r\n      this.confirmedPlatformLockedContent = false;\r\n    }\r\n\r\n    if (this.savedWithToggledExperiments === undefined) {\r\n      this.savedWithToggledExperiments = false;\r\n    }\r\n\r\n    if (this.experimentsEverUsed === undefined) {\r\n      this.experimentsEverUsed = false;\r\n    }\r\n\r\n    if (this.difficulty === undefined) {\r\n      this.difficulty = Difficulty.easy;\r\n    }\r\n\r\n    if (this.forceGameType === undefined) {\r\n      this.forceGameType = false;\r\n    }\r\n\r\n    if (this.experimentsEverUsed === undefined) {\r\n      this.experimentsEverUsed = false;\r\n    }\r\n\r\n    if (this.savedWithToggledExperiments === undefined) {\r\n      this.savedWithToggledExperiments = false;\r\n    }\r\n\r\n    if (this.isCreatedInEditor === undefined) {\r\n      this.isCreatedInEditor = false;\r\n    }\r\n\r\n    if (this.isExportedFromEditor === undefined) {\r\n      this.isExportedFromEditor = false;\r\n    }\r\n\r\n    if (this.flatWorldLayers === undefined) {\r\n      this.flatWorldLayers = {\r\n        biome_id: 1,\r\n        block_layers: [\r\n          { block_name: \"minecraft:bedrock\", count: 1 },\r\n          { block_name: \"minecraft:dirt\", count: 2 },\r\n          { block_name: \"minecraft:grass\", count: 1 },\r\n        ],\r\n        encoding_version: 6,\r\n        structure_options: null,\r\n        world_version: \"version.post_1_18\",\r\n      };\r\n    }\r\n\r\n    if (this.forceGameType === undefined) {\r\n      this.forceGameType = false;\r\n    }\r\n\r\n    if (this.gameType === undefined) {\r\n      this.gameType = GameType.creative;\r\n    }\r\n\r\n    if (this.generator === undefined) {\r\n      this.generator = Generator.infinite;\r\n    }\r\n\r\n    if (this.inventoryVersion === undefined) {\r\n      this.inventoryVersion = \"1.20.0\";\r\n    }\r\n\r\n    if (this.lanBroadcast === undefined) {\r\n      this.lanBroadcast = true;\r\n    }\r\n\r\n    if (this.lanBroadcastIntent === undefined) {\r\n      this.lanBroadcastIntent = true;\r\n    }\r\n\r\n    if (this.lastPlayed === undefined) {\r\n      const newDate = new Date();\r\n\r\n      this.lastPlayed = BigInt(Math.floor(newDate.getTime() / 1000));\r\n    }\r\n\r\n    if (this.limitedWorldOriginX === undefined) {\r\n      this.limitedWorldOriginX = 0;\r\n    }\r\n\r\n    if (this.limitedWorldOriginY === undefined) {\r\n      this.limitedWorldOriginY = TOPMOST_BLOCK;\r\n    }\r\n\r\n    if (this.limitedWorldOriginZ === undefined) {\r\n      this.limitedWorldOriginZ = 0;\r\n    }\r\n\r\n    if (this.minimumCompatibleClientVersion === undefined) {\r\n      this.minimumCompatibleClientVersion = [1, 20, 0, 0, 0];\r\n    }\r\n\r\n    if (this.multiplayerGame === undefined) {\r\n      this.multiplayerGame = true;\r\n    }\r\n\r\n    if (this.multiplayerGameIntent === undefined) {\r\n      this.multiplayerGameIntent = true;\r\n    }\r\n\r\n    if (this.netherScale === undefined) {\r\n      this.netherScale = 8;\r\n    }\r\n\r\n    if (this.networkVersion === undefined) {\r\n      this.networkVersion = 588;\r\n    }\r\n\r\n    if (this.platform === undefined) {\r\n      this.platform = 2;\r\n    }\r\n\r\n    if (this.platformBroadcastIntent === undefined) {\r\n      this.platformBroadcastIntent = 2;\r\n    }\r\n\r\n    if (this.randomSeed === undefined) {\r\n      this.randomSeed = \"3025905974105939481\";\r\n    }\r\n\r\n    if (this.spawnV1Villagers === undefined) {\r\n      this.spawnV1Villagers = false;\r\n    }\r\n\r\n    if (this.spawnX === undefined) {\r\n      this.spawnX = 0;\r\n    }\r\n\r\n    if (this.spawnY === undefined) {\r\n      this.spawnY = TOPMOST_BLOCK;\r\n    }\r\n\r\n    if (this.spawnZ === undefined) {\r\n      this.spawnZ = 0;\r\n    }\r\n\r\n    if (this.storageVersion === undefined) {\r\n      this.storageVersion = 10;\r\n    }\r\n\r\n    if (this.time === undefined) {\r\n      this.time = BigInt(1);\r\n    }\r\n\r\n    if (this.worldVersion === undefined) {\r\n      this.worldVersion = 1;\r\n    }\r\n\r\n    if (this.xblBroadcastIntent === undefined) {\r\n      this.xblBroadcastIntent = 2;\r\n    }\r\n\r\n    if (this.baseGameVersion === undefined) {\r\n      this.baseGameVersion = \"*\";\r\n    }\r\n\r\n    if (this.bonusChestEnabled === undefined) {\r\n      this.bonusChestEnabled = false;\r\n    }\r\n\r\n    if (this.bonusChestSpawned === undefined) {\r\n      this.bonusChestSpawned = false;\r\n    }\r\n\r\n    if (this.commandBlockOutput === undefined) {\r\n      this.commandBlockOutput = true;\r\n    }\r\n\r\n    if (this.commandBlocksEnabled === undefined) {\r\n      this.commandBlocksEnabled = true;\r\n    }\r\n\r\n    if (this.commandsEnabled === undefined) {\r\n      this.commandsEnabled = true;\r\n    }\r\n\r\n    if (this.cheatsEnabled === undefined) {\r\n      this.cheatsEnabled = true;\r\n    }\r\n\r\n    if (this.currentTick === undefined) {\r\n      this.currentTick = BigInt(1);\r\n    }\r\n\r\n    if (this.doDaylightCycle === undefined) {\r\n      this.doDaylightCycle = true;\r\n    }\r\n\r\n    if (this.daylightCycle === undefined) {\r\n      this.daylightCycle = 0;\r\n    }\r\n\r\n    if (this.doEntityDrops === undefined) {\r\n      this.doEntityDrops = true;\r\n    }\r\n\r\n    if (this.doFireTick === undefined) {\r\n      this.doFireTick = true;\r\n    }\r\n\r\n    if (this.doImmediateRespawn === undefined) {\r\n      this.doImmediateRespawn = false;\r\n    }\r\n\r\n    if (this.doInsomnia === undefined) {\r\n      this.doInsomnia = true;\r\n    }\r\n\r\n    if (this.doMobLoot === undefined) {\r\n      this.doMobLoot = true;\r\n    }\r\n\r\n    if (this.doMobSpawning === undefined) {\r\n      this.doMobSpawning = true;\r\n    }\r\n\r\n    if (this.doTileDrops === undefined) {\r\n      this.doTileDrops = true;\r\n    }\r\n\r\n    if (this.doWeatherCycle === undefined) {\r\n      this.doWeatherCycle = true;\r\n    }\r\n\r\n    if (this.drowningDamage === undefined) {\r\n      this.drowningDamage = true;\r\n    }\r\n\r\n    if (this.eduOffer === undefined) {\r\n      this.eduOffer = 0;\r\n    }\r\n\r\n    if (this.educationFeaturesEnabled === undefined) {\r\n      this.educationFeaturesEnabled = false;\r\n    }\r\n\r\n    if (this.fallDamage === undefined) {\r\n      this.fallDamage = true;\r\n    }\r\n\r\n    if (this.fireDamage === undefined) {\r\n      this.fireDamage = true;\r\n    }\r\n\r\n    if (this.freezeDamage === undefined) {\r\n      this.freezeDamage = true;\r\n    }\r\n\r\n    if (this.functionCommandLimit === undefined) {\r\n      this.functionCommandLimit = 10000;\r\n    }\r\n\r\n    if (this.hasBeenLoadedInCreative === undefined) {\r\n      this.hasBeenLoadedInCreative = true;\r\n    }\r\n\r\n    if (this.hasLockedBehaviorPack === undefined) {\r\n      this.hasLockedBehaviorPack = false;\r\n    }\r\n\r\n    if (this.hasLockedResourcePack === undefined) {\r\n      this.hasLockedResourcePack = false;\r\n    }\r\n\r\n    if (this.immutableWorld === undefined) {\r\n      this.immutableWorld = false;\r\n    }\r\n\r\n    if (this.isFromLockedTemplate === undefined) {\r\n      this.isFromLockedTemplate = false;\r\n    }\r\n    if (this.isRandomSeedAllowed === undefined) {\r\n      this.isRandomSeedAllowed = false;\r\n    }\r\n\r\n    if (this.isFromWorldTemplate === undefined) {\r\n      this.isFromWorldTemplate = false;\r\n    }\r\n\r\n    if (this.isSingleUseWorld === undefined) {\r\n      this.isSingleUseWorld = false;\r\n    }\r\n\r\n    if (this.isWorldTemplateOptionLocked === undefined) {\r\n      this.isWorldTemplateOptionLocked = false;\r\n    }\r\n\r\n    if (this.keepInventory === undefined) {\r\n      this.keepInventory = false;\r\n    }\r\n\r\n    if (this.lastOpenedWithVersion === undefined) {\r\n      this.lastOpenedWithVersion = [1, 20, 0, 0, 1];\r\n    }\r\n\r\n    if (this.lightningTime === undefined) {\r\n      this.lightningTime = 124600;\r\n    }\r\n    if (this.lightningLevel === undefined) {\r\n      this.lightningLevel = 0;\r\n    }\r\n\r\n    if (this.limitedWorldDepth === undefined) {\r\n      this.limitedWorldDepth = 16;\r\n    }\r\n\r\n    if (this.limitedWorldWidth === undefined) {\r\n      this.limitedWorldWidth = 16;\r\n    }\r\n\r\n    if (this.maxCommandChainLength === undefined) {\r\n      this.maxCommandChainLength = 65535;\r\n    }\r\n\r\n    if (this.mobGriefing === undefined) {\r\n      this.mobGriefing = true;\r\n    }\r\n\r\n    if (this.naturalRegeneration === undefined) {\r\n      this.naturalRegeneration = true;\r\n    }\r\n\r\n    if (this.permissionsLevel === undefined) {\r\n      this.permissionsLevel = PlayerPermissionsLevel.visitor;\r\n    }\r\n\r\n    if (this.playerPermissionsLevel === undefined) {\r\n      this.playerPermissionsLevel = PlayerPermissionsLevel.member;\r\n    }\r\n\r\n    if (this.prid === undefined) {\r\n      this.prid = \"\";\r\n    }\r\n\r\n    if (this.pvp === undefined) {\r\n      this.pvp = true;\r\n    }\r\n\r\n    if (this.rainLevel === undefined) {\r\n      this.rainLevel = 0;\r\n    }\r\n\r\n    if (this.rainTime === undefined) {\r\n      this.rainTime = 94841;\r\n    }\r\n\r\n    if (this.randomTickSpeed === undefined) {\r\n      this.randomTickSpeed = 1;\r\n    }\r\n\r\n    if (this.requiresCopiedPackRemovalCheck === undefined) {\r\n      this.requiresCopiedPackRemovalCheck = false;\r\n    }\r\n\r\n    if (this.respawnBlocksExplode === undefined) {\r\n      this.respawnBlocksExplode = true;\r\n    }\r\n\r\n    if (this.sendCommandFeedback === undefined) {\r\n      this.sendCommandFeedback = true;\r\n    }\r\n\r\n    if (this.serverChunkTickRange === undefined) {\r\n      this.serverChunkTickRange = 4;\r\n    }\r\n\r\n    if (this.showBorderEffect === undefined) {\r\n      this.showBorderEffect = true;\r\n    }\r\n\r\n    if (this.showCoordinates === undefined) {\r\n      this.showCoordinates = false;\r\n    }\r\n\r\n    if (this.showDeathMessages === undefined) {\r\n      this.showDeathMessages = true;\r\n    }\r\n\r\n    if (this.showTags === undefined) {\r\n      this.showTags = true;\r\n    }\r\n\r\n    if (this.spawnMobs === undefined) {\r\n      this.spawnMobs = true;\r\n    }\r\n\r\n    if (this.spawnRadius === undefined) {\r\n      this.spawnRadius = 5;\r\n    }\r\n\r\n    if (this.startWithMapEnabled === undefined) {\r\n      this.startWithMapEnabled = false;\r\n    }\r\n\r\n    if (this.texturePacksRequired === undefined) {\r\n      this.texturePacksRequired = false;\r\n    }\r\n\r\n    if (this.tntExplodes === undefined) {\r\n      this.tntExplodes = true;\r\n    }\r\n    if (this.useMsaGamertagsOnly === undefined) {\r\n      this.useMsaGamertagsOnly = false;\r\n    }\r\n\r\n    if (this.worldStartCount === undefined) {\r\n      this.worldStartCount = BigInt(4294967294);\r\n    }\r\n\r\n    if (this.attackMobs === undefined) {\r\n      this.attackMobs = true;\r\n    }\r\n\r\n    if (this.attackPlayers === undefined) {\r\n      this.attackPlayers = true;\r\n    }\r\n\r\n    if (this.build === undefined) {\r\n      this.build = true;\r\n    }\r\n\r\n    if (this.doorsAndSwitches === undefined) {\r\n      this.doorsAndSwitches = true;\r\n    }\r\n\r\n    if (this.flySpeed === undefined) {\r\n      this.flySpeed = 0.5;\r\n    }\r\n\r\n    if (this.flying === undefined) {\r\n      this.flying = false;\r\n    }\r\n\r\n    if (this.instaBuild === undefined) {\r\n      this.instaBuild = false;\r\n    }\r\n\r\n    if (this.invulnerable === undefined) {\r\n      this.invulnerable = false;\r\n    }\r\n\r\n    if (this.lightning === undefined) {\r\n      this.lightning = false;\r\n    }\r\n\r\n    if (this.mayFly === undefined) {\r\n      this.mayFly = false;\r\n    }\r\n\r\n    if (this.mine === undefined) {\r\n      this.mine = true;\r\n    }\r\n\r\n    if (this.op === undefined) {\r\n      this.op = false;\r\n    }\r\n\r\n    if (this.openContainers === undefined) {\r\n      this.openContainers = true;\r\n    }\r\n    if (this.teleport === undefined) {\r\n      this.teleport = true;\r\n    }\r\n\r\n    if (this.walkSpeed === undefined) {\r\n      this.walkSpeed = 0.1;\r\n    }\r\n  }\r\n\r\n  applyFromWorldSettings(settings: IWorldSettings) {\r\n    if (settings.generator !== undefined) {\r\n      this.generator = settings.generator;\r\n    }\r\n\r\n    if (settings.gameType !== undefined) {\r\n      this.gameType = settings.gameType;\r\n    }\r\n\r\n    if (settings.difficulty !== undefined) {\r\n      this.difficulty = settings.difficulty;\r\n    }\r\n\r\n    if (settings.commandsEnabled !== undefined) {\r\n      this.commandsEnabled = settings.commandsEnabled;\r\n    }\r\n\r\n    if (settings.cheatsEnabled !== undefined) {\r\n      this.cheatsEnabled = settings.cheatsEnabled;\r\n    }\r\n\r\n    if (settings.playerPermissionLevel !== undefined) {\r\n      this.playerPermissionsLevel = settings.playerPermissionLevel;\r\n    }\r\n\r\n    if (settings.permissionLevel !== undefined) {\r\n      this.permissionsLevel = settings.permissionLevel;\r\n    }\r\n\r\n    if (settings.randomSeed !== undefined) {\r\n      this.randomSeed = settings.randomSeed;\r\n    }\r\n\r\n    if (settings.name !== undefined) {\r\n      this.levelName = settings.name;\r\n    }\r\n\r\n    if (settings.lastPlayed !== undefined) {\r\n      this.lastPlayed = BigInt(settings.lastPlayed);\r\n    }\r\n\r\n    if (settings.isEditor) {\r\n      this.isCreatedInEditor = true;\r\n      this.editorWorldType = 1;\r\n    } else if (settings.isEditor === false) {\r\n      this.isCreatedInEditor = false;\r\n      this.editorWorldType = undefined;\r\n    }\r\n\r\n    if (settings.betaApisExperiment === true) {\r\n      this.betaApisExperiment = settings.betaApisExperiment;\r\n    } else if (settings.betaApisExperiment === false) {\r\n      this.betaApisExperiment = false;\r\n    }\r\n\r\n    if (settings.deferredTechnicalPreviewExperiment === true) {\r\n      this.deferredTechnicalPreviewExperiment = settings.deferredTechnicalPreviewExperiment;\r\n    } else if (settings.deferredTechnicalPreviewExperiment === false) {\r\n      this.deferredTechnicalPreviewExperiment = false;\r\n    }\r\n  }\r\n\r\n  _saveToNbt(binary: NbtBinary) {\r\n    const root = binary.ensureSingleRoot();\r\n\r\n    if (root == null) {\r\n      return;\r\n    }\r\n\r\n    if (this.biomeOverride !== undefined) {\r\n      root.ensureTag(\"BiomeOverride\", NbtTagType.string).value = this.biomeOverride;\r\n    }\r\n\r\n    if (this.centerMapsToOrigin !== undefined) {\r\n      root.ensureTag(\"CenterMapsToOrigin\", NbtTagType.byte).value = this.centerMapsToOrigin;\r\n    }\r\n\r\n    if (this.confirmedPlatformLockedContent !== undefined) {\r\n      root.ensureTag(\"ConfirmedPlatformLockedContent\", NbtTagType.byte).value = this.confirmedPlatformLockedContent;\r\n    }\r\n\r\n    if (this.difficulty !== undefined) {\r\n      root.ensureTag(\"Difficulty\", NbtTagType.int).value = this.difficulty;\r\n    }\r\n\r\n    if (this.flatWorldLayers !== undefined) {\r\n      root.ensureTag(\"FlatWorldLayers\", NbtTagType.string).value = JSON.stringify(this.flatWorldLayers).trim();\r\n    }\r\n\r\n    if (this.forceGameType !== undefined) {\r\n      root.ensureTag(\"ForceGameType\", NbtTagType.byte).value = this.forceGameType;\r\n    }\r\n\r\n    if (this.gameType !== undefined) {\r\n      root.ensureTag(\"GameType\", NbtTagType.int).value = this.gameType;\r\n    }\r\n\r\n    if (this.generator !== undefined) {\r\n      root.ensureTag(\"Generator\", NbtTagType.int).value = this.generator;\r\n    }\r\n\r\n    if (this.inventoryVersion !== undefined) {\r\n      root.ensureTag(\"InventoryVersion\", NbtTagType.string).value = this.inventoryVersion;\r\n    }\r\n\r\n    if (this.lanBroadcast !== undefined) {\r\n      root.ensureTag(\"LANBroadcast\", NbtTagType.byte).value = this.lanBroadcast;\r\n    }\r\n\r\n    if (this.lanBroadcastIntent !== undefined) {\r\n      root.ensureTag(\"LANBroadcastIntent\", NbtTagType.byte).value = this.lanBroadcastIntent;\r\n    }\r\n\r\n    if (this.lastPlayed !== undefined) {\r\n      root.ensureTag(\"LastPlayed\", NbtTagType.long).value = this.lastPlayed;\r\n    }\r\n\r\n    if (this.levelName !== undefined) {\r\n      root.ensureTag(\"LevelName\", NbtTagType.string).value = this.levelName;\r\n    }\r\n\r\n    if (this.limitedWorldOriginX !== undefined) {\r\n      root.ensureTag(\"LimitedWorldOriginX\", NbtTagType.int).value = this.limitedWorldOriginX;\r\n    }\r\n\r\n    if (this.limitedWorldOriginY !== undefined) {\r\n      root.ensureTag(\"LimitedWorldOriginY\", NbtTagType.int).value = this.limitedWorldOriginY;\r\n    }\r\n\r\n    if (this.limitedWorldOriginZ !== undefined) {\r\n      root.ensureTag(\"LimitedWorldOriginZ\", NbtTagType.int).value = this.limitedWorldOriginZ;\r\n    }\r\n\r\n    if (this.minimumCompatibleClientVersion && this.minimumCompatibleClientVersion.length > 0) {\r\n      const tag = root.ensureTag(\"MinimumCompatibleClientVersion\", NbtTagType.list);\r\n      tag.setListFromArray(this.minimumCompatibleClientVersion);\r\n    }\r\n\r\n    if (this.multiplayerGame !== undefined) {\r\n      root.ensureTag(\"MultiplayerGame\", NbtTagType.byte).value = this.multiplayerGame;\r\n    }\r\n\r\n    if (this.multiplayerGameIntent !== undefined) {\r\n      root.ensureTag(\"MultiplayerGameIntent\", NbtTagType.byte).value = this.multiplayerGameIntent;\r\n    }\r\n\r\n    if (this.netherScale !== undefined) {\r\n      root.ensureTag(\"NetherScale\", NbtTagType.int).value = this.netherScale;\r\n    }\r\n\r\n    if (this.networkVersion !== undefined) {\r\n      root.ensureTag(\"NetworkVersion\", NbtTagType.int).value = this.networkVersion;\r\n    }\r\n\r\n    if (this.platform !== undefined) {\r\n      root.ensureTag(\"Platform\", NbtTagType.int).value = this.platform;\r\n    }\r\n\r\n    if (this.platformBroadcastIntent !== undefined) {\r\n      root.ensureTag(\"PlatformBroadcastIntent\", NbtTagType.int).value = this.platformBroadcastIntent;\r\n    }\r\n\r\n    if (this.randomSeed !== undefined) {\r\n      try {\r\n        const seedBig = BigInt(this.randomSeed);\r\n        root.ensureTag(\"RandomSeed\", NbtTagType.long).value = seedBig;\r\n      } catch (e) {\r\n        Log.debugAlert(\"Could not set seed: \" + this.randomSeed);\r\n      }\r\n    }\r\n\r\n    if (this.spawnV1Villagers !== undefined) {\r\n      root.ensureTag(\"SpawnV1Villagers\", NbtTagType.byte).value = this.spawnV1Villagers;\r\n    }\r\n\r\n    if (this.spawnX !== undefined) {\r\n      root.ensureTag(\"SpawnX\", NbtTagType.int).value = this.spawnX;\r\n    }\r\n\r\n    if (this.spawnY !== undefined) {\r\n      root.ensureTag(\"SpawnY\", NbtTagType.int).value = this.spawnY;\r\n    }\r\n\r\n    if (this.spawnZ !== undefined) {\r\n      root.ensureTag(\"SpawnZ\", NbtTagType.int).value = this.spawnZ;\r\n    }\r\n\r\n    if (this.storageVersion !== undefined) {\r\n      root.ensureTag(\"StorageVersion\", NbtTagType.int).value = this.storageVersion;\r\n    }\r\n\r\n    if (this.time !== undefined) {\r\n      root.ensureTag(\"Time\", NbtTagType.long).value = this.time;\r\n    }\r\n\r\n    if (this.worldVersion !== undefined) {\r\n      root.ensureTag(\"WorldVersion\", NbtTagType.int).value = this.worldVersion;\r\n    }\r\n\r\n    if (this.xblBroadcastIntent !== undefined) {\r\n      root.ensureTag(\"XBLBroadcastIntent\", NbtTagType.int).value = this.xblBroadcastIntent;\r\n    }\r\n    const abilitiesTag = root.ensureTag(\"abilities\", NbtTagType.compound);\r\n\r\n    if (this.attackMobs !== undefined) {\r\n      abilitiesTag.ensureTag(\"attackmobs\", NbtTagType.byte).value = this.attackMobs;\r\n    }\r\n\r\n    if (this.attackPlayers !== undefined) {\r\n      abilitiesTag.ensureTag(\"attackplayers\", NbtTagType.byte).value = this.attackPlayers;\r\n    }\r\n\r\n    if (this.build !== undefined) {\r\n      abilitiesTag.ensureTag(\"build\", NbtTagType.byte).value = this.build;\r\n    }\r\n\r\n    if (this.doorsAndSwitches !== undefined) {\r\n      abilitiesTag.ensureTag(\"doorsandswitches\", NbtTagType.byte).value = this.doorsAndSwitches;\r\n    }\r\n\r\n    if (this.flySpeed !== undefined) {\r\n      abilitiesTag.ensureTag(\"flySpeed\", NbtTagType.float).value = this.flySpeed;\r\n    }\r\n\r\n    if (this.flying !== undefined) {\r\n      abilitiesTag.ensureTag(\"flying\", NbtTagType.byte).value = this.flying;\r\n    }\r\n\r\n    if (this.instaBuild !== undefined) {\r\n      abilitiesTag.ensureTag(\"instabuild\", NbtTagType.byte).value = this.instaBuild;\r\n    }\r\n\r\n    if (this.invulnerable !== undefined) {\r\n      abilitiesTag.ensureTag(\"invulnerable\", NbtTagType.byte).value = this.invulnerable;\r\n    }\r\n\r\n    if (this.lightning !== undefined) {\r\n      abilitiesTag.ensureTag(\"lightning\", NbtTagType.byte).value = this.lightning;\r\n    }\r\n\r\n    if (this.mayFly !== undefined) {\r\n      abilitiesTag.ensureTag(\"mayfly\", NbtTagType.byte).value = this.mayFly;\r\n    }\r\n\r\n    if (this.mine !== undefined) {\r\n      abilitiesTag.ensureTag(\"mine\", NbtTagType.byte).value = this.mine;\r\n    }\r\n\r\n    if (this.op !== undefined) {\r\n      abilitiesTag.ensureTag(\"op\", NbtTagType.byte).value = this.op;\r\n    }\r\n\r\n    if (this.openContainers !== undefined) {\r\n      abilitiesTag.ensureTag(\"opencontainers\", NbtTagType.byte).value = this.openContainers;\r\n    }\r\n\r\n    if (this.teleport !== undefined) {\r\n      abilitiesTag.ensureTag(\"teleport\", NbtTagType.byte).value = this.teleport;\r\n    }\r\n\r\n    if (this.walkSpeed !== undefined) {\r\n      abilitiesTag.ensureTag(\"walkSpeed\", NbtTagType.float).value = this.walkSpeed;\r\n    }\r\n\r\n    if (this.baseGameVersion !== undefined) {\r\n      root.ensureTag(\"baseGameVersion\", NbtTagType.string).value = this.baseGameVersion;\r\n    }\r\n\r\n    if (this.bonusChestEnabled !== undefined) {\r\n      root.ensureTag(\"bonusChestEnabled\", NbtTagType.byte).value = this.bonusChestEnabled;\r\n    }\r\n\r\n    if (this.bonusChestSpawned !== undefined) {\r\n      root.ensureTag(\"bonusChestSpawned\", NbtTagType.byte).value = this.bonusChestSpawned;\r\n    }\r\n\r\n    if (this.cheatsEnabled !== undefined) {\r\n      root.ensureTag(\"cheatsEnabled\", NbtTagType.byte).value = this.cheatsEnabled;\r\n    }\r\n\r\n    if (this.commandBlockOutput !== undefined) {\r\n      root.ensureTag(\"commandblockoutput\", NbtTagType.byte).value = this.commandBlockOutput;\r\n    }\r\n\r\n    if (this.commandBlocksEnabled !== undefined) {\r\n      root.ensureTag(\"commandblocksenabled\", NbtTagType.byte).value = this.commandBlocksEnabled;\r\n    }\r\n\r\n    if (this.commandsEnabled !== undefined) {\r\n      root.ensureTag(\"commandsEnabled\", NbtTagType.byte).value = this.commandsEnabled;\r\n    }\r\n\r\n    if (this.currentTick !== undefined) {\r\n      root.ensureTag(\"currentTick\", NbtTagType.long).value = this.currentTick;\r\n    }\r\n\r\n    if (this.daylightCycle !== undefined) {\r\n      root.ensureTag(\"daylightCycle\", NbtTagType.int).value = this.daylightCycle;\r\n    }\r\n\r\n    if (this.doDaylightCycle !== undefined) {\r\n      root.ensureTag(\"dodaylightcycle\", NbtTagType.byte).value = this.doDaylightCycle;\r\n    }\r\n\r\n    if (this.doEntityDrops !== undefined) {\r\n      root.ensureTag(\"doentitydrops\", NbtTagType.byte).value = this.doEntityDrops;\r\n    }\r\n\r\n    if (this.doFireTick !== undefined) {\r\n      root.ensureTag(\"dofiretick\", NbtTagType.byte).value = this.doFireTick;\r\n    }\r\n\r\n    if (this.doImmediateRespawn !== undefined) {\r\n      root.ensureTag(\"doimmediaterespawn\", NbtTagType.byte).value = this.doImmediateRespawn;\r\n    }\r\n\r\n    if (this.doInsomnia !== undefined) {\r\n      root.ensureTag(\"doinsomnia\", NbtTagType.byte).value = this.doInsomnia;\r\n    }\r\n\r\n    if (this.doMobLoot !== undefined) {\r\n      root.ensureTag(\"domobloot\", NbtTagType.byte).value = this.doMobLoot;\r\n    }\r\n\r\n    if (this.doMobSpawning !== undefined) {\r\n      root.ensureTag(\"domobspawning\", NbtTagType.byte).value = this.doMobSpawning;\r\n    }\r\n\r\n    if (this.doTileDrops !== undefined) {\r\n      root.ensureTag(\"dotiledrops\", NbtTagType.byte).value = this.doTileDrops;\r\n    }\r\n\r\n    if (this.doWeatherCycle !== undefined) {\r\n      root.ensureTag(\"doweathercycle\", NbtTagType.byte).value = this.doWeatherCycle;\r\n    }\r\n\r\n    if (this.drowningDamage !== undefined) {\r\n      root.ensureTag(\"drowningdamage\", NbtTagType.byte).value = this.drowningDamage;\r\n    }\r\n\r\n    if (this.eduOffer !== undefined) {\r\n      root.ensureTag(\"eduOffer\", NbtTagType.int).value = this.eduOffer;\r\n    }\r\n\r\n    if (this.educationFeaturesEnabled !== undefined) {\r\n      root.ensureTag(\"educationFeaturesEnabled\", NbtTagType.byte).value = this.educationFeaturesEnabled;\r\n    }\r\n\r\n    if (\r\n      this.betaApisExperiment ||\r\n      this.dataDrivenItemsExperiment ||\r\n      this.deferredTechnicalPreviewExperiment ||\r\n      this.savedWithToggledExperiments ||\r\n      this.experimentsEverUsed\r\n    ) {\r\n      const experimentsTag = root.ensureTag(\"experiments\", NbtTagType.compound);\r\n\r\n      if (this.betaApisExperiment) {\r\n        experimentsTag.ensureTag(\"gametest\", NbtTagType.byte).value = 1;\r\n      } else {\r\n        experimentsTag.removeTag(\"gametest\");\r\n      }\r\n\r\n      if (this.dataDrivenItemsExperiment) {\r\n        experimentsTag.ensureTag(\"data_driven_items\", NbtTagType.byte).value = 1;\r\n      } else {\r\n        experimentsTag.removeTag(\"data_driven_items\");\r\n      }\r\n\r\n      if (this.deferredTechnicalPreviewExperiment) {\r\n        experimentsTag.ensureTag(\"deferred_technical_preview\", NbtTagType.byte).value = 1;\r\n      } else {\r\n        experimentsTag.removeTag(\"deferred_technical_preview\");\r\n      }\r\n\r\n      if (this.savedWithToggledExperiments !== undefined) {\r\n        experimentsTag.ensureTag(\"saved_with_toggled_experiments\", NbtTagType.byte).value =\r\n          this.savedWithToggledExperiments;\r\n      }\r\n\r\n      if (this.experimentsEverUsed !== undefined) {\r\n        experimentsTag.ensureTag(\"experiments_ever_used\", NbtTagType.byte).value = this.experimentsEverUsed;\r\n      }\r\n    }\r\n\r\n    if (this.fallDamage !== undefined) {\r\n      root.ensureTag(\"falldamage\", NbtTagType.byte).value = this.fallDamage;\r\n    }\r\n\r\n    if (this.fireDamage !== undefined) {\r\n      root.ensureTag(\"firedamage\", NbtTagType.byte).value = this.fireDamage;\r\n    }\r\n\r\n    if (this.freezeDamage !== undefined) {\r\n      root.ensureTag(\"freezedamage\", NbtTagType.byte).value = this.freezeDamage;\r\n    }\r\n\r\n    if (this.functionCommandLimit !== undefined) {\r\n      root.ensureTag(\"functioncommandlimit\", NbtTagType.int).value = this.functionCommandLimit;\r\n    }\r\n\r\n    if (this.hasBeenLoadedInCreative !== undefined) {\r\n      root.ensureTag(\"hasBeenLoadedInCreative\", NbtTagType.byte).value = this.hasBeenLoadedInCreative;\r\n    }\r\n\r\n    if (this.hasLockedBehaviorPack !== undefined) {\r\n      root.ensureTag(\"hasLockedBehaviorPack\", NbtTagType.byte).value = this.hasLockedBehaviorPack;\r\n    }\r\n\r\n    if (this.hasLockedResourcePack !== undefined) {\r\n      root.ensureTag(\"hasLockedResourcePack\", NbtTagType.byte).value = this.hasLockedResourcePack;\r\n    }\r\n\r\n    if (this.immutableWorld !== undefined) {\r\n      root.ensureTag(\"immutableWorld\", NbtTagType.byte).value = this.immutableWorld;\r\n    }\r\n\r\n    if (this.isCreatedInEditor !== undefined) {\r\n      root.ensureTag(\"isCreatedInEditor\", NbtTagType.byte).value = this.isCreatedInEditor;\r\n    }\r\n\r\n    if (this.editorWorldType !== undefined) {\r\n      root.ensureTag(\"editorWorldType\", NbtTagType.int).value = this.editorWorldType;\r\n    }\r\n\r\n    if (this.isExportedFromEditor !== undefined) {\r\n      root.ensureTag(\"isExportedFromEditor\", NbtTagType.byte).value = this.isExportedFromEditor;\r\n    }\r\n\r\n    if (this.isFromLockedTemplate !== undefined) {\r\n      root.ensureTag(\"isFromLockedTemplate\", NbtTagType.byte).value = this.isFromLockedTemplate;\r\n    }\r\n\r\n    if (this.isFromWorldTemplate !== undefined) {\r\n      root.ensureTag(\"isFromWorldTemplate\", NbtTagType.byte).value = this.isFromWorldTemplate;\r\n    }\r\n\r\n    if (this.isRandomSeedAllowed !== undefined) {\r\n      root.ensureTag(\"isRandomSeedAllowed\", NbtTagType.byte).value = this.isRandomSeedAllowed;\r\n    }\r\n\r\n    if (this.isSingleUseWorld !== undefined) {\r\n      root.ensureTag(\"isSingleUseWorld\", NbtTagType.byte).value = this.isSingleUseWorld;\r\n    }\r\n\r\n    if (this.isWorldTemplateOptionLocked !== undefined) {\r\n      root.ensureTag(\"isWorldTemplateOptionLocked\", NbtTagType.byte).value = this.isWorldTemplateOptionLocked;\r\n    }\r\n\r\n    if (this.keepInventory !== undefined) {\r\n      root.ensureTag(\"keepinventory\", NbtTagType.byte).value = this.keepInventory;\r\n    }\r\n\r\n    if (this.lastOpenedWithVersion && this.lastOpenedWithVersion.length > 0) {\r\n      const tag = root.ensureTag(\"lastOpenedWithVersion\", NbtTagType.list);\r\n      tag.setListFromArray(this.lastOpenedWithVersion);\r\n    }\r\n\r\n    if (this.lightningLevel !== undefined) {\r\n      root.ensureTag(\"lightningLevel\", NbtTagType.float).value = this.lightningLevel;\r\n    }\r\n\r\n    if (this.lightningTime !== undefined) {\r\n      root.ensureTag(\"lightningTime\", NbtTagType.int).value = this.lightningTime;\r\n    }\r\n\r\n    if (this.limitedWorldDepth !== undefined) {\r\n      root.ensureTag(\"limitedWorldDepth\", NbtTagType.int).value = this.limitedWorldDepth;\r\n    }\r\n\r\n    if (this.limitedWorldWidth !== undefined) {\r\n      root.ensureTag(\"limitedWorldWidth\", NbtTagType.int).value = this.limitedWorldWidth;\r\n    }\r\n\r\n    if (this.maxCommandChainLength !== undefined) {\r\n      root.ensureTag(\"maxcommandchainlength\", NbtTagType.int).value = this.maxCommandChainLength;\r\n    }\r\n\r\n    if (this.mobGriefing !== undefined) {\r\n      root.ensureTag(\"mobgriefing\", NbtTagType.byte).value = this.mobGriefing;\r\n    }\r\n\r\n    if (this.naturalRegeneration !== undefined) {\r\n      root.ensureTag(\"naturalregeneration\", NbtTagType.byte).value = this.naturalRegeneration;\r\n    }\r\n\r\n    if (this.permissionsLevel !== undefined) {\r\n      root.ensureTag(\"permissionsLevel\", NbtTagType.int).value = this.permissionsLevel;\r\n    }\r\n\r\n    if (this.playerPermissionsLevel !== undefined) {\r\n      root.ensureTag(\"playerPermissionsLevel\", NbtTagType.int).value = this.playerPermissionsLevel;\r\n    }\r\n    if (this.prid !== undefined) {\r\n      root.ensureTag(\"prid\", NbtTagType.string).value = this.prid;\r\n    }\r\n\r\n    if (this.pvp !== undefined) {\r\n      root.ensureTag(\"pvp\", NbtTagType.byte).value = this.pvp;\r\n    }\r\n\r\n    if (this.rainLevel !== undefined) {\r\n      root.ensureTag(\"rainLevel\", NbtTagType.float).value = this.rainLevel;\r\n    }\r\n\r\n    if (this.rainTime !== undefined) {\r\n      root.ensureTag(\"rainTime\", NbtTagType.int).value = this.rainTime;\r\n    }\r\n\r\n    if (this.randomTickSpeed !== undefined) {\r\n      root.ensureTag(\"randomtickspeed\", NbtTagType.int).value = this.randomTickSpeed;\r\n    }\r\n\r\n    if (this.requiresCopiedPackRemovalCheck !== undefined) {\r\n      root.ensureTag(\"requiresCopiedPackRemovalCheck\", NbtTagType.byte).value = this.requiresCopiedPackRemovalCheck;\r\n    }\r\n\r\n    if (this.respawnBlocksExplode !== undefined) {\r\n      root.ensureTag(\"respawnblocksexplode\", NbtTagType.byte).value = this.respawnBlocksExplode;\r\n    }\r\n\r\n    if (this.sendCommandFeedback !== undefined) {\r\n      root.ensureTag(\"sendcommandfeedback\", NbtTagType.byte).value = this.sendCommandFeedback;\r\n    }\r\n\r\n    if (this.serverChunkTickRange !== undefined) {\r\n      root.ensureTag(\"serverChunkTickRange\", NbtTagType.int).value = this.serverChunkTickRange;\r\n    }\r\n\r\n    if (this.showBorderEffect !== undefined) {\r\n      root.ensureTag(\"showbordereffect\", NbtTagType.byte).value = this.showBorderEffect;\r\n    }\r\n\r\n    if (this.showCoordinates !== undefined) {\r\n      root.ensureTag(\"showcoordinates\", NbtTagType.byte).value = this.showCoordinates;\r\n    }\r\n\r\n    if (this.showDeathMessages !== undefined) {\r\n      root.ensureTag(\"showdeathmessages\", NbtTagType.byte).value = this.showDeathMessages;\r\n    }\r\n\r\n    if (this.showTags !== undefined) {\r\n      root.ensureTag(\"showtags\", NbtTagType.byte).value = this.showTags;\r\n    }\r\n\r\n    if (this.spawnMobs !== undefined) {\r\n      root.ensureTag(\"spawnMobs\", NbtTagType.byte).value = this.spawnMobs;\r\n    }\r\n\r\n    if (this.spawnRadius !== undefined) {\r\n      root.ensureTag(\"spawnradius\", NbtTagType.int).value = this.spawnRadius;\r\n    }\r\n\r\n    if (this.startWithMapEnabled !== undefined) {\r\n      root.ensureTag(\"startWithMapEnabled\", NbtTagType.byte).value = this.startWithMapEnabled;\r\n    }\r\n\r\n    if (this.texturePacksRequired !== undefined) {\r\n      root.ensureTag(\"texturePacksRequired\", NbtTagType.byte).value = this.texturePacksRequired;\r\n    }\r\n    if (this.tntExplodes !== undefined) {\r\n      root.ensureTag(\"tntexplodes\", NbtTagType.byte).value = this.tntExplodes;\r\n    }\r\n\r\n    if (this.useMsaGamertagsOnly !== undefined) {\r\n      root.ensureTag(\"useMsaGamertagsOnly\", NbtTagType.byte).value = this.useMsaGamertagsOnly;\r\n    }\r\n\r\n    if (this.worldStartCount !== undefined) {\r\n      root.ensureTag(\"worldStartCount\", NbtTagType.long).value = this.worldStartCount;\r\n    }\r\n\r\n    // const worldPoliciesTag = root.ensureTag(\"world_policies\", NbtTagType.compound);\r\n  }\r\n\r\n  loadFromNbt(binary: NbtBinary) {\r\n    this.nbt = binary;\r\n\r\n    if (binary.singleRoot == null) {\r\n      return;\r\n    }\r\n\r\n    const root = binary.singleRoot;\r\n\r\n    let tag = root.find(\"LevelName\");\r\n\r\n    if (tag !== null) {\r\n      this.levelName = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"SpawnX\");\r\n\r\n    if (tag !== null) {\r\n      this.spawnX = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"SpawnY\");\r\n\r\n    if (tag !== null) {\r\n      this.spawnY = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"SpawnZ\");\r\n\r\n    if (tag !== null) {\r\n      this.spawnZ = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"editorWorldType\");\r\n\r\n    if (tag !== null) {\r\n      this.editorWorldType = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"GameType\");\r\n\r\n    if (tag !== null) {\r\n      this.gameType = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Generator\");\r\n\r\n    if (tag !== null) {\r\n      this.generator = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"commandsEnabled\");\r\n\r\n    if (tag !== null) {\r\n      this.commandsEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"cheatsEnabled\");\r\n\r\n    if (tag !== null) {\r\n      this.cheatsEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"commandsblocksenabled\");\r\n\r\n    if (tag !== null) {\r\n      this.commandBlocksEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"experimentalgameplay\");\r\n\r\n    if (tag !== null) {\r\n      this.experimentalGameplay = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"BiomeOverride\");\r\n    if (tag !== null) {\r\n      this.biomeOverride = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"CenterMapsToOrigin\");\r\n    if (tag !== null) {\r\n      this.centerMapsToOrigin = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"ConfirmedPlatformLockedComponent\");\r\n    if (tag !== null) {\r\n      this.confirmedPlatformLockedContent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Difficulty\");\r\n    if (tag !== null) {\r\n      this.difficulty = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"FlatWorldLayers\");\r\n    if (tag !== null) {\r\n      this.flatWorldLayers = tag.valueAsJSONObject;\r\n    }\r\n\r\n    tag = root.find(\"ForceGameType\");\r\n    if (tag !== null) {\r\n      this.forceGameType = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"InventoryVersion\");\r\n    if (tag !== null) {\r\n      this.inventoryVersion = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"LANBroadcast\");\r\n    if (tag !== null) {\r\n      this.lanBroadcast = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"LANBroadcastIntent\");\r\n    if (tag !== null) {\r\n      this.lanBroadcastIntent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"LastPlayed\");\r\n    if (tag !== null) {\r\n      this.lastPlayed = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"LimitedWorldOriginX\");\r\n    if (tag !== null) {\r\n      this.limitedWorldOriginX = tag.valueAsInt;\r\n    }\r\n    tag = root.find(\"LimitedWorldOriginY\");\r\n    if (tag !== null) {\r\n      this.limitedWorldOriginY = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"LimitedWorldOriginZ\");\r\n    if (tag !== null) {\r\n      this.limitedWorldOriginZ = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"MinimumCompatibleClientVersion\");\r\n    if (tag !== null) {\r\n      this.minimumCompatibleClientVersion = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"lastOpenedWithVersion\");\r\n    if (tag !== null) {\r\n      this.lastOpenedWithVersion = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"MultiplayerGame\");\r\n    if (tag !== null) {\r\n      this.multiplayerGame = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"MultiplayerGameIntent\");\r\n    if (tag !== null) {\r\n      this.multiplayerGameIntent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"NetherScale\");\r\n    if (tag !== null) {\r\n      this.netherScale = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"NetworkVersion\");\r\n    if (tag !== null) {\r\n      this.networkVersion = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Platform\");\r\n    if (tag !== null) {\r\n      this.platform = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"PlatformBroadcastIntent\");\r\n    if (tag !== null) {\r\n      this.platformBroadcastIntent = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"RandomSeed\");\r\n    if (tag !== null) {\r\n      this.randomSeed = tag.valueAsBigInt.toString();\r\n    }\r\n\r\n    tag = root.find(\"SpawnV1Villagers\");\r\n    if (tag !== null) {\r\n      this.spawnV1Villagers = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"StorageVersion\");\r\n    if (tag !== null) {\r\n      this.storageVersion = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Time\");\r\n    if (tag !== null) {\r\n      this.time = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"WorldVersion\");\r\n    if (tag !== null) {\r\n      this.worldVersion = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"XBLBroadcastIntent\");\r\n    if (tag !== null) {\r\n      this.xblBroadcastIntent = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"baseGameVersion\");\r\n    if (tag !== null) {\r\n      this.baseGameVersion = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"bonusChestEnabled\");\r\n    if (tag !== null) {\r\n      this.bonusChestEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"bonusChestSpawned\");\r\n    if (tag !== null) {\r\n      this.bonusChestSpawned = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"commandblockoutput\");\r\n    if (tag !== null) {\r\n      this.commandBlockOutput = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"MultiplayerGame\");\r\n    if (tag !== null) {\r\n      this.multiplayerGame = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"currentTick\");\r\n    if (tag !== null) {\r\n      this.currentTick = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"dodaylightcycle\");\r\n    if (tag !== null) {\r\n      this.doDaylightCycle = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"daylightCycle\");\r\n    if (tag !== null) {\r\n      this.daylightCycle = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"doentitydrops\");\r\n    if (tag !== null) {\r\n      this.doEntityDrops = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"dofiretick\");\r\n    if (tag !== null) {\r\n      this.doFireTick = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"doimmediaterespawn\");\r\n    if (tag !== null) {\r\n      this.doImmediateRespawn = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"doinsomnia\");\r\n    if (tag !== null) {\r\n      this.doInsomnia = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"domobloot\");\r\n    if (tag !== null) {\r\n      this.doMobLoot = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"domobspawning\");\r\n    if (tag !== null) {\r\n      this.doMobSpawning = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"dotiledrops\");\r\n    if (tag !== null) {\r\n      this.doTileDrops = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"doweathercycle\");\r\n    if (tag !== null) {\r\n      this.doWeatherCycle = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"drowningdamage\");\r\n    if (tag !== null) {\r\n      this.drowningDamage = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"eduOffer\");\r\n    if (tag !== null) {\r\n      this.eduOffer = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"educationFeaturesEnabled\");\r\n    if (tag !== null) {\r\n      this.educationFeaturesEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"falldamage\");\r\n    if (tag !== null) {\r\n      this.fallDamage = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"freezedamage\");\r\n    if (tag !== null) {\r\n      this.freezeDamage = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"functioncommandlimit\");\r\n    if (tag !== null) {\r\n      this.functionCommandLimit = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"hasBeenLoadedInCreative\");\r\n    if (tag !== null) {\r\n      this.hasBeenLoadedInCreative = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"hasLockedBehaviorPack\");\r\n    if (tag !== null) {\r\n      this.hasLockedBehaviorPack = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"hasLockedResourcePack\");\r\n    if (tag !== null) {\r\n      this.hasLockedResourcePack = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"immutableWorld\");\r\n    if (tag !== null) {\r\n      this.immutableWorld = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isFromLockedTemplate\");\r\n    if (tag !== null) {\r\n      this.isFromLockedTemplate = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isRandomSeedAllowed\");\r\n    if (tag !== null) {\r\n      this.isRandomSeedAllowed = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isCreatedInEditor\");\r\n    if (tag !== null) {\r\n      this.isCreatedInEditor = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isExportedFromEditor\");\r\n    if (tag !== null) {\r\n      this.isExportedFromEditor = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isFromWorldTemplate\");\r\n    if (tag !== null) {\r\n      this.isFromWorldTemplate = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isSingleUseWorld\");\r\n    if (tag !== null) {\r\n      this.isSingleUseWorld = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"isWorldTemplateOptionLocked\");\r\n    if (tag !== null) {\r\n      this.isWorldTemplateOptionLocked = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"keepinventory\");\r\n    if (tag !== null) {\r\n      this.keepInventory = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"lightningTime\");\r\n    if (tag !== null) {\r\n      this.lightningTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"lightningLevel\");\r\n    if (tag !== null) {\r\n      this.lightningLevel = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"limitedWorldDepth\");\r\n    if (tag !== null) {\r\n      this.limitedWorldDepth = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"limitedWorldWidth\");\r\n    if (tag !== null) {\r\n      this.limitedWorldWidth = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"maxcommandchainlength\");\r\n    if (tag !== null) {\r\n      this.maxCommandChainLength = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"mobgriefing\");\r\n    if (tag !== null) {\r\n      this.mobGriefing = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"naturalregeneration\");\r\n    if (tag !== null) {\r\n      this.naturalRegeneration = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"permissionsLevel\");\r\n    if (tag !== null) {\r\n      this.permissionsLevel = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"playerPermissionsLevel\");\r\n    if (tag !== null) {\r\n      this.playerPermissionsLevel = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"prid\");\r\n    if (tag !== null) {\r\n      this.prid = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"pvp\");\r\n    if (tag !== null) {\r\n      this.pvp = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"rainLevel\");\r\n    if (tag !== null) {\r\n      this.rainLevel = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"rainTime\");\r\n    if (tag !== null) {\r\n      this.rainTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"randomtickspeed\");\r\n    if (tag !== null) {\r\n      this.randomTickSpeed = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"requiresCopiedPackRemovalCheck\");\r\n    if (tag !== null) {\r\n      this.requiresCopiedPackRemovalCheck = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"respawnblocksexplode\");\r\n    if (tag !== null) {\r\n      this.respawnBlocksExplode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"sendcommandfeedback\");\r\n    if (tag !== null) {\r\n      this.sendCommandFeedback = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"serverChunkTickRange\");\r\n    if (tag !== null) {\r\n      this.serverChunkTickRange = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"showbordereffect\");\r\n    if (tag !== null) {\r\n      this.showBorderEffect = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"showcoordinates\");\r\n    if (tag !== null) {\r\n      this.showCoordinates = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"showdeathmessages\");\r\n    if (tag !== null) {\r\n      this.showDeathMessages = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"showtags\");\r\n    if (tag !== null) {\r\n      this.showTags = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"spawnMobs\");\r\n    if (tag !== null) {\r\n      this.spawnMobs = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"spawnradius\");\r\n    if (tag !== null) {\r\n      this.spawnRadius = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"startWithMapEnabled\");\r\n    if (tag !== null) {\r\n      this.startWithMapEnabled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"texturePacksRequired\");\r\n    if (tag !== null) {\r\n      this.texturePacksRequired = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"tntexplodes\");\r\n    if (tag !== null) {\r\n      this.tntExplodes = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"useMsaGamertagsOnly\");\r\n    if (tag !== null) {\r\n      this.useMsaGamertagsOnly = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"worldStartCount\");\r\n    if (tag !== null) {\r\n      this.worldStartCount = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"abilities\");\r\n\r\n    if (tag !== null) {\r\n      const attackMobs = tag.find(\"attackmobs\");\r\n\r\n      if (attackMobs) {\r\n        this.attackMobs = attackMobs.valueAsBoolean;\r\n      }\r\n\r\n      const attackPlayers = tag.find(\"attackplayers\");\r\n\r\n      if (attackPlayers) {\r\n        this.attackPlayers = attackPlayers.valueAsBoolean;\r\n      }\r\n      const build = tag.find(\"build\");\r\n\r\n      if (build) {\r\n        this.build = build.valueAsBoolean;\r\n      }\r\n\r\n      const doorsAndSwitches = tag.find(\"doorsandswitches\");\r\n\r\n      if (doorsAndSwitches) {\r\n        this.doorsAndSwitches = doorsAndSwitches.valueAsBoolean;\r\n      }\r\n\r\n      const flySpeed = tag.find(\"flySpeed\");\r\n\r\n      if (flySpeed) {\r\n        this.flySpeed = flySpeed.valueAsFloat;\r\n      }\r\n\r\n      const flying = tag.find(\"flying\");\r\n\r\n      if (flying) {\r\n        this.flying = flying.valueAsBoolean;\r\n      }\r\n\r\n      const instabuild = tag.find(\"instabuild\");\r\n\r\n      if (instabuild) {\r\n        this.instaBuild = instabuild.valueAsBoolean;\r\n      }\r\n\r\n      const invulnerable = tag.find(\"invulnerable\");\r\n\r\n      if (invulnerable) {\r\n        this.invulnerable = invulnerable.valueAsBoolean;\r\n      }\r\n\r\n      const lightning = tag.find(\"lightning\");\r\n\r\n      if (lightning) {\r\n        this.lightning = lightning.valueAsBoolean;\r\n      }\r\n\r\n      const mayFly = tag.find(\"mayfly\");\r\n\r\n      if (mayFly) {\r\n        this.mayFly = mayFly.valueAsBoolean;\r\n      }\r\n\r\n      const mine = tag.find(\"mine\");\r\n\r\n      if (mine) {\r\n        this.mine = mine.valueAsBoolean;\r\n      }\r\n\r\n      const op = tag.find(\"op\");\r\n\r\n      if (op) {\r\n        this.op = op.valueAsBoolean;\r\n      }\r\n\r\n      const openContainers = tag.find(\"opencontainers\");\r\n\r\n      if (openContainers) {\r\n        this.openContainers = openContainers.valueAsBoolean;\r\n      }\r\n\r\n      const teleport = tag.find(\"teleport\");\r\n\r\n      if (teleport) {\r\n        this.teleport = teleport.valueAsBoolean;\r\n      }\r\n\r\n      const walkSpeed = tag.find(\"walkSpeed\");\r\n\r\n      if (walkSpeed) {\r\n        this.walkSpeed = walkSpeed.valueAsFloat;\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"experiments\");\r\n    this.betaApisExperiment = undefined;\r\n    this.dataDrivenItemsExperiment = undefined;\r\n\r\n    if (tag !== null) {\r\n      const gameTest = tag.find(\"gametest\");\r\n\r\n      if (gameTest !== null && gameTest.valueAsInt === 1) {\r\n        this.betaApisExperiment = true;\r\n      } else {\r\n        this.betaApisExperiment = false;\r\n      }\r\n\r\n      const ddi = tag.find(\"data_driven_items\");\r\n\r\n      if (ddi !== null && ddi.valueAsInt === 1) {\r\n        this.dataDrivenItemsExperiment = true;\r\n      } else {\r\n        this.dataDrivenItemsExperiment = false;\r\n      }\r\n\r\n      const eeu = tag.find(\"experiments_ever_used\");\r\n\r\n      if (eeu !== null) {\r\n        this.experimentsEverUsed = eeu.valueAsBoolean;\r\n      } else {\r\n        this.experimentsEverUsed = false;\r\n      }\r\n\r\n      const swtoggex = tag.find(\"saved_with_toggled_experiments\");\r\n\r\n      if (swtoggex !== null) {\r\n        this.savedWithToggledExperiments = swtoggex.valueAsBoolean;\r\n      } else {\r\n        this.savedWithToggledExperiments = false;\r\n      }\r\n    }\r\n  }\r\n}\r\n", "\n/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED          = 1;\n//const Z_HUFFMAN_ONLY      = 2;\n//const Z_RLE               = 3;\nconst Z_FIXED$1               = 4;\n//const Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY              = 0;\nconst Z_TEXT                = 1;\n//const Z_ASCII             = 1; // = Z_TEXT\nconst Z_UNKNOWN$1             = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES    = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1    = 3;\nconst MAX_MATCH$1    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1      = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1       = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1       = 30;\n/* number of distance codes */\n\nconst BL_CODES$1      = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1     = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK   = 256;\n/* end of block literal code */\n\nconst REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits =   /* extra bits for each length code */\n  new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits =   /* extra bits for each distance code */\n  new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits =  /* extra bits for each bit length code */\n  new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n  new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree  = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree  = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code    = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code  = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length   = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist     = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n  let res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nconst gen_bitlen = (s, desc) =>\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  const tree            = desc.dyn_tree;\n  const max_code        = desc.max_code;\n  const stree           = desc.stat_desc.static_tree;\n  const has_stree       = desc.stat_desc.has_stree;\n  const extra           = desc.stat_desc.extra_bits;\n  const base            = desc.stat_desc.extra_base;\n  const max_length      = desc.stat_desc.max_length;\n  let h;              /* heap index */\n  let n, m;           /* iterate over the tree elements */\n  let bits;           /* bit length */\n  let xbits;          /* extra bits */\n  let f;              /* frequency */\n  let overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS$1; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) =>\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n  let code = 0;              /* running code value */\n  let bits;                  /* bit index */\n  let n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS$1; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    let len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n  let n;        /* iterates over tree elements */\n  let bits;     /* bit counter */\n  let length;   /* length value */\n  let code;     /* code value */\n  let dist;     /* distance index */\n  const bl_count = new Array(MAX_BITS$1 + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES$1; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS$1; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES$1; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES$1, MAX_BITS$1);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES$1, MAX_BL_BITS);\n\n  //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n  let n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES$1;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES$1;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nconst copy_block = (s, buf, len, header) =>\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);\n  s.pending += len;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n  const _n2 = n * 2;\n  const _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) =>\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  const v = s.heap[k];\n  let j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) =>\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  let dist;           /* distance of matched string */\n  let lc;             /* match length or unmatched char (if dist == 0) */\n  let lx = 0;         /* running index in l_buf */\n  let code;           /* the code to send */\n  let extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) =>\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  const tree     = desc.dyn_tree;\n  const stree    = desc.stat_desc.static_tree;\n  const has_stree = desc.stat_desc.has_stree;\n  const elems    = desc.stat_desc.elems;\n  let n, m;          /* iterate over heap elements */\n  let max_code = -1; /* largest code with non zero frequency */\n  let node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE$1;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) =>\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  let n;                     /* iterates over all tree elements */\n  let prevlen = -1;          /* last emitted length */\n  let curlen;                /* length of current code */\n\n  let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  let count = 0;             /* repeat count of the current code */\n  let max_count = 7;         /* max repeat count */\n  let min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) =>\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  let n;                     /* iterates over all tree elements */\n  let prevlen = -1;          /* last emitted length */\n  let curlen;                /* length of current code */\n\n  let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  let count = 0;             /* repeat count of the current code */\n  let max_count = 7;         /* max repeat count */\n  let min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n  let max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) =>\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  let rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  let black_mask = 0xf3ffc07f;\n  let n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS$1; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  let opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  let max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN$1) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block$1(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) =>\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //let out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n};\n\nvar _tr_init_1  = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1  = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n  let s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n  let c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n  const t = crcTable;\n  const end = pos + len;\n\n  crc ^= -1;\n\n  for (let i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  Z_MEM_ERROR:       -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n  Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n  Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n  Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n  Z_UNKNOWN,\n  Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS      = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES       = 30;\n/* number of distance codes */\nconst BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42;\nconst EXTRA_STATE = 69;\nconst NAME_STATE = 73;\nconst COMMENT_STATE = 91;\nconst HCRC_STATE = 103;\nconst BUSY_STATE = 113;\nconst FINISH_STATE = 666;\n\nconst BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE     = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n  strm.msg = messages[errorCode];\n  return errorCode;\n};\n\nconst rank = (f) => {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n  let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n  const s = strm.state;\n\n  //_tr_flush_bits(s);\n  let len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n};\n\n\nconst flush_block_only = (s, last) => {\n  _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n  s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n  //  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n  let len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32_1(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32_1(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n  let chain_length = s.max_chain_length;      /* max hash chain length */\n  let scan = s.strstart; /* current string */\n  let match;                       /* matched string */\n  let len;                           /* length of current match */\n  let best_len = s.prev_length;              /* best match length so far */\n  let nice_match = s.nice_match;             /* stop if match long enough */\n  const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  const _win = s.window; // shortcut\n\n  const wmask = s.w_mask;\n  const prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  const strend = s.strstart + MAX_MATCH;\n  let scan_end1  = _win[scan + best_len - 1];\n  let scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nconst fill_window = (s) => {\n\n  const _w_size = s.w_size;\n  let p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    const curr = s.strstart + s.lookahead;\n//    let init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nconst deflate_stored = (s, flush) => {\n\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  let max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    const max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n};\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n  let hash_head;        /* head of the hash chain */\n  let bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n  let hash_head;          /* head of hash chain */\n  let bflush;              /* set if current block must be flushed */\n\n  let max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n  let bflush;            /* set if current block must be flushed */\n  let prev;              /* byte at distance one to match */\n  let scan, strend;      /* scan goes up to strend for length of run */\n\n  const _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n  let bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH$2) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = _tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH$3) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nconst configuration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new Uint16Array(HEAP_SIZE * 2);\n  this.dyn_dtree  = new Uint16Array((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new Uint16Array((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new Uint16Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new Uint16Array(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nconst deflateResetKeep = (strm) => {\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR$2);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  const s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH$2;\n  _tr_init(s);\n  return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n  const ret = deflateResetKeep(strm);\n  if (ret === Z_OK$3) {\n    lm_init(strm.state);\n  }\n  return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$2; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR$2; }\n  strm.state.gzhead = head;\n  return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR$2;\n  }\n  let wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION$1) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR$2);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  const s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new Uint8Array(s.w_size * 2);\n  s.head = new Uint16Array(s.hash_size);\n  s.prev = new Uint16Array(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n  return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\nconst deflate$2 = (strm, flush) => {\n\n  let beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK$1 || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n  }\n\n  const s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n  }\n\n  s.strm = strm; /* just in case */\n  const old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n      let level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK$3;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH$3) {\n    return err(strm, Z_BUF_ERROR$1);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR$1);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n    let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK$3;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        _tr_align(s);\n      }\n      else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        _tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH$1) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK$3;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH$3) { return Z_OK$3; }\n  if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR$2;\n  }\n\n  const status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR$2);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n  let dictLength = dictionary.length;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR$2;\n  }\n\n  const s = strm.state;\n  const wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR$2;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    let tmpDict = new Uint8Array(s.w_size);\n    tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  const avail = strm.avail_in;\n  const next = strm.next_in;\n  const input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    let str = s.strstart;\n    let n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    const source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (const p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n  // calculate data length\n  let len = 0;\n\n  for (let i = 0, l = chunks.length; i < l; i++) {\n    len += chunks[i].length;\n  }\n\n  // join chunks\n  const result = new Uint8Array(len);\n\n  for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n    let chunk = chunks[i];\n    result.set(chunk, pos);\n    pos += chunk.length;\n  }\n\n  return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n  if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n    return new TextEncoder().encode(str);\n  }\n\n  let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new Uint8Array(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if (buf.subarray && STR_APPLY_UIA_OK) {\n      return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n    }\n  }\n\n  let result = '';\n  for (let i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n  const len = max || buf.length;\n\n  if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n    return new TextDecoder().decode(buf.subarray(0, max));\n  }\n\n  let i, out;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  const utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    let c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    let c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  let pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n  Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n  Z_DEFAULT_COMPRESSION,\n  Z_DEFAULT_STRATEGY,\n  Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n *   , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n  this.options = common.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED$1,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY\n  }, options || {});\n\n  let opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new zstream();\n  this.strm.avail_out = 0;\n\n  let status = deflate_1$2.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK$2) {\n    throw new Error(messages[status]);\n  }\n\n  if (opt.header) {\n    deflate_1$2.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    let dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK$2) {\n      throw new Error(messages[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n  const strm = this.strm;\n  const chunkSize = this.options.chunkSize;\n  let status, _flush_mode;\n\n  if (this.ended) { return false; }\n\n  if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n  else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  for (;;) {\n    if (strm.avail_out === 0) {\n      strm.output = new Uint8Array(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    // Make sure avail_out > 6 to avoid repeating markers\n    if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n      this.onData(strm.output.subarray(0, strm.next_out));\n      strm.avail_out = 0;\n      continue;\n    }\n\n    status = deflate_1$2.deflate(strm, _flush_mode);\n\n    // Ended => flush and finish\n    if (status === Z_STREAM_END$2) {\n      if (strm.next_out > 0) {\n        this.onData(strm.output.subarray(0, strm.next_out));\n      }\n      status = deflate_1$2.deflateEnd(this.strm);\n      this.onEnd(status);\n      this.ended = true;\n      return status === Z_OK$2;\n    }\n\n    // Flush if out buffer full\n    if (strm.avail_out === 0) {\n      this.onData(strm.output);\n      continue;\n    }\n\n    // Flush if requested and has data\n    if (_flush_mode > 0 && strm.next_out > 0) {\n      this.onData(strm.output.subarray(0, strm.next_out));\n      strm.avail_out = 0;\n      continue;\n    }\n\n    if (strm.avail_in === 0) break;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK$2) {\n    this.result = common.flattenChunks(this.chunks);\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n  const deflator = new Deflate$1(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 30;       /* got a data error -- remain here until reset */\nconst TYPE$1 = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n  let _in;                    /* local strm.input */\n  let last;                   /* have enough input while in < last */\n  let _out;                   /* local strm.output */\n  let beg;                    /* inflate()'s initial strm.output */\n  let end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  let dmax;                   /* maximum distance from zlib header */\n//#endif\n  let wsize;                  /* window size or zero if not using window */\n  let whave;                  /* valid bytes in the window */\n  let wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  let s_window;               /* allocated sliding window, if wsize != 0 */\n  let hold;                   /* local strm.hold */\n  let bits;                   /* local strm.bits */\n  let lcode;                  /* local strm.lencode */\n  let dcode;                  /* local strm.distcode */\n  let lmask;                  /* mask for first level of length codes */\n  let dmask;                  /* mask for first level of distance codes */\n  let here;                   /* retrieved table entry */\n  let op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  let len;                    /* match length, unused bytes */\n  let dist;                   /* match distance */\n  let from;                   /* where to copy match from */\n  let from_source;\n\n\n  let input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  const state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD$1;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD$1;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD$1;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE$1;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD$1;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n  const bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  let len = 0;               /* a code's length in bits */\n  let sym = 0;               /* index of code symbols */\n  let min = 0, max = 0;          /* minimum and maximum code lengths */\n  let root = 0;              /* number of index bits for root table */\n  let curr = 0;              /* number of index bits for current table */\n  let drop = 0;              /* code bits to drop for sub-table */\n  let left = 0;                   /* number of prefix codes available */\n  let used = 0;              /* code entries in table used */\n  let huff = 0;              /* Huffman code */\n  let incr;              /* for incrementing code, index */\n  let fill;              /* index for replicating entries */\n  let low;               /* low bits for current root entry */\n  let mask;              /* mask for low root bits */\n  let next;             /* next available space in table */\n  let base = null;     /* base value table to use */\n  let base_index = 0;\n//  let shoextra;    /* extra bits table to use */\n  let end;                    /* use base and extra for symbol > end */\n  const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  let extra = null;\n  let extra_index = 0;\n\n  let here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES$1 || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES$1) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS$1) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n    (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n        (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n  Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n  Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst    HEAD = 1;       /* i: waiting for magic header */\nconst    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nconst    TIME = 3;       /* i: waiting for modification time (gzip) */\nconst    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nconst    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nconst    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nconst    NAME = 7;       /* i: waiting for end of file name (gzip) */\nconst    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nconst    HCRC = 9;       /* i: waiting for header crc (gzip) */\nconst    DICTID = 10;    /* i: waiting for dictionary check value */\nconst    DICT = 11;      /* waiting for inflateSetDictionary() call */\nconst        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nconst        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nconst        STORED = 14;    /* i: waiting for stored size (length and complement) */\nconst        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nconst        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nconst        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nconst        LENLENS = 18;   /* i: waiting for code length code lengths */\nconst        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nconst            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nconst            LEN = 21;       /* i: waiting for length/lit/eob code */\nconst            LENEXT = 22;    /* i: waiting for length extra bits */\nconst            DIST = 23;      /* i: waiting for distance code */\nconst            DISTEXT = 24;   /* i: waiting for distance extra bits */\nconst            MATCH = 25;     /* o: waiting for output space to copy string */\nconst            LIT = 26;       /* o: waiting for output space to write literal */\nconst    CHECK = 27;     /* i: waiting for 32-bit check value */\nconst    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nconst    DONE = 29;      /* finished check, done -- remain here until reset */\nconst    BAD = 30;       /* got a data error -- remain here until reset */\nconst    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nconst    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n  this.work = new Uint16Array(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new Int32Array(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\n\nconst inflateResetKeep = (strm) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n  state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n  let wrap;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR$1;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n  if (!strm) { return Z_STREAM_ERROR$1; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  const state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  const ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK$1) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n  return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    lenfix = new Int32Array(512);\n    distfix = new Int32Array(32);\n\n    /* literal/length table */\n    let sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inftrees(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inftrees(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n  let dist;\n  const state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new Uint8Array(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    state.window.set(src.subarray(end - state.wsize, end), 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      state.window.set(src.subarray(end - copy, end), 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n  let state;\n  let input, output;          // input/output buffers\n  let next;                   /* next input INDEX */\n  let put;                    /* next output INDEX */\n  let have, left;             /* available input and output */\n  let hold;                   /* bit buffer */\n  let bits;                   /* bits in bit buffer */\n  let _in, _out;              /* save starting available input and output */\n  let copy;                   /* number of stored or match bytes to copy */\n  let from;                   /* where to copy match bytes from */\n  let from_source;\n  let here = 0;               /* current decoding table entry */\n  let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //let last;                   /* parent table entry */\n  let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  let len;                    /* length to copy for repeats, bits to drop */\n  let ret;                    /* return code */\n  const hbuf = new Uint8Array(4);    /* buffer for gzip header crc calculation */\n  let opts;\n\n  let n; // temporary variable for NEED_BITS\n\n  const order = /* permutation of code lengths */\n    new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR$1;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK$1;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n\n        // !!! pako patch. Force use `options.windowBits` if passed.\n        // Required to always use max window size by default.\n        state.dmax = 1 << state.wbits;\n        //state.dmax = 1 << len;\n\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32_1(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32_1(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Uint8Array(state.head.extra_len);\n              }\n              state.head.extra.set(\n                input.subarray(\n                  next,\n                  // extra field is limited to 65536 bytes\n                  // - no need for additional size check\n                  next + copy\n                ),\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32_1(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32_1(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32_1(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT$1;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          output.set(input.subarray(next, next + copy), put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inffast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END$1;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR$1;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR$1;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR$1;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH$1))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR$1;\n  }\n\n  let state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n  const state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n  const dictLength = dictionary.length;\n\n  let state;\n  let dictid;\n  let ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR$1;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32_1(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR$1;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR$1;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH, Z_FINISH,\n  Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n  this.options = common.assign({\n    chunkSize: 1024 * 64,\n    windowBits: 15,\n    to: ''\n  }, options || {});\n\n  const opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new zstream();\n  this.strm.avail_out = 0;\n\n  let status  = inflate_1$2.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(messages[status]);\n  }\n\n  this.header = new gzheader();\n\n  inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== Z_OK) {\n        throw new Error(messages[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n *   flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n *   `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n  const strm = this.strm;\n  const chunkSize = this.options.chunkSize;\n  const dictionary = this.options.dictionary;\n  let status, _flush_mode, last_avail_out;\n\n  if (this.ended) return false;\n\n  if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n  else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n  // Convert data if needed\n  if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  for (;;) {\n    if (strm.avail_out === 0) {\n      strm.output = new Uint8Array(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = inflate_1$2.inflate(strm, _flush_mode);\n\n    if (status === Z_NEED_DICT && dictionary) {\n      status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n      if (status === Z_OK) {\n        status = inflate_1$2.inflate(strm, _flush_mode);\n      } else if (status === Z_DATA_ERROR) {\n        // Replace code with more verbose\n        status = Z_NEED_DICT;\n      }\n    }\n\n    // Skip snyc markers if more data follows and not raw mode\n    while (strm.avail_in > 0 &&\n           status === Z_STREAM_END &&\n           strm.state.wrap > 0 &&\n           data[strm.next_in] !== 0)\n    {\n      inflate_1$2.inflateReset(strm);\n      status = inflate_1$2.inflate(strm, _flush_mode);\n    }\n\n    switch (status) {\n      case Z_STREAM_ERROR:\n      case Z_DATA_ERROR:\n      case Z_NEED_DICT:\n      case Z_MEM_ERROR:\n        this.onEnd(status);\n        this.ended = true;\n        return false;\n    }\n\n    // Remember real `avail_out` value, because we may patch out buffer content\n    // to align utf8 strings boundaries.\n    last_avail_out = strm.avail_out;\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n        if (this.options.to === 'string') {\n\n          let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          let tail = strm.next_out - next_out_utf8;\n          let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail & realign counters\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n        }\n      }\n    }\n\n    // Must repeat iteration if out buffer is full\n    if (status === Z_OK && last_avail_out === 0) continue;\n\n    // Finalize if end of stream reached.\n    if (status === Z_STREAM_END) {\n      status = inflate_1$2.inflateEnd(this.strm);\n      this.onEnd(status);\n      this.ended = true;\n      return true;\n    }\n\n    if (strm.avail_in === 0) break;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n *   each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = common.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err) {\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n  const inflator = new Inflate$1(options);\n\n  inflator.push(input);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class Varint {\r\n  fileBytes: Uint8Array;\r\n  startIndex: number;\r\n  byteLength: number = 0;\r\n  value: number = 0;\r\n\r\n  public constructor(incomingBytes: Uint8Array, startingIndex: number) {\r\n    this.fileBytes = incomingBytes;\r\n    this.startIndex = startingIndex;\r\n\r\n    let i = 0;\r\n\r\n    while (this.fileBytes[this.startIndex + i] >= 128 && this.startIndex + i < incomingBytes.length) {\r\n      i++;\r\n    }\r\n\r\n    this.byteLength = i + 1;\r\n\r\n    this.value = this.fileBytes[this.startIndex + i];\r\n\r\n    while (i > 0) {\r\n      this.value *= 128;\r\n      this.value += this.fileBytes[this.startIndex + i - 1] - 128;\r\n      i--;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport Varint from \"./Varint\";\r\n\r\nexport default class LevelKeyValue {\r\n  fileBytes: Uint8Array | undefined;\r\n  startIndex: number | undefined;\r\n\r\n  unsharedKeyBytes: Uint8Array | undefined;\r\n  keyDelta: string | undefined;\r\n  value: Uint8Array | undefined;\r\n  sharedKey: string | undefined;\r\n  sharedByteLength: number | undefined;\r\n  length: number | undefined;\r\n  previousKey: LevelKeyValue | undefined;\r\n  keyCached: string | undefined;\r\n  fullBytesCached: Uint8Array | undefined;\r\n\r\n  public get unsharedKey(): string | undefined {\r\n    if (this.unsharedKeyBytes === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const dv = new DataView(\r\n      this.unsharedKeyBytes.buffer,\r\n      this.unsharedKeyBytes.byteOffset,\r\n      this.unsharedKeyBytes.byteLength\r\n    );\r\n\r\n    return Utilities.getAsciiString(dv, 0, dv.byteLength);\r\n  }\r\n\r\n  public get key(): string {\r\n    if (this.keyCached) {\r\n      return this.keyCached;\r\n    }\r\n\r\n    const previous = this.previousKey;\r\n    let key = \"\";\r\n\r\n    if (previous !== undefined) {\r\n      key = previous.key.substring(0, this.sharedByteLength);\r\n    }\r\n\r\n    const ukey = this.unsharedKey;\r\n\r\n    if (ukey !== undefined) {\r\n      key += ukey;\r\n    }\r\n\r\n    this.keyCached = key;\r\n\r\n    return key;\r\n  }\r\n\r\n  public get keyBytes(): Uint8Array | undefined {\r\n    if (!this.unsharedKeyBytes) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.fullBytesCached) {\r\n      return this.fullBytesCached;\r\n    }\r\n\r\n    if (this.sharedByteLength === undefined || this.sharedByteLength === 0) {\r\n      return this.unsharedKeyBytes;\r\n    }\r\n\r\n    if (this.previousKey === undefined) {\r\n      throw new Error(\"Unexpected shared key without a previous\");\r\n    }\r\n\r\n    const previousBytes = this.previousKey.keyBytes;\r\n\r\n    if (previousBytes === undefined) {\r\n      throw new Error(\"Unexpected shared key without previous bytes\");\r\n    }\r\n\r\n    const bytes = new Uint8Array(this.sharedByteLength + this.unsharedKeyBytes.length);\r\n    const i = this.sharedByteLength;\r\n\r\n    for (let j = 0; j < i; j++) {\r\n      bytes[j] = previousBytes[j];\r\n    }\r\n\r\n    for (let j = 0; j < this.unsharedKeyBytes.length; j++) {\r\n      bytes[j + i] = this.unsharedKeyBytes[j];\r\n    }\r\n\r\n    this.fullBytesCached = bytes;\r\n\r\n    return bytes;\r\n  }\r\n\r\n  public get isRestart() {\r\n    return this.sharedByteLength === 0;\r\n  }\r\n\r\n  /**\r\n   * Clears the value data to free up memory. Call this after the value has been\r\n   * processed and is no longer needed. The key information is preserved.\r\n   */\r\n  public clearValueData() {\r\n    this.value = undefined;\r\n    this.fileBytes = undefined;\r\n  }\r\n\r\n  /**\r\n   * Clears all data including key bytes to maximize memory savings.\r\n   * Only call this when the LevelKeyValue is no longer needed.\r\n   */\r\n  public clearAllData() {\r\n    this.value = undefined;\r\n    this.fileBytes = undefined;\r\n    this.unsharedKeyBytes = undefined;\r\n    this.fullBytesCached = undefined;\r\n    this.previousKey = undefined;\r\n  }\r\n\r\n  public loadFromLdb(incomingBytes: Uint8Array, startingIndex: number, prevKey: LevelKeyValue | undefined) {\r\n    this.fileBytes = incomingBytes;\r\n    this.startIndex = startingIndex;\r\n\r\n    let i = 0;\r\n\r\n    const sharedBytes = new Varint(this.fileBytes, this.startIndex);\r\n    this.sharedByteLength = sharedBytes.value;\r\n    i += sharedBytes.byteLength;\r\n\r\n    if (this.sharedByteLength > 0) {\r\n      this.previousKey = prevKey;\r\n    }\r\n\r\n    const unsharedBytes = new Varint(this.fileBytes, this.startIndex + i);\r\n    i += unsharedBytes.byteLength;\r\n\r\n    const valueLength = new Varint(this.fileBytes, this.startIndex + i);\r\n    i += valueLength.byteLength;\r\n\r\n    // mystery: why is unsharedKeyBytes 8 bytes longer than what we are expecting for keys?\r\n    this.unsharedKeyBytes = incomingBytes.subarray(startingIndex + i, startingIndex + i + unsharedBytes.value - 8);\r\n\r\n    /*const extraBytes = incomingBytes.subarray(\r\n      startingIndex + i + unsharedBytes.value - 8,\r\n      startingIndex + i + unsharedBytes.value\r\n    ); */\r\n\r\n    i += unsharedBytes.value;\r\n\r\n    this.value = incomingBytes.subarray(startingIndex + i, startingIndex + i + valueLength.value);\r\n    i += valueLength.value;\r\n\r\n    /*    this.restarts = [];\r\n\r\n    for (let j = 0; j < restartsToRead; j++) {\r\n      const offset = startingIndex + i + j * 4;\r\n      this.restarts.push(\r\n        DataUtilities.getUnsignedInteger(\r\n          incomingBytes[offset],\r\n          incomingBytes[offset + 1],\r\n          incomingBytes[offset + 2],\r\n          incomingBytes[offset + 3],\r\n          true\r\n        )\r\n      );\r\n    }\r\n    const offset = startingIndex + i + restartsToRead * 4;\r\n\r\n    const numRestarts = DataUtilities.getUnsignedInteger(\r\n      incomingBytes[offset],\r\n      incomingBytes[offset + 1],\r\n      incomingBytes[offset + 2],\r\n      incomingBytes[offset + 3],\r\n      false\r\n    );\r\n\r\n    if (numRestarts != restartsToRead) {\r\n      throw new Error(\"Unexpected restart mismatch\");\r\n    }*/\r\n\r\n    this.length = i;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport ILevelDbFileInfo from \"./ILevelDbFileInfo\";\r\n\r\n/**\r\n * Represents metadata about a single LDB file's index without loading full data.\r\n * Used for lazy-loading to determine which files might contain a requested key.\r\n */\r\nexport interface ILevelDbFileIndex {\r\n  /** The file info including level and index */\r\n  fileInfo: ILevelDbFileInfo;\r\n\r\n  /** Smallest key in this file (from manifest) */\r\n  smallestKey?: string;\r\n\r\n  /** Largest key in this file (from manifest) */\r\n  largestKey?: string;\r\n\r\n  /** Whether this file has been fully loaded */\r\n  isLoaded: boolean;\r\n\r\n  /** Priority for loading (higher level files have lower priority) */\r\n  priority: number;\r\n}\r\n\r\n/**\r\n * Represents metadata about a LOG file for lazy loading.\r\n * LOG files contain the most recent writes and take priority.\r\n */\r\nexport interface ILevelDbLogIndex {\r\n  /** The log file */\r\n  file: IFile;\r\n\r\n  /** File name/index for sorting */\r\n  name: string;\r\n\r\n  /** Whether this file has been loaded */\r\n  isLoaded: boolean;\r\n}\r\n\r\n/**\r\n * Represents a key location for on-demand loading.\r\n * Tracks where a key can be found without loading its data.\r\n */\r\nexport interface IKeyLocation {\r\n  /** The file containing this key (LDB or LOG) */\r\n  file: IFile;\r\n\r\n  /** Whether this is from a LOG file (higher priority) */\r\n  isLogFile: boolean;\r\n\r\n  /** The file level (for LDB files, lower = newer) */\r\n  fileLevel: number;\r\n\r\n  /** The file index */\r\n  fileIndex: number;\r\n}\r\n\r\n/**\r\n * LevelDbIndex manages metadata about LevelDB files to enable lazy loading.\r\n *\r\n * Instead of loading all files upfront, this class:\r\n * 1. Parses the MANIFEST to understand file metadata\r\n * 2. Tracks key ranges per file for efficient lookup\r\n * 3. Enables on-demand loading of specific files when keys are requested\r\n *\r\n * This dramatically reduces initial memory usage for large worlds.\r\n */\r\nexport default class LevelDbIndex {\r\n  /** Indexed LDB files with metadata */\r\n  ldbFileIndexes: ILevelDbFileIndex[] = [];\r\n\r\n  /** Indexed LOG files with metadata */\r\n  logFileIndexes: ILevelDbLogIndex[] = [];\r\n\r\n  /** Map of file index to file info for quick lookup */\r\n  filesByIndex: Map<number, ILevelDbFileIndex> = new Map();\r\n\r\n  /** Deleted file numbers from manifest */\r\n  deletedFileNumbers: Set<number> = new Set();\r\n\r\n  /** Total number of files in the index */\r\n  get totalFiles(): number {\r\n    return this.ldbFileIndexes.length + this.logFileIndexes.length;\r\n  }\r\n\r\n  /** Number of files that have been loaded */\r\n  get loadedFileCount(): number {\r\n    let count = 0;\r\n    for (const idx of this.ldbFileIndexes) {\r\n      if (idx.isLoaded) count++;\r\n    }\r\n    for (const idx of this.logFileIndexes) {\r\n      if (idx.isLoaded) count++;\r\n    }\r\n    return count;\r\n  }\r\n\r\n  /**\r\n   * Initialize the index from manifest metadata.\r\n   * This does NOT load any file contents - just organizes metadata.\r\n   */\r\n  initFromManifest(\r\n    ldbFiles: IFile[],\r\n    logFiles: IFile[],\r\n    newFileLevel?: number[],\r\n    newFileNumber?: number[],\r\n    newFileSmallest?: string[],\r\n    newFileLargest?: string[],\r\n    deletedFileNumber?: number[]\r\n  ): void {\r\n    // Track deleted files\r\n    this.deletedFileNumbers.clear();\r\n    if (deletedFileNumber) {\r\n      for (const num of deletedFileNumber) {\r\n        this.deletedFileNumbers.add(num);\r\n      }\r\n    }\r\n\r\n    // Index LDB files\r\n    this.ldbFileIndexes = [];\r\n    this.filesByIndex.clear();\r\n\r\n    for (const file of ldbFiles) {\r\n      try {\r\n        const index = parseInt(file.name);\r\n\r\n        // Skip deleted files\r\n        if (this.deletedFileNumbers.has(index)) {\r\n          continue;\r\n        }\r\n\r\n        // Find level and key range from manifest\r\n        let level = 0;\r\n        let smallest: string | undefined;\r\n        let largest: string | undefined;\r\n\r\n        if (newFileLevel && newFileNumber) {\r\n          for (let j = 0; j < newFileNumber.length; j++) {\r\n            if (newFileNumber[j] === index) {\r\n              level = newFileLevel[j];\r\n              if (newFileSmallest) smallest = newFileSmallest[j];\r\n              if (newFileLargest) largest = newFileLargest[j];\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        const fileIndex: ILevelDbFileIndex = {\r\n          fileInfo: {\r\n            index: index,\r\n            file: file,\r\n            isDeleted: false,\r\n            level: level,\r\n          },\r\n          smallestKey: smallest,\r\n          largestKey: largest,\r\n          isLoaded: false,\r\n          // Higher level = lower priority (older data, less likely to be superceded)\r\n          priority: 1000 - level,\r\n        };\r\n\r\n        this.ldbFileIndexes.push(fileIndex);\r\n        this.filesByIndex.set(index, fileIndex);\r\n      } catch (e) {\r\n        // Skip files that don't have numeric names\r\n      }\r\n    }\r\n\r\n    // Sort LDB files by level (descending) then index (ascending)\r\n    // This ensures we process files in the correct order for supercession\r\n    this.ldbFileIndexes.sort((a, b) => {\r\n      if (a.fileInfo.level === b.fileInfo.level) {\r\n        return a.fileInfo.index - b.fileInfo.index;\r\n      }\r\n      return b.fileInfo.level - a.fileInfo.level;\r\n    });\r\n\r\n    // Index LOG files\r\n    this.logFileIndexes = [];\r\n    for (const file of logFiles) {\r\n      this.logFileIndexes.push({\r\n        file: file,\r\n        name: file.name,\r\n        isLoaded: false,\r\n      });\r\n    }\r\n\r\n    // Sort LOG files by name (ascending) - later files supercede earlier\r\n    this.logFileIndexes.sort((a, b) => a.name.localeCompare(b.name));\r\n  }\r\n\r\n  /**\r\n   * Find files that might contain a specific key based on key range metadata.\r\n   * Returns files in priority order (LOG files first, then LDB by level).\r\n   *\r\n   * Note: This is a heuristic - if key ranges aren't available from manifest,\r\n   * all files are considered potential matches.\r\n   */\r\n  findPotentialFilesForKey(key: string): Array<ILevelDbFileIndex | ILevelDbLogIndex> {\r\n    const result: Array<ILevelDbFileIndex | ILevelDbLogIndex> = [];\r\n\r\n    // LOG files always have priority (most recent writes)\r\n    // We need to check all LOG files since they don't have key range metadata\r\n    for (const logIdx of this.logFileIndexes) {\r\n      result.push(logIdx);\r\n    }\r\n\r\n    // Filter LDB files by key range if available\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      const hasRange = ldbIdx.smallestKey !== undefined && ldbIdx.largestKey !== undefined;\r\n\r\n      if (hasRange) {\r\n        // Check if key falls within the file's key range\r\n        if (key >= ldbIdx.smallestKey! && key <= ldbIdx.largestKey!) {\r\n          result.push(ldbIdx);\r\n        }\r\n      } else {\r\n        // No range metadata - must check this file\r\n        result.push(ldbIdx);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Get files that should be loaded for initial chunk enumeration.\r\n   * This returns a subset of files that contain chunk metadata keys\r\n   * (keys that are 9-14 bytes, which identify chunk coordinates).\r\n   *\r\n   * Returns files in the order they should be processed for correct supercession.\r\n   */\r\n  getFilesForChunkEnumeration(): Array<ILevelDbFileIndex | ILevelDbLogIndex> {\r\n    // For initial enumeration, we need all files in the correct order\r\n    // LDB files first (sorted by level desc, index asc), then LOG files\r\n    const result: Array<ILevelDbFileIndex | ILevelDbLogIndex> = [];\r\n\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      result.push(ldbIdx);\r\n    }\r\n\r\n    for (const logIdx of this.logFileIndexes) {\r\n      result.push(logIdx);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Mark a file as loaded.\r\n   */\r\n  markFileLoaded(file: IFile): void {\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      if (ldbIdx.fileInfo.file === file) {\r\n        ldbIdx.isLoaded = true;\r\n        return;\r\n      }\r\n    }\r\n\r\n    for (const logIdx of this.logFileIndexes) {\r\n      if (logIdx.file === file) {\r\n        logIdx.isLoaded = true;\r\n        return;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if all files have been loaded.\r\n   */\r\n  isFullyLoaded(): boolean {\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      if (!ldbIdx.isLoaded) return false;\r\n    }\r\n    for (const logIdx of this.logFileIndexes) {\r\n      if (!logIdx.isLoaded) return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Get unloaded files in priority order for background loading.\r\n   */\r\n  getUnloadedFiles(): Array<ILevelDbFileIndex | ILevelDbLogIndex> {\r\n    const result: Array<ILevelDbFileIndex | ILevelDbLogIndex> = [];\r\n\r\n    // LDB files in priority order\r\n    for (const ldbIdx of this.ldbFileIndexes) {\r\n      if (!ldbIdx.isLoaded) {\r\n        result.push(ldbIdx);\r\n      }\r\n    }\r\n\r\n    // LOG files (highest priority for supercession)\r\n    for (const logIdx of this.logFileIndexes) {\r\n      if (!logIdx.isLoaded) {\r\n        result.push(logIdx);\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport * as pako from \"pako\";\r\nimport Log from \"../core/Log\";\r\nimport LevelKeyValue from \"./LevelKeyValue\";\r\nimport Varint from \"./Varint\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport ILevelDbFileInfo from \"./ILevelDbFileInfo\";\r\nimport LevelDbIndex, { ILevelDbFileIndex, ILevelDbLogIndex } from \"./LevelDbIndex\";\r\n\r\n/**\r\n * Options for initializing LevelDb.\r\n */\r\nexport interface ILevelDbInitOptions {\r\n  /** Whether to unload file content after parsing (default: true for lazy mode) */\r\n  unloadFilesAfterParse?: boolean;\r\n\r\n  /**\r\n   * Use lazy loading mode - only load manifest initially, load files on-demand.\r\n   * This dramatically reduces initial memory usage for large worlds.\r\n   * Default: false (full load for backwards compatibility)\r\n   */\r\n  lazyLoad?: boolean;\r\n\r\n  /**\r\n   * Maximum number of keys to keep in memory when using lazy mode.\r\n   * Older keys will be evicted when this limit is reached.\r\n   * Default: 50000\r\n   */\r\n  maxKeysInMemory?: number;\r\n\r\n  /**\r\n   * Progress callback for loading operations.\r\n   */\r\n  progressCallback?: (phase: string, current: number, total: number) => void;\r\n}\r\n\r\n/**\r\n * Represents chunk coordinates extracted from LevelDB keys.\r\n * Used for incremental chunk updates when new LDB files are detected.\r\n */\r\nexport interface IChunkCoordinate {\r\n  x: number;\r\n  z: number;\r\n  dimension: number;\r\n}\r\n\r\nexport default class LevelDb implements IErrorable {\r\n  ldbFiles: IFile[];\r\n  logFiles: IFile[];\r\n  manifestFiles: IFile[];\r\n  keys: Map<string, LevelKeyValue | false | undefined> = new Map();\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  comparator?: string;\r\n  logNumber?: number;\r\n  previousLogNumber?: number;\r\n  nextFileNumber?: number;\r\n  lastSequence?: number;\r\n  compactPointerLevels?: number[];\r\n  compactPointerStrings?: string[];\r\n  deletedFileLevel?: number[];\r\n  deletedFileNumber?: number[];\r\n  newFileLevel?: number[];\r\n  newFileNumber?: number[];\r\n  newFileSize?: number[];\r\n  newFileSmallest?: string[];\r\n  newFileLargest?: string[];\r\n\r\n  context?: string;\r\n\r\n  /** Index for lazy loading - tracks file metadata without loading content */\r\n  private _index?: LevelDbIndex;\r\n\r\n  /** Whether lazy loading mode is enabled */\r\n  private _isLazyMode = false;\r\n\r\n  /** Maximum keys to keep in memory during lazy mode */\r\n  private _maxKeysInMemory = 50000;\r\n\r\n  /** LRU tracking for key eviction in lazy mode */\r\n  private _keyAccessOrder: string[] = [];\r\n\r\n  /** Set of keys that have been loaded but may be evicted */\r\n  private _loadedKeys: Set<string> = new Set();\r\n\r\n  /** Whether initial metadata has been loaded */\r\n  private _isInitialized = false;\r\n\r\n  /** Get whether lazy loading mode is enabled */\r\n  get isLazyMode(): boolean {\r\n    return this._isLazyMode;\r\n  }\r\n\r\n  /** Get the file index for lazy loading */\r\n  get index(): LevelDbIndex | undefined {\r\n    return this._index;\r\n  }\r\n\r\n  /** Get the number of keys currently in memory */\r\n  get keysInMemoryCount(): number {\r\n    return this.keys.size;\r\n  }\r\n\r\n  public constructor(ldbFileArr: IFile[], logFileArr: IFile[], manifestFilesArr: IFile[], context?: string) {\r\n    this.ldbFiles = ldbFileArr;\r\n    this.logFiles = logFileArr;\r\n    this.manifestFiles = manifestFilesArr;\r\n    this.context = context;\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    let contextOut = undefined;\r\n\r\n    if (contextIn) {\r\n      contextOut = this.context ? this.context + \"-\" + contextIn : contextIn;\r\n    } else {\r\n      contextOut = this.context;\r\n    }\r\n\r\n    Log.error(message + (contextOut ? \" \" + contextOut : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextOut,\r\n    });\r\n\r\n    return message;\r\n  }\r\n\r\n  public async init(log?: (message: string) => Promise<void>, options?: { unloadFilesAfterParse?: boolean }) {\r\n    this.keys = new Map<string, LevelKeyValue | false | undefined>();\r\n    this.isInErrorState = false;\r\n    this.errorMessages = undefined;\r\n\r\n    const unloadAfterParse = options?.unloadFilesAfterParse ?? false;\r\n\r\n    for (let i = 0; i < this.manifestFiles.length; i++) {\r\n      await this.manifestFiles[i].loadContent(false);\r\n\r\n      const content = this.manifestFiles[i].content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseManifestContent(content, this.manifestFiles[i].storageRelativePath);\r\n        if (log) {\r\n          await log(\"Loaded map manifest file '\" + this.manifestFiles[i].fullPath + \"'.\");\r\n        }\r\n      }\r\n\r\n      // Unload file content to free memory after parsing\r\n      if (unloadAfterParse) {\r\n        this.manifestFiles[i].unload();\r\n      }\r\n    }\r\n\r\n    const ldbFileInfos: ILevelDbFileInfo[] = [];\r\n\r\n    for (let i = 0; i < this.ldbFiles.length; i++) {\r\n      const file = this.ldbFiles[i];\r\n\r\n      try {\r\n        const index = parseInt(file.name);\r\n\r\n        //        if (true) {\r\n        if (!this.deletedFileNumber || !this.deletedFileNumber.includes(index)) {\r\n          let level = 0;\r\n\r\n          if (this.newFileLevel && this.newFileNumber) {\r\n            Log.assert(this.newFileLevel.length === this.newFileNumber.length);\r\n\r\n            if (this.newFileLevel.length === this.newFileNumber.length) {\r\n              for (let j = 0; j < this.newFileNumber.length; j++) {\r\n                if (this.newFileNumber[j] === index) {\r\n                  level = this.newFileLevel[j];\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          ldbFileInfos.push({\r\n            index: index,\r\n            file: file,\r\n            isDeleted: false,\r\n            level: level,\r\n          });\r\n        }\r\n      } catch (e: any) {\r\n        this._pushError(\"Error including LDB file: \" + file.fullPath + \" Error: \" + e.toString());\r\n      }\r\n    }\r\n\r\n    const ldbFileInfoSorted = ldbFileInfos.sort((fileA: ILevelDbFileInfo, fileB: ILevelDbFileInfo) => {\r\n      if (fileA.level === fileB.level) {\r\n        return fileA.index - fileB.index;\r\n      }\r\n\r\n      return fileB.level - fileA.level;\r\n    });\r\n\r\n    // Yield every N files to allow garbage collection and prevent memory pressure\r\n    const yieldInterval = 10;\r\n\r\n    for (let i = 0; i < ldbFileInfoSorted.length; i++) {\r\n      const ldbFile = ldbFileInfoSorted[i].file;\r\n\r\n      if (!ldbFile.isContentLoaded) {\r\n        await ldbFile.loadContent(false);\r\n      }\r\n\r\n      const content = ldbFile.content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        const kp = this.parseLdbContent(content, ldbFile.storageRelativePath);\r\n        if (log) {\r\n          await log(\"Loaded map record file '\" + ldbFile.fullPath + \"'. Records: \" + kp);\r\n        }\r\n      }\r\n\r\n      // Unload file content to free memory after parsing\r\n      if (unloadAfterParse) {\r\n        ldbFile.unload();\r\n      }\r\n\r\n      // Periodically yield to the event loop to allow garbage collection\r\n      // This helps prevent out-of-memory errors when loading large worlds\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n\r\n    const logFilesSorted = this.logFiles.sort((fileA: IFile, fileB: IFile) => {\r\n      return fileA.name.localeCompare(fileB.name);\r\n    });\r\n\r\n    for (let i = 0; i < logFilesSorted.length; i++) {\r\n      await logFilesSorted[i].loadContent(false);\r\n\r\n      const content = logFilesSorted[i].content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        const kp = this.parseLogContent(content, logFilesSorted[i].storageRelativePath);\r\n        if (log) {\r\n          await log(\"Loaded map latest-updates file '\" + logFilesSorted[i].fullPath + \"'. Records: \" + kp);\r\n        }\r\n      }\r\n\r\n      // Unload file content to free memory after parsing\r\n      if (unloadAfterParse) {\r\n        logFilesSorted[i].unload();\r\n      }\r\n\r\n      // Periodically yield to allow garbage collection\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Initialize in lazy loading mode - only loads manifest metadata.\r\n   * Files are loaded on-demand when keys are requested.\r\n   *\r\n   * This dramatically reduces initial memory usage for large worlds.\r\n   * Call loadAllFiles() to fully load everything, or use getKey() for on-demand loading.\r\n   */\r\n  public async initLazy(options?: ILevelDbInitOptions): Promise<void> {\r\n    this.keys = new Map<string, LevelKeyValue | false | undefined>();\r\n    this.isInErrorState = false;\r\n    this.errorMessages = undefined;\r\n    this._isLazyMode = true;\r\n    this._maxKeysInMemory = options?.maxKeysInMemory ?? 50000;\r\n    this._keyAccessOrder = [];\r\n    this._loadedKeys = new Set();\r\n\r\n    // Load manifest to get file metadata\r\n    for (let i = 0; i < this.manifestFiles.length; i++) {\r\n      await this.manifestFiles[i].loadContent(false);\r\n\r\n      const content = this.manifestFiles[i].content;\r\n\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseManifestContent(content, this.manifestFiles[i].storageRelativePath);\r\n      }\r\n\r\n      // Unload manifest content - we've extracted the metadata\r\n      this.manifestFiles[i].unload();\r\n    }\r\n\r\n    // Build the index from manifest metadata\r\n    this._index = new LevelDbIndex();\r\n    this._index.initFromManifest(\r\n      this.ldbFiles,\r\n      this.logFiles,\r\n      this.newFileLevel,\r\n      this.newFileNumber,\r\n      this.newFileSmallest,\r\n      this.newFileLargest,\r\n      this.deletedFileNumber\r\n    );\r\n\r\n    this._isInitialized = true;\r\n  }\r\n\r\n  /**\r\n   * Load all files in lazy mode. This is useful after initLazy() when you want\r\n   * to fully populate all keys (e.g., for world enumeration).\r\n   *\r\n   * @param options Options for loading\r\n   * @returns The number of keys loaded\r\n   */\r\n  public async loadAllFiles(options?: {\r\n    progressCallback?: (phase: string, current: number, total: number) => void;\r\n    unloadFilesAfterParse?: boolean;\r\n  }): Promise<number> {\r\n    if (!this._isInitialized || !this._index) {\r\n      throw new Error(\"LevelDb must be initialized before loading files\");\r\n    }\r\n\r\n    const unloadAfterParse = options?.unloadFilesAfterParse ?? true;\r\n    const yieldInterval = 10;\r\n    let filesProcessed = 0;\r\n    const totalFiles = this._index.totalFiles;\r\n\r\n    // Load LDB files in order (sorted by level for correct supercession)\r\n    for (let i = 0; i < this._index.ldbFileIndexes.length; i++) {\r\n      const fileIdx = this._index.ldbFileIndexes[i];\r\n      const file = fileIdx.fileInfo.file;\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const content = file.content;\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseLdbContent(content, file.storageRelativePath);\r\n      }\r\n\r\n      fileIdx.isLoaded = true;\r\n\r\n      if (unloadAfterParse) {\r\n        file.unload();\r\n      }\r\n\r\n      filesProcessed++;\r\n      if (options?.progressCallback && filesProcessed % 5 === 0) {\r\n        options.progressCallback(\"Summarizing all world files\", filesProcessed, totalFiles);\r\n      }\r\n\r\n      // Yield periodically for GC\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n\r\n    // Load LOG files in order (sorted by name for correct supercession)\r\n    for (let i = 0; i < this._index.logFileIndexes.length; i++) {\r\n      const fileIdx = this._index.logFileIndexes[i];\r\n      const file = fileIdx.file;\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const content = file.content;\r\n      if (content instanceof Uint8Array && content.length > 0) {\r\n        this.parseLogContent(content, file.storageRelativePath);\r\n      }\r\n\r\n      fileIdx.isLoaded = true;\r\n\r\n      if (unloadAfterParse) {\r\n        file.unload();\r\n      }\r\n\r\n      filesProcessed++;\r\n      if (options?.progressCallback) {\r\n        options.progressCallback(\"Loading LOG files\", filesProcessed, totalFiles);\r\n      }\r\n\r\n      // Yield periodically for GC\r\n      if (i % yieldInterval === 0 && i > 0) {\r\n        await new Promise((resolve) => setTimeout(resolve, 0));\r\n      }\r\n    }\r\n\r\n    return this.keys.size;\r\n  }\r\n\r\n  /**\r\n   * Load a specific file's keys into memory.\r\n   * Used for on-demand loading in lazy mode.\r\n   */\r\n  public async loadFile(fileIndex: ILevelDbFileIndex | ILevelDbLogIndex): Promise<number> {\r\n    const isLogFile = \"name\" in fileIndex; // ILevelDbLogIndex has 'name', ILevelDbFileIndex doesn't\r\n    const file = isLogFile ? (fileIndex as ILevelDbLogIndex).file : (fileIndex as ILevelDbFileIndex).fileInfo.file;\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent(false);\r\n    }\r\n\r\n    const content = file.content;\r\n    let keysParsed = 0;\r\n\r\n    if (content instanceof Uint8Array && content.length > 0) {\r\n      if (isLogFile) {\r\n        keysParsed = this.parseLogContent(content, file.storageRelativePath) || 0;\r\n      } else {\r\n        keysParsed = this.parseLdbContent(content, file.storageRelativePath) || 0;\r\n      }\r\n    }\r\n\r\n    fileIndex.isLoaded = true;\r\n    file.unload(); // Always unload in lazy mode\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  // Track the last parsed size for each log file to enable incremental parsing\r\n  private _logFileParsedSizes: Map<string, number> = new Map();\r\n\r\n  /**\r\n   * Parse a new or modified LDB/LOG file and return the chunk coordinates affected.\r\n   * This is used for incremental updates when the file system detects new files.\r\n   *\r\n   * @param file The LDB or LOG file to parse\r\n   * @returns Array of unique chunk coordinates affected by keys in this file\r\n   */\r\n  public async parseIncrementalFile(file: IFile): Promise<IChunkCoordinate[]> {\r\n    const affectedChunks: IChunkCoordinate[] = [];\r\n    const seenChunks = new Set<string>();\r\n\r\n    // For incremental updates, always force reload the file content\r\n    // The file may have been updated (especially .log files which are append-only)\r\n    if (file.isContentLoaded) {\r\n      file.unload();\r\n    }\r\n    await file.loadContent(false);\r\n\r\n    const content = file.content;\r\n    if (!(content instanceof Uint8Array) || content.length === 0) {\r\n      return affectedChunks;\r\n    }\r\n\r\n    const isLogFile = file.name.toLowerCase().endsWith(\".log\");\r\n    const filePath = file.storageRelativePath || file.fullPath;\r\n\r\n    // For log files, check if the file has grown since last parse\r\n    const previousSize = this._logFileParsedSizes.get(filePath) || 0;\r\n    const currentSize = content.length;\r\n\r\n    if (isLogFile && currentSize <= previousSize) {\r\n      // File hasn't grown, no new data\r\n      file.unload();\r\n      return affectedChunks;\r\n    }\r\n\r\n    // Track keys before parsing\r\n    const keysBefore = new Map<string, LevelKeyValue | false | undefined>();\r\n    for (const [key, val] of this.keys) {\r\n      keysBefore.set(key, val);\r\n    }\r\n\r\n    // Parse the file\r\n    if (isLogFile) {\r\n      // For log files, parse and extract chunks from ALL keys in the file that are chunk-related\r\n      // This is because log files are append-only and we need to catch any chunk updates\r\n      this.parseLogContent(content, file.storageRelativePath);\r\n      this._logFileParsedSizes.set(filePath, currentSize);\r\n\r\n      // For log files that have grown, find all keys that now have different values\r\n      // (parseLogContent creates new LevelKeyValue objects, so any updated key will have a different reference)\r\n      for (const [keyname, keyValue] of this.keys) {\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n\r\n        const prevValue = keysBefore.get(keyname);\r\n\r\n        // Skip if key existed with same object reference (wasn't updated)\r\n        if (prevValue === keyValue) {\r\n          continue;\r\n        }\r\n\r\n        // This is either a new key or an updated key (different object reference)\r\n        // Extract chunk coordinates\r\n        this._extractChunkFromKey(keyname, seenChunks, affectedChunks);\r\n      }\r\n    } else {\r\n      // For LDB files, use the original approach of tracking new/updated keys\r\n      this.parseLdbContent(content, file.storageRelativePath);\r\n\r\n      // Find new/updated keys and extract chunk coordinates\r\n      for (const [keyname, keyValue] of this.keys) {\r\n        if (!keyValue) continue;\r\n\r\n        const prevValue = keysBefore.get(keyname);\r\n        if (prevValue === keyValue) continue; // Same object reference = no change\r\n\r\n        this._extractChunkFromKey(keyname, seenChunks, affectedChunks);\r\n      }\r\n    }\r\n\r\n    // Unload file content to free memory\r\n    file.unload();\r\n\r\n    // Add file to our tracking arrays if not already present\r\n    if (isLogFile && !this.logFiles.includes(file)) {\r\n      this.logFiles.push(file);\r\n    } else if (!isLogFile && !this.ldbFiles.includes(file)) {\r\n      this.ldbFiles.push(file);\r\n    }\r\n\r\n    return affectedChunks;\r\n  }\r\n\r\n  /**\r\n   * Extract chunk coordinates from a key name if it represents chunk data.\r\n   */\r\n  private _extractChunkFromKey(keyname: string, seenChunks: Set<string>, affectedChunks: IChunkCoordinate[]): boolean {\r\n    // Extract chunk coordinates from key (9-14 byte keys encode chunk data)\r\n    if (keyname.length < 9 || keyname.length > 14) {\r\n      return false;\r\n    }\r\n\r\n    // Skip named keys\r\n    if (\r\n      keyname.startsWith(\"AutonomousEntities\") ||\r\n      keyname.startsWith(\"schedulerWT\") ||\r\n      keyname.startsWith(\"Overworld\") ||\r\n      keyname.startsWith(\"BiomeData\") ||\r\n      keyname.startsWith(\"digp\") ||\r\n      keyname.startsWith(\"actorprefix\") ||\r\n      keyname.startsWith(\"player\") ||\r\n      keyname.startsWith(\"portals\")\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    const hasDimensionParam = keyname.length >= 13;\r\n\r\n    const x = DataUtilities.getSignedInteger(\r\n      keyname.charCodeAt(0),\r\n      keyname.charCodeAt(1),\r\n      keyname.charCodeAt(2),\r\n      keyname.charCodeAt(3),\r\n      true\r\n    );\r\n    const z = DataUtilities.getSignedInteger(\r\n      keyname.charCodeAt(4),\r\n      keyname.charCodeAt(5),\r\n      keyname.charCodeAt(6),\r\n      keyname.charCodeAt(7),\r\n      true\r\n    );\r\n    let dim = 0;\r\n\r\n    if (hasDimensionParam) {\r\n      dim = DataUtilities.getSignedInteger(\r\n        keyname.charCodeAt(8),\r\n        keyname.charCodeAt(9),\r\n        keyname.charCodeAt(10),\r\n        keyname.charCodeAt(11),\r\n        true\r\n      );\r\n\r\n      if (dim < 0 || dim > 2) {\r\n        return false; // Invalid dimension\r\n      }\r\n    }\r\n\r\n    // Track unique chunks\r\n    const chunkKey = `${dim}_${x}_${z}`;\r\n    if (!seenChunks.has(chunkKey)) {\r\n      seenChunks.add(chunkKey);\r\n      affectedChunks.push({ x, z, dimension: dim });\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Evict old keys to stay under the memory limit.\r\n   * Uses LRU (least recently used) eviction.\r\n   */\r\n  private _evictKeysIfNeeded(): void {\r\n    if (!this._isLazyMode || this.keys.size <= this._maxKeysInMemory) {\r\n      return;\r\n    }\r\n\r\n    // Evict oldest keys until we're under the limit\r\n    const keysToEvict = this.keys.size - Math.floor(this._maxKeysInMemory * 0.8); // Evict to 80%\r\n\r\n    for (let i = 0; i < keysToEvict && this._keyAccessOrder.length > 0; i++) {\r\n      const oldestKey = this._keyAccessOrder.shift();\r\n      if (oldestKey && this._loadedKeys.has(oldestKey)) {\r\n        const keyValue = this.keys.get(oldestKey);\r\n        // keyValue can be LevelKeyValue, false, or undefined\r\n        if (keyValue && typeof keyValue !== \"boolean\") {\r\n          keyValue.clearAllData();\r\n        }\r\n        this.keys.delete(oldestKey);\r\n        this._loadedKeys.delete(oldestKey);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Track key access for LRU eviction.\r\n   */\r\n  private _trackKeyAccess(key: string): void {\r\n    if (!this._isLazyMode) return;\r\n\r\n    // Remove from old position if it exists\r\n    const existingIndex = this._keyAccessOrder.indexOf(key);\r\n    if (existingIndex >= 0) {\r\n      this._keyAccessOrder.splice(existingIndex, 1);\r\n    }\r\n\r\n    // Add to end (most recently used)\r\n    this._keyAccessOrder.push(key);\r\n    this._loadedKeys.add(key);\r\n\r\n    // Periodically evict old keys\r\n    if (this.keys.size > this._maxKeysInMemory) {\r\n      this._evictKeysIfNeeded();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get a key's value, loading the containing file if necessary (lazy mode).\r\n   * In non-lazy mode, this is a simple map lookup.\r\n   *\r\n   * @param key The key to retrieve\r\n   * @returns The LevelKeyValue, false (if deleted), or undefined (if not found)\r\n   */\r\n  public async getKey(key: string): Promise<LevelKeyValue | false | undefined> {\r\n    // Check if already in memory\r\n    if (this.keys.has(key)) {\r\n      this._trackKeyAccess(key);\r\n      return this.keys.get(key);\r\n    }\r\n\r\n    // In non-lazy mode, if not in keys, it doesn't exist\r\n    if (!this._isLazyMode || !this._index) {\r\n      return undefined;\r\n    }\r\n\r\n    // Lazy mode: find and load files that might contain this key\r\n    const potentialFiles = this._index.findPotentialFilesForKey(key);\r\n\r\n    for (const fileIdx of potentialFiles) {\r\n      if (!fileIdx.isLoaded) {\r\n        await this.loadFile(fileIdx);\r\n\r\n        // Check if key is now available\r\n        if (this.keys.has(key)) {\r\n          this._trackKeyAccess(key);\r\n          return this.keys.get(key);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Key not found in any file\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Clear all loaded keys and reset to just the index metadata.\r\n   * Useful for freeing memory after processing a world.\r\n   */\r\n  public clearLoadedKeys(): void {\r\n    for (const [key, value] of this.keys) {\r\n      // value can be LevelKeyValue, false, or undefined\r\n      if (value && typeof value !== \"boolean\") {\r\n        value.clearAllData();\r\n      }\r\n    }\r\n    this.keys.clear();\r\n    this._keyAccessOrder = [];\r\n    this._loadedKeys.clear();\r\n\r\n    // Reset file loaded flags so they can be reloaded on demand\r\n    if (this._index) {\r\n      for (const fileIdx of this._index.ldbFileIndexes) {\r\n        fileIdx.isLoaded = false;\r\n      }\r\n      for (const fileIdx of this._index.logFileIndexes) {\r\n        fileIdx.isLoaded = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  parseLdbContent(content: Uint8Array, context?: string) {\r\n    let keysParsed = 0;\r\n\r\n    //  Ends with magic: fixed64;\r\n    // == 0xdb4775248b80fb57 (little-endian)\r\n    if (\r\n      content.length <= 8 ||\r\n      content[content.length - 8] !== 87 ||\r\n      content[content.length - 7] !== 251 ||\r\n      content[content.length - 6] !== 128 ||\r\n      content[content.length - 5] !== 139 ||\r\n      content[content.length - 4] !== 36 ||\r\n      content[content.length - 3] !== 117 ||\r\n      content[content.length - 2] !== 71 ||\r\n      content[content.length - 1] !== 219\r\n    ) {\r\n      this._pushError(\"Unexpected bytes in LDB file. File seems unreadable.\", context);\r\n      return;\r\n    }\r\n\r\n    // https://github.com/google/leveldb/blob/main/doc/table_format.md\r\n\r\n    let index = content.length - 48;\r\n\r\n    const metaIndexOffset = new Varint(content, index);\r\n    index += metaIndexOffset.byteLength;\r\n\r\n    const metaIndexSize = new Varint(content, index);\r\n    index += metaIndexSize.byteLength;\r\n\r\n    const indexOffset = new Varint(content, index);\r\n    index += indexOffset.byteLength;\r\n\r\n    const indexSize = new Varint(content, index);\r\n    index += indexSize.byteLength;\r\n\r\n    if (indexOffset.value <= 0 || indexOffset.value + indexSize.value >= content.length) {\r\n      this._pushError(\"LDB content index offset not within bounds.\", context);\r\n      return false;\r\n    }\r\n\r\n    if (metaIndexOffset.value <= 0 || metaIndexOffset.value + metaIndexSize.value >= content.length) {\r\n      this._pushError(\"LDB meta index offset not within bounds.\", context);\r\n      return false;\r\n    }\r\n\r\n    const indexContentCompressed = content.subarray(indexOffset.value, indexOffset.value + indexSize.value);\r\n\r\n    let indexContent = undefined;\r\n\r\n    // I believe this logic replicates: https://twitter.com/_tomcc/status/894294552084860928\r\n    try {\r\n      indexContent = pako.inflate(indexContentCompressed, { raw: true });\r\n    } catch (e) {\r\n      //      Log.fail(\"Error inflating index compressed content: \" + e);\r\n    }\r\n\r\n    if (!indexContent) {\r\n      try {\r\n        indexContent = pako.inflate(indexContentCompressed);\r\n      } catch (e) {\r\n        // Log.verbose(\"Error inflating index content: \" + e + \". Further content may fail to load.\", this.context);\r\n      }\r\n    }\r\n\r\n    if (!indexContent) {\r\n      indexContent = indexContentCompressed;\r\n\r\n      // this._pushError(\"Treating level DB content as compressed.\", context);\r\n    }\r\n\r\n    if (indexContent) {\r\n      const indexKeys: { [id: string]: LevelKeyValue | undefined } = {};\r\n\r\n      if (!this.parseIndexBytes(indexContent, 0, indexContent.length, indexKeys, context)) {\r\n        return false;\r\n      }\r\n\r\n      for (const lastKeyInBlock in indexKeys) {\r\n        const indexKey = indexKeys[lastKeyInBlock];\r\n\r\n        if (indexKey && indexKey.value) {\r\n          const indexBytes = indexKey.value;\r\n          let indexByteIndex = 0;\r\n\r\n          const blockOffset = new Varint(indexBytes, indexByteIndex);\r\n          indexByteIndex += blockOffset.byteLength;\r\n\r\n          const blockSize = new Varint(indexBytes, indexByteIndex);\r\n          indexByteIndex += blockSize.byteLength;\r\n\r\n          if (blockOffset.value < 0 || blockOffset.value + blockSize.value >= content.length) {\r\n            this._pushError(\"Block offset does not appear correct\", context);\r\n            return;\r\n          }\r\n\r\n          if (indexByteIndex !== indexBytes.length) {\r\n            this._pushError(\"Index byte index is not correct\", context);\r\n            return;\r\n          }\r\n\r\n          const blockContentCompressed = content.subarray(blockOffset.value, blockOffset.value + blockSize.value);\r\n\r\n          let blockContent = undefined;\r\n\r\n          try {\r\n            blockContent = pako.inflate(blockContentCompressed, { raw: true });\r\n          } catch (e) {}\r\n\r\n          if (!blockContent) {\r\n            try {\r\n              blockContent = pako.inflate(blockContentCompressed);\r\n            } catch (e) {\r\n              // Apparently, some content is just not compressed, so failing to decompress is an acceptable state.\r\n              // Log.fail(\"Error inflating block content: \" + e);\r\n            }\r\n          }\r\n\r\n          if (!blockContent) {\r\n            blockContent = blockContentCompressed;\r\n          }\r\n\r\n          keysParsed += this.parseLdbBlockBytes(blockContent, 0, blockContent.length, context);\r\n        } else {\r\n          this._pushError(\"Could not find index key.\", context);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (keysParsed === 0) {\r\n      this._pushError(\"No keys found in LDB.\", context);\r\n    }\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  parseIndexBytes(\r\n    data: Uint8Array,\r\n    offset: number,\r\n    length: number,\r\n    indexKeys: { [id: string]: LevelKeyValue | undefined },\r\n    context?: string\r\n  ) {\r\n    let index = offset;\r\n\r\n    let lastKeyValuePair = undefined;\r\n\r\n    const restarts = DataUtilities.getUnsignedInteger(\r\n      data[length - 4],\r\n      data[length - 3],\r\n      data[length - 2],\r\n      data[length - 1],\r\n      true\r\n    );\r\n\r\n    const endRestartSize = restarts * 4 + 4;\r\n\r\n    while (index < offset + length - endRestartSize) {\r\n      const lb = new LevelKeyValue();\r\n\r\n      lb.loadFromLdb(data, index, lastKeyValuePair);\r\n\r\n      const key = lb.key;\r\n      lastKeyValuePair = lb;\r\n\r\n      if (Utilities.isUsableAsObjectKey(key)) {\r\n        indexKeys[key] = lb;\r\n      }\r\n\r\n      if (lb.length === undefined) {\r\n        this._pushError(\"Unexpected parse of level key value \" + key, context);\r\n        return false;\r\n      }\r\n\r\n      index += lb.length;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  parseLdbBlockBytes(data: Uint8Array, offset: number, length: number, context?: string) {\r\n    let index = offset;\r\n    let keysParsed = 0;\r\n    let lastKeyValuePair = undefined;\r\n\r\n    const restarts = DataUtilities.getUnsignedInteger(\r\n      data[length - 4],\r\n      data[length - 3],\r\n      data[length - 2],\r\n      data[length - 1],\r\n      true\r\n    );\r\n\r\n    const endRestartSize = restarts * 4 + 4;\r\n\r\n    if (endRestartSize > offset + length) {\r\n      this._pushError(\"Unexpected size received for LDB bytes. File could be corrupt.\", context);\r\n      return 0;\r\n    }\r\n\r\n    while (index < offset + length - endRestartSize) {\r\n      const lb = new LevelKeyValue();\r\n\r\n      lb.loadFromLdb(data, index, lastKeyValuePair);\r\n\r\n      const key = lb.key;\r\n      lastKeyValuePair = lb;\r\n\r\n      if (Utilities.isUsableAsObjectKey(key)) {\r\n        this.keys.set(key, lb);\r\n      }\r\n\r\n      if (lb.length === undefined || lb.length < 0) {\r\n        throw new Error(this._pushError(\"Unexpected parse of key \" + key, context));\r\n      }\r\n\r\n      keysParsed++;\r\n      index += lb.length;\r\n    }\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  parseLogContent(content: Uint8Array, context?: string) {\r\n    let index = 0;\r\n    let pendingBytes = undefined;\r\n    let keysParsed = 0;\r\n\r\n    // https://github.com/google/leveldb/blob/main/doc/log_format.md\r\n\r\n    while (index < content.length - 6) {\r\n      /*const checksum = DataUtilities.getUnsignedInteger(\r\n        content[index],\r\n        content[index + 1],\r\n        content[index + 2],\r\n        content[index + 3],\r\n        true\r\n      );*/\r\n\r\n      const length = DataUtilities.getUnsignedShort(content[index + 4], content[index + 5], true);\r\n      const type = content[index + 6];\r\n      index += 7; // size of record header\r\n\r\n      if (type === 1 /* Type 1 = FULL */) {\r\n        keysParsed += this.addValueFromLog(content, index, length, context);\r\n      } else if (type === 2 /* Type 2 = FIRST */) {\r\n        pendingBytes = new Uint8Array(content.buffer, index, length);\r\n      } else if (type === 3 /* Type 3 = MIDDLE */ || type === 4 /* Type 4 = LAST*/) {\r\n        if (pendingBytes !== undefined) {\r\n          const appendBytes = new Uint8Array(content.buffer, index, length);\r\n\r\n          const newBytes: Uint8Array = new Uint8Array(pendingBytes.byteLength + appendBytes.byteLength);\r\n\r\n          newBytes.set(pendingBytes);\r\n          newBytes.set(appendBytes, pendingBytes.byteLength);\r\n\r\n          pendingBytes = newBytes;\r\n\r\n          if (type === 4 /* This is the last part of a record */) {\r\n            keysParsed += this.addValueFromLog(pendingBytes, 0, pendingBytes.length, context);\r\n          }\r\n        } else {\r\n          this._pushError(\r\n            \"Unexpected middle to a set of bytes found within LevelDB content. File seems unreadable.\",\r\n            context\r\n          );\r\n          return;\r\n        }\r\n      } else {\r\n        this._pushError(\"Unexpected type for log file. File seems unreadable.\", context);\r\n        return;\r\n      }\r\n\r\n      index += length;\r\n\r\n      // new records don't start within 6 bytes of the end of a 32K block\r\n      // Per docs: \"A record never starts within the last six bytes of a [32K] block (since it won't fit). Any\r\n      // leftover bytes here form the trailer, which must consist entirely of zero bytes and must be skipped by readers.\"\r\n      let bytesFromEndOfBlock = 32768 - (index % 32768);\r\n\r\n      while (bytesFromEndOfBlock <= 6 && bytesFromEndOfBlock > 0) {\r\n        bytesFromEndOfBlock--;\r\n        if (content[index] !== 0) {\r\n          this._pushError(\"Unexpectedly found a padding trailer with data\", context);\r\n        }\r\n\r\n        index++;\r\n      }\r\n    }\r\n\r\n    if (keysParsed <= 0) {\r\n      this._pushError(\"Did not find any keys in log file\", context);\r\n    }\r\n\r\n    return keysParsed;\r\n  }\r\n\r\n  addValueFromLog(content: Uint8Array, index: number, length: number, context?: string) {\r\n    const startIndex = index;\r\n    // first 8 bytes are sequence number; next 4 are record count; skip over those for now.\r\n    index += 12;\r\n    let keysParsed = 0;\r\n\r\n    while (index <= startIndex + length - 5) {\r\n      const isLive = content[index];\r\n      index++;\r\n\r\n      const keyLength = new Varint(content, index);\r\n      index += keyLength.byteLength;\r\n\r\n      const keyBytes = new Uint8Array(keyLength.value);\r\n      for (let i = 0; i < keyLength.value; i++) {\r\n        keyBytes[i] = content[index + i];\r\n      }\r\n\r\n      index += keyLength.value;\r\n\r\n      if (index > content.length) {\r\n        this._pushError(\"Unexpected log file length issue.\", context);\r\n      }\r\n\r\n      if (index <= content.length) {\r\n        const key = Utilities.getAsciiStringFromUint8Array(keyBytes);\r\n\r\n        if (key === undefined) {\r\n          this._pushError(\"Unexpected empty key in a log file. File could be unreadable.\", context);\r\n        }\r\n\r\n        keysParsed++;\r\n\r\n        if (isLive) {\r\n          if (index >= content.length) {\r\n            this._pushError(\"Unexpectedly leftover content in a log file. File could be unreadable.\", context);\r\n          }\r\n\r\n          const dataLength = new Varint(content, index);\r\n          index += dataLength.byteLength;\r\n\r\n          if (dataLength.value + index <= content.buffer.byteLength) {\r\n            const data = new Uint8Array(content.buffer, index, dataLength.value);\r\n            index += dataLength.value;\r\n\r\n            const kv = new LevelKeyValue();\r\n            kv.sharedKey = \"\";\r\n            kv.keyDelta = key;\r\n            kv.unsharedKeyBytes = keyBytes;\r\n\r\n            kv.value = data;\r\n\r\n            if (Utilities.isUsableAsObjectKey(key)) {\r\n              this.keys.set(key, kv);\r\n            }\r\n          }\r\n        } else {\r\n          if (Utilities.isUsableAsObjectKey(key)) {\r\n            this.keys.set(key, false);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return keysParsed;\r\n  }\r\n\r\n  parseManifestContent(content: Uint8Array, context?: string) {\r\n    let index = 0;\r\n    let pendingBytes = undefined;\r\n\r\n    this.comparator = undefined;\r\n    this.logNumber = undefined;\r\n    this.nextFileNumber = undefined;\r\n    this.lastSequence = undefined;\r\n    this.compactPointerLevels = undefined;\r\n    this.compactPointerStrings = undefined;\r\n    this.deletedFileLevel = undefined;\r\n    this.deletedFileNumber = undefined;\r\n    this.newFileLevel = undefined;\r\n    this.newFileNumber = undefined;\r\n    this.newFileSize = undefined;\r\n    this.newFileSmallest = undefined;\r\n    this.newFileLargest = undefined;\r\n\r\n    // https://github.com/google/leveldb/blob/main/doc/log_format.md\r\n\r\n    while (index < content.length - 6) {\r\n      /*const checksum = DataUtilities.getUnsignedInteger(\r\n        content[index],\r\n        content[index + 1],\r\n        content[index + 2],\r\n        content[index + 3],\r\n        true\r\n      );*/\r\n\r\n      const length = DataUtilities.getUnsignedShort(content[index + 4], content[index + 5], true);\r\n      const type = content[index + 6];\r\n      index += 7; // size of record header\r\n\r\n      if (type === 1 /* Type 1 = FULL */) {\r\n        this.addValueFromManifest(content, index, length);\r\n      } else if (type === 2 /* Type 2 = FIRST */) {\r\n        pendingBytes = new Uint8Array(content.buffer, index, length);\r\n      } else if (type === 3 /* Type 3 = MIDDLE */ || type === 4 /* Type 4 = LAST*/) {\r\n        if (pendingBytes !== undefined) {\r\n          const appendBytes = new Uint8Array(content.buffer, index, length);\r\n\r\n          const newBytes: Uint8Array = new Uint8Array(pendingBytes.byteLength + appendBytes.byteLength);\r\n\r\n          newBytes.set(pendingBytes);\r\n          newBytes.set(appendBytes, pendingBytes.byteLength);\r\n\r\n          pendingBytes = newBytes;\r\n\r\n          if (type === 4 /* This is the last part of a record */) {\r\n            this.addValueFromManifest(pendingBytes, 0, pendingBytes.length);\r\n          }\r\n        } else {\r\n          this._pushError(\r\n            \"Unexpected middle to a set of bytes found within a manifest file. File could be unreadable.\",\r\n            context\r\n          );\r\n          return;\r\n        }\r\n      } else {\r\n        this._pushError(\"Unexpected type for manifest file.  File could be unreadable.\", context);\r\n        return;\r\n      }\r\n\r\n      index += length;\r\n\r\n      // new records don't start within 6 bytes of the end of a 32K block\r\n      // Per docs: \"A record never starts within the last six bytes of a [32K] block (since it won't fit). Any\r\n      // leftover bytes here form the trailer, which must consist entirely of zero bytes and must be skipped by readers.\"\r\n      let bytesFromEndOfBlock = 32768 - (index % 32768);\r\n\r\n      while (bytesFromEndOfBlock <= 6 && bytesFromEndOfBlock > 0) {\r\n        bytesFromEndOfBlock--;\r\n        if (content[index] !== 0) {\r\n          this._pushError(\"Unexpectedly found a padding trailer with data in a manifest file.\", context);\r\n        }\r\n        index++;\r\n      }\r\n    }\r\n  }\r\n\r\n  addValueFromManifest(content: Uint8Array, index: number, length: number, context?: string) {\r\n    const startIndex = index;\r\n\r\n    // https://github.com/google/leveldb/blob/main/db/version_edit.cc\r\n    while (index < startIndex + length) {\r\n      const tag = new Varint(content, index);\r\n      index += tag.byteLength;\r\n\r\n      switch (tag.value) {\r\n        case 1: // comparator\r\n          const comparatorPrefixedSliceLength = new Varint(content, index);\r\n          index += comparatorPrefixedSliceLength.byteLength;\r\n\r\n          // comparator prefixed slice\r\n          const comparatorBytes = new Uint8Array(comparatorPrefixedSliceLength.value);\r\n          for (let i = 0; i < comparatorPrefixedSliceLength.value; i++) {\r\n            comparatorBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += comparatorPrefixedSliceLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue.\", context);\r\n          }\r\n\r\n          this.comparator = Utilities.getAsciiStringFromUint8Array(comparatorBytes);\r\n\r\n          if (this.comparator === undefined) {\r\n            this._pushError(\"Unexpected comparator.\", context);\r\n          }\r\n          break;\r\n\r\n        case 2: // logNumber\r\n          const logNumberVarint = new Varint(content, index);\r\n          index += logNumberVarint.byteLength;\r\n          this.logNumber = logNumberVarint.value;\r\n          break;\r\n\r\n        case 3: // nextFileNumber\r\n          const nextFileNumberVarint = new Varint(content, index);\r\n          index += nextFileNumberVarint.byteLength;\r\n          this.nextFileNumber = nextFileNumberVarint.value;\r\n          break;\r\n\r\n        case 4: // lastSequence\r\n          const lastSequenceVarint = new Varint(content, index);\r\n          index += lastSequenceVarint.byteLength;\r\n          this.lastSequence = lastSequenceVarint.value;\r\n          break;\r\n\r\n        case 5: // compactPointer\r\n          if (this.compactPointerLevels === undefined) {\r\n            this.compactPointerLevels = [];\r\n          }\r\n          if (this.compactPointerStrings === undefined) {\r\n            this.compactPointerStrings = [];\r\n          }\r\n          const compactPointerLevel = new Varint(content, index);\r\n          index += compactPointerLevel.byteLength;\r\n          this.compactPointerLevels.push(compactPointerLevel.value);\r\n\r\n          const compactPointerStrLength = new Varint(content, index);\r\n          index += compactPointerStrLength.byteLength;\r\n\r\n          // comparator prefixed slice\r\n          const compactPointerStrBytes = new Uint8Array(compactPointerStrLength.value);\r\n          for (let i = 0; i < compactPointerStrLength.value; i++) {\r\n            compactPointerStrBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += compactPointerStrLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue at compact pointer.\", context);\r\n          }\r\n\r\n          this.compactPointerStrings.push(Utilities.getAsciiStringFromUint8Array(compactPointerStrBytes));\r\n\r\n          if (this.compactPointerStrings[this.compactPointerStrings.length - 1] === undefined) {\r\n            this._pushError(\"Unexpected compact pointer string.\", context);\r\n          }\r\n          break;\r\n\r\n        case 6: // deletedFile\r\n          if (this.deletedFileLevel === undefined) {\r\n            this.deletedFileLevel = [];\r\n          }\r\n          if (this.deletedFileNumber === undefined) {\r\n            this.deletedFileNumber = [];\r\n          }\r\n          const deletedFileLevel = new Varint(content, index);\r\n          index += deletedFileLevel.byteLength;\r\n          this.deletedFileLevel.push(deletedFileLevel.value);\r\n\r\n          const deletedFileNumber = new Varint(content, index);\r\n          index += deletedFileNumber.byteLength;\r\n          this.deletedFileNumber.push(deletedFileNumber.value);\r\n          break;\r\n\r\n        case 7: // newFile\r\n          if (this.newFileLargest === undefined) {\r\n            this.newFileLargest = [];\r\n          }\r\n          if (this.newFileLevel === undefined) {\r\n            this.newFileLevel = [];\r\n          }\r\n          if (this.newFileNumber === undefined) {\r\n            this.newFileNumber = [];\r\n          }\r\n          if (this.newFileSmallest === undefined) {\r\n            this.newFileSmallest = [];\r\n          }\r\n          if (this.newFileSize === undefined) {\r\n            this.newFileSize = [];\r\n          }\r\n\r\n          const newFileLevel = new Varint(content, index);\r\n          index += newFileLevel.byteLength;\r\n          this.newFileLevel.push(newFileLevel.value);\r\n\r\n          const newFileNumber = new Varint(content, index);\r\n          index += newFileNumber.byteLength;\r\n          this.newFileNumber.push(newFileNumber.value);\r\n\r\n          const newFileSize = new Varint(content, index);\r\n          index += newFileSize.byteLength;\r\n          this.newFileSize.push(newFileSize.value);\r\n\r\n          const newFileSmallestStrLength = new Varint(content, index);\r\n          index += newFileSmallestStrLength.byteLength;\r\n\r\n          const newFileSmallestStrBytes = new Uint8Array(newFileSmallestStrLength.value);\r\n          for (let i = 0; i < newFileSmallestStrLength.value; i++) {\r\n            newFileSmallestStrBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += newFileSmallestStrLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue at new file smallest.\", context);\r\n          }\r\n\r\n          this.newFileSmallest.push(Utilities.getAsciiStringFromUint8Array(newFileSmallestStrBytes));\r\n\r\n          if (this.newFileSmallest[this.newFileSmallest.length - 1] === undefined) {\r\n            this._pushError(\"Unexpected file smallest tag string.\", context);\r\n          }\r\n\r\n          const newFileLargestStrLength = new Varint(content, index);\r\n          index += newFileLargestStrLength.byteLength;\r\n\r\n          const newFileLargestStrBytes = new Uint8Array(newFileLargestStrLength.value);\r\n          for (let i = 0; i < newFileLargestStrLength.value; i++) {\r\n            newFileLargestStrBytes[i] = content[index + i];\r\n          }\r\n\r\n          index += newFileLargestStrLength.value;\r\n\r\n          if (index > content.length) {\r\n            this._pushError(\"Unexpected manifest file length issue at new file largest.\", context);\r\n          }\r\n\r\n          this.newFileLargest.push(Utilities.getAsciiStringFromUint8Array(newFileLargestStrBytes));\r\n\r\n          if (this.newFileLargest[this.newFileLargest.length - 1] === undefined) {\r\n            this._pushError(\"Unexpected file largest tag string.\", context);\r\n          }\r\n          break;\r\n\r\n        case 9: // previousLogNumber\r\n          const prevLogNumber = new Varint(content, index);\r\n          index += prevLogNumber.byteLength;\r\n          this.previousLogNumber = prevLogNumber.value;\r\n          break;\r\n\r\n        default:\r\n          this._pushError(\"Unexpected manifest item: \" + tag.value, context);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Block from \"./Block\";\r\nimport NbtBinary from \"./NbtBinary\";\r\n\r\nexport default class BlockPalette {\r\n  blocks: Block[] = [];\r\n\r\n  parseFromBytes(bytes: Uint8Array, index: number, paletteCount: number) {\r\n    for (let i = 0; i < paletteCount; i++) {\r\n      const nbt = new NbtBinary();\r\n\r\n      const bytesRead = nbt.fromBinary(bytes, true, false, index, true);\r\n\r\n      if (bytesRead <= 0) {\r\n        return index;\r\n      }\r\n\r\n      index += bytesRead;\r\n\r\n      Log.assert(index <= bytes.length, \"Unexpected expansion of bytes processed.\");\r\n\r\n      if (nbt.singleRoot === null) {\r\n        return index;\r\n      }\r\n\r\n      const children = nbt.singleRoot.getTagChildren();\r\n\r\n      let block = null;\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const child = children[i];\r\n\r\n        if (child.name === \"name\") {\r\n          block = new Block();\r\n          block.typeName = child.valueAsString;\r\n\r\n          this.blocks.push(block);\r\n        } else if (child.name === \"type\") {\r\n        }\r\n      }\r\n    }\r\n\r\n    return index;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\n\r\nexport default abstract class BlockActor {\r\n  rootTag: NbtBinaryTag;\r\n\r\n  x: number | undefined;\r\n  y: number | undefined;\r\n  z: number | undefined;\r\n\r\n  id?: string;\r\n\r\n  isMovable?: boolean;\r\n\r\n  constructor(rootTagIn: NbtBinaryTag) {\r\n    this.rootTag = rootTagIn;\r\n\r\n    let tag = this.rootTag.find(\"x\");\r\n\r\n    if (tag !== null) {\r\n      this.x = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"y\");\r\n\r\n    if (tag !== null) {\r\n      this.y = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"z\");\r\n\r\n    if (tag !== null) {\r\n      this.z = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"id\");\r\n\r\n    if (tag !== null) {\r\n      this.id = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"isMovable\");\r\n    if (tag) {\r\n      this.isMovable = tag.valueAsBoolean;\r\n    }\r\n  }\r\n\r\n  public abstract load(): void;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class GenericBlockActor extends BlockActor {\r\n  public override load() {}\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\nimport { InventoryItem } from \"../Items\";\r\n\r\nexport default class ChestBlockActor extends BlockActor {\r\n  findable?: boolean;\r\n\r\n  items: InventoryItem[] = [];\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"Findable\");\r\n    if (tag) {\r\n      this.findable = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Items\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.items = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const slotTag = childTag.find(\"Slot\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && slotTag && wasPickedUpTag) {\r\n          this.items.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            slot: slotTag.valueAsInt,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class BedBlockActor extends BlockActor {\r\n  color?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"color\");\r\n    if (tag) {\r\n      this.color = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { Item } from \"../Items\";\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class FrameBlockActor extends BlockActor {\r\n  itemDropChance?: number;\r\n  itemRotation?: number;\r\n  item?: Item;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"ItemDropChance\");\r\n    if (tag) {\r\n      this.itemDropChance = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"ItemRotation\");\r\n    if (tag) {\r\n      this.itemRotation = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Item\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && wasPickedUpTag) {\r\n          this.item = {\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    // add Item parsing here.\r\n  }\r\n}\r\n", "import BlockActor from \"./BlockActor\";\r\n\r\nexport default class NoteBlockActor extends BlockActor {\r\n  note?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"note\");\r\n    if (tag) {\r\n      this.note = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class SignBlockActor extends BlockActor {\r\n  textIgnoreLegacyBugResolved?: boolean;\r\n  ignoreLighting?: boolean;\r\n  persistFormatting?: boolean;\r\n  signTextColor?: number;\r\n  text?: string;\r\n  textOwner?: string;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"IgnoreLighting\");\r\n    if (tag) {\r\n      this.ignoreLighting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"PersistFormatting\");\r\n    if (tag) {\r\n      this.persistFormatting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SignTextColor\");\r\n    if (tag) {\r\n      this.signTextColor = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Text\");\r\n    if (tag) {\r\n      this.text = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TextOwner\");\r\n    if (tag) {\r\n      this.textOwner = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TextIgnoreLegacyBugResolved\");\r\n    if (tag) {\r\n      this.textIgnoreLegacyBugResolved = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"IsMovable\");\r\n    if (tag) {\r\n      this.isMovable = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class StructureBlockActor extends BlockActor {\r\n  animationMode?: boolean;\r\n  animationSeconds?: number;\r\n  data?: number;\r\n  dataField?: string;\r\n  ignoreEntities?: boolean;\r\n  includePlayers?: boolean;\r\n  integrity?: number;\r\n  isPowered?: boolean;\r\n  mirror?: boolean;\r\n  redstoneSaveMode?: number;\r\n  removeBlocks?: boolean;\r\n  rotation?: boolean;\r\n  seed?: BigInt;\r\n  showBoundingBox?: boolean;\r\n  structureName?: string;\r\n  xStructureOffset?: number;\r\n  xStructureSize?: number;\r\n  yStructureOffset?: number;\r\n  yStructureSize?: number;\r\n  zStructureOffset?: number;\r\n  zStructureSize?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"animationMode\");\r\n    if (tag) {\r\n      this.animationMode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"animationSeconds\");\r\n    if (tag) {\r\n      this.animationSeconds = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"data\");\r\n    if (tag) {\r\n      this.data = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"dataField\");\r\n    if (tag) {\r\n      this.dataField = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"ignoreEntities\");\r\n    if (tag) {\r\n      this.ignoreEntities = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"includePlayers\");\r\n    if (tag) {\r\n      this.includePlayers = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"integrity\");\r\n    if (tag) {\r\n      this.integrity = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"isPowered\");\r\n    if (tag) {\r\n      this.isMovable = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"mirror\");\r\n    if (tag) {\r\n      this.mirror = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"redstoneSaveMode\");\r\n    if (tag) {\r\n      this.redstoneSaveMode = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"removeBlocks\");\r\n    if (tag) {\r\n      this.removeBlocks = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"rotation\");\r\n    if (tag) {\r\n      this.rotation = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"seed\");\r\n    if (tag) {\r\n      this.seed = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"showBoundingBox\");\r\n    if (tag) {\r\n      this.showBoundingBox = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"structureName\");\r\n    if (tag) {\r\n      this.structureName = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"xStructureOffset\");\r\n    if (tag) {\r\n      this.xStructureOffset = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"xStructureSize\");\r\n    if (tag) {\r\n      this.xStructureSize = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"yStructureOffset\");\r\n    if (tag) {\r\n      this.yStructureOffset = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"yStructureSize\");\r\n    if (tag) {\r\n      this.yStructureSize = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"zStructureOffset\");\r\n    if (tag) {\r\n      this.zStructureOffset = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"zStructureSize\");\r\n    if (tag) {\r\n      this.zStructureSize = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\nimport { InventoryItem } from \"../Items\";\r\n\r\nexport default class CauldronBlockActor extends BlockActor {\r\n  potionId?: number;\r\n  potionType?: number;\r\n\r\n  items: InventoryItem[] = [];\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"PotionId\");\r\n    if (tag) {\r\n      this.potionId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"PotionType\");\r\n    if (tag) {\r\n      this.potionType = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Items\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.items = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const slotTag = childTag.find(\"Slot\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && slotTag && wasPickedUpTag) {\r\n          this.items.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            slot: slotTag.valueAsInt,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class CampfireBlockActor extends BlockActor {\r\n  itemTime1?: number;\r\n  itemTime2?: number;\r\n  itemTime3?: number;\r\n  itemTime4?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"itemTime1\");\r\n    if (tag) {\r\n      this.itemTime1 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"itemTime2\");\r\n    if (tag) {\r\n      this.itemTime2 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"itemTime3\");\r\n    if (tag) {\r\n      this.itemTime3 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"itemTime4\");\r\n    if (tag) {\r\n      this.itemTime4 = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class BeehiveBlockActor extends BlockActor {\r\n  shouldSpawnBees?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    const tag = this.rootTag.find(\"shouldSpawnBees\");\r\n    if (tag) {\r\n      this.shouldSpawnBees = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class CommandBlockActor extends BlockActor {\r\n  command?: string;\r\n  customName?: string;\r\n  executeOnFirstTick?: boolean;\r\n  lpCommandMode?: number;\r\n  lpConditionalMode?: boolean;\r\n  lpRedstoneMode?: boolean;\r\n  lastExecution?: bigint;\r\n  lastOutput?: string;\r\n  lastOutputParams?: string[];\r\n  successCount?: number;\r\n  tickDelay?: number;\r\n  trackOutput?: boolean;\r\n  version?: number;\r\n  auto?: boolean;\r\n  conditionMet?: boolean;\r\n  powered?: boolean;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"Command\");\r\n    if (tag) {\r\n      this.command = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"CustomName\");\r\n    if (tag) {\r\n      this.customName = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"ExecuteOnFirstTick\");\r\n    if (tag) {\r\n      this.executeOnFirstTick = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LPCommandMode\");\r\n    if (tag) {\r\n      this.lpCommandMode = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LPCondionalMode\"); // re: condional, that's sic\r\n    if (tag) {\r\n      this.lpConditionalMode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LPRedstoneMode\");\r\n    if (tag) {\r\n      this.lpRedstoneMode = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LastExecution\");\r\n    if (tag) {\r\n      this.lastExecution = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LastOutput\");\r\n    if (tag) {\r\n      this.lastOutput = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"LastOutputParams\");\r\n    if (tag) {\r\n      this.lastOutputParams = tag.valueAsStringArray;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SuccessCount\");\r\n    if (tag) {\r\n      this.successCount = tag.valueAsInt;\r\n    }\r\n    tag = this.rootTag.find(\"TickDelay\");\r\n    if (tag) {\r\n      this.tickDelay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TrackOutput\");\r\n    if (tag) {\r\n      this.trackOutput = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"Version\");\r\n    if (tag) {\r\n      this.version = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"auto\");\r\n    if (tag) {\r\n      this.auto = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"powered\");\r\n    if (tag) {\r\n      this.powered = tag.valueAsBoolean;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class MobSpawnerBlockActor extends BlockActor {\r\n  delay?: number;\r\n  displayEntityHeight?: number;\r\n  displayEntityScale?: number;\r\n  displayEntityWidth?: number;\r\n  entityIdentifier?: string;\r\n  maxNearbyEntities?: number;\r\n  maxSpawnDelay?: number;\r\n  minSpawnDelay?: number;\r\n  requiredPlayerRange?: number;\r\n  spawnCount?: number;\r\n  spawnRange?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"Delay\");\r\n    if (tag) {\r\n      this.delay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"DisplayEntityType\");\r\n    if (tag) {\r\n      this.displayEntityHeight = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"DisplayEntityScale\");\r\n    if (tag) {\r\n      this.displayEntityScale = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"DisplayEntityWidth\");\r\n    if (tag) {\r\n      this.displayEntityWidth = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"EntityIdentifier\");\r\n    if (tag) {\r\n      this.entityIdentifier = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"MaxNearbyEntities\");\r\n    if (tag) {\r\n      this.maxNearbyEntities = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"MaxSpawnDelay\");\r\n    if (tag) {\r\n      this.maxSpawnDelay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"MinSpawnDelay\");\r\n    if (tag) {\r\n      this.minSpawnDelay = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"RequiredPlayerRange\");\r\n    if (tag) {\r\n      this.requiredPlayerRange = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SpawnCount\");\r\n    if (tag) {\r\n      this.spawnCount = tag.valueAsInt;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"SpawnRange\");\r\n    if (tag) {\r\n      this.spawnRange = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class HopperBlockActor extends BlockActor {\r\n  customName?: string;\r\n  transferCooldown?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    let tag = this.rootTag.find(\"CustomName\");\r\n    if (tag) {\r\n      this.customName = tag.valueAsString;\r\n    }\r\n\r\n    tag = this.rootTag.find(\"TransferCooldown\");\r\n    if (tag) {\r\n      this.transferCooldown = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockActor from \"./BlockActor\";\r\n\r\nexport default class ComparatorBlockActor extends BlockActor {\r\n  outputSignal?: number;\r\n\r\n  public override load() {\r\n    if (!this.rootTag) {\r\n      return;\r\n    }\r\n\r\n    const tag = this.rootTag.find(\"OutputSignal\");\r\n    if (tag) {\r\n      this.outputSignal = tag.valueAsInt;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../../core/Log\";\r\nimport NbtBinaryTag from \"../NbtBinaryTag\";\r\nimport ChestBlockActor from \"./ChestBlockActor\";\r\nimport BedBlockActor from \"./BedBlockActor\";\r\nimport FrameBlockActor from \"./FrameBlockActor\";\r\nimport GenericBlockActor from \"./GenericBlockActor\";\r\nimport NoteBlockActor from \"./NoteBlockActor\";\r\nimport SignBlockActor from \"./SignBlockActor\";\r\nimport StructureBlockActor from \"./StructureBlockActor\";\r\nimport CauldronBlockActor from \"./CauldronBlockActor\";\r\nimport CampfireBlockActor from \"./CampfireBlockActor\";\r\nimport BeehiveBlockActor from \"./BeehiveBlockActor\";\r\nimport CommandBlockActor from \"./CommandBlockActor\";\r\nimport MobSpawnerBlockActor from \"./MobSpawnerBlockActor\";\r\nimport HopperBlockActor from \"./HopperBlockActor\";\r\nimport ComparatorBlockActor from \"./ComparatorBlockActor\";\r\n\r\nexport default class BlockActorFactory {\r\n  public static create(id: string, rootTagIn: NbtBinaryTag) {\r\n    switch (id) {\r\n      case \"minecraft:wall_sign\":\r\n      case \"minecraft:standing_sign\":\r\n      case \"Sign\":\r\n      case \"HangingSign\":\r\n        return new SignBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:structure_block\":\r\n      case \"StructureBlock\":\r\n        return new StructureBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:ender_chest\":\r\n      case \"minecraft:chest\":\r\n      case \"minecraft:barrel\":\r\n      case \"Barrel\":\r\n      case \"Chest\":\r\n      case \"EnderChest\":\r\n        return new ChestBlockActor(rootTagIn);\r\n\r\n      case \"Cauldron\":\r\n        return new CauldronBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:noteblock\":\r\n      case \"Music\":\r\n        return new NoteBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:frame\":\r\n      case \"ItemFrame\":\r\n      case \"GlowItemFrame\":\r\n        return new FrameBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:spore_blossom\":\r\n      case \"SporeBlossom\":\r\n      case \"FlowerPot\":\r\n      case \"EndPortal\":\r\n      case \"Banner\": // start of just blanket inclusion.\r\n      case \"EnchantTable\":\r\n      case \"Lectern\":\r\n      case \"BlastFurnace\":\r\n      case \"Furnace\":\r\n      case \"DaylightDetector\":\r\n      case \"ShulkerBox\":\r\n      case \"BrewingStand\":\r\n      case \"Skull\":\r\n      case \"Dropper\":\r\n      case \"Dispenser\":\r\n      case \"Bell\":\r\n      case \"BrushableBlock\":\r\n      case \"ChiseledBookshelf\":\r\n      case \"SculkSensor\":\r\n      case \"PistonArm\":\r\n      case \"SculkShrieker\":\r\n      case \"NetherReactor\":\r\n      case \"SculkCatalyst\":\r\n      case \"Lodestone\":\r\n      case \"Beacon\":\r\n      case \"Conduit\":\r\n      case \"Jukebox\":\r\n      case \"JigsawBlock\":\r\n      case \"Smoker\":\r\n      case \"ChalkboardBlock\":\r\n      case \"ChemistryTable\":\r\n      case \"CalibratedSculkSensor\":\r\n      case \"DecoratedPot\":\r\n      case \"SuspiciousSand\":\r\n      case \"EndGateway\":\r\n      case \"SuspiciousGravel\":\r\n      case \"TrialSpawner\":\r\n      case \"Piston\":\r\n      case \"MovingBlock\":\r\n      case \"Vault\":\r\n      case \"Crafter\":\r\n        return new GenericBlockActor(rootTagIn);\r\n\r\n      case \"Bed\":\r\n        return new BedBlockActor(rootTagIn);\r\n\r\n      case \"Campfire\":\r\n      case \"SoulCampfire\":\r\n        return new CampfireBlockActor(rootTagIn);\r\n\r\n      case \"Beehive\":\r\n        return new BeehiveBlockActor(rootTagIn);\r\n\r\n      case \"minecraft:chain_command_block\":\r\n      case \"CommandBlock\":\r\n        return new CommandBlockActor(rootTagIn);\r\n\r\n      case \"MobSpawner\":\r\n      case \"mob_spawner\":\r\n      case \"minecraft:mob_spawner\":\r\n        return new MobSpawnerBlockActor(rootTagIn);\r\n\r\n      case \"Hopper\":\r\n        return new HopperBlockActor(rootTagIn);\r\n\r\n      case \"Comparator\":\r\n        return new ComparatorBlockActor(rootTagIn);\r\n\r\n      default:\r\n        Log.debugAlert(\"Unexpected block actor type found '\" + id + \"'\");\r\n        return undefined;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NbtBinaryTag from \"./NbtBinaryTag\";\r\n\r\n/**\r\n * Represents an entity stored in a chunk's entity data.\r\n * This is a lightweight representation used for world map rendering.\r\n */\r\nexport default class ChunkEntity {\r\n  /** The entity type identifier (e.g., \"minecraft:cow\", \"minecraft:zombie\") */\r\n  identifier: string;\r\n\r\n  /** Entity position (absolute world coordinates) */\r\n  x: number;\r\n  y: number;\r\n  z: number;\r\n\r\n  /** Entity rotation (yaw, pitch) */\r\n  yaw?: number;\r\n  pitch?: number;\r\n\r\n  /** Whether the entity is a baby */\r\n  isBaby?: boolean;\r\n\r\n  /** Whether the entity is tamed */\r\n  isTamed?: boolean;\r\n\r\n  /** Entity variant (for entities with visual variants) */\r\n  variant?: number;\r\n\r\n  /** Entity's unique ID */\r\n  uniqueId?: bigint;\r\n\r\n  /** Custom name if set */\r\n  customName?: string;\r\n\r\n  /** Entity definitions (component groups) */\r\n  definitions?: string[];\r\n\r\n  constructor(identifier: string, x: number, y: number, z: number) {\r\n    this.identifier = identifier;\r\n    this.x = x;\r\n    this.y = y;\r\n    this.z = z;\r\n  }\r\n\r\n  /**\r\n   * Creates a ChunkEntity from an NBT compound tag.\r\n   */\r\n  static fromNbtTag(root: NbtBinaryTag): ChunkEntity | undefined {\r\n    const identifierTag = root.find(\"identifier\");\r\n    const posTag = root.find(\"Pos\");\r\n\r\n    if (!identifierTag || !posTag) {\r\n      return undefined;\r\n    }\r\n\r\n    const identifier = identifierTag.valueAsString;\r\n    const pos = posTag.valueAsNumericArray;\r\n\r\n    if (!identifier || !pos || pos.length < 3) {\r\n      return undefined;\r\n    }\r\n\r\n    const entity = new ChunkEntity(identifier, pos[0], pos[1], pos[2]);\r\n\r\n    // Parse rotation\r\n    const rotationTag = root.find(\"Rotation\");\r\n    if (rotationTag) {\r\n      const rotation = rotationTag.valueAsNumericArray;\r\n      if (rotation && rotation.length >= 2) {\r\n        entity.yaw = rotation[0];\r\n        entity.pitch = rotation[1];\r\n      }\r\n    }\r\n\r\n    // Parse optional properties\r\n    const isBabyTag = root.find(\"IsBaby\");\r\n    if (isBabyTag) {\r\n      entity.isBaby = isBabyTag.valueAsBoolean;\r\n    }\r\n\r\n    const isTamedTag = root.find(\"IsTamed\");\r\n    if (isTamedTag) {\r\n      entity.isTamed = isTamedTag.valueAsBoolean;\r\n    }\r\n\r\n    const variantTag = root.find(\"Variant\");\r\n    if (variantTag) {\r\n      entity.variant = variantTag.valueAsInt;\r\n    }\r\n\r\n    const uniqueIdTag = root.find(\"UniqueID\");\r\n    if (uniqueIdTag) {\r\n      entity.uniqueId = uniqueIdTag.valueAsBigInt;\r\n    }\r\n\r\n    const customNameTag = root.find(\"CustomName\");\r\n    if (customNameTag) {\r\n      entity.customName = customNameTag.valueAsString;\r\n    }\r\n\r\n    const definitionsTag = root.find(\"definitions\");\r\n    if (definitionsTag) {\r\n      entity.definitions = definitionsTag.valueAsStringArray;\r\n    }\r\n\r\n    return entity;\r\n  }\r\n\r\n  /**\r\n   * Gets a short, human-readable name for this entity type.\r\n   */\r\n  get shortName(): string {\r\n    let name = this.identifier;\r\n\r\n    // Remove namespace prefix\r\n    const colonIndex = name.indexOf(\":\");\r\n    if (colonIndex >= 0) {\r\n      name = name.substring(colonIndex + 1);\r\n    }\r\n\r\n    // Convert snake_case to Title Case\r\n    return name\r\n      .split(\"_\")\r\n      .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n      .join(\" \");\r\n  }\r\n\r\n  /**\r\n   * Checks if this is a hostile mob.\r\n   */\r\n  get isHostile(): boolean {\r\n    const hostileMobs = [\r\n      \"zombie\",\r\n      \"skeleton\",\r\n      \"creeper\",\r\n      \"spider\",\r\n      \"cave_spider\",\r\n      \"enderman\",\r\n      \"witch\",\r\n      \"slime\",\r\n      \"magma_cube\",\r\n      \"blaze\",\r\n      \"ghast\",\r\n      \"wither_skeleton\",\r\n      \"zombie_pigman\",\r\n      \"zombified_piglin\",\r\n      \"piglin\",\r\n      \"piglin_brute\",\r\n      \"hoglin\",\r\n      \"zoglin\",\r\n      \"drowned\",\r\n      \"husk\",\r\n      \"stray\",\r\n      \"phantom\",\r\n      \"pillager\",\r\n      \"vindicator\",\r\n      \"evoker\",\r\n      \"ravager\",\r\n      \"vex\",\r\n      \"warden\",\r\n      \"elder_guardian\",\r\n      \"guardian\",\r\n      \"shulker\",\r\n      \"endermite\",\r\n      \"silverfish\",\r\n      \"breeze\",\r\n      \"bogged\",\r\n    ];\r\n\r\n    const shortId = this.identifier.replace(\"minecraft:\", \"\");\r\n    return hostileMobs.includes(shortId);\r\n  }\r\n\r\n  /**\r\n   * Checks if this is a passive/friendly mob.\r\n   */\r\n  get isPassive(): boolean {\r\n    const passiveMobs = [\r\n      \"cow\",\r\n      \"pig\",\r\n      \"sheep\",\r\n      \"chicken\",\r\n      \"horse\",\r\n      \"donkey\",\r\n      \"mule\",\r\n      \"llama\",\r\n      \"wolf\",\r\n      \"cat\",\r\n      \"ocelot\",\r\n      \"parrot\",\r\n      \"rabbit\",\r\n      \"fox\",\r\n      \"bee\",\r\n      \"turtle\",\r\n      \"dolphin\",\r\n      \"squid\",\r\n      \"glow_squid\",\r\n      \"cod\",\r\n      \"salmon\",\r\n      \"tropical_fish\",\r\n      \"pufferfish\",\r\n      \"axolotl\",\r\n      \"goat\",\r\n      \"frog\",\r\n      \"tadpole\",\r\n      \"allay\",\r\n      \"camel\",\r\n      \"sniffer\",\r\n      \"armadillo\",\r\n      \"villager\",\r\n      \"wandering_trader\",\r\n      \"snow_golem\",\r\n      \"iron_golem\",\r\n      \"bat\",\r\n      \"mooshroom\",\r\n      \"panda\",\r\n      \"polar_bear\",\r\n      \"strider\",\r\n    ];\r\n\r\n    const shortId = this.identifier.replace(\"minecraft:\", \"\");\r\n    return passiveMobs.includes(shortId);\r\n  }\r\n\r\n  /**\r\n   * Checks if this is a player entity.\r\n   */\r\n  get isPlayer(): boolean {\r\n    return this.identifier === \"minecraft:player\";\r\n  }\r\n\r\n  /**\r\n   * Gets a category for this entity (for icon selection).\r\n   */\r\n  get category(): \"hostile\" | \"passive\" | \"player\" | \"item\" | \"other\" {\r\n    if (this.isPlayer) return \"player\";\r\n    if (this.isHostile) return \"hostile\";\r\n    if (this.isPassive) return \"passive\";\r\n    if (this.identifier === \"minecraft:item\") return \"item\";\r\n    return \"other\";\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport LevelKeyValue from \"./LevelKeyValue\";\r\nimport BlockPalette from \"./BlockPalette\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport Block from \"./Block\";\r\nimport MCWorld from \"./MCWorld\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport BlockActor from \"./blockActors/BlockActor\";\r\nimport GenericBlockActor from \"./blockActors/GenericBlockActor\";\r\nimport BlockActorFactory from \"./blockActors/BlockActorFactory\";\r\nimport Database from \"./Database\";\r\nimport ChunkEntity from \"./ChunkEntity\";\r\n\r\nconst CHUNK_X_SIZE = 16;\r\nconst CHUNK_Z_SIZE = 16;\r\nconst SUBCHUNK_Y_SIZE = 16;\r\n\r\nconst MAX_LEGACY_Y = 128;\r\n\r\n// Subchunk index constants for extended height worlds (Caves & Cliffs, 1.18+)\r\n// Stored subchunk indices use unsigned bytes: 0-63 for positive, 224-255 for negative (-32 to -1)\r\nconst MAX_POSITIVE_SUBCHUNK_STORED = 63; // Maximum positive subchunk index stored in LevelDB key\r\nconst MIN_NEGATIVE_SUBCHUNK_STORED = 224; // Minimum negative subchunk index (stored as unsigned byte)\r\nconst MAX_NEGATIVE_SUBCHUNK_STORED = 255; // Maximum negative subchunk index (stored as unsigned byte)\r\nconst NEGATIVE_SUBCHUNK_OFFSET = 224; // Offset to convert stored negative index to array index (224 \u2192 0)\r\nconst POSITIVE_SUBCHUNK_OFFSET = 32; // Offset to convert stored positive index to array index (0 \u2192 32)\r\nconst TOTAL_SUBCHUNK_SLOTS = 96; // Total subchunk array slots: 32 negative + 64 positive\r\n\r\nexport enum SubChunkFormatType {\r\n  paletteFrom1dot2dot13 = 0,\r\n  subChunk1dot0 = 1,\r\n}\r\n\r\nexport default class WorldChunk {\r\n  checksumKey: LevelKeyValue | undefined;\r\n  subChunks: LevelKeyValue[];\r\n  subChunkVersions: number[] | undefined;\r\n  chunkVersion: LevelKeyValue | undefined;\r\n  biomesAndElevation: LevelKeyValue | undefined;\r\n  finalizedState: LevelKeyValue | undefined;\r\n  entity: LevelKeyValue | undefined;\r\n  blockActorKeys: LevelKeyValue[] = [];\r\n  private _hasContent?: boolean = undefined;\r\n  private _blockActorsRelLoc: BlockActor[][][] = [];\r\n  private _blockActors: BlockActor[] = [];\r\n  private _entities: ChunkEntity[] = [];\r\n  private _entitiesEnsured: boolean = false;\r\n  pendingTicks: LevelKeyValue | undefined;\r\n  biomeState: LevelKeyValue | undefined;\r\n  blockTops: number[][] | undefined;\r\n  data3dRecord: LevelKeyValue | undefined;\r\n\r\n  blockActorsEnsured = false;\r\n  absoluteZeroY = -512;\r\n  chunkMinY: number = 0;\r\n  legacyVersion: number | undefined;\r\n  world: MCWorld;\r\n  legacyTerrainBytes: Uint8Array | undefined;\r\n\r\n  bitsPerBlock: number[];\r\n  blockDataStart: number[];\r\n  blockPalettes: (BlockPalette | undefined)[];\r\n  subChunkFormatType: SubChunkFormatType[];\r\n\r\n  actorDigests: string[];\r\n\r\n  auxBitsPerBlock: number[];\r\n  auxBlockDataStart: number[];\r\n  auxBlockPalettes: BlockPalette[];\r\n  pendingSubChunksToProcess: boolean[];\r\n\r\n  x: number = 0;\r\n  z: number = 0;\r\n  maxSubChunkIndex: number = -512; // set it very low\r\n  minSubChunkIndex: number = 512; // set it very high\r\n\r\n  get absoluteMinY() {\r\n    this._checkNotCleared();\r\n    return this.absoluteZeroY;\r\n  }\r\n\r\n  get minY() {\r\n    this._checkNotCleared();\r\n    return this.absoluteZeroY + this.minSubChunkIndex * 16;\r\n  }\r\n\r\n  get maxY() {\r\n    this._checkNotCleared();\r\n    return this.absoluteZeroY + (this.maxSubChunkIndex + 1) * 16;\r\n  }\r\n\r\n  get absoluteMaxY() {\r\n    return this.absoluteZeroY + this.subChunks.length * 16;\r\n  }\r\n\r\n  get blockActors() {\r\n    this._checkNotCleared();\r\n    if (!this.blockActorsEnsured) {\r\n      this.ensureBlockActors();\r\n    }\r\n\r\n    return this._blockActors;\r\n  }\r\n\r\n  /**\r\n   * Gets the entities in this chunk.\r\n   * Entities are parsed lazily from the entity LevelKeyValue on first access.\r\n   */\r\n  get entities(): ChunkEntity[] {\r\n    this._checkNotCleared();\r\n\r\n    if (!this._entitiesEnsured) {\r\n      this.ensureEntities();\r\n    }\r\n\r\n    return this._entities;\r\n  }\r\n\r\n  constructor(world: MCWorld, inX: number, inZ: number) {\r\n    this.world = world;\r\n    this.subChunks = [];\r\n    this.subChunkFormatType = [];\r\n    this.blockPalettes = [];\r\n    this.bitsPerBlock = [];\r\n    this.blockDataStart = [];\r\n    this.auxBlockPalettes = [];\r\n    this.auxBitsPerBlock = [];\r\n    this.auxBlockDataStart = [];\r\n    this.pendingSubChunksToProcess = [];\r\n    this.actorDigests = [];\r\n\r\n    for (let i = 0; i < TOTAL_SUBCHUNK_SLOTS; i++) {\r\n      this.pendingSubChunksToProcess[i] = false;\r\n    }\r\n\r\n    this.x = inX;\r\n    this.z = inZ;\r\n  }\r\n\r\n  _checkNotCleared() {\r\n    Log.assert(this._hasContent !== false, \"Chunk data has been cleared - cannot access data in \" + this.world.name);\r\n  }\r\n\r\n  /**\r\n   * Clears cached/parsed data to free memory while preserving the ability to re-parse later.\r\n   * Use this after processing a chunk to reduce memory usage.\r\n   * The raw LevelKeyValue data is preserved, allowing getBlock() to re-parse on demand.\r\n   */\r\n  clearCachedData() {\r\n    for (let i = 0; i < TOTAL_SUBCHUNK_SLOTS; i++) {\r\n      if (this.subChunks[i] !== undefined) {\r\n        this.blockDataStart[i] = -1;\r\n        this.bitsPerBlock[i] = -1;\r\n        this.blockPalettes[i] = undefined;\r\n\r\n        this.pendingSubChunksToProcess[i] = true;\r\n      }\r\n    }\r\n\r\n    this.blockTops = undefined;\r\n\r\n    this.blockActorsEnsured = false;\r\n    this._blockActorsRelLoc = [];\r\n    this._blockActors = [];\r\n\r\n    this._entitiesEnsured = false;\r\n    this._entities = [];\r\n    // Note: _hasContent remains true since raw LevelKeyValue data is preserved\r\n    // and can be re-parsed on demand via pendingSubChunksToProcess\r\n  }\r\n\r\n  /**\r\n   * Aggressively clears all chunk data including raw LevelKeyValue bytes.\r\n   * Call this when the chunk data is no longer needed and will not be re-accessed.\r\n   * WARNING: After calling this, the chunk cannot be re-parsed from its data.\r\n   */\r\n  clearAllData() {\r\n    this.clearCachedData();\r\n\r\n    // Mark as having no content since raw data is being cleared\r\n    this._hasContent = false;\r\n\r\n    // Clear subchunk LevelKeyValue data\r\n    for (let i = 0; i < this.subChunks.length; i++) {\r\n      if (this.subChunks[i] !== undefined) {\r\n        this.subChunks[i].clearValueData();\r\n      }\r\n    }\r\n\r\n    // Clear block actor key data\r\n    for (const blockActorKey of this.blockActorKeys) {\r\n      blockActorKey.clearValueData();\r\n    }\r\n\r\n    // Clear other LevelKeyValue data\r\n    if (this.entity) {\r\n      this.entity.clearValueData();\r\n    }\r\n    if (this.biomesAndElevation) {\r\n      this.biomesAndElevation.clearValueData();\r\n    }\r\n    if (this.pendingTicks) {\r\n      this.pendingTicks.clearValueData();\r\n    }\r\n    if (this.biomeState) {\r\n      this.biomeState.clearValueData();\r\n    }\r\n    if (this.chunkVersion) {\r\n      this.chunkVersion.clearValueData();\r\n    }\r\n    if (this.finalizedState) {\r\n      this.finalizedState.clearValueData();\r\n    }\r\n    if (this.checksumKey) {\r\n      this.checksumKey.clearValueData();\r\n    }\r\n\r\n    // Clear legacy terrain bytes\r\n    this.legacyTerrainBytes = undefined;\r\n  }\r\n\r\n  addActorDigest(digest: string) {\r\n    this.actorDigests.push(digest);\r\n  }\r\n\r\n  translateSubChunkIndex(storageSubChunk: number) {\r\n    // Valid range: 0-63 (positive subchunks) or 224-255 (negative subchunks stored as unsigned byte)\r\n    // Output range: 0-31 for negative subchunks (224-255), 32-95 for positive subchunks (0-63)\r\n    Log.assert(\r\n      (storageSubChunk >= 0 && storageSubChunk <= MAX_POSITIVE_SUBCHUNK_STORED) ||\r\n        (storageSubChunk >= MIN_NEGATIVE_SUBCHUNK_STORED && storageSubChunk <= MAX_NEGATIVE_SUBCHUNK_STORED),\r\n      \"Unexpected subchunk index (\" + storageSubChunk + \")\"\r\n    );\r\n\r\n    if (storageSubChunk >= MIN_NEGATIVE_SUBCHUNK_STORED) {\r\n      return storageSubChunk - NEGATIVE_SUBCHUNK_OFFSET; // 224\u21920, 255\u219231 (represents Y subchunks -32 to -1)\r\n    }\r\n\r\n    return storageSubChunk + POSITIVE_SUBCHUNK_OFFSET; // 0\u219232, 63\u219295 (represents Y subchunks 0 to 63)\r\n  }\r\n\r\n  processSubChunk(index: number) {\r\n    if (this.pendingSubChunksToProcess[index] === true) {\r\n      this.pendingSubChunksToProcess[index] = false;\r\n      this.parseSubChunk(index);\r\n    }\r\n  }\r\n\r\n  addKeyValue(keyValue: LevelKeyValue) {\r\n    this._hasContent = true;\r\n    let keyBytes = keyValue.keyBytes;\r\n    let wasSuperceded = false; // Track if this update supercedes existing data\r\n    let isSignificantUpdate = false; // Track if this is a significant data addition (subchunk, blockTops, etc.)\r\n\r\n    if (keyBytes) {\r\n      const dimExtensionBytes = keyBytes.length >= 13 ? 4 : 0;\r\n\r\n      const val = keyBytes[8 + dimExtensionBytes];\r\n\r\n      // disabling the \"duplicate unexpected versions\" since this assumption is violated in C&C R17 world\r\n\r\n      switch (val) {\r\n        case 43:\r\n          Log.assert(\r\n            keyValue.value !== undefined && keyValue.value.length > 512,\r\n            \"Unexpected length for a type 43 record.\"\r\n          );\r\n\r\n          // Data3D contains a heightmap with 256 int16 values encoding block top heights.\r\n          // Previously this code set blockTops from these values using an offset (val - 65),\r\n          // but the offset was not verified and described as \"arbitrary\". In practice, when\r\n          // data3d arrives AFTER subchunk data (tag 47) in the LevelDB log \u2014 which is the\r\n          // typical write order \u2014 it would overwrite the cleared blockTops, preventing\r\n          // determineBlockTops() from computing heights from actual parsed subchunk data.\r\n          // This caused incorrect heights and missing blocks in the world map.\r\n          //\r\n          // We now store the raw data3d record for reference but do NOT set blockTops,\r\n          // so getTopBlockY() always calls determineBlockTops() which computes correct\r\n          // heights from the actual subchunk block palette data.\r\n          if (keyValue.value && keyValue.value.length >= 512) {\r\n            this.data3dRecord = keyValue;\r\n          }\r\n\r\n          break;\r\n\r\n        case 115: // not sure what chunk #115 is, or if this is a parsing bug. observed to be one byte with a value of 0\r\n          // Log.assert(false, \"Unexpected type 115 record.\");\r\n          break;\r\n\r\n        case 118: // 118 = legacy version\r\n          Log.assert(\r\n            keyValue.value !== undefined && (keyValue.value.length === 0 || keyValue.value.length === 1),\r\n            \"Unexpected type 118 record.\"\r\n          );\r\n\r\n          if (keyValue.value && keyValue.value.length === 1) {\r\n            if (this.legacyVersion !== undefined) {\r\n              wasSuperceded = true;\r\n            }\r\n            this.legacyVersion = keyValue.value[0];\r\n          } else if (keyValue.value && keyValue.value.length === 0) {\r\n            this.legacyVersion = undefined;\r\n          }\r\n          break;\r\n\r\n        case 44: // version\r\n          if (this.chunkVersion !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.chunkVersion = keyValue;\r\n          break;\r\n\r\n        case 45: // data2d\r\n          if (this.biomesAndElevation !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.biomesAndElevation = keyValue;\r\n          break;\r\n\r\n        case 46: // data2d legacy\r\n          // Log.assert(false, \"Data 2D legacy (NYI).\");\r\n          break;\r\n\r\n        case 47: // subchunk prefix\r\n          let subChunkIndex = this.translateSubChunkIndex(keyBytes[9 + dimExtensionBytes]);\r\n\r\n          if (subChunkIndex < 0) {\r\n            Log.fail(\"Unexpected sub chunk index.\");\r\n            return;\r\n          }\r\n\r\n          if (this.subChunks[subChunkIndex] !== undefined) {\r\n            // This subchunk is being superceded by newer data\r\n            wasSuperceded = true;\r\n            // Clear cached parsed data for this subchunk\r\n            this.blockDataStart[subChunkIndex] = -1;\r\n            this.bitsPerBlock[subChunkIndex] = -1;\r\n            this.blockPalettes[subChunkIndex] = undefined;\r\n          }\r\n\r\n          // Always clear blockTops when adding/updating subchunk data\r\n          // so it gets recalculated with the new data\r\n          this.blockTops = undefined;\r\n\r\n          if (!keyValue.value || keyValue.value.length <= 0) {\r\n            Log.assert(this.subChunks[subChunkIndex] === undefined, \"Empty subchunk defined.\");\r\n            return;\r\n          }\r\n\r\n          this.subChunks[subChunkIndex] = keyValue;\r\n          this.maxSubChunkIndex = Math.max(this.maxSubChunkIndex, subChunkIndex);\r\n          this.minSubChunkIndex = Math.min(this.minSubChunkIndex, subChunkIndex);\r\n          this.pendingSubChunksToProcess[subChunkIndex] = true;\r\n          isSignificantUpdate = true; // Subchunk data affects block rendering\r\n          break;\r\n\r\n        case 48: // legacy terrain\r\n          const bytes = keyValue.value;\r\n\r\n          if (bytes && bytes.length > 0) {\r\n            Log.assert(bytes.length === 83200, \"LegacyTerrain record should be 83,200 bytes\");\r\n            if (this.legacyTerrainBytes !== undefined) {\r\n              wasSuperceded = true;\r\n            }\r\n            this.legacyTerrainBytes = bytes;\r\n            isSignificantUpdate = true; // Legacy terrain data affects block rendering\r\n          }\r\n          break;\r\n\r\n        case 49: // block entity\r\n          this.blockActorKeys.push(keyValue);\r\n          this.blockActorsEnsured = false;\r\n          break;\r\n\r\n        case 50: // entity\r\n          //       Log.assert(!this.entity, \"Unexpected multiple entities.\");\r\n          if (this.entity !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.entity = keyValue;\r\n          break;\r\n\r\n        case 51: // pending ticks\r\n          //Log.assert(!this.pendingTicks, \"Unexpected multiple pending ticks.\");\r\n          this.pendingTicks = keyValue;\r\n          break;\r\n\r\n        case 52: // legacy block extra data\r\n          // Log.assert(false, \"Legacy block extra data - NYI\");\r\n          break;\r\n\r\n        case 53: // biome state\r\n          //Log.assert(!this.biomeState, \"Unexpected multiple biome states.\");\r\n          if (this.biomeState !== undefined) {\r\n            wasSuperceded = true;\r\n          }\r\n          this.biomeState = keyValue;\r\n          break;\r\n\r\n        case 54: // finalized state\r\n          //  Log.assert(!this.finalizedState, \"Unexpected multiple states.\");\r\n          this.finalizedState = keyValue;\r\n          break;\r\n        case 55: // conversion data. data that the converter provides, that are used at runtime for things like blending. no longer used?\r\n          break;\r\n        case 56: // EDU border blocks?\r\n          break;\r\n        case 57: // spawn areas (hard coded spawners)\r\n          break;\r\n        case 58: // random tick\r\n          break;\r\n\r\n        case 59: // check sums\r\n          // Log.assert(!this.checksumKey, \"Unexpected multiple states.\");\r\n          this.checksumKey = keyValue;\r\n          break;\r\n\r\n        case 60: // generation seed\r\n          break;\r\n\r\n        case 61: // generated pre caves and cliffs blending (unused)\r\n          break;\r\n\r\n        case 62: // blending biome height (unused)\r\n          break;\r\n\r\n        case 63: // metadata hash\r\n          break;\r\n\r\n        case 64: // blending data\r\n          break;\r\n\r\n        case 65: // actor digest version\r\n          break;\r\n\r\n        case 119: // ??\r\n          //Log.assert(false, \"Unexpected type 119 data.\");\r\n          break;\r\n        default:\r\n          Log.debugAlert(\"Unsupported chunk type: \" + val);\r\n      }\r\n    }\r\n\r\n    // If data was superceded or significant new data was added, notify the world so map tiles can be refreshed\r\n    // This handles both: (1) old data being replaced by new, and (2) new data arriving for chunks that\r\n    // may have already been rendered as empty/air\r\n    // Only notify if the world has finished initial loading - otherwise we'd spam notifications\r\n    if (wasSuperceded || isSignificantUpdate) {\r\n      this.world.notifyChunkUpdated(this);\r\n    }\r\n  }\r\n\r\n  clearKeyValue(keyBytes: string) {\r\n    if (keyBytes) {\r\n      const dimExtensionBytes = keyBytes.length > 18 || keyBytes.length === 13 || keyBytes.length === 14 ? 4 : 0;\r\n\r\n      const val = keyBytes.charCodeAt(8 + dimExtensionBytes);\r\n\r\n      // disabling the \"duplicate unexpected versions\" since this assumption is violated in C&C R17 world\r\n\r\n      switch (val) {\r\n        case 43: // not sure what chunk #43 is, or if this is a parsing bug. observed to be 578 bytes. \"data3d\"\r\n          break;\r\n        case 115: // not sure what chunk #61 is, or if this is a parsing bug. observed to be one byte with a value of 0\r\n          break;\r\n\r\n        case 118: // 118 = legacy version\r\n        case 44: // version\r\n          //    Log.assert(!this.chunkVersion, \"Unexpected multiple chunk versions.\");\r\n          this.chunkVersion = undefined;\r\n          break;\r\n\r\n        case 45: // data2d\r\n          //  Log.assert(!this.biomesAndElevation, \"Unexpected multiple biomes and elevations.\");\r\n          this.biomesAndElevation = undefined;\r\n          break;\r\n\r\n        case 46: // data2d legacy\r\n          break;\r\n\r\n        case 47: // subchunk prefix\r\n          break;\r\n\r\n        case 48: // legacy terrain\r\n          this.legacyTerrainBytes = undefined;\r\n          break;\r\n\r\n        case 49: // block entity\r\n          break;\r\n\r\n        case 50: // entity\r\n          //       Log.assert(!this.entity, \"Unexpected multiple entities.\");\r\n          this.entity = undefined;\r\n          break;\r\n\r\n        case 51: // pending ticks\r\n          //Log.assert(!this.pendingTicks, \"Unexpected multiple pending ticks.\");\r\n          this.pendingTicks = undefined;\r\n          break;\r\n\r\n        case 52: // legacy block extra data\r\n          break;\r\n        case 53: // biome state\r\n          //Log.assert(!this.biomeState, \"Unexpected multiple biome states.\");\r\n          this.biomeState = undefined;\r\n          break;\r\n\r\n        case 54: // finalized state\r\n          //  Log.assert(!this.finalizedState, \"Unexpected multiple states.\");\r\n          this.finalizedState = undefined;\r\n          break;\r\n        case 55: // conversion data. data that the converter provides, that are used at runtime for things like blending. no longer used?\r\n          break;\r\n        case 56: // EDU border blocks?\r\n          break;\r\n        case 57: // spawn areas (hard coded spawners)\r\n          break;\r\n        case 58: // random tick\r\n          break;\r\n        case 59: // check sums\r\n          // Log.assert(!this.checksumKey, \"Unexpected multiple states.\");\r\n          this.checksumKey = undefined;\r\n          break;\r\n\r\n        case 60: // generation seed\r\n          break;\r\n        case 61: // generated pre caves and cliffs blending (unused)\r\n          break;\r\n        case 62: // blending biome height (unused)\r\n          break;\r\n\r\n        case 63: // metadata hash\r\n          break;\r\n\r\n        case 64: // blending data\r\n          break;\r\n        case 65: // actor digest version\r\n          break;\r\n        case 72: // actor digest version\r\n          break;\r\n\r\n        case 119: // ??\r\n          break;\r\n        default:\r\n          throw new Error(\"Unsupported chunk type: \" + val);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureBlockActors() {\r\n    if (!this._blockActorsRelLoc || this.blockActorsEnsured) {\r\n      return;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    this._blockActorsRelLoc = [];\r\n    this._blockActors = [];\r\n\r\n    for (const keyValue of this.blockActorKeys) {\r\n      if (keyValue.value && keyValue.value.length > 0) {\r\n        const tag = new NbtBinary();\r\n\r\n        tag.context = this.world.name + \" chunk at x:\" + this.x * 16 + \" z:\" + this.z * 16;\r\n\r\n        try {\r\n          tag.fromBinary(keyValue.value, true, false, 0, true, true);\r\n        } catch (e) {\r\n          Log.error(\"Could not parse a block actor.\");\r\n        }\r\n\r\n        if (tag.roots) {\r\n          for (let i = 0; i < tag.roots.length; i++) {\r\n            const ba = new GenericBlockActor(tag.roots[i]);\r\n\r\n            if (\r\n              ba.x !== undefined &&\r\n              ba.z !== undefined &&\r\n              ba.y !== undefined &&\r\n              ba.x >= this.x * 16 &&\r\n              ba.x < (this.x + 1) * 16 &&\r\n              ba.z >= this.z * 16 &&\r\n              ba.z < (this.z + 1) * 16\r\n            ) {\r\n              let actorRelX = ba.x % 16;\r\n              let actorRelZ = ba.z % 16;\r\n\r\n              if (actorRelX < 0) {\r\n                actorRelX = 16 + actorRelX;\r\n              }\r\n\r\n              if (actorRelZ < 0) {\r\n                actorRelZ = 16 + actorRelZ;\r\n              }\r\n\r\n              if (ba.id) {\r\n                const specificBa = BlockActorFactory.create(ba.id, tag.roots[i]);\r\n\r\n                if (specificBa) {\r\n                  specificBa.load();\r\n                  if (!this._blockActorsRelLoc[actorRelX]) {\r\n                    this._blockActorsRelLoc[actorRelX] = [];\r\n                  }\r\n                  if (!this._blockActorsRelLoc[actorRelX][ba.y]) {\r\n                    this._blockActorsRelLoc[actorRelX][ba.y] = [];\r\n                  }\r\n\r\n                  this._blockActorsRelLoc[actorRelX][ba.y][actorRelZ] = specificBa;\r\n\r\n                  if (specificBa.x !== undefined && specificBa.y !== undefined && specificBa.z !== undefined) {\r\n                    //       this.removeBlockActorAtLoc(specificBa.x, specificBa.y, specificBa.z);\r\n                  }\r\n\r\n                  this._blockActors.push(specificBa);\r\n                }\r\n\r\n                Log.assert(specificBa !== undefined, \"Could not find an actor implementation for '\" + ba.id + \"'\");\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.blockActorsEnsured = true;\r\n  }\r\n\r\n  /**\r\n   * Parses entity data from the chunk's entity LevelKeyValue.\r\n   * This handles legacy entity storage (pre-1.18.30) where entity data\r\n   * is stored as concatenated NBT compound tags per chunk (type 50).\r\n   *\r\n   * Modern worlds (1.18.30+) store actors individually via actorprefix keys,\r\n   * which are parsed into MCWorld.actorsById instead.\r\n   *\r\n   * See: https://learn.microsoft.com/en-us/minecraft/creator/documents/actorstorage\r\n   */\r\n  ensureEntities() {\r\n    if (this._entitiesEnsured) {\r\n      return;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    this._entities = [];\r\n    this._entitiesEnsured = true;\r\n\r\n    if (!this.entity || !this.entity.value || this.entity.value.length === 0) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const entityNbt = new NbtBinary();\r\n      entityNbt.context = this.world.name + \" entities at chunk x:\" + this.x + \" z:\" + this.z;\r\n      entityNbt.fromBinary(this.entity.value, true, false, 0, true, true);\r\n\r\n      if (entityNbt.roots) {\r\n        for (const root of entityNbt.roots) {\r\n          // Each root is an entity compound tag - parse it into a ChunkEntity\r\n          const entity = ChunkEntity.fromNbtTag(root);\r\n          if (entity) {\r\n            this._entities.push(entity);\r\n          }\r\n        }\r\n\r\n        if (this._entities.length > 0) {\r\n          Log.verbose(\"Parsed \" + this._entities.length + \" legacy entities in chunk x:\" + this.x + \" z:\" + this.z);\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.error(\"Could not parse legacy entities for chunk x:\" + this.x + \" z:\" + this.z + \" - \" + e);\r\n    }\r\n  }\r\n\r\n  removeBlockActorAtLoc(x: number, y: number, z: number) {\r\n    this._checkNotCleared();\r\n\r\n    const newBlockActors = [];\r\n\r\n    for (const blockActor of this._blockActors) {\r\n      if (blockActor.x !== x || blockActor.y !== y || blockActor.z !== z) {\r\n        newBlockActors.push(blockActor);\r\n      }\r\n    }\r\n\r\n    this._blockActors = newBlockActors;\r\n  }\r\n\r\n  getSubChunkCube(subChunkId: number) {\r\n    this._checkNotCleared();\r\n\r\n    const bc = new BlockVolume();\r\n\r\n    bc.maxX = CHUNK_X_SIZE;\r\n    bc.maxY = SUBCHUNK_Y_SIZE;\r\n    bc.maxZ = CHUNK_Z_SIZE;\r\n\r\n    this.fillCube(bc, 0, 0, 0, 16, 16, 16, 0, subChunkId * SUBCHUNK_Y_SIZE, 0);\r\n\r\n    return bc;\r\n  }\r\n\r\n  fillCubeLegacy(\r\n    cube: BlockVolume,\r\n    cubeX: number,\r\n    cubeY: number,\r\n    cubeZ: number,\r\n    maxCubeX: number,\r\n    maxCubeY: number,\r\n    maxCubeZ: number,\r\n    internalOffsetX: number,\r\n    internalOffsetY: number,\r\n    internalOffsetZ: number\r\n  ) {\r\n    Log.assert(\r\n      cubeX >= 0 &&\r\n        cubeY >= 0 &&\r\n        cubeZ >= 0 &&\r\n        maxCubeX > cubeX &&\r\n        maxCubeY > cubeY &&\r\n        maxCubeZ > cubeZ &&\r\n        internalOffsetX < CHUNK_X_SIZE &&\r\n        internalOffsetZ < CHUNK_Z_SIZE &&\r\n        this.legacyTerrainBytes !== undefined,\r\n      \"Fill cube legacy not within bounds.\"\r\n    );\r\n\r\n    if (!this.legacyTerrainBytes) {\r\n      return;\r\n    }\r\n\r\n    for (let iX = cubeX; iX < maxCubeX && iX - cubeX + internalOffsetX < CHUNK_X_SIZE; iX++) {\r\n      const inChunkX = iX - cubeX + internalOffsetX;\r\n      const plane = cube.x(iX);\r\n\r\n      for (let iY = cubeY; iY < maxCubeY && iY - cubeY + internalOffsetY < 128; iY++) {\r\n        const blockLine = plane.y(iY);\r\n        const inChunkY = iY - cubeY + internalOffsetY;\r\n\r\n        for (let iZ = cubeZ; iZ < maxCubeZ && iZ - cubeZ + internalOffsetZ < CHUNK_Z_SIZE; iZ++) {\r\n          const inChunkZ = iZ - cubeZ + internalOffsetZ;\r\n\r\n          const byte = this.legacyTerrainBytes[inChunkX * 128 * 16 + inChunkZ * 128 + inChunkY];\r\n\r\n          if (byte) {\r\n            blockLine.z(iZ).copyFrom(Block.fromLegacyId(byte));\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  fillCube(\r\n    cube: BlockVolume,\r\n    cubeX: number,\r\n    cubeY: number,\r\n    cubeZ: number,\r\n    maxCubeX: number,\r\n    maxCubeY: number,\r\n    maxCubeZ: number,\r\n    internalOffsetX: number,\r\n    internalOffsetY: number,\r\n    internalOffsetZ: number\r\n  ) {\r\n    if (this.legacyTerrainBytes) {\r\n      this.fillCubeLegacy(\r\n        cube,\r\n        cubeX,\r\n        cubeY,\r\n        cubeZ,\r\n        maxCubeX,\r\n        maxCubeY,\r\n        maxCubeZ,\r\n        internalOffsetX,\r\n        internalOffsetY,\r\n        internalOffsetZ\r\n      );\r\n      return;\r\n    }\r\n\r\n    Log.assert(\r\n      cubeX >= 0 &&\r\n        cubeY >= 0 &&\r\n        cubeZ >= 0 &&\r\n        maxCubeX > cubeX &&\r\n        maxCubeY > cubeY &&\r\n        maxCubeZ > cubeZ &&\r\n        internalOffsetX < CHUNK_X_SIZE &&\r\n        internalOffsetZ < CHUNK_Z_SIZE,\r\n      \"Fill cube not within bounds.\"\r\n    );\r\n\r\n    const zHeight = maxCubeY - cubeY;\r\n    const initialChunkId = this.getSubChunkIndexFromY(internalOffsetY);\r\n    const finalChunkId = this.getSubChunkIndexFromY(internalOffsetY + zHeight);\r\n\r\n    Log.assert(initialChunkId >= 0 && finalChunkId >= initialChunkId, \"WCFC\");\r\n\r\n    for (let i = 0; i <= finalChunkId - initialChunkId; i++) {\r\n      const subChunkId = initialChunkId + i;\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk) {\r\n        const subChunkYExtent = this.getStartYFromSubChunkIndex(subChunkId + 1);\r\n\r\n        let cubeYStartForThisSubChunk = 0;\r\n\r\n        if (i >= 1) {\r\n          cubeYStartForThisSubChunk = 16 - ((Math.abs(this.absoluteZeroY) + internalOffsetY) % 16);\r\n        }\r\n        if (i >= 2) {\r\n          cubeYStartForThisSubChunk += (i - 1) * 16;\r\n        }\r\n\r\n        if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n          const blockTemplates: Block[] = [];\r\n          const bytes = subChunk.value;\r\n          if (bytes) {\r\n            Log.assert(\r\n              bytes.length === 10251 || bytes.length === 10241 || bytes.length === 6145,\r\n              \"Expected 6145 or 10241 bytes for a legacy subchunk. (\" + bytes.length + \")\"\r\n            );\r\n\r\n            for (let i = 0; i < 4096; i++) {\r\n              let blockTypeIndex = bytes[1 + i];\r\n              let blockAuxIndex = bytes[4097 + i];\r\n\r\n              let templateIndex = blockTypeIndex * 256 + blockAuxIndex;\r\n\r\n              if (!blockTemplates[templateIndex]) {\r\n                const blockType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n\r\n                if (!blockType || !blockType.id) {\r\n                  throw new Error(\"Expected a block type for index \" + blockTypeIndex);\r\n                }\r\n\r\n                const block = new Block(\"minecraft:\" + blockType.id);\r\n\r\n                block.data = blockAuxIndex;\r\n\r\n                blockTemplates[templateIndex] = block;\r\n              }\r\n\r\n              cube\r\n                .x(i % 16)\r\n                .y(Math.floor(i / 256))\r\n                .z(Math.floor(i / 16))\r\n                .copyFrom(blockTemplates[templateIndex]);\r\n            }\r\n          }\r\n        } else {\r\n          const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n          const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n          const subChunkBlockDataStart = this.blockDataStart[subChunkId];\r\n\r\n          const bytes = subChunk.value;\r\n          const blockPalette = this.blockPalettes[subChunkId];\r\n\r\n          if (bytes && blockPalette) {\r\n            for (let iX = cubeX; iX < maxCubeX && iX - cubeX + internalOffsetX < CHUNK_X_SIZE; iX++) {\r\n              const inChunkX = iX - cubeX + internalOffsetX;\r\n              const plane = cube.x(iX);\r\n\r\n              const blockIndexXStart = inChunkX * 256;\r\n\r\n              for (\r\n                let iY = cubeY + cubeYStartForThisSubChunk;\r\n                iY < maxCubeY && iY - cubeY + internalOffsetY < subChunkYExtent;\r\n                iY++\r\n              ) {\r\n                const inSubChunkY = (Math.abs(this.absoluteZeroY) + (iY - cubeY + internalOffsetY)) % 16;\r\n\r\n                Log.assert(inSubChunkY >= 0, \"WCFCA\");\r\n\r\n                const blockLine = plane.y(iY);\r\n\r\n                for (let iZ = cubeZ; iZ < maxCubeZ && iZ - cubeZ + internalOffsetZ < CHUNK_Z_SIZE; iZ++) {\r\n                  const inChunkZ = iZ - cubeZ + internalOffsetZ;\r\n\r\n                  const blockWordByteStart =\r\n                    subChunkBlockDataStart + Math.floor((blockIndexXStart + inChunkZ * 16 + inSubChunkY) / bpw) * 4;\r\n\r\n                  const blocksIn = (blockIndexXStart + inChunkZ * 16 + inSubChunkY) % bpw;\r\n\r\n                  let word = DataUtilities.getUnsignedInteger(\r\n                    bytes[blockWordByteStart],\r\n                    bytes[blockWordByteStart + 1],\r\n                    bytes[blockWordByteStart + 2],\r\n                    bytes[blockWordByteStart + 3],\r\n                    true\r\n                  );\r\n\r\n                  word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n                  let value = 0;\r\n\r\n                  for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n                    let inc = word % 2;\r\n                    inc <<= i;\r\n                    value += inc;\r\n                    word >>>= 1;\r\n                  }\r\n\r\n                  if (blockPalette.blocks.length > 0) {\r\n                    Log.assert(value < blockPalette.blocks.length, \"Unexpected block index.\");\r\n\r\n                    const block = blockPalette.blocks[value];\r\n\r\n                    if (block) {\r\n                      blockLine.z(iZ).copyFrom(block);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getTopBlockY(x: number, z: number) {\r\n    if (!this.blockTops) {\r\n      this.determineBlockTops();\r\n    }\r\n\r\n    if (!this.blockTops) {\r\n      throw new Error(\"Unexpected block top error.\");\r\n    }\r\n\r\n    return this.blockTops[x][z];\r\n  }\r\n\r\n  getTopBlock(x: number, z: number) {\r\n    if (!this.blockTops) {\r\n      this.determineBlockTops();\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    if (!this.blockTops) {\r\n      throw new Error(\"Unexpected block top error.\");\r\n    }\r\n\r\n    return this.getBlock(x, this.blockTops[x][z], z);\r\n  }\r\n\r\n  _getBlockLegacy(x: number, y: number, z: number) {\r\n    if (!this.legacyTerrainBytes || z < 0 || x < 0 || y < 0) {\r\n      throw new Error();\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    const byte = this.legacyTerrainBytes[x * 128 * 16 + z * 128 + y];\r\n\r\n    return Block.fromLegacyId(byte);\r\n  }\r\n\r\n  _getBlockLegacyList() {\r\n    if (!this.legacyTerrainBytes) {\r\n      throw new Error();\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    const blocks: Block[] = [];\r\n\r\n    for (let y = 0; y < MAX_LEGACY_Y; y++) {\r\n      for (let z = 0; z < 16; z++) {\r\n        for (let x = 0; x < 16; x++) {\r\n          const byte = this.legacyTerrainBytes[x * 128 * 16 + z * 128 + y];\r\n\r\n          blocks.push(Block.fromLegacyId(byte));\r\n        }\r\n      }\r\n    }\r\n\r\n    return blocks;\r\n  }\r\n\r\n  doesBlockPaletteExist(y: number) {\r\n    if (this.legacyTerrainBytes) {\r\n      return true;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    const subChunkId = this.getSubChunkIndexFromY(y);\r\n\r\n    const blockPalettes = this.blockPalettes[subChunkId];\r\n\r\n    if (blockPalettes) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  // x and z should be between 0 and 15\r\n  getBlock(x: number, y: number, z: number) {\r\n    if (y < this.absoluteZeroY) {\r\n      return undefined;\r\n    }\r\n    this._checkNotCleared();\r\n\r\n    Log.assert(x >= 0 && x < 16 && z >= 0 && z < 16, \"Retrieving an out-of-range block from a chunk.\");\r\n\r\n    if (this.legacyTerrainBytes) {\r\n      return this._getBlockLegacy(x, y, z);\r\n    }\r\n\r\n    const subChunkId = this.getSubChunkIndexFromY(y);\r\n\r\n    if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n      this.processSubChunk(subChunkId);\r\n    }\r\n\r\n    // legacy subchunk format 1.0 -> 1.2.13\r\n    if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      const bytes = subChunk.value;\r\n      if (bytes) {\r\n        const inSubChunkY = y - this.getStartYFromSubChunkIndex(subChunkId);\r\n\r\n        Log.assert(inSubChunkY >= 0 && inSubChunkY < 16, \"Unexpected Y for a sub chunk (\" + inSubChunkY + \")\");\r\n        Log.assert(\r\n          bytes.length === 10251 || bytes.length === 10241 || bytes.length === 6145,\r\n          \"1.00 subchunk format should be 6145 or 10241 bytes. (\" + bytes.length + \")\"\r\n        );\r\n\r\n        const blockTypeIndex = bytes[1 + (inSubChunkY + z * 16 + x * 256)];\r\n        const blockAuxIndex = bytes[4097 + (inSubChunkY + z * 16 + x * 256)];\r\n\r\n        const baseType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n        Log.assertDefined(baseType.id);\r\n        // Use air for unknown block types to gracefully handle missing legacy IDs\r\n        const blockId = baseType?.id ? \"minecraft:\" + baseType.id : \"minecraft:air\";\r\n        const block = new Block(blockId);\r\n        block.data = blockAuxIndex;\r\n\r\n        return block;\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n\r\n    const index = this.getBlockPaletteIndex(x, y, z);\r\n\r\n    if (index === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const blockPalettes = this.blockPalettes[subChunkId];\r\n\r\n    if (!blockPalettes) {\r\n      return undefined;\r\n    }\r\n\r\n    const blocks = blockPalettes.blocks;\r\n\r\n    Log.assert(index < blocks.length, \"Unexpected block index\");\r\n\r\n    return blocks[index];\r\n  }\r\n\r\n  /**\r\n   * Returns a count of block types in this chunk without allocating Block objects.\r\n   * This is much more memory-efficient than getBlockList() for statistical analysis.\r\n   * @returns A Map of block type names to their counts in this chunk\r\n   */\r\n  countBlockTypes(): Map<string, number> {\r\n    const typeCounts = new Map<string, number>();\r\n\r\n    if (this.legacyTerrainBytes) {\r\n      // Legacy terrain - count block type IDs directly\r\n      for (let i = 0; i < this.legacyTerrainBytes.length && i < 16 * 16 * MAX_LEGACY_Y; i++) {\r\n        const byte = this.legacyTerrainBytes[i];\r\n        if (byte !== 0) {\r\n          const blockType = Database.getBlockTypeByLegacyId(byte);\r\n          if (blockType && blockType.id) {\r\n            const typeName = \"minecraft:\" + blockType.id;\r\n            typeCounts.set(typeName, (typeCounts.get(typeName) || 0) + 1);\r\n          }\r\n        }\r\n      }\r\n      return typeCounts;\r\n    }\r\n\r\n    for (let subChunkId = this.minSubChunkIndex; subChunkId <= this.maxSubChunkIndex; subChunkId++) {\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk !== undefined) {\r\n        if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n          this.processSubChunk(subChunkId);\r\n        }\r\n\r\n        if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n          // Legacy subchunk format - count from raw bytes\r\n          const bytes = subChunk.value;\r\n          if (bytes && bytes.length >= 4097) {\r\n            for (let i = 0; i < 4096; i++) {\r\n              const blockTypeIndex = bytes[1 + i];\r\n              if (blockTypeIndex !== 0) {\r\n                const blockType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n                if (blockType && blockType.id) {\r\n                  const typeName = \"minecraft:\" + blockType.id;\r\n                  typeCounts.set(typeName, (typeCounts.get(typeName) || 0) + 1);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          // Modern palette-based format - count palette entries efficiently\r\n          const blockPalette = this.blockPalettes[subChunkId];\r\n          if (blockPalette && blockPalette.blocks.length > 0) {\r\n            // Count how many times each palette index appears\r\n            const paletteCounts = new Map<number, number>();\r\n            const bytes = subChunk.value;\r\n\r\n            if (bytes) {\r\n              const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n              const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n              const blockDataStart = this.blockDataStart[subChunkId];\r\n\r\n              // Iterate through all 4096 blocks in this subchunk\r\n              for (let blockIndex = 0; blockIndex < 4096; blockIndex++) {\r\n                const byteStart = blockDataStart + Math.floor(blockIndex / bpw) * 4;\r\n                const blocksIn = blockIndex % bpw;\r\n\r\n                let word = DataUtilities.getUnsignedInteger(\r\n                  bytes[byteStart],\r\n                  bytes[byteStart + 1],\r\n                  bytes[byteStart + 2],\r\n                  bytes[byteStart + 3],\r\n                  true\r\n                );\r\n\r\n                word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n                let paletteIndex = 0;\r\n                for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n                  let inc = word % 2;\r\n                  inc <<= i;\r\n                  paletteIndex += inc;\r\n                  word >>>= 1;\r\n                }\r\n\r\n                paletteCounts.set(paletteIndex, (paletteCounts.get(paletteIndex) || 0) + 1);\r\n              }\r\n\r\n              // Convert palette counts to type counts\r\n              for (const [paletteIndex, count] of paletteCounts) {\r\n                if (paletteIndex < blockPalette.blocks.length) {\r\n                  const block = blockPalette.blocks[paletteIndex];\r\n                  if (block && block.typeName) {\r\n                    typeCounts.set(block.typeName, (typeCounts.get(block.typeName) || 0) + count);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return typeCounts;\r\n  }\r\n\r\n  getBlockList() {\r\n    if (this.legacyTerrainBytes) {\r\n      return this._getBlockLegacyList();\r\n    }\r\n\r\n    const blocks = [];\r\n    for (let subChunkId = this.minSubChunkIndex; subChunkId <= this.maxSubChunkIndex; subChunkId++) {\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk !== undefined) {\r\n        if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n          this.processSubChunk(subChunkId);\r\n        }\r\n\r\n        if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n          const blockTemplates: Block[] = [];\r\n          const bytes = subChunk.value;\r\n          if (bytes) {\r\n            Log.assert(\r\n              bytes.length === 10251 || bytes.length === 10241 || bytes.length === 6145 || bytes.length === 6155,\r\n              \"Expected 6145 or 10241 bytes for a legacy subchunk in getblock. (\" + bytes.length + \")\"\r\n            );\r\n            // 6145 bytes if the light information is omitted;\r\n            // 10241 bytes if there is 2kb + 2kb of light information\r\n\r\n            for (let i = 0; i < 4096; i++) {\r\n              let blockTypeIndex = bytes[1 + i];\r\n              let blockAuxIndex = bytes[4097 + i];\r\n\r\n              let templateIndex = blockTypeIndex * 256 + blockAuxIndex;\r\n\r\n              if (!blockTemplates[templateIndex]) {\r\n                const blockType = Database.getBlockTypeByLegacyId(blockTypeIndex);\r\n                if (!blockType || !blockType.id) {\r\n                  throw new Error(\"Expected a block type for index \" + blockTypeIndex);\r\n                }\r\n                // Use air for unknown block types to gracefully handle missing legacy IDs\r\n                const blockId = blockType?.id ? \"minecraft:\" + blockType.id : \"minecraft:air\";\r\n                const block = new Block(blockId);\r\n\r\n                block.data = blockAuxIndex;\r\n\r\n                blockTemplates[templateIndex] = block;\r\n              }\r\n\r\n              blocks.push(blockTemplates[templateIndex]);\r\n            }\r\n          }\r\n        } else {\r\n          let indices = this.getBlockPaletteIndexList(subChunkId);\r\n\r\n          if (indices) {\r\n            const blockPalettes = this.blockPalettes[subChunkId];\r\n\r\n            if (blockPalettes) {\r\n              const blockTemplates = blockPalettes.blocks;\r\n\r\n              for (let i = 0; i < indices.length; i++) {\r\n                blocks.push(blockTemplates[indices[i]]);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return blocks;\r\n  }\r\n\r\n  _determineBlockTopsLegacy() {\r\n    if (!this.legacyTerrainBytes || !this.blockTops) {\r\n      return;\r\n    }\r\n\r\n    for (let iX = 0; iX < 16; iX++) {\r\n      const iXByte = iX * 128 * 16;\r\n\r\n      for (let iZ = 0; iZ < 16; iZ++) {\r\n        const iZByte = iZ * 128;\r\n\r\n        for (let iY = 127; iY >= 0; iY--) {\r\n          const byte = this.legacyTerrainBytes[iXByte + iZByte + iY];\r\n\r\n          if (byte !== 0) {\r\n            this.blockTops[iX][iZ] = iY;\r\n            iY = -1;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  determineBlockTops() {\r\n    this.blockTops = [];\r\n\r\n    for (let i = 0; i < 16; i++) {\r\n      const arr = [];\r\n\r\n      for (let j = 0; j < 16; j++) {\r\n        arr.push(-32768);\r\n      }\r\n\r\n      this.blockTops.push(arr);\r\n    }\r\n\r\n    if (this.legacyTerrainBytes) {\r\n      this._determineBlockTopsLegacy();\r\n      return;\r\n    }\r\n\r\n    let matchCount = 0;\r\n\r\n    for (let subChunkId = this.maxSubChunkIndex; subChunkId >= 0; subChunkId--) {\r\n      if (this.pendingSubChunksToProcess[subChunkId] === true) {\r\n        this.parseSubChunk(subChunkId);\r\n      }\r\n\r\n      const subChunk = this.subChunks[subChunkId];\r\n\r\n      if (subChunk !== undefined) {\r\n        const bytes = subChunk.value;\r\n\r\n        if (bytes !== undefined) {\r\n          if (this.subChunkFormatType[subChunkId] === SubChunkFormatType.subChunk1dot0) {\r\n            for (let iY = 15; iY >= 0; iY--) {\r\n              for (let iZ = 0; iZ < 16; iZ++) {\r\n                for (let iX = 0; iX < 16; iX++) {\r\n                  let blockTypeId = bytes[iX * 256 + iZ * CHUNK_Z_SIZE + iY];\r\n\r\n                  if (\r\n                    blockTypeId !== 0 /* air */ &&\r\n                    blockTypeId !== 37 /* flower */ &&\r\n                    blockTypeId !== 31 /* tallgrass*/ &&\r\n                    this.blockTops[iX][iZ] < -1024\r\n                  ) {\r\n                    const yIndex = iY + this.getStartYFromSubChunkIndex(subChunkId);\r\n\r\n                    this.blockTops[iX][iZ] = yIndex - 1;\r\n                    matchCount++;\r\n                    if (matchCount === 256) {\r\n                      return;\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          } else {\r\n            //y z x\r\n            const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n            const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n            const disallowedIndices = [];\r\n\r\n            const blockPals = this.blockPalettes[subChunkId];\r\n\r\n            if (blockPals) {\r\n              Log.assert(blockPals.blocks !== undefined, \"WCDBTA\");\r\n\r\n              for (let iPal = 0; iPal < blockPals.blocks.length; iPal++) {\r\n                const block = blockPals.blocks[iPal];\r\n\r\n                if (\r\n                  block.shortTypeId === \"air\" ||\r\n                  block.shortTypeId === \"flower\" ||\r\n                  block.shortTypeId === \"tallgrass\" ||\r\n                  block.shortTypeId === \"barrier\" ||\r\n                  block.shortTypeId === \"structure_void\" ||\r\n                  block.shortTypeId === \"light_block\"\r\n                ) {\r\n                  disallowedIndices.push(iPal);\r\n                }\r\n              }\r\n              for (let iY = 15; iY >= 0; iY--) {\r\n                const yIndex = iY + this.getStartYFromSubChunkIndex(subChunkId);\r\n\r\n                for (let iZ = 0; iZ < 16; iZ++) {\r\n                  for (let iX = 0; iX < 16; iX++) {\r\n                    if (yIndex >= this.blockTops[iX][iZ]) {\r\n                      const blockIndex = iX * 256 + iZ * CHUNK_Z_SIZE + iY;\r\n\r\n                      const byteStart = this.blockDataStart[subChunkId] + Math.floor(blockIndex / bpw) * 4;\r\n                      const blocksIn = blockIndex % bpw;\r\n\r\n                      let word = DataUtilities.getUnsignedInteger(\r\n                        bytes[byteStart],\r\n                        bytes[byteStart + 1],\r\n                        bytes[byteStart + 2],\r\n                        bytes[byteStart + 3],\r\n                        true\r\n                      );\r\n\r\n                      word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n                      let value = 0;\r\n\r\n                      for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n                        let inc = word % 2;\r\n                        inc <<= i;\r\n                        value += inc;\r\n                        word >>>= 1;\r\n                      }\r\n\r\n                      let matchesSolidIndex = true;\r\n\r\n                      for (let iDis = 0; iDis < disallowedIndices.length; iDis++) {\r\n                        if (value === disallowedIndices[iDis]) {\r\n                          matchesSolidIndex = false;\r\n                        }\r\n                      }\r\n                      if (matchesSolidIndex) {\r\n                        matchCount++;\r\n                        this.blockTops[iX][iZ] = yIndex;\r\n                        if (matchCount === 256) {\r\n                          return;\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getSubChunkIndexFromY(y: number) {\r\n    return Math.floor((y - this.absoluteZeroY) / SUBCHUNK_Y_SIZE);\r\n  }\r\n\r\n  getStartYFromSubChunkIndex(subChunkIndex: number) {\r\n    return subChunkIndex * SUBCHUNK_Y_SIZE + this.absoluteZeroY;\r\n  }\r\n\r\n  getBlockPaletteIndex(x: number, y: number, z: number) {\r\n    Log.assert(x >= 0 && x <= 15 && z >= 0 && z <= 15, \"Unexpected x/z\");\r\n\r\n    const subChunkId = this.getSubChunkIndexFromY(y);\r\n\r\n    const subChunk = this.subChunks[subChunkId];\r\n\r\n    if (subChunk === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const bytes = subChunk.value;\r\n\r\n    if (bytes === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    //y z x\r\n\r\n    // Compute the block's Y position within its subchunk (0-15).\r\n    // Math.abs(y % 16) is incorrect for negative Y: e.g., y=-2 gives 2 instead of 14.\r\n    // The correct formula uses modular arithmetic that always produces 0-15.\r\n    const subChunkY = ((y % 16) + 16) % 16;\r\n\r\n    const blockIndex = x * 256 + z * CHUNK_Z_SIZE + subChunkY;\r\n\r\n    const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n    const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n    const byteStart = this.blockDataStart[subChunkId] + Math.floor(blockIndex / bpw) * 4;\r\n    const blocksIn = blockIndex % bpw;\r\n\r\n    let word = DataUtilities.getUnsignedInteger(\r\n      bytes[byteStart],\r\n      bytes[byteStart + 1],\r\n      bytes[byteStart + 2],\r\n      bytes[byteStart + 3],\r\n      true\r\n    );\r\n    //  Log.assert(x !== 15 || y !== 80 || z !== 15);\r\n\r\n    word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n    let value = 0;\r\n\r\n    for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n      let inc = word % 2;\r\n\r\n      inc <<= i;\r\n      value += inc;\r\n      word >>>= 1;\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  getBlockPaletteIndexList(subChunkId: number) {\r\n    const blockIndices = [];\r\n\r\n    const subChunk = this.subChunks[subChunkId];\r\n\r\n    if (subChunk !== undefined) {\r\n      const bytes = subChunk.value;\r\n\r\n      if (bytes === undefined) {\r\n        return undefined;\r\n      }\r\n\r\n      //y z x\r\n\r\n      const subChunkY = this.absoluteZeroY + this.minSubChunkIndex * 16;\r\n\r\n      for (let x = 0; x < 16; x++) {\r\n        for (let z = 0; z < 16; z++) {\r\n          const blockIndex = x * 256 + z * CHUNK_Z_SIZE + subChunkY;\r\n\r\n          const subChunkBitsPerBlock = this.bitsPerBlock[subChunkId];\r\n          const bpw = Math.floor(32 / subChunkBitsPerBlock);\r\n\r\n          const byteStart = this.blockDataStart[subChunkId] + Math.floor(blockIndex / bpw) * 4;\r\n          const blocksIn = blockIndex % bpw;\r\n\r\n          let word = DataUtilities.getUnsignedInteger(\r\n            bytes[byteStart],\r\n            bytes[byteStart + 1],\r\n            bytes[byteStart + 2],\r\n            bytes[byteStart + 3],\r\n            true\r\n          );\r\n\r\n          word >>>= subChunkBitsPerBlock * blocksIn;\r\n\r\n          let value = 0;\r\n\r\n          for (let i = 0; i < subChunkBitsPerBlock; i++) {\r\n            let inc = word % 2;\r\n\r\n            inc <<= i;\r\n            value += inc;\r\n            word >>>= 1;\r\n          }\r\n\r\n          blockIndices.push(value);\r\n        }\r\n      }\r\n    }\r\n\r\n    return blockIndices;\r\n  }\r\n\r\n  parseSubChunk(subChunkIndex: number) {\r\n    const bytes = this.subChunks[subChunkIndex].value;\r\n\r\n    if (bytes === undefined || bytes.length <= 0) {\r\n      Log.fail(\"Unexpected no bytes supplied for a chunk.\");\r\n      return;\r\n    }\r\n\r\n    let bitsPerBlock = 1;\r\n\r\n    const subChunkVersion = bytes[0]; // should be 1 or 8 or (9 = C&C pt 2?)\r\n\r\n    // legacy subchunk format for version 1.0/1.2.13, that predates palette-ized subchunks\r\n    if (subChunkVersion < 8 && subChunkVersion !== 1) {\r\n      this.subChunkFormatType[subChunkIndex] = SubChunkFormatType.subChunk1dot0;\r\n      this.chunkMinY = 0;\r\n\r\n      this.world.chunkMinY = Math.min(this.chunkMinY, this.world.chunkMinY);\r\n      return;\r\n    }\r\n\r\n    if (!(subChunkVersion === 1 || subChunkVersion === 8 || subChunkVersion === 9)) {\r\n      Log.fail(\"Unexpected sub chunk version (\" + subChunkVersion + \")\");\r\n      return;\r\n    }\r\n\r\n    let storageAreas = 1;\r\n    let index = 1;\r\n\r\n    if (subChunkVersion !== 1) {\r\n      storageAreas = bytes[1]; // is either one or two, to indicate the number of block storage areas.  the second is the auxiliary \"water logged\" block area\r\n      Log.assert(storageAreas === 1 || storageAreas === 2, \"Storage areas > 2 not expected\");\r\n      index++;\r\n    }\r\n\r\n    if (subChunkVersion === 9) {\r\n      // not sure what this second byte is for. observed to be of values 0, 1, and 252\r\n      // maybe this is the minimum subchunk level?\r\n      const interimVal = bytes[2];\r\n\r\n      Log.assert(\r\n        (interimVal >= 0 && interimVal <= 32) || (interimVal >= 224 && interimVal <= 256),\r\n        \"Unexpected chunk index\"\r\n      );\r\n\r\n      index++;\r\n      this.chunkMinY = -512;\r\n    } else if (subChunkVersion === 8) {\r\n      this.chunkMinY = 0;\r\n    }\r\n\r\n    if (this.chunkMinY !== undefined) {\r\n      this.world.chunkMinY = Math.min(this.chunkMinY, this.world.chunkMinY);\r\n    }\r\n\r\n    for (let sI = 0; sI < storageAreas; sI++) {\r\n      if (bytes[index] % 2 === 1) {\r\n        // if version LSB is set, this indicates a non-save persistence which we should probably never see\r\n        Log.unexpectedError(\"Unexpected non-save persistence version found.\");\r\n      }\r\n\r\n      bitsPerBlock = bytes[index] >>> 1;\r\n      index++;\r\n\r\n      // have observed empty subchunks with no actual data besides NBT records, where bitsPerBlock === 0\r\n      if (bitsPerBlock === 0) {\r\n        // const bp = new BlockPalette();\r\n        //   index = bp.parseFromBytes(bytes, index, 1);\r\n      } else {\r\n        const blocksPerWord = Math.floor(32 / bitsPerBlock);\r\n        const blockBytes = Math.ceil(4096 / blocksPerWord) * 4;\r\n\r\n        let numPaletteEntries = DataUtilities.getUnsignedInteger(\r\n          bytes[blockBytes + index],\r\n          bytes[blockBytes + index + 1],\r\n          bytes[blockBytes + index + 2],\r\n          bytes[blockBytes + index + 3],\r\n          true\r\n        );\r\n\r\n        if (numPaletteEntries >= 4096) {\r\n          // this is an odd workaround; but it seems like some worlds have their num palette entries listed as big endian\r\n          numPaletteEntries = DataUtilities.getUnsignedInteger(\r\n            bytes[blockBytes + index],\r\n            bytes[blockBytes + index + 1],\r\n            bytes[blockBytes + index + 2],\r\n            bytes[blockBytes + index + 3],\r\n            false\r\n          );\r\n        }\r\n\r\n        Log.assert(numPaletteEntries <= 4096, \"Unexpectedly large number of palette entries\");\r\n\r\n        const bp = new BlockPalette();\r\n\r\n        const blockDataStartIndex = index;\r\n\r\n        index = bp.parseFromBytes(bytes, blockBytes + index + 4, numPaletteEntries);\r\n\r\n        if (bp.blocks.length !== numPaletteEntries) {\r\n          Log.unexpectedError(\"Unexpected block palette count mismatch.\");\r\n        }\r\n\r\n        Log.assert(sI !== storageAreas - 1 || index === bytes.length, \"Unexpectedly didn't consume entire subchunk.\");\r\n\r\n        if (sI === 0) {\r\n          this.blockDataStart[subChunkIndex] = blockDataStartIndex;\r\n          this.bitsPerBlock[subChunkIndex] = bitsPerBlock;\r\n          this.blockPalettes[subChunkIndex] = bp;\r\n          this.subChunkFormatType[subChunkIndex] = SubChunkFormatType.paletteFrom1dot2dot13;\r\n        } else {\r\n          this.auxBlockDataStart[subChunkIndex] = blockDataStartIndex;\r\n          this.auxBitsPerBlock[subChunkIndex] = bitsPerBlock;\r\n          this.auxBlockPalettes[subChunkIndex] = bp;\r\n          this.subChunkFormatType[subChunkIndex] = SubChunkFormatType.paletteFrom1dot2dot13;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IAnchorData from \"./IAnchorData\";\r\nimport IVector3 from \"./IVector3\";\r\n\r\nexport default class Anchor {\r\n  data: IAnchorData;\r\n\r\n  get from() {\r\n    return this.data.from;\r\n  }\r\n\r\n  set from(newFrom: IVector3) {\r\n    this.data.from = newFrom;\r\n  }\r\n\r\n  get to() {\r\n    return this.data.to;\r\n  }\r\n\r\n  set to(newTo: IVector3 | undefined) {\r\n    this.data.to = newTo;\r\n  }\r\n\r\n  get name() {\r\n    return this.data.name;\r\n  }\r\n\r\n  set name(newName: string) {\r\n    this.data.name = newName;\r\n  }\r\n\r\n  constructor(data?: IAnchorData) {\r\n    if (data) {\r\n      this.data = data;\r\n    } else {\r\n      this.data = {\r\n        from: { x: 0, y: 0, z: 0 },\r\n        to: { x: 0, y: 0, z: 0 },\r\n        name: \"\",\r\n      };\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport Anchor from \"./Anchor\";\r\nimport IAnchorData from \"./IAnchorData\";\r\nimport IVector3 from \"./IVector3\";\r\n\r\nexport default class AnchorSet {\r\n  data: { [name: string]: IAnchorData | undefined } = {};\r\n  anchors: { [name: string]: Anchor | undefined } = {};\r\n\r\n  clear(anchorName: string) {\r\n    const exists = this.data[anchorName] !== undefined || this.anchors[anchorName] !== undefined;\r\n\r\n    if (Utilities.isUsableAsObjectKey(anchorName)) {\r\n      this.data[anchorName] = undefined;\r\n      this.anchors[anchorName] = undefined;\r\n    }\r\n\r\n    return exists;\r\n  }\r\n\r\n  clearAll() {\r\n    this.data = {};\r\n    this.anchors = {};\r\n  }\r\n\r\n  getLength() {\r\n    let count = 0;\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    for (const strKey in this.data) {\r\n      count++;\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  getKeys() {\r\n    const keyArr = [];\r\n\r\n    for (const strKey in this.data) {\r\n      keyArr.push(strKey);\r\n    }\r\n\r\n    return keyArr;\r\n  }\r\n\r\n  get(name: string) {\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (this.anchors[name]) {\r\n      return this.anchors[name];\r\n    }\r\n\r\n    if (this.data[name]) {\r\n      this.anchors[name] = new Anchor(this.data[name]);\r\n\r\n      return this.anchors[name];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  ensure(name: string, from: IVector3, to?: IVector3) {\r\n    let anchor: Anchor | undefined;\r\n    if (!Utilities.isUsableAsObjectKey(name)) {\r\n      throw new Error();\r\n    }\r\n\r\n    if (this.anchors[name]) {\r\n      anchor = this.anchors[name];\r\n    }\r\n\r\n    if (!anchor && this.data[name]) {\r\n      this.anchors[name] = new Anchor(this.data[name]);\r\n\r\n      anchor = this.anchors[name];\r\n    }\r\n\r\n    if (!anchor) {\r\n      this.data[name] = {\r\n        from: from,\r\n        to: to,\r\n        name: name,\r\n      };\r\n\r\n      this.anchors[name] = new Anchor(this.data[name]);\r\n\r\n      anchor = this.anchors[name];\r\n    }\r\n\r\n    if (anchor) {\r\n      anchor.from = from;\r\n      anchor.to = to;\r\n      anchor.name = name;\r\n    }\r\n\r\n    return anchor;\r\n  }\r\n\r\n  getAsString() {\r\n    return JSON.stringify(this.data);\r\n  }\r\n\r\n  fromString(incomingStr: string) {\r\n    try {\r\n      this.data = JSON.parse(incomingStr);\r\n    } catch (e) {}\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\nimport { InventoryItem, Item } from \"./Items\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport NbtBinaryTag, { NbtTagType } from \"./NbtBinaryTag\";\r\n\r\nexport interface ActorAttribute {\r\n  base: number;\r\n  current: number;\r\n  defaultMax: number;\r\n  defaultMin: number;\r\n  max: number;\r\n  min: number;\r\n  name: string;\r\n}\r\n\r\nexport default class ActorItem {\r\n  #identifier: string;\r\n  #nbtRoot?: NbtBinaryTag;\r\n  #dynamicProperties: { [behaviorPackUid: string]: { [propertyName: string]: string | number | boolean } } = {};\r\n\r\n  public armorItems: Item[] = [];\r\n  public chestItems: InventoryItem[] = [];\r\n  public attributes: ActorAttribute[] = [];\r\n  public air?: number;\r\n  public attackTime?: number;\r\n  public bodyRot?: number;\r\n  public chested?: boolean;\r\n  public color?: number;\r\n  public color2?: number;\r\n  public dead?: boolean;\r\n  public deathTime?: number;\r\n  public fallDistance?: number;\r\n  public hasExecuted?: boolean;\r\n  public hurtTime?: number;\r\n  public invulnerable?: boolean;\r\n  public isAngry?: boolean;\r\n  public isAutonomous?: boolean;\r\n  public isBaby?: boolean;\r\n  public isEating?: boolean;\r\n  public isGliding?: boolean;\r\n  public isGlobal?: boolean;\r\n  public isIllagerCaptain?: boolean;\r\n  public isOrphaned?: boolean;\r\n  public isOutOfControl?: boolean;\r\n  public isPregnant?: boolean;\r\n  public isRoaring?: boolean;\r\n  public isScared?: boolean;\r\n  public isStunned?: boolean;\r\n  public isSwimming?: boolean;\r\n  public isTamed?: boolean;\r\n  public isTrusting?: boolean;\r\n  public lastDimensionId?: number;\r\n  public leasherId?: number;\r\n  public lootDropped?: boolean;\r\n  public mainhand?: string;\r\n  public markVariant?: number;\r\n  public naturalSpawn?: boolean;\r\n  public offhand?: string;\r\n  public onGround?: boolean;\r\n  public ownerNew?: bigint;\r\n  public persistent?: boolean;\r\n  public portalCooldown?: boolean;\r\n  public pos?: number[];\r\n  public rotation?: number[];\r\n  public saddled?: boolean;\r\n  public sheared?: boolean;\r\n  public showBottom?: boolean;\r\n  public sitting?: boolean;\r\n  public skinId?: number;\r\n  public strength?: number;\r\n  public strengthMax?: number;\r\n  public surface?: boolean;\r\n  public targetId?: bigint;\r\n  public tradeExperience?: number;\r\n  public tradeTier?: number;\r\n  public uniqueId?: bigint;\r\n  public variant?: number;\r\n  public boundX?: number;\r\n  public boundY?: number;\r\n  public boundZ?: number;\r\n  public canPickupItems?: boolean;\r\n  public definitions?: string[];\r\n  public hasBoundOrigin?: boolean;\r\n  public hasSetCanPickupItems?: boolean;\r\n  public identifier?: string;\r\n  public internalComponents?: { [keyName: string]: string };\r\n\r\n  constructor(identifier: string, keyData: Uint8Array) {\r\n    this.#identifier = identifier;\r\n\r\n    const actorStorage = new NbtBinary();\r\n\r\n    actorStorage.context = identifier;\r\n\r\n    actorStorage.fromBinary(keyData, true, false, 0, true);\r\n\r\n    if (actorStorage.singleRoot) {\r\n      this.#nbtRoot = actorStorage.singleRoot;\r\n      this.loadFromNbt();\r\n    }\r\n  }\r\n\r\n  loadFromNbt() {\r\n    if (!this.#nbtRoot) {\r\n      return;\r\n    }\r\n\r\n    const root = this.#nbtRoot;\r\n\r\n    let tag = root.find(\"Armor\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.armorItems = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && wasPickedUpTag) {\r\n          this.armorItems.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"ChestItems\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.armorItems = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const countTag = childTag.find(\"Count\");\r\n        const damageTag = childTag.find(\"Damage\");\r\n        const nameTag = childTag.find(\"Name\");\r\n        const slotTag = childTag.find(\"Slot\");\r\n        const wasPickedUpTag = childTag.find(\"WasPickedUp\");\r\n\r\n        if (countTag && damageTag && nameTag && slotTag && wasPickedUpTag) {\r\n          this.chestItems.push({\r\n            count: countTag.valueAsInt,\r\n            damage: damageTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n            slot: slotTag.valueAsInt,\r\n            wasPickedUp: wasPickedUpTag.valueAsBoolean,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"Attributes\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.attributes = [];\r\n\r\n      for (let i = 0; i < children.length; i++) {\r\n        const childTag = children[i];\r\n\r\n        const baseTag = childTag.find(\"Base\");\r\n        const currentTag = childTag.find(\"Current\");\r\n        const defaultMaxTag = childTag.find(\"DefaultMax\");\r\n        const defaultMinTag = childTag.find(\"DefaultMin\");\r\n        const maxTag = childTag.find(\"Max\");\r\n        const minTag = childTag.find(\"Min\");\r\n        const nameTag = childTag.find(\"Name\");\r\n\r\n        if (baseTag && currentTag && nameTag && defaultMaxTag && defaultMinTag && maxTag && minTag) {\r\n          this.attributes.push({\r\n            base: baseTag.valueAsInt,\r\n            current: currentTag.valueAsInt,\r\n            defaultMax: defaultMaxTag.valueAsInt,\r\n            defaultMin: defaultMinTag.valueAsInt,\r\n            max: maxTag.valueAsInt,\r\n            min: minTag.valueAsInt,\r\n            name: nameTag.valueAsString,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"DynamicProperties\");\r\n    if (tag !== null) {\r\n      const children = tag.getTagChildren();\r\n      this.#dynamicProperties = {};\r\n\r\n      for (const child of children) {\r\n        if (child.name && Utilities.isValidUuid(child.name)) {\r\n          this.#dynamicProperties[child.name] = {};\r\n\r\n          const bpChildren = child.getTagChildren();\r\n\r\n          for (const propChild of bpChildren) {\r\n            if (propChild.name && propChild.type === NbtTagType.string) {\r\n              this.#dynamicProperties[child.name][propChild.name] = propChild.valueAsString;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    tag = root.find(\"AttackTime\");\r\n    if (tag !== null) {\r\n      this.attackTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Air\");\r\n    if (tag !== null) {\r\n      this.air = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"BodyRot\");\r\n    if (tag !== null) {\r\n      this.bodyRot = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"Chested\");\r\n    if (tag !== null) {\r\n      this.chested = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Color\");\r\n    if (tag !== null) {\r\n      this.color = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Color2\");\r\n    if (tag !== null) {\r\n      this.color2 = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Dead\");\r\n    if (tag !== null) {\r\n      this.dead = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"DeathTime\");\r\n    if (tag !== null) {\r\n      this.deathTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"FallDistance\");\r\n    if (tag !== null) {\r\n      this.fallDistance = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"HasExecuted\");\r\n    if (tag !== null) {\r\n      this.hasExecuted = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"HurtTime\");\r\n    if (tag !== null) {\r\n      this.hurtTime = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Invulnerable\");\r\n    if (tag !== null) {\r\n      this.invulnerable = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsAngry\");\r\n    if (tag !== null) {\r\n      this.isAngry = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsAutonomous\");\r\n    if (tag !== null) {\r\n      this.isAutonomous = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsBaby\");\r\n    if (tag !== null) {\r\n      this.isBaby = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsEating\");\r\n    if (tag !== null) {\r\n      this.isEating = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsGliding\");\r\n    if (tag !== null) {\r\n      this.isGliding = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsGlobal\");\r\n    if (tag !== null) {\r\n      this.isGliding = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsIllagerCaptain\");\r\n    if (tag !== null) {\r\n      this.isIllagerCaptain = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsOrphaned\");\r\n    if (tag !== null) {\r\n      this.isOrphaned = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsOutOfControl\");\r\n    if (tag !== null) {\r\n      this.isOutOfControl = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsPregnant\");\r\n    if (tag !== null) {\r\n      this.isPregnant = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsRoaring\");\r\n    if (tag !== null) {\r\n      this.isRoaring = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsScared\");\r\n    if (tag !== null) {\r\n      this.isScared = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsStunned\");\r\n    if (tag !== null) {\r\n      this.isStunned = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsSwimming\");\r\n    if (tag !== null) {\r\n      this.isSwimming = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsTamed\");\r\n    if (tag !== null) {\r\n      this.isTamed = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"IsTrusting\");\r\n    if (tag !== null) {\r\n      this.isTrusting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"LastDimensionId\");\r\n    if (tag !== null) {\r\n      this.lastDimensionId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"LeasherID\");\r\n    if (tag !== null) {\r\n      this.leasherId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"LootDropped\");\r\n    if (tag !== null) {\r\n      this.lootDropped = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Mainhand\");\r\n    if (tag !== null) {\r\n      this.mainhand = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"MarkVariant\");\r\n    if (tag !== null) {\r\n      this.markVariant = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"NaturalSpawn\");\r\n    if (tag !== null) {\r\n      this.naturalSpawn = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Offhand\");\r\n    if (tag !== null) {\r\n      this.offhand = tag.valueAsString;\r\n    }\r\n\r\n    tag = root.find(\"OnGround\");\r\n    if (tag !== null) {\r\n      this.onGround = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"OwnerNew\");\r\n    if (tag !== null) {\r\n      this.ownerNew = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"Persistent\");\r\n    if (tag !== null) {\r\n      this.persistent = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"PortalCooldown\");\r\n    if (tag !== null) {\r\n      this.portalCooldown = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Pos\");\r\n    if (tag !== null) {\r\n      this.pos = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"Rotation\");\r\n    if (tag !== null) {\r\n      this.rotation = tag.valueAsNumericArray;\r\n    }\r\n\r\n    tag = root.find(\"Saddled\");\r\n    if (tag !== null) {\r\n      this.saddled = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Sheared\");\r\n    if (tag !== null) {\r\n      this.sheared = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"ShowBottom\");\r\n    if (tag !== null) {\r\n      this.showBottom = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"Sitting\");\r\n    if (tag !== null) {\r\n      this.sitting = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"SkinID\");\r\n    if (tag !== null) {\r\n      this.skinId = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"Strength\");\r\n    if (tag !== null) {\r\n      this.strength = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"StrengthMax\");\r\n    if (tag !== null) {\r\n      this.strengthMax = tag.valueAsFloat;\r\n    }\r\n\r\n    tag = root.find(\"Surface\");\r\n    if (tag !== null) {\r\n      this.surface = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"TargetID\");\r\n    if (tag !== null) {\r\n      this.targetId = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"TradeExperience\");\r\n    if (tag !== null) {\r\n      this.tradeExperience = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"TradeTier\");\r\n    if (tag !== null) {\r\n      this.tradeTier = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"UniqueID\");\r\n    if (tag !== null) {\r\n      this.uniqueId = tag.valueAsBigInt;\r\n    }\r\n\r\n    tag = root.find(\"Variant\");\r\n    if (tag !== null) {\r\n      this.variant = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"boundX\");\r\n    if (tag !== null) {\r\n      this.boundX = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"boundY\");\r\n    if (tag !== null) {\r\n      this.boundY = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"boundZ\");\r\n    if (tag !== null) {\r\n      this.boundZ = tag.valueAsInt;\r\n    }\r\n\r\n    tag = root.find(\"canPickupItems\");\r\n    if (tag !== null) {\r\n      this.canPickupItems = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"definitions\");\r\n    if (tag !== null) {\r\n      this.definitions = tag.valueAsStringArray;\r\n    }\r\n\r\n    tag = root.find(\"hasBoundOrigin\");\r\n    if (tag !== null) {\r\n      this.hasBoundOrigin = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"hasSetCanPickupItems\");\r\n    if (tag !== null) {\r\n      this.hasSetCanPickupItems = tag.valueAsBoolean;\r\n    }\r\n\r\n    tag = root.find(\"identifier\");\r\n    if (tag !== null) {\r\n      this.identifier = tag.valueAsString;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport WorldChunk from \"./WorldChunk\";\r\n\r\n/**\r\n * LRU (Least Recently Used) cache for WorldChunk objects.\r\n *\r\n * Manages memory by evicting least recently used chunks when the cache\r\n * exceeds its maximum size. This enables viewing of very large worlds\r\n * without loading all chunks into memory simultaneously.\r\n *\r\n * When a chunk is evicted, its cached/parsed data is cleared but the\r\n * chunk object itself remains in the world's chunks Map. This allows\r\n * the chunk to be re-parsed on demand from its raw LevelKeyValue data.\r\n */\r\nexport default class WorldChunkCache {\r\n  /** Maximum number of chunks to keep parsed data for */\r\n  private _maxChunks: number;\r\n\r\n  /** Ordered list of chunk keys, oldest first (LRU tracking) */\r\n  private _accessOrder: string[] = [];\r\n\r\n  /** Set of chunks currently in the cache */\r\n  private _cachedChunks: Set<string> = new Set();\r\n\r\n  /** Callback to get a chunk by its key */\r\n  private _getChunk?: (key: string) => WorldChunk | undefined;\r\n\r\n  /**\r\n   * Create a new chunk cache.\r\n   * @param maxChunks Maximum number of chunks to keep parsed data for\r\n   */\r\n  constructor(maxChunks: number = 20000) {\r\n    this._maxChunks = maxChunks;\r\n  }\r\n\r\n  /** Get the maximum number of cached chunks */\r\n  get maxChunks(): number {\r\n    return this._maxChunks;\r\n  }\r\n\r\n  /** Set the maximum number of cached chunks */\r\n  set maxChunks(value: number) {\r\n    this._maxChunks = value;\r\n    this._evictIfNeeded();\r\n  }\r\n\r\n  /** Get the current number of cached chunks */\r\n  get size(): number {\r\n    return this._cachedChunks.size;\r\n  }\r\n\r\n  /**\r\n   * Set the callback to retrieve chunks by key.\r\n   * The key format should be \"dim_x_z\" (e.g., \"0_10_-5\").\r\n   */\r\n  setChunkProvider(provider: (key: string) => WorldChunk | undefined): void {\r\n    this._getChunk = provider;\r\n  }\r\n\r\n  /**\r\n   * Generate a cache key for a chunk.\r\n   */\r\n  static makeKey(dim: number, x: number, z: number): string {\r\n    return `${dim}_${x}_${z}`;\r\n  }\r\n\r\n  /**\r\n   * Parse a cache key back into coordinates.\r\n   */\r\n  static parseKey(key: string): { dim: number; x: number; z: number } | undefined {\r\n    const parts = key.split(\"_\");\r\n    if (parts.length !== 3) return undefined;\r\n    return {\r\n      dim: parseInt(parts[0], 10),\r\n      x: parseInt(parts[1], 10),\r\n      z: parseInt(parts[2], 10),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Record access to a chunk, marking it as recently used.\r\n   * Call this whenever a chunk is accessed for rendering or data retrieval.\r\n   */\r\n  access(dim: number, x: number, z: number): void {\r\n    const key = WorldChunkCache.makeKey(dim, x, z);\r\n    this.accessByKey(key);\r\n  }\r\n\r\n  /**\r\n   * Record access to a chunk by key.\r\n   */\r\n  accessByKey(key: string): void {\r\n    // Remove from old position if exists\r\n    const existingIndex = this._accessOrder.indexOf(key);\r\n    if (existingIndex >= 0) {\r\n      this._accessOrder.splice(existingIndex, 1);\r\n    }\r\n\r\n    // Add to end (most recently used)\r\n    this._accessOrder.push(key);\r\n    this._cachedChunks.add(key);\r\n\r\n    // Evict old chunks if over limit\r\n    this._evictIfNeeded();\r\n  }\r\n\r\n  /**\r\n   * Evict least recently used chunks if over the limit.\r\n   */\r\n  private _evictIfNeeded(): void {\r\n    if (this._cachedChunks.size <= this._maxChunks) {\r\n      return;\r\n    }\r\n\r\n    // Evict to 80% of max to avoid frequent evictions\r\n    const targetSize = Math.floor(this._maxChunks * 0.8);\r\n    const chunksToEvict = this._cachedChunks.size - targetSize;\r\n\r\n    for (let i = 0; i < chunksToEvict && this._accessOrder.length > 0; i++) {\r\n      const oldestKey = this._accessOrder.shift();\r\n      if (oldestKey) {\r\n        this._evictChunk(oldestKey);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evict a specific chunk, clearing its cached data.\r\n   */\r\n  private _evictChunk(key: string): void {\r\n    this._cachedChunks.delete(key);\r\n\r\n    if (this._getChunk) {\r\n      const chunk = this._getChunk(key);\r\n      if (chunk) {\r\n        // Clear cached/parsed data but keep raw LevelKeyValue data\r\n        // This allows the chunk to be re-parsed on demand\r\n        chunk.clearCachedData();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a chunk is in the cache (has parsed data available).\r\n   */\r\n  isInCache(dim: number, x: number, z: number): boolean {\r\n    const key = WorldChunkCache.makeKey(dim, x, z);\r\n    return this._cachedChunks.has(key);\r\n  }\r\n\r\n  /**\r\n   * Clear all cached chunks.\r\n   */\r\n  clear(): void {\r\n    // Clear all cached chunk data\r\n    if (this._getChunk) {\r\n      for (const key of this._cachedChunks) {\r\n        const chunk = this._getChunk(key);\r\n        if (chunk) {\r\n          chunk.clearCachedData();\r\n        }\r\n      }\r\n    }\r\n\r\n    this._accessOrder = [];\r\n    this._cachedChunks.clear();\r\n  }\r\n\r\n  /**\r\n   * Prefetch chunks in a region, loading them into the cache.\r\n   * Useful for ensuring a viewport's worth of chunks are available.\r\n   *\r\n   * @param dim Dimension index\r\n   * @param minX Minimum chunk X coordinate\r\n   * @param maxX Maximum chunk X coordinate\r\n   * @param minZ Minimum chunk Z coordinate\r\n   * @param maxZ Maximum chunk Z coordinate\r\n   */\r\n  prefetchRegion(dim: number, minX: number, maxX: number, minZ: number, maxZ: number): void {\r\n    for (let x = minX; x <= maxX; x++) {\r\n      for (let z = minZ; z <= maxZ; z++) {\r\n        this.access(dim, x, z);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get statistics about cache usage.\r\n   */\r\n  getStats(): { size: number; maxSize: number; hitRate: number } {\r\n    return {\r\n      size: this._cachedChunks.size,\r\n      maxSize: this._maxChunks,\r\n      hitRate: 0, // TODO: Track hit/miss for debugging\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * MCWorld.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * MCWorld is the primary class for managing Minecraft world data, including:\r\n * - World metadata (level.dat, level name, spawn position)\r\n * - World chunks and blocks (via LevelDB)\r\n * - Behavior/resource pack registrations\r\n * - Dynamic properties and experiments\r\n *\r\n * REAL-TIME SYNCHRONIZATION:\r\n * --------------------------\r\n * MCWorld can listen to IStorage events to automatically update when external\r\n * changes occur (e.g., file changes from a remote server):\r\n *\r\n * 1. Call startListeningToStorage() to subscribe to storage events\r\n * 2. When onFileContentsUpdated fires, MCWorld reloads affected data\r\n * 3. MCWorld fires appropriate events (onChunkUpdated, onDataReloaded, etc.)\r\n * 4. WorldView and other UI components update in response\r\n *\r\n * EVENTS:\r\n * -------\r\n * - onLoaded: Fired when world initially loads\r\n * - onDataLoaded: Fired when world data (chunks) finishes loading\r\n * - onChunkUpdated: Fired when a specific chunk is updated/reloaded\r\n * - onWorldDataReloaded: Fired when world files are externally modified and reloaded\r\n * - onPropertyChanged: Fired when a world property changes\r\n *\r\n * DATA FLOW:\r\n * ----------\r\n * HttpStorage (WebSocket notifications) -> MCWorld (this) ->\r\n *   onChunkUpdated/onWorldDataReloaded -> WorldView (React update)\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IStorage.ts: Storage events (onFileContentsUpdated, etc.)\r\n * - HttpStorage.ts: Client-side storage with WebSocket notifications\r\n * - WorldView.tsx: UI component that displays world data\r\n * - WorldChunk.ts: Individual chunk data\r\n * - LevelDb.ts: LevelDB file parser\r\n */\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IPackRegistration from \"./IPackRegistration\";\r\nimport Log from \"./../core/Log\";\r\nimport IFolder from \"./../storage/IFolder\";\r\nimport IPackHistory from \"./IPackHistory\";\r\nimport WorldLevelDat from \"./WorldLevelDat\";\r\nimport IGetSetPropertyObject from \"../dataform/IGetSetPropertyObject\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IWorldManifest from \"./IWorldManifest\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport LevelDb, { IChunkCoordinate } from \"./LevelDb\";\r\nimport DataUtilities from \"../core/DataUtilities\";\r\nimport WorldChunk from \"./WorldChunk\";\r\nimport BlockLocation from \"./BlockLocation\";\r\nimport BlockVolume from \"./BlockVolume\";\r\nimport IDimension from \"./IDimension\";\r\nimport Block from \"./Block\";\r\nimport Entity from \"./Entity\";\r\nimport { IPackageReference, IWorldSettings } from \"./IWorldSettings\";\r\nimport { StorageErrorStatus } from \"../storage/IStorage\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport NbtBinary from \"./NbtBinary\";\r\nimport { NbtTagType } from \"./NbtBinaryTag\";\r\nimport AnchorSet from \"./AnchorSet\";\r\nimport Project from \"../app/Project\";\r\nimport ActorItem from \"./ActorItem\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport WorldChunkCache from \"./WorldChunkCache\";\r\n\r\nconst BEHAVIOR_PACKS_RELPATH = \"/world_behavior_packs.json\";\r\nconst BEHAVIOR_PACK_HISTORY_RELPATH = \"/world_behavior_pack_history.json\";\r\nconst RESOURCE_PACKS_RELPATH = \"/world_resource_packs.json\";\r\nconst RESOURCE_PACK_HISTORY_RELPATH = \"/world_resource_pack_history.json\";\r\nconst LEVELDAT_RELPATH = \"/level.dat\";\r\nconst LEVELDATOLD_RELPATH = \"/level.dat_old\";\r\nconst LEVELNAMETXT_RELPATH = \"/levelname.txt\";\r\nconst MANIFEST_RELPATH = \"/manifest.json\";\r\n\r\nconst CHUNK_X_SIZE = 16;\r\nconst CHUNK_Z_SIZE = 16;\r\n\r\nconst CREATOR_TOOLS_EDITOR_BPUUID = \"5d2f0b91-ca29-49da-a275-e6c6262ea3de\";\r\n\r\nexport interface IWorldProcessingOptions {\r\n  maxNumberOfRecordsToProcess?: number;\r\n  progressCallback?: (phase: string, current: number, total: number) => void;\r\n  /**\r\n   * If true, unloads raw file content after parsing to reduce memory usage.\r\n   * Recommended for large worlds to prevent out-of-memory errors.\r\n   * Default: true (optimized for memory)\r\n   */\r\n  unloadFilesAfterParse?: boolean;\r\n  /**\r\n   * If true, deletes LevelDB keys from the keys Map after they are processed\r\n   * and handed off to WorldChunks. This significantly reduces memory usage\r\n   * for large worlds by eliminating duplicate references.\r\n   * Default: true (optimized for memory)\r\n   */\r\n  clearKeysAfterProcess?: boolean;\r\n  /**\r\n   * If true, uses lazy loading mode for LevelDB.\r\n   * Only manifest metadata is loaded initially; files are loaded on-demand.\r\n   * This dramatically reduces initial memory usage for large worlds.\r\n   *\r\n   * When enabled:\r\n   * - Initial load only parses manifest files\r\n   * - LDB/LOG files are loaded only when their keys are needed\r\n   * - Chunk cache manages memory by evicting least-recently-used chunks\r\n   *\r\n   * Default: false (full load for backwards compatibility)\r\n   */\r\n  lazyLoad?: boolean;\r\n  /**\r\n   * Maximum number of chunks to keep in the LRU cache when using lazy loading.\r\n   * When exceeded, least-recently-used chunks have their parsed data cleared\r\n   * (but can be re-parsed on demand from raw LevelKeyValue data).\r\n   *\r\n   * Default: 20000\r\n   */\r\n  maxChunksInCache?: number;\r\n  /**\r\n   * If true, skips the full \"Phase 2\" world data processing that creates\r\n   * WorldChunk objects for every chunk upfront. Instead, chunks will be\r\n   * created on-demand when they are first accessed.\r\n   *\r\n   * This is ideal for map viewing where only visible chunks need to be loaded.\r\n   * It dramatically reduces memory usage for very large worlds (100k+ chunks).\r\n   *\r\n   * When enabled:\r\n   * - World bounds (minX, maxX, minZ, maxZ) are calculated from key names\r\n   * - Chunk objects are created lazily when getChunkAt() is called\r\n   * - Full chunk data is only parsed when accessed\r\n   *\r\n   * Default: false (full processing for backwards compatibility)\r\n   */\r\n  skipFullProcessing?: boolean;\r\n}\r\n\r\nexport interface IRegion {\r\n  minX: number;\r\n  minZ: number;\r\n  maxX: number;\r\n  maxZ: number;\r\n}\r\n\r\nexport default class MCWorld implements IGetSetPropertyObject, IDimension, IErrorable {\r\n  // Where possible, if _file is defined we'd prefer to use\r\n  // _file.fileContentStorage for zip manip. _zipStorage is only used from\r\n  // a pure \"zip bytes in memory\" scenario (for generating downloads.)\r\n  private _zipStorage?: ZipStorage;\r\n\r\n  private _file?: IFile;\r\n  private _folder?: IFolder;\r\n  private _project?: Project;\r\n\r\n  private _autogenTsFile?: IFile;\r\n\r\n  private _anchors = new AnchorSet();\r\n\r\n  private _dynamicProperties: { [behaviorPackUid: string]: { [propertyName: string]: string | number | boolean } } = {};\r\n  private _levelNameText?: string;\r\n\r\n  private _manifest?: IWorldManifest;\r\n\r\n  private _isLoaded = false;\r\n  private _isDataLoaded = false;\r\n  private _onLoaded = new EventDispatcher<MCWorld, MCWorld>();\r\n  private _onDataLoaded = new EventDispatcher<MCWorld, MCWorld>();\r\n  private _onChunkUpdated = new EventDispatcher<MCWorld, WorldChunk>();\r\n  /** Event fired when world data is externally modified and reloaded */\r\n  private _onWorldDataReloaded = new EventDispatcher<MCWorld, string>();\r\n  /** Whether we're listening to storage events for automatic updates */\r\n  private _isListeningToStorage = false;\r\n\r\n  private _hasDynamicProps = false;\r\n  private _hasCustomProps = false;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<MCWorld, string>();\r\n\r\n  private _biomeData: NbtBinary | undefined;\r\n  private _overworldData: NbtBinary | undefined;\r\n  private _levelChunkMetaData: NbtBinary | undefined;\r\n  private _generationSeed: string | undefined;\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  worldBehaviorPacks?: IPackRegistration[];\r\n  worldResourcePacks?: IPackRegistration[];\r\n  worldBehaviorPackHistory?: IPackHistory;\r\n  worldResourcePackHistory?: IPackHistory;\r\n  chunkCount = 0;\r\n\r\n  private _chunkMinY = -64;\r\n  imageBase64?: string;\r\n\r\n  levelDb?: LevelDb;\r\n\r\n  actorsById: { [identifier: string]: ActorItem } = {};\r\n\r\n  levelData?: WorldLevelDat;\r\n\r\n  private _minX: number | undefined;\r\n  private _maxX: number | undefined;\r\n  private _minZ: number | undefined;\r\n  private _maxZ: number | undefined;\r\n\r\n  regionsByDimension: { [dim: number]: IRegion[] } = {};\r\n\r\n  chunks: Map<number, Map<number, Map<number, WorldChunk>>> = new Map();\r\n\r\n  /**\r\n   * All dimension IDs found in LevelDB chunk keys, including custom dimensions (>= 1000).\r\n   * Populated during processWorldData or buildMinimalWorldIndex.\r\n   */\r\n  private _dimensionIdsInChunks: Set<number> = new Set();\r\n\r\n  /**\r\n   * Parsed DimensionNameIdTable from LevelDB: maps dimension name to numeric ID.\r\n   * Undefined if the DimensionNameIdTable key was not found.\r\n   */\r\n  private _dimensionNameIdTable: Map<string, number> | undefined;\r\n\r\n  /** Whether the DimensionNameIdTable key exists in the LevelDB */\r\n  private _hasDimensionNameIdTable = false;\r\n\r\n  /** LRU cache for chunk data - manages memory by evicting old chunks */\r\n  private _chunkCache?: WorldChunkCache;\r\n\r\n  /** Whether lazy loading mode is enabled for this world */\r\n  private _isLazyLoadMode = false;\r\n\r\n  /**\r\n   * Set of chunk keys that exist in the world (format: \"dim_x_z\").\r\n   * Built during buildMinimalWorldIndex for O(1) chunk existence checking.\r\n   * This allows fast filtering of empty/non-existent chunks without scanning LevelDB keys.\r\n   */\r\n  private _chunkExistsSet: Set<string> = new Set();\r\n\r\n  /**\r\n   * Returns the set of all known chunk keys (format: \"dim_x_z\").\r\n   * Used by WorldMap to ensure sparse worlds render all known chunks,\r\n   * not just those hit by the sampling grid.\r\n   */\r\n  public get knownChunkKeys(): ReadonlySet<string> {\r\n    return this._chunkExistsSet;\r\n  }\r\n\r\n  /**\r\n   * Index mapping chunk keys (\"dim_x_z\") to the list of LevelDB key names for that chunk.\r\n   * Built during buildMinimalWorldIndex for O(1) chunk key lookup.\r\n   * This eliminates the O(N) full-scan of LevelDB keys in getOrCreateChunk.\r\n   */\r\n  private _chunkKeyIndex: Map<string, string[]> = new Map();\r\n\r\n  public get project() {\r\n    return this._project;\r\n  }\r\n\r\n  public set project(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get anchors() {\r\n    return this._anchors;\r\n  }\r\n\r\n  public get chunkMinY() {\r\n    return this._chunkMinY;\r\n  }\r\n\r\n  public set chunkMinY(newY: number) {\r\n    this._chunkMinY = newY;\r\n  }\r\n\r\n  public get effectiveRootFolder() {\r\n    if (this._folder) {\r\n      return this._folder;\r\n    }\r\n\r\n    if (this._file && this._file.fileContainerStorage) {\r\n      return this._file.fileContainerStorage.rootFolder;\r\n    }\r\n\r\n    if (this._zipStorage !== undefined) {\r\n      return this._zipStorage.rootFolder;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get manifest() {\r\n    return this._manifest;\r\n  }\r\n\r\n  public get hasDynamicProps() {\r\n    return this._hasDynamicProps;\r\n  }\r\n\r\n  public get hasCustomProps() {\r\n    return this._hasCustomProps;\r\n  }\r\n\r\n  public get minX() {\r\n    return this._minX;\r\n  }\r\n\r\n  public get maxX() {\r\n    return this._maxX;\r\n  }\r\n\r\n  public get minZ() {\r\n    return this._minZ;\r\n  }\r\n\r\n  public get maxZ() {\r\n    return this._maxZ;\r\n  }\r\n\r\n  /** Get whether lazy loading mode is enabled */\r\n  public get isLazyLoadMode(): boolean {\r\n    return this._isLazyLoadMode;\r\n  }\r\n\r\n  /** Get the chunk cache (only available when using chunk caching) */\r\n  public get chunkCache(): WorldChunkCache | undefined {\r\n    return this._chunkCache;\r\n  }\r\n\r\n  /** All dimension IDs found in LevelDB chunk keys, including custom dimensions (>= 1000). */\r\n  public get dimensionIdsInChunks(): ReadonlySet<number> {\r\n    return this._dimensionIdsInChunks;\r\n  }\r\n\r\n  /** Whether the DimensionNameIdTable key was found in the LevelDB. */\r\n  public get hasDimensionNameIdTable(): boolean {\r\n    return this._hasDimensionNameIdTable;\r\n  }\r\n\r\n  /** Parsed DimensionNameIdTable: maps dimension name to numeric ID. Undefined if not found. */\r\n  public get dimensionNameIdTable(): ReadonlyMap<string, number> | undefined {\r\n    return this._dimensionNameIdTable;\r\n  }\r\n\r\n  /** Parse DimensionNameIdTable NBT bytes into the name-to-ID map. */\r\n  private _parseDimensionNameIdTable(tableBytes: Uint8Array) {\r\n    this._hasDimensionNameIdTable = true;\r\n\r\n    const tableNbt = new NbtBinary();\r\n    tableNbt.context = this.name + \" DimensionNameIdTable\";\r\n    tableNbt.fromBinary(tableBytes, true, false, 0, true);\r\n\r\n    if (tableNbt.singleRoot) {\r\n      this._dimensionNameIdTable = new Map();\r\n      const children = tableNbt.singleRoot.getTagChildren();\r\n\r\n      for (const child of children) {\r\n        if (child.name && (child.type === NbtTagType.int || child.type === NbtTagType.long)) {\r\n          this._dimensionNameIdTable.set(child.name, child.valueAsInt);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if chunk data exists at the specified coordinates without loading it.\r\n   * This is O(1) when buildMinimalWorldIndex has been called (skipFullProcessing mode).\r\n   * Returns true if the chunk exists in the world's LevelDB data.\r\n   * Returns undefined if existence cannot be determined (index not built).\r\n   */\r\n  public hasChunkData(dim: number, x: number, z: number): boolean | undefined {\r\n    // If we have the chunk exists set, use it for O(1) lookup\r\n    if (this._chunkExistsSet.size > 0) {\r\n      return this._chunkExistsSet.has(`${dim}_${x}_${z}`);\r\n    }\r\n\r\n    // If we already have the chunk loaded, it exists\r\n    const existing = this.getChunkAt(dim, x, z);\r\n    if (existing) {\r\n      return true;\r\n    }\r\n\r\n    // Can't determine without scanning LevelDB\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a chunk by coordinates.\r\n   * If chunk caching is enabled, marks the chunk as recently accessed.\r\n   */\r\n  public getChunkAt(dim: number, x: number, z: number): WorldChunk | undefined {\r\n    const dimMap = this.chunks.get(dim);\r\n    if (!dimMap) return undefined;\r\n\r\n    const xPlane = dimMap.get(x);\r\n    if (!xPlane) return undefined;\r\n\r\n    const chunk = xPlane.get(z);\r\n\r\n    // Track access for LRU cache\r\n    if (chunk && this._chunkCache) {\r\n      this._chunkCache.access(dim, x, z);\r\n    }\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Get a chunk by cache key (format: \"dim_x_z\").\r\n   * Used by WorldChunkCache for eviction callbacks.\r\n   */\r\n  public getChunkByKey(key: string): WorldChunk | undefined {\r\n    const coords = WorldChunkCache.parseKey(key);\r\n    if (!coords) return undefined;\r\n\r\n    const dimMap = this.chunks.get(coords.dim);\r\n    if (!dimMap) return undefined;\r\n\r\n    const xPlane = dimMap.get(coords.x);\r\n    if (!xPlane) return undefined;\r\n\r\n    return xPlane.get(coords.z);\r\n  }\r\n\r\n  public get generationSeed() {\r\n    if (this._generationSeed === undefined && this._levelChunkMetaData && this._levelChunkMetaData.singleRoot) {\r\n      const tag = this._levelChunkMetaData.singleRoot.find(\"GenerationSeed\");\r\n      if (tag !== null) {\r\n        this._generationSeed = tag.valueAsBigInt.toString();\r\n      }\r\n    }\r\n\r\n    return this._generationSeed;\r\n  }\r\n\r\n  public async copyAsFolderTo(targetFolder: IFolder) {\r\n    if (this._folder) {\r\n      await StorageUtilities.syncFolderTo(this._folder, targetFolder, true, true, true);\r\n    } else if (this._file) {\r\n      const storage = this.storage;\r\n\r\n      if (storage) {\r\n        await StorageUtilities.syncFolderTo(this.storage.rootFolder, targetFolder, true, true, true);\r\n      }\r\n    }\r\n  }\r\n\r\n  public get storage() {\r\n    if (this._file) {\r\n      if (!this._file.fileContainerStorage) {\r\n        this._file.fileContainerStorage = new ZipStorage();\r\n        this._file.fileContainerStorage.containerFile = this._file;\r\n        this._file.fileContainerStorage.storagePath = this._file.extendedPath + \"#\";\r\n      }\r\n\r\n      return this._file.fileContainerStorage;\r\n    }\r\n\r\n    if (this._zipStorage === undefined) {\r\n      this._zipStorage = new ZipStorage();\r\n    }\r\n\r\n    return this._zipStorage;\r\n  }\r\n\r\n  public ensureZipStorage() {\r\n    if (this._zipStorage === undefined) {\r\n      this._zipStorage = new ZipStorage();\r\n    }\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get storageErrorStatus() {\r\n    if (!this.storage) {\r\n      return StorageErrorStatus.none;\r\n    }\r\n\r\n    return this.storage.errorStatus;\r\n  }\r\n\r\n  get storageErrorMessage() {\r\n    return this.storage.errorMessage;\r\n  }\r\n\r\n  get storageFullPath() {\r\n    if (this._file) {\r\n      return this._file.fullPath;\r\n    }\r\n\r\n    if (this._folder) {\r\n      return this._folder.fullPath;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get deferredTechnicalPreviewExperiment() {\r\n    if (this.levelData !== undefined) {\r\n      const val = this.levelData.deferredTechnicalPreviewExperiment;\r\n\r\n      if (val === undefined) {\r\n        return false;\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set deferredTechnicalPreviewExperiment(newVal: boolean) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.deferredTechnicalPreviewExperiment = newVal;\r\n    }\r\n  }\r\n\r\n  get betaApisExperiment() {\r\n    if (this.levelData !== undefined) {\r\n      const val = this.levelData.betaApisExperiment;\r\n\r\n      if (val === undefined) {\r\n        return false;\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set betaApisExperiment(newVal: boolean) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.betaApisExperiment = newVal;\r\n    }\r\n  }\r\n\r\n  get dataDrivenItemsExperiment() {\r\n    if (this.levelData !== undefined) {\r\n      const val = this.levelData.dataDrivenItemsExperiment;\r\n\r\n      if (val === undefined) {\r\n        return false;\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set dataDrivenItemsExperiment(newVal: boolean) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.dataDrivenItemsExperiment = newVal;\r\n    }\r\n  }\r\n\r\n  get name() {\r\n    if (this._levelNameText !== undefined) {\r\n      return this._levelNameText;\r\n    }\r\n\r\n    if (this.levelData !== undefined && this.levelData.levelName !== undefined) {\r\n      return this.levelData.levelName;\r\n    }\r\n\r\n    if (this._file !== undefined) {\r\n      return this._file.name;\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  set name(newValue: string) {\r\n    this._levelNameText = newValue;\r\n\r\n    if (this.levelData !== undefined) {\r\n      this.levelData.levelName = newValue;\r\n    }\r\n  }\r\n\r\n  get file() {\r\n    return this._file;\r\n  }\r\n\r\n  set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  get folder() {\r\n    return this._folder;\r\n  }\r\n\r\n  set folder(newFolder: IFolder | undefined) {\r\n    this._folder = newFolder;\r\n  }\r\n\r\n  get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  get spawnX(): number | undefined {\r\n    if (this.levelData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.levelData.spawnX;\r\n  }\r\n\r\n  set spawnX(newX: number | undefined) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    this.levelData.spawnX = newX;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"spawnX\");\r\n  }\r\n\r\n  get spawnY() {\r\n    if (this.levelData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.levelData.spawnY;\r\n  }\r\n\r\n  set spawnY(newY: number | undefined) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    this.levelData.spawnY = newY;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"spawnY\");\r\n  }\r\n\r\n  get spawnZ() {\r\n    if (this.levelData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.levelData.spawnZ;\r\n  }\r\n\r\n  set spawnZ(newZ: number | undefined) {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    this.levelData.spawnZ = newZ;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"spawnZ\");\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onDataLoaded() {\r\n    return this._onDataLoaded.asEvent();\r\n  }\r\n\r\n  public get onChunkUpdated() {\r\n    return this._onChunkUpdated.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when world data is externally modified and reloaded.\r\n   * Subscribe to this event to update UI when remote changes occur.\r\n   */\r\n  public get onWorldDataReloaded() {\r\n    return this._onWorldDataReloaded.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Whether this world is listening to storage events for automatic updates.\r\n   */\r\n  public get isListeningToStorage(): boolean {\r\n    return this._isListeningToStorage;\r\n  }\r\n\r\n  /**\r\n   * Start listening to storage events for automatic world data updates.\r\n   * When file changes are detected (via WebSocket or fs watcher), the world\r\n   * will automatically reload affected data and fire appropriate events.\r\n   */\r\n  public startListeningToStorage(): void {\r\n    Log.verbose(\"[MCWorld] startListeningToStorage called, _isListeningToStorage=\" + this._isListeningToStorage);\r\n\r\n    if (this._isListeningToStorage) {\r\n      Log.verbose(\"[MCWorld] Already listening to storage events - returning\");\r\n      return;\r\n    }\r\n\r\n    const storage = this.effectiveRootFolder?.storage;\r\n    Log.verbose(\r\n      \"[MCWorld] effectiveRootFolder=\" +\r\n        this.effectiveRootFolder?.fullPath +\r\n        \", storage=\" +\r\n        (storage ? storage.constructor.name : \"null\")\r\n    );\r\n\r\n    if (!storage) {\r\n      Log.verbose(\"[MCWorld] Cannot start listening: no storage available\");\r\n      return;\r\n    }\r\n\r\n    Log.message(`[MCWorld] Starting to listen to storage events on ${storage.constructor.name}`);\r\n\r\n    // Subscribe to file content updates\r\n    storage.onFileContentsUpdated.subscribe((sender, event) => {\r\n      Log.message(`[MCWorld] Received onFileContentsUpdated: ${event.file.storageRelativePath}`);\r\n      this._handleStorageFileUpdate(event.file.storageRelativePath, event);\r\n    });\r\n\r\n    // Subscribe to file additions\r\n    storage.onFileAdded.subscribe((sender, file) => {\r\n      Log.message(`[MCWorld] Received onFileAdded: ${file.storageRelativePath}`);\r\n      this._handleStorageFileAdded(file.storageRelativePath);\r\n    });\r\n\r\n    // Subscribe to file removals\r\n    storage.onFileRemoved.subscribe((sender, path) => {\r\n      Log.message(`[MCWorld] Received onFileRemoved: ${path}`);\r\n      this._handleStorageFileRemoved(path);\r\n    });\r\n\r\n    this._isListeningToStorage = true;\r\n    Log.message(\"[MCWorld] Successfully subscribed to storage events\");\r\n  }\r\n\r\n  /**\r\n   * Stop listening to storage events.\r\n   */\r\n  public stopListeningToStorage(): void {\r\n    // Note: ste-events doesn't have a simple \"unsubscribe all\" mechanism\r\n    // In a full implementation, we'd need to track subscription handles\r\n    this._isListeningToStorage = false;\r\n    Log.verbose(\"MCWorld: Stopped listening to storage events\");\r\n  }\r\n\r\n  /**\r\n   * Handle a file update from storage.\r\n   */\r\n  private async _handleStorageFileUpdate(path: string, event: any): Promise<void> {\r\n    if (!path) return;\r\n\r\n    // The path coming from storage events may be like /world/db/000039.log\r\n    // But MCWorld's effectiveRootFolder is already the world folder,\r\n    // so we need to strip the /world prefix if present\r\n    let relativePath = path;\r\n    if (relativePath.startsWith(\"/world/\")) {\r\n      relativePath = relativePath.substring(6); // Keep the leading / after \"world\"\r\n    } else if (relativePath.startsWith(\"world/\")) {\r\n      relativePath = \"/\" + relativePath.substring(6);\r\n    }\r\n\r\n    const pathLower = relativePath.toLowerCase();\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (!rootFolder) return;\r\n\r\n    try {\r\n      // Check what type of file changed\r\n      if (pathLower.endsWith(\"level.dat\")) {\r\n        // Reload level data\r\n        const levelDatFile = await rootFolder.getFileFromRelativePath(LEVELDAT_RELPATH);\r\n        if (levelDatFile) {\r\n          await levelDatFile.loadContent(true);\r\n          if (levelDatFile.content instanceof Uint8Array) {\r\n            this.levelData = new WorldLevelDat();\r\n            this.levelData.loadFromNbtBytes(levelDatFile.content);\r\n            this._loadFromNbt();\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"level.dat\");\r\n      } else if (pathLower.endsWith(\"levelname.txt\")) {\r\n        // Reload level name\r\n        const levelNameFile = await rootFolder.getFileFromRelativePath(LEVELNAMETXT_RELPATH);\r\n        if (levelNameFile) {\r\n          await levelNameFile.loadContent(true);\r\n          if (typeof levelNameFile.content === \"string\") {\r\n            this.name = levelNameFile.content;\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"levelname.txt\");\r\n      } else if (pathLower.includes(\"/db/\") && (pathLower.endsWith(\".ldb\") || pathLower.endsWith(\".log\"))) {\r\n        // LevelDB file changed - use incremental loading\r\n        await this._handleIncrementalLevelDbUpdate(relativePath);\r\n      } else if (pathLower.endsWith(\"world_behavior_packs.json\")) {\r\n        const packsFile = await rootFolder.getFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n        if (packsFile) {\r\n          await packsFile.loadContent(true);\r\n          if (typeof packsFile.content === \"string\") {\r\n            this.worldBehaviorPacks = StorageUtilities.getJsonObject(packsFile);\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"behavior_packs\");\r\n      } else if (pathLower.endsWith(\"world_resource_packs.json\")) {\r\n        const packsFile = await rootFolder.getFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n        if (packsFile) {\r\n          await packsFile.loadContent(true);\r\n          if (typeof packsFile.content === \"string\") {\r\n            this.worldResourcePacks = StorageUtilities.getJsonObject(packsFile);\r\n          }\r\n        }\r\n        this._onWorldDataReloaded.dispatch(this, \"resource_packs\");\r\n      }\r\n\r\n      Log.verbose(`MCWorld: Handled file update: ${path}`);\r\n    } catch (e) {\r\n      Log.debug(`MCWorld: Error handling file update ${path}: ${e}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle a new file being added to storage.\r\n   */\r\n  private async _handleStorageFileAdded(path: string): Promise<void> {\r\n    // For now, treat file additions similar to updates\r\n    await this._handleStorageFileUpdate(path, null);\r\n  }\r\n\r\n  /**\r\n   * Handle a file being removed from storage.\r\n   */\r\n  private async _handleStorageFileRemoved(path: string): Promise<void> {\r\n    if (!path) return;\r\n\r\n    const pathLower = path.toLowerCase();\r\n\r\n    // Handle removal of important files\r\n    if (pathLower.includes(\"/db/\") && pathLower.endsWith(\".ldb\")) {\r\n      // LevelDB compaction - chunks may have moved to new files\r\n      // This is a rare case where we might need a broader refresh,\r\n      // but typically compaction doesn't lose data, just reorganizes it\r\n      Log.verbose(`MCWorld: LDB file removed (compaction): ${path}`);\r\n    }\r\n\r\n    Log.verbose(`MCWorld: Handled file removal: ${path}`);\r\n  }\r\n\r\n  /**\r\n   * Handle incremental LevelDB file updates.\r\n   *\r\n   * When a new .ldb or .log file is detected, this method:\r\n   * 1. Parses just that file to extract new keys\r\n   * 2. Identifies which chunks are affected by those keys\r\n   * 3. Updates only those chunks with the new data\r\n   * 4. Fires onChunkUpdated for each affected chunk (for UI updates)\r\n   *\r\n   * This is much more efficient than reloading the entire world.\r\n   */\r\n  private async _handleIncrementalLevelDbUpdate(path: string): Promise<void> {\r\n    if (!this.levelDb) {\r\n      // LevelDB not yet loaded - nothing to update incrementally\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n    if (!rootFolder) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Get the file that changed\r\n      const file = await rootFolder.getFileFromRelativePath(path);\r\n      if (!file) {\r\n        Log.debug(`MCWorld: Could not find LDB file for incremental update: ${path}`);\r\n        return;\r\n      }\r\n\r\n      // Parse the file and get affected chunk coordinates\r\n      const affectedChunks = await this.levelDb.parseIncrementalFile(file);\r\n\r\n      if (affectedChunks.length === 0) {\r\n        return;\r\n      }\r\n\r\n      Log.verbose(`MCWorld: Incremental update - ${affectedChunks.length} chunks affected from ${path}`);\r\n\r\n      // Update each affected chunk\r\n      for (const coord of affectedChunks) {\r\n        await this._updateChunkFromLevelDb(coord);\r\n      }\r\n    } catch (e) {\r\n      Log.error(`MCWorld: Error in incremental LDB update ${path}: ${e}`);\r\n      // Fall back to signaling a broader refresh\r\n      this._onWorldDataReloaded.dispatch(this, \"leveldb\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update a single chunk from LevelDB keys.\r\n   *\r\n   * This finds all keys for the specified chunk coordinates and either:\r\n   * - Updates an existing chunk with the new data\r\n   * - Creates a new chunk if one doesn't exist\r\n   *\r\n   * After updating, fires onChunkUpdated for UI refresh.\r\n   */\r\n  private async _updateChunkFromLevelDb(coord: IChunkCoordinate): Promise<void> {\r\n    if (!this.levelDb) return;\r\n\r\n    const { x, z, dimension } = coord;\r\n\r\n    // Get or create the chunk\r\n    let chunk = this.getChunkAt(dimension, x, z);\r\n    const isNewChunk = !chunk;\r\n\r\n    if (!chunk) {\r\n      chunk = new WorldChunk(this, x, z);\r\n    } else {\r\n      // Clear cached/parsed data so it will be re-parsed from the updated keys\r\n      chunk.clearCachedData();\r\n    }\r\n\r\n    // Find all keys that belong to this chunk and add them\r\n    const chunkKey = `${dimension}_${x}_${z}`;\r\n    const indexedKeyNames = this._chunkKeyIndex.get(chunkKey);\r\n\r\n    if (indexedKeyNames && indexedKeyNames.length > 0) {\r\n      // Fast path: use the pre-built chunk key index\r\n      for (const keyname of indexedKeyNames) {\r\n        const keyValue = this.levelDb.keys.get(keyname);\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    } else {\r\n      // Fallback: scan all LevelDB keys (used when index isn't built)\r\n      const hasDim = dimension !== 0;\r\n      for (const [keyname, keyValue] of this.levelDb.keys) {\r\n        // Skip if keyValue is undefined, false (deleted marker), or not a LevelKeyValue\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n\r\n        const keyBytes = keyValue.keyBytes;\r\n        if (!keyBytes) continue;\r\n        if (keyBytes.length < 9 || keyBytes.length > 14) continue;\r\n\r\n        const expectedLength = hasDim ? 13 : 9;\r\n        if (keyBytes.length !== expectedLength && keyBytes.length !== expectedLength + 1) continue;\r\n\r\n        const kx = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n        const kz = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n\r\n        if (kx !== x || kz !== z) continue;\r\n\r\n        let kDim = 0;\r\n        if (hasDim && keyBytes.length >= 13) {\r\n          kDim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n        }\r\n\r\n        if (kDim !== dimension) continue;\r\n\r\n        // This key belongs to this chunk - add it\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    }\r\n\r\n    // Add new chunk to the chunks map if needed\r\n    if (isNewChunk) {\r\n      let dimMap = this.chunks.get(dimension);\r\n      if (!dimMap) {\r\n        dimMap = new Map();\r\n        this.chunks.set(dimension, dimMap);\r\n      }\r\n\r\n      let xPlane = dimMap.get(x);\r\n      if (!xPlane) {\r\n        xPlane = new Map();\r\n        dimMap.set(x, xPlane);\r\n      }\r\n\r\n      xPlane.set(z, chunk);\r\n      this.chunkCount++;\r\n\r\n      // Update bounds\r\n      if (this._minX === undefined || x * 16 < this._minX) {\r\n        this._minX = x * 16;\r\n      }\r\n      if (this._maxX === undefined || (x + 1) * 16 > this._maxX) {\r\n        this._maxX = (x + 1) * 16;\r\n      }\r\n      if (this._minZ === undefined || z * 16 < this._minZ) {\r\n        this._minZ = z * 16;\r\n      }\r\n      if (this._maxZ === undefined || (z + 1) * 16 > this._maxZ) {\r\n        this._maxZ = (z + 1) * 16;\r\n      }\r\n\r\n      // Add to chunk exists set\r\n      if (this._chunkExistsSet) {\r\n        this._chunkExistsSet.add(`${dimension}_${x}_${z}`);\r\n      }\r\n    }\r\n\r\n    // Track access for LRU cache\r\n    if (this._chunkCache) {\r\n      this._chunkCache.access(dimension, x, z);\r\n    }\r\n\r\n    // Notify listeners that this chunk was updated\r\n    this._onChunkUpdated.dispatch(this, chunk);\r\n  }\r\n\r\n  /**\r\n   * Called by WorldChunk when chunk data is superceded by newer LevelDB keys.\r\n   * This notifies subscribers (like WorldMap) that they may need to redraw affected tiles.\r\n   */\r\n  notifyChunkUpdated(chunk: WorldChunk) {\r\n    this._onChunkUpdated.dispatch(this, chunk);\r\n  }\r\n\r\n  static async ensureMCWorldOnFolder(folder: IFolder, project?: Project, handler?: IEventHandler<MCWorld, MCWorld>) {\r\n    if (folder.manager === undefined) {\r\n      const world = new MCWorld();\r\n\r\n      world.project = project;\r\n      world.folder = folder;\r\n\r\n      folder.manager = world;\r\n    }\r\n\r\n    if (folder.manager !== undefined && folder.manager instanceof MCWorld) {\r\n      const mcworld = folder.manager as MCWorld;\r\n\r\n      if (!mcworld.isLoaded) {\r\n        if (handler) {\r\n          mcworld.onLoaded.subscribe(handler);\r\n        }\r\n        await mcworld.loadMetaFiles(false);\r\n      } else if (handler) {\r\n        handler(mcworld, mcworld, { unsub: () => {}, stopPropagation: () => {} });\r\n      }\r\n\r\n      return mcworld;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureOnItem(projectItem: ProjectItem) {\r\n    let mcworld: MCWorld | undefined = undefined;\r\n\r\n    if (!projectItem.isContentLoaded) {\r\n      await projectItem.loadContent();\r\n    }\r\n\r\n    if (projectItem.defaultFolder) {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(projectItem.defaultFolder, projectItem.project);\r\n    } else if (projectItem.primaryFile) {\r\n      mcworld = await MCWorld.ensureOnFile(projectItem.primaryFile, projectItem.project);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n    }\r\n\r\n    return mcworld;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, project?: Project, handler?: IEventHandler<MCWorld, MCWorld>) {\r\n    if (file.manager === undefined) {\r\n      const world = new MCWorld();\r\n      world.project = project;\r\n      world.file = file;\r\n\r\n      file.manager = world;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof MCWorld) {\r\n      const mcworld = file.manager as MCWorld;\r\n\r\n      if (!mcworld.isLoaded) {\r\n        if (handler) {\r\n          mcworld.onLoaded.subscribe(handler);\r\n        }\r\n        await mcworld.loadMetaFiles(false);\r\n      } else if (handler) {\r\n        handler(mcworld, mcworld, { unsub: () => {}, stopPropagation: () => {} });\r\n      }\r\n\r\n      return mcworld;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  loadAnchorsFromDynamicProperties() {\r\n    if (this._dynamicProperties && this._dynamicProperties[CREATOR_TOOLS_EDITOR_BPUUID]) {\r\n      this._anchors.clearAll();\r\n\r\n      const anchorStr = this._dynamicProperties && this._dynamicProperties[CREATOR_TOOLS_EDITOR_BPUUID][\"anchors\"];\r\n\r\n      if (anchorStr && typeof anchorStr === \"string\") {\r\n        this._anchors.fromString(anchorStr);\r\n        this.saveAutoGenItems();\r\n      }\r\n    }\r\n  }\r\n\r\n  public _updateMeta() {\r\n    this.regionsByDimension = {};\r\n\r\n    const chunkDims = this.chunks.keys();\r\n\r\n    for (const dimNum of chunkDims) {\r\n      const dim = this.chunks.get(dimNum);\r\n\r\n      let regions: IRegion[] = [];\r\n\r\n      if (dim) {\r\n        const xNums = dim.keys();\r\n\r\n        for (const xNum of xNums) {\r\n          const xPlane = dim.get(xNum);\r\n\r\n          if (xPlane) {\r\n            const zNums = xPlane.keys();\r\n            for (const zNum of zNums) {\r\n              let addedToRegion = false;\r\n\r\n              for (const region of regions) {\r\n                if (xNum >= region.minX && xNum <= region.maxX && zNum >= region.minZ && zNum <= region.maxZ) {\r\n                  region.minX = Math.min(region.minX, xNum - 1);\r\n                  region.minZ = Math.min(region.minZ, zNum - 1);\r\n                  region.maxX = Math.max(region.maxX, xNum + 1);\r\n                  region.maxZ = Math.max(region.maxZ, zNum + 1);\r\n                  addedToRegion = true;\r\n                }\r\n              }\r\n\r\n              if (!addedToRegion) {\r\n                regions.push({\r\n                  minX: xNum - 1,\r\n                  minZ: zNum - 1,\r\n                  maxX: xNum + 1,\r\n                  maxZ: zNum + 1,\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      this.regionsByDimension[dimNum] = this._coalesceRegions(regions);\r\n    }\r\n  }\r\n\r\n  private _coalesceRegions(regions: IRegion[]) {\r\n    const newRegions: IRegion[] = [];\r\n\r\n    for (const region of regions) {\r\n      let addedToRegion = false;\r\n\r\n      for (const newRegion of newRegions) {\r\n        if (\r\n          region.minX >= newRegion.minX &&\r\n          region.minX <= newRegion.maxX &&\r\n          region.minZ >= newRegion.minZ &&\r\n          region.minZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.minX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.minZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.minX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.minZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n        if (\r\n          region.maxX >= newRegion.minX &&\r\n          region.maxX <= newRegion.maxX &&\r\n          region.minZ >= newRegion.minZ &&\r\n          region.minZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.maxX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.minZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.maxX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.minZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n        if (\r\n          region.minX >= newRegion.minX &&\r\n          region.minX <= newRegion.maxX &&\r\n          region.maxZ >= newRegion.minZ &&\r\n          region.maxZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.minX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.maxZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.minX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.maxZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n\r\n        if (\r\n          region.maxX >= newRegion.minX &&\r\n          region.maxX <= newRegion.maxX &&\r\n          region.maxZ >= newRegion.minZ &&\r\n          region.maxZ <= newRegion.maxZ\r\n        ) {\r\n          newRegion.minX = Math.min(newRegion.minX, region.maxX - 1);\r\n          newRegion.minZ = Math.min(newRegion.minZ, region.maxZ - 1);\r\n          newRegion.maxX = Math.max(newRegion.maxX, region.maxX + 1);\r\n          newRegion.maxZ = Math.max(newRegion.maxZ, region.maxZ + 1);\r\n          addedToRegion = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!addedToRegion) {\r\n        newRegions.push(region);\r\n      }\r\n    }\r\n\r\n    return newRegions;\r\n  }\r\n\r\n  private _pushError(message: string, contextIn?: string) {\r\n    this.isInErrorState = true;\r\n\r\n    if (this.errorMessages === undefined) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    Log.error(message + (contextIn ? \" \" + contextIn : \"\"));\r\n\r\n    this.errorMessages.push({\r\n      message: message,\r\n      context: contextIn,\r\n    });\r\n  }\r\n\r\n  async save() {\r\n    if (this.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n      return;\r\n    }\r\n\r\n    await this.saveWorldManifest();\r\n    await this.saveLevelnameTxt();\r\n    await this.saveLevelDat();\r\n    await this.saveAutoGenItems();\r\n    await this.saveWorldBehaviorPacks();\r\n    await this.saveWorldBehaviorPackHistory();\r\n    await this.saveWorldResourcePacks();\r\n    await this.saveWorldResourcePackHistory();\r\n  }\r\n\r\n  private async saveWorldManifest() {\r\n    if (this._manifest !== undefined && this.effectiveRootFolder !== undefined) {\r\n      this._manifest.header.name = this.name;\r\n\r\n      const manifestJsonFile = await this.effectiveRootFolder.ensureFileFromRelativePath(MANIFEST_RELPATH);\r\n\r\n      if (manifestJsonFile !== undefined) {\r\n        manifestJsonFile.setContent(JSON.stringify(this._manifest, null, 2));\r\n\r\n        await manifestJsonFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  private async saveLevelnameTxt() {\r\n    const name = this.name;\r\n\r\n    if (name !== undefined && this.effectiveRootFolder !== undefined) {\r\n      const rootDataFile = await this.effectiveRootFolder.ensureFileFromRelativePath(LEVELNAMETXT_RELPATH);\r\n\r\n      if (rootDataFile !== undefined) {\r\n        rootDataFile.setContent(name);\r\n        await rootDataFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  private async saveLevelDat() {\r\n    if (this.levelData !== undefined && this.effectiveRootFolder !== undefined) {\r\n      this.levelData.persist();\r\n\r\n      let rootDataFile = await this.effectiveRootFolder.ensureFileFromRelativePath(LEVELDAT_RELPATH);\r\n      const bytes = this.levelData.getBytes();\r\n\r\n      if (rootDataFile !== undefined && bytes !== undefined) {\r\n        rootDataFile.setContent(bytes);\r\n        await rootDataFile.saveContent();\r\n      }\r\n\r\n      rootDataFile = await this.effectiveRootFolder.ensureFileFromRelativePath(LEVELDATOLD_RELPATH);\r\n\r\n      if (rootDataFile !== undefined && bytes !== undefined) {\r\n        rootDataFile.setContent(bytes);\r\n        await rootDataFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  async getBytes() {\r\n    if (this._file) {\r\n      if (!this._file.fileContainerStorage) {\r\n        this._file.fileContainerStorage = new ZipStorage();\r\n\r\n        this._file.fileContainerStorage.containerFile = this._file;\r\n        this._file.fileContainerStorage.storagePath = this._file.extendedPath + \"#\";\r\n      }\r\n\r\n      await this.save();\r\n\r\n      return await (this._file.fileContainerStorage as ZipStorage).generateUint8ArrayAsync();\r\n    }\r\n\r\n    if (this._zipStorage === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    await this.save();\r\n\r\n    return await this._zipStorage.generateUint8ArrayAsync();\r\n  }\r\n\r\n  async syncFolderTo(folder: IFolder) {\r\n    await this.save();\r\n\r\n    const sourceFolder = this.effectiveRootFolder;\r\n\r\n    if (!sourceFolder) {\r\n      Log.unexpectedUndefined(\"SFT\");\r\n      return;\r\n    }\r\n\r\n    await StorageUtilities.syncFolderTo(sourceFolder, folder, true, true, true);\r\n  }\r\n\r\n  async saveToFile() {\r\n    if (this._zipStorage === undefined || this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    const bytes = await this.getBytes();\r\n\r\n    if (bytes !== undefined) {\r\n      this._file.setContent(bytes);\r\n    }\r\n  }\r\n\r\n  ensurePackReferenceSet(packRefSet: IPackageReference) {\r\n    if (this.worldBehaviorPacks === undefined) {\r\n      this.worldBehaviorPacks = [];\r\n    }\r\n\r\n    if (this.worldResourcePacks === undefined) {\r\n      this.worldResourcePacks = [];\r\n    }\r\n\r\n    if (this.worldBehaviorPackHistory === undefined) {\r\n      this.worldBehaviorPackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      this.worldResourcePacks = [];\r\n    }\r\n\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      this.worldResourcePackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    if (packRefSet.behaviorPackReferences) {\r\n      for (let i = 0; i < packRefSet.behaviorPackReferences.length; i++) {\r\n        this.ensurePackReferenceInCollection(packRefSet.behaviorPackReferences[i], this.worldBehaviorPacks);\r\n        this.ensurePackReferenceInHistory(\r\n          packRefSet.behaviorPackReferences[i],\r\n          this.worldBehaviorPackHistory,\r\n          packRefSet.name\r\n        );\r\n      }\r\n    }\r\n\r\n    if (packRefSet.resourcePackReferences) {\r\n      for (let i = 0; i < packRefSet.resourcePackReferences.length; i++) {\r\n        this.ensurePackReferenceInCollection(packRefSet.resourcePackReferences[i], this.worldResourcePacks);\r\n        this.ensurePackReferenceInHistory(\r\n          packRefSet.resourcePackReferences[i],\r\n          this.worldResourcePackHistory,\r\n          packRefSet.name\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  ensurePackReferenceInCollection(\r\n    packRef: { uuid: string; version: number[]; priority?: number },\r\n    packRefs: IPackRegistration[]\r\n  ) {\r\n    Log.assert(packRef.version.length === 3, \"Packref version not within bounds.\");\r\n\r\n    const compareUuid = Utilities.canonicalizeId(packRef.uuid);\r\n\r\n    for (let i = 0; i < packRefs.length; i++) {\r\n      if (Utilities.canonicalizeId(packRefs[i].pack_id) === compareUuid) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    packRefs.push({\r\n      pack_id: packRef.uuid,\r\n      version: packRef.version,\r\n      priority: packRef.priority ? packRef.priority : 32767,\r\n    });\r\n  }\r\n\r\n  ensurePackReferenceInHistory(\r\n    packRef: { uuid: string; version: number[]; priority?: number },\r\n    packHistory: IPackHistory,\r\n    name: string\r\n  ) {\r\n    Log.assert(packRef.version.length === 3, \"Packref version not within bounds.\");\r\n    if (packHistory.packs === undefined) {\r\n      packHistory.packs = [];\r\n    }\r\n\r\n    const compareUuid = Utilities.canonicalizeId(packRef.uuid);\r\n\r\n    for (let i = 0; i < packHistory.packs.length; i++) {\r\n      if (Utilities.canonicalizeId(packHistory.packs[i].uuid) === compareUuid) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    packHistory.packs.push({ can_be_redownloaded: false, name: name, uuid: packRef.uuid, version: packRef.version });\r\n  }\r\n\r\n  private _loadFromNbt() {}\r\n\r\n  public getProperty(id: string): any {\r\n    const ld = this.levelData;\r\n\r\n    switch (id.toLowerCase()) {\r\n      // World identity\r\n      case \"levelname\":\r\n        return ld?.levelName;\r\n      case \"gametype\":\r\n        return ld?.gameType;\r\n      case \"difficulty\":\r\n        return ld?.difficulty;\r\n      case \"generator\":\r\n        return ld?.generator;\r\n      case \"flatworldlayers\":\r\n        return ld?.flatWorldLayers ? JSON.stringify(ld.flatWorldLayers) : undefined;\r\n      case \"randomseed\":\r\n        return ld?.randomSeed;\r\n      case \"basegameversion\":\r\n        return ld?.baseGameVersion;\r\n      case \"inventoryversion\":\r\n        return ld?.inventoryVersion;\r\n\r\n      // Spawn & bounds\r\n      case \"spawnx\":\r\n        return this.spawnX;\r\n      case \"spawny\":\r\n        return this.spawnY;\r\n      case \"spawnz\":\r\n        return this.spawnZ;\r\n      case \"limitedworldoriginx\":\r\n        return ld?.limitedWorldOriginX;\r\n      case \"limitedworldoriginy\":\r\n        return ld?.limitedWorldOriginY;\r\n      case \"limitedworldoriginz\":\r\n        return ld?.limitedWorldOriginZ;\r\n      case \"limitedworlddepth\":\r\n        return ld?.limitedWorldDepth;\r\n      case \"limitedworldwidth\":\r\n        return ld?.limitedWorldWidth;\r\n      case \"spawnradius\":\r\n        return ld?.spawnRadius;\r\n\r\n      // Game rules (boolean)\r\n      case \"commandsenabled\":\r\n        return ld?.commandsEnabled;\r\n      case \"commandblocksenabled\":\r\n        return ld?.commandBlocksEnabled;\r\n      case \"commandblockoutput\":\r\n        return ld?.commandBlockOutput;\r\n      case \"cheatsenabled\":\r\n        return ld?.cheatsEnabled;\r\n      case \"dodaylightcycle\":\r\n        return ld?.doDaylightCycle;\r\n      case \"doentitydrops\":\r\n        return ld?.doEntityDrops;\r\n      case \"dofiretick\":\r\n        return ld?.doFireTick;\r\n      case \"doimmediaterespawn\":\r\n        return ld?.doImmediateRespawn;\r\n      case \"doinsomnia\":\r\n        return ld?.doInsomnia;\r\n      case \"domobloot\":\r\n        return ld?.doMobLoot;\r\n      case \"domobspawning\":\r\n        return ld?.doMobSpawning;\r\n      case \"dotiledrops\":\r\n        return ld?.doTileDrops;\r\n      case \"doweathercycle\":\r\n        return ld?.doWeatherCycle;\r\n      case \"drowningdamage\":\r\n        return ld?.drowningDamage;\r\n      case \"falldamage\":\r\n        return ld?.fallDamage;\r\n      case \"firedamage\":\r\n        return ld?.fireDamage;\r\n      case \"freezedamage\":\r\n        return ld?.freezeDamage;\r\n      case \"keepinventory\":\r\n        return ld?.keepInventory;\r\n      case \"mobgriefing\":\r\n        return ld?.mobGriefing;\r\n      case \"naturalregeneration\":\r\n        return ld?.naturalRegeneration;\r\n      case \"pvp\":\r\n        return ld?.pvp;\r\n      case \"respawnblocksexplode\":\r\n        return ld?.respawnBlocksExplode;\r\n      case \"sendcommandfeedback\":\r\n        return ld?.sendCommandFeedback;\r\n      case \"showcoordinates\":\r\n        return ld?.showCoordinates;\r\n      case \"showdeathmessages\":\r\n        return ld?.showDeathMessages;\r\n      case \"showtags\":\r\n        return ld?.showTags;\r\n      case \"showbordereffect\":\r\n        return ld?.showBorderEffect;\r\n      case \"tntexplodes\":\r\n        return ld?.tntExplodes;\r\n      case \"forcegametype\":\r\n        return ld?.forceGameType;\r\n      case \"immutableworld\":\r\n        return ld?.immutableWorld;\r\n      case \"spawnmobs\":\r\n        return ld?.spawnMobs;\r\n      case \"bonuschestenabled\":\r\n        return ld?.bonusChestEnabled;\r\n      case \"bonuschestspawned\":\r\n        return ld?.bonusChestSpawned;\r\n      case \"startwithmapenabled\":\r\n        return ld?.startWithMapEnabled;\r\n\r\n      // Game rules (numeric)\r\n      case \"randomtickspeed\":\r\n        return ld?.randomTickSpeed;\r\n      case \"functioncommandlimit\":\r\n        return ld?.functionCommandLimit;\r\n      case \"maxcommandchainlength\":\r\n        return ld?.maxCommandChainLength;\r\n      case \"serverchunktickrange\":\r\n        return ld?.serverChunkTickRange;\r\n      case \"netherscale\":\r\n        return ld?.netherScale;\r\n\r\n      // Multiplayer\r\n      case \"multiplayergame\":\r\n        return ld?.multiplayerGame;\r\n      case \"multiplayergameintent\":\r\n        return ld?.multiplayerGameIntent;\r\n      case \"lanbroadcast\":\r\n        return ld?.lanBroadcast;\r\n      case \"lanbroadcastintent\":\r\n        return ld?.lanBroadcastIntent;\r\n      case \"platformbroadcastintent\":\r\n        return ld?.platformBroadcastIntent;\r\n      case \"xblbroadcastintent\":\r\n        return ld?.xblBroadcastIntent;\r\n      case \"usemsagamertagsonly\":\r\n        return ld?.useMsaGamertagsOnly;\r\n      case \"texturepacksrequired\":\r\n        return ld?.texturePacksRequired;\r\n\r\n      // Editor\r\n      case \"iscreatedineditor\":\r\n        return ld?.isCreatedInEditor;\r\n      case \"isexportedfromeditor\":\r\n        return ld?.isExportedFromEditor;\r\n      case \"editorworldtype\":\r\n        return ld?.editorWorldType;\r\n\r\n      // Experiments\r\n      case \"experimentalgameplay\":\r\n        return ld?.experimentalGameplay;\r\n      case \"betaapisexperiment\":\r\n        return ld?.betaApisExperiment;\r\n      case \"deferredtechnicalpreviewexperiment\":\r\n        return ld?.deferredTechnicalPreviewExperiment;\r\n      case \"datadrivenitemsexperiment\":\r\n        return ld?.dataDrivenItemsExperiment;\r\n      case \"savedwithtoggledexperiments\":\r\n        return ld?.savedWithToggledExperiments;\r\n      case \"experimentseverused\":\r\n        return ld?.experimentsEverUsed;\r\n\r\n      // Permissions & abilities\r\n      case \"permissionslevel\":\r\n        return ld?.permissionsLevel;\r\n      case \"playerpermissionslevel\":\r\n        return ld?.playerPermissionsLevel;\r\n      case \"attackmobs\":\r\n        return ld?.attackMobs;\r\n      case \"attackplayers\":\r\n        return ld?.attackPlayers;\r\n      case \"build\":\r\n        return ld?.build;\r\n      case \"doorsandswitches\":\r\n        return ld?.doorsAndSwitches;\r\n      case \"flying\":\r\n        return ld?.flying;\r\n      case \"instabuild\":\r\n        return ld?.instaBuild;\r\n      case \"invulnerable\":\r\n        return ld?.invulnerable;\r\n      case \"lightning\":\r\n        return ld?.lightning;\r\n      case \"mayfly\":\r\n        return ld?.mayFly;\r\n      case \"mine\":\r\n        return ld?.mine;\r\n      case \"op\":\r\n        return ld?.op;\r\n      case \"opencontainers\":\r\n        return ld?.openContainers;\r\n      case \"teleport\":\r\n        return ld?.teleport;\r\n      case \"flyspeed\":\r\n        return ld?.flySpeed;\r\n      case \"walkspeed\":\r\n        return ld?.walkSpeed;\r\n\r\n      // Template & lock\r\n      case \"haslockedbehaviorpack\":\r\n        return ld?.hasLockedBehaviorPack;\r\n      case \"haslockedresourcepack\":\r\n        return ld?.hasLockedResourcePack;\r\n      case \"isfromlockedtemplate\":\r\n        return ld?.isFromLockedTemplate;\r\n      case \"isfromworldtemplate\":\r\n        return ld?.isFromWorldTemplate;\r\n      case \"issingleuseworld\":\r\n        return ld?.isSingleUseWorld;\r\n      case \"isworldtemplateoptionlocked\":\r\n        return ld?.isWorldTemplateOptionLocked;\r\n      case \"confirmedplatformlockedcontent\":\r\n        return ld?.confirmedPlatformLockedContent;\r\n      case \"requirescopiedpackremovalcheck\":\r\n        return ld?.requiresCopiedPackRemovalCheck;\r\n\r\n      // Misc\r\n      case \"israndomseedallowed\":\r\n        return ld?.isRandomSeedAllowed;\r\n      case \"biomeoverride\":\r\n        return ld?.biomeOverride;\r\n      case \"centermapstoorigin\":\r\n        return ld?.centerMapsToOrigin;\r\n      case \"hasbeenloadedincreative\":\r\n        return ld?.hasBeenLoadedInCreative;\r\n      case \"spawnv1villagers\":\r\n        return ld?.spawnV1Villagers;\r\n      case \"educationfeaturesenabled\":\r\n        return ld?.educationFeaturesEnabled;\r\n      case \"daylightcycle\":\r\n        return ld?.daylightCycle;\r\n      case \"lightningtime\":\r\n        return ld?.lightningTime;\r\n      case \"lightninglevel\":\r\n        return ld?.lightningLevel;\r\n      case \"rainlevel\":\r\n        return ld?.rainLevel;\r\n      case \"raintime\":\r\n        return ld?.rainTime;\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    throw new Error(\"Method not implemented.\");\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    throw new Error(\"Method not implemented.\");\r\n  }\r\n\r\n  public setProperty(id: string, newVal: any): any {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    const ld = this.levelData;\r\n\r\n    switch (id.toLowerCase()) {\r\n      // World identity\r\n      case \"levelname\":\r\n        ld.levelName = newVal as string;\r\n        break;\r\n      case \"gametype\":\r\n        ld.gameType = newVal as number;\r\n        break;\r\n      case \"difficulty\":\r\n        ld.difficulty = newVal as number;\r\n        break;\r\n      case \"generator\":\r\n        ld.generator = newVal as number;\r\n        break;\r\n      case \"randomseed\":\r\n        ld.randomSeed = newVal as string;\r\n        break;\r\n      case \"basegameversion\":\r\n        ld.baseGameVersion = newVal as string;\r\n        break;\r\n      case \"inventoryversion\":\r\n        ld.inventoryVersion = newVal as string;\r\n        break;\r\n\r\n      // Spawn & bounds\r\n      case \"spawnx\":\r\n        this.spawnX = newVal as number;\r\n        break;\r\n      case \"spawny\":\r\n        this.spawnY = newVal as number;\r\n        break;\r\n      case \"spawnz\":\r\n        this.spawnZ = newVal as number;\r\n        break;\r\n      case \"limitedworldoriginx\":\r\n        ld.limitedWorldOriginX = newVal as number;\r\n        break;\r\n      case \"limitedworldoriginy\":\r\n        ld.limitedWorldOriginY = newVal as number;\r\n        break;\r\n      case \"limitedworldoriginz\":\r\n        ld.limitedWorldOriginZ = newVal as number;\r\n        break;\r\n      case \"limitedworlddepth\":\r\n        ld.limitedWorldDepth = newVal as number;\r\n        break;\r\n      case \"limitedworldwidth\":\r\n        ld.limitedWorldWidth = newVal as number;\r\n        break;\r\n      case \"spawnradius\":\r\n        ld.spawnRadius = newVal as number;\r\n        break;\r\n\r\n      // Game rules (boolean)\r\n      case \"commandsenabled\":\r\n        ld.commandsEnabled = newVal as boolean;\r\n        break;\r\n      case \"commandblocksenabled\":\r\n        ld.commandBlocksEnabled = newVal as boolean;\r\n        break;\r\n      case \"commandblockoutput\":\r\n        ld.commandBlockOutput = newVal as boolean;\r\n        break;\r\n      case \"cheatsenabled\":\r\n        ld.cheatsEnabled = newVal as boolean;\r\n        break;\r\n      case \"dodaylightcycle\":\r\n        ld.doDaylightCycle = newVal as boolean;\r\n        break;\r\n      case \"doentitydrops\":\r\n        ld.doEntityDrops = newVal as boolean;\r\n        break;\r\n      case \"dofiretick\":\r\n        ld.doFireTick = newVal as boolean;\r\n        break;\r\n      case \"doimmediaterespawn\":\r\n        ld.doImmediateRespawn = newVal as boolean;\r\n        break;\r\n      case \"doinsomnia\":\r\n        ld.doInsomnia = newVal as boolean;\r\n        break;\r\n      case \"domobloot\":\r\n        ld.doMobLoot = newVal as boolean;\r\n        break;\r\n      case \"domobspawning\":\r\n        ld.doMobSpawning = newVal as boolean;\r\n        break;\r\n      case \"dotiledrops\":\r\n        ld.doTileDrops = newVal as boolean;\r\n        break;\r\n      case \"doweathercycle\":\r\n        ld.doWeatherCycle = newVal as boolean;\r\n        break;\r\n      case \"drowningdamage\":\r\n        ld.drowningDamage = newVal as boolean;\r\n        break;\r\n      case \"falldamage\":\r\n        ld.fallDamage = newVal as boolean;\r\n        break;\r\n      case \"firedamage\":\r\n        ld.fireDamage = newVal as boolean;\r\n        break;\r\n      case \"freezedamage\":\r\n        ld.freezeDamage = newVal as boolean;\r\n        break;\r\n      case \"keepinventory\":\r\n        ld.keepInventory = newVal as boolean;\r\n        break;\r\n      case \"mobgriefing\":\r\n        ld.mobGriefing = newVal as boolean;\r\n        break;\r\n      case \"naturalregeneration\":\r\n        ld.naturalRegeneration = newVal as boolean;\r\n        break;\r\n      case \"pvp\":\r\n        ld.pvp = newVal as boolean;\r\n        break;\r\n      case \"respawnblocksexplode\":\r\n        ld.respawnBlocksExplode = newVal as boolean;\r\n        break;\r\n      case \"sendcommandfeedback\":\r\n        ld.sendCommandFeedback = newVal as boolean;\r\n        break;\r\n      case \"showcoordinates\":\r\n        ld.showCoordinates = newVal as boolean;\r\n        break;\r\n      case \"showdeathmessages\":\r\n        ld.showDeathMessages = newVal as boolean;\r\n        break;\r\n      case \"showtags\":\r\n        ld.showTags = newVal as boolean;\r\n        break;\r\n      case \"showbordereffect\":\r\n        ld.showBorderEffect = newVal as boolean;\r\n        break;\r\n      case \"tntexplodes\":\r\n        ld.tntExplodes = newVal as boolean;\r\n        break;\r\n      case \"forcegametype\":\r\n        ld.forceGameType = newVal as boolean;\r\n        break;\r\n      case \"immutableworld\":\r\n        ld.immutableWorld = newVal as boolean;\r\n        break;\r\n      case \"spawnmobs\":\r\n        ld.spawnMobs = newVal as boolean;\r\n        break;\r\n      case \"bonuschestenabled\":\r\n        ld.bonusChestEnabled = newVal as boolean;\r\n        break;\r\n      case \"bonuschestspawned\":\r\n        ld.bonusChestSpawned = newVal as boolean;\r\n        break;\r\n      case \"startwithmapenabled\":\r\n        ld.startWithMapEnabled = newVal as boolean;\r\n        break;\r\n\r\n      // Game rules (numeric)\r\n      case \"randomtickspeed\":\r\n        ld.randomTickSpeed = newVal as number;\r\n        break;\r\n      case \"functioncommandlimit\":\r\n        ld.functionCommandLimit = newVal as number;\r\n        break;\r\n      case \"maxcommandchainlength\":\r\n        ld.maxCommandChainLength = newVal as number;\r\n        break;\r\n      case \"serverchunktickrange\":\r\n        ld.serverChunkTickRange = newVal as number;\r\n        break;\r\n      case \"netherscale\":\r\n        ld.netherScale = newVal as number;\r\n        break;\r\n\r\n      // Multiplayer\r\n      case \"multiplayergame\":\r\n        ld.multiplayerGame = newVal as boolean;\r\n        break;\r\n      case \"multiplayergameintent\":\r\n        ld.multiplayerGameIntent = newVal as boolean;\r\n        break;\r\n      case \"lanbroadcast\":\r\n        ld.lanBroadcast = newVal as boolean;\r\n        break;\r\n      case \"lanbroadcastintent\":\r\n        ld.lanBroadcastIntent = newVal as boolean;\r\n        break;\r\n      case \"platformbroadcastintent\":\r\n        ld.platformBroadcastIntent = newVal as number;\r\n        break;\r\n      case \"xblbroadcastintent\":\r\n        ld.xblBroadcastIntent = newVal as number;\r\n        break;\r\n      case \"usemsagamertagsonly\":\r\n        ld.useMsaGamertagsOnly = newVal as boolean;\r\n        break;\r\n      case \"texturepacksrequired\":\r\n        ld.texturePacksRequired = newVal as boolean;\r\n        break;\r\n\r\n      // Editor\r\n      case \"iscreatedineditor\":\r\n        ld.isCreatedInEditor = newVal as boolean;\r\n        break;\r\n      case \"isexportedfromeditor\":\r\n        ld.isExportedFromEditor = newVal as boolean;\r\n        break;\r\n      case \"editorworldtype\":\r\n        ld.editorWorldType = newVal as number;\r\n        break;\r\n\r\n      // Experiments\r\n      case \"experimentalgameplay\":\r\n        ld.experimentalGameplay = newVal as boolean;\r\n        break;\r\n      case \"betaapisexperiment\":\r\n        ld.betaApisExperiment = newVal as boolean;\r\n        break;\r\n      case \"deferredtechnicalpreviewexperiment\":\r\n        ld.deferredTechnicalPreviewExperiment = newVal as boolean;\r\n        break;\r\n      case \"datadrivenitemsexperiment\":\r\n        ld.dataDrivenItemsExperiment = newVal as boolean;\r\n        break;\r\n      case \"savedwithtoggledexperiments\":\r\n        ld.savedWithToggledExperiments = newVal as boolean;\r\n        break;\r\n      case \"experimentseverused\":\r\n        ld.experimentsEverUsed = newVal as boolean;\r\n        break;\r\n\r\n      // Permissions & abilities\r\n      case \"permissionslevel\":\r\n        ld.permissionsLevel = newVal as number;\r\n        break;\r\n      case \"playerpermissionslevel\":\r\n        ld.playerPermissionsLevel = newVal as number;\r\n        break;\r\n      case \"attackmobs\":\r\n        ld.attackMobs = newVal as boolean;\r\n        break;\r\n      case \"attackplayers\":\r\n        ld.attackPlayers = newVal as boolean;\r\n        break;\r\n      case \"build\":\r\n        ld.build = newVal as boolean;\r\n        break;\r\n      case \"doorsandswitches\":\r\n        ld.doorsAndSwitches = newVal as boolean;\r\n        break;\r\n      case \"flying\":\r\n        ld.flying = newVal as boolean;\r\n        break;\r\n      case \"instabuild\":\r\n        ld.instaBuild = newVal as boolean;\r\n        break;\r\n      case \"invulnerable\":\r\n        ld.invulnerable = newVal as boolean;\r\n        break;\r\n      case \"lightning\":\r\n        ld.lightning = newVal as boolean;\r\n        break;\r\n      case \"mayfly\":\r\n        ld.mayFly = newVal as boolean;\r\n        break;\r\n      case \"mine\":\r\n        ld.mine = newVal as boolean;\r\n        break;\r\n      case \"op\":\r\n        ld.op = newVal as boolean;\r\n        break;\r\n      case \"opencontainers\":\r\n        ld.openContainers = newVal as boolean;\r\n        break;\r\n      case \"teleport\":\r\n        ld.teleport = newVal as boolean;\r\n        break;\r\n      case \"flyspeed\":\r\n        ld.flySpeed = newVal as number;\r\n        break;\r\n      case \"walkspeed\":\r\n        ld.walkSpeed = newVal as number;\r\n        break;\r\n\r\n      // Template & lock\r\n      case \"haslockedbehaviorpack\":\r\n        ld.hasLockedBehaviorPack = newVal as boolean;\r\n        break;\r\n      case \"haslockedresourcepack\":\r\n        ld.hasLockedResourcePack = newVal as boolean;\r\n        break;\r\n      case \"isfromlockedtemplate\":\r\n        ld.isFromLockedTemplate = newVal as boolean;\r\n        break;\r\n      case \"isfromworldtemplate\":\r\n        ld.isFromWorldTemplate = newVal as boolean;\r\n        break;\r\n      case \"issingleuseworld\":\r\n        ld.isSingleUseWorld = newVal as boolean;\r\n        break;\r\n      case \"isworldtemplateoptionlocked\":\r\n        ld.isWorldTemplateOptionLocked = newVal as boolean;\r\n        break;\r\n      case \"confirmedplatformlockedcontent\":\r\n        ld.confirmedPlatformLockedContent = newVal as boolean;\r\n        break;\r\n      case \"requirescopiedpackremovalcheck\":\r\n        ld.requiresCopiedPackRemovalCheck = newVal as boolean;\r\n        break;\r\n\r\n      // Misc\r\n      case \"israndomseedallowed\":\r\n        ld.isRandomSeedAllowed = newVal as boolean;\r\n        break;\r\n      case \"biomeoverride\":\r\n        ld.biomeOverride = newVal as string;\r\n        break;\r\n      case \"centermapstoorigin\":\r\n        ld.centerMapsToOrigin = newVal as boolean;\r\n        break;\r\n      case \"hasbeenloadedincreative\":\r\n        ld.hasBeenLoadedInCreative = newVal as boolean;\r\n        break;\r\n      case \"spawnv1villagers\":\r\n        ld.spawnV1Villagers = newVal as boolean;\r\n        break;\r\n      case \"educationfeaturesenabled\":\r\n        ld.educationFeaturesEnabled = newVal as boolean;\r\n        break;\r\n      case \"daylightcycle\":\r\n        ld.daylightCycle = newVal as number;\r\n        break;\r\n      case \"lightningtime\":\r\n        ld.lightningTime = newVal as number;\r\n        break;\r\n      case \"lightninglevel\":\r\n        ld.lightningLevel = newVal as number;\r\n        break;\r\n      case \"rainlevel\":\r\n        ld.rainLevel = newVal as number;\r\n        break;\r\n      case \"raintime\":\r\n        ld.rainTime = newVal as number;\r\n        break;\r\n    }\r\n\r\n    this._onPropertyChanged.dispatch(this, id);\r\n  }\r\n\r\n  async loadMetaFiles(force?: boolean) {\r\n    if ((this._isLoaded && !force) || (this._file === undefined && this._folder === undefined)) {\r\n      return;\r\n    }\r\n\r\n    if (this._file) {\r\n      if (!this._file.isContentLoaded) {\r\n        await this._file.loadContent();\r\n      }\r\n\r\n      if (this._file.content === undefined || !(this._file.content instanceof Uint8Array)) {\r\n        return;\r\n      }\r\n      await this.loadFromBytes(this._file.content);\r\n    }\r\n\r\n    if (this._folder) {\r\n      await this.loadFromFolder(this._folder);\r\n    }\r\n  }\r\n\r\n  public ensureResourcePacksFromString(packStr: string) {\r\n    const refs = MinecraftUtilities.getIdsAndVersions(packStr);\r\n\r\n    for (const ref of refs) {\r\n      this.ensureResourcePack(ref.uuid, ref.version, ref.uuid);\r\n    }\r\n  }\r\n\r\n  public ensureBehaviorPacksFromString(packStr: string) {\r\n    const refs = MinecraftUtilities.getIdsAndVersions(packStr);\r\n\r\n    for (const ref of refs) {\r\n      this.ensureBehaviorPack(ref.uuid, ref.version, ref.uuid);\r\n    }\r\n  }\r\n\r\n  public ensureBehaviorPack(packId: string, version: number[], packName: string, packPriority?: number) {\r\n    if (this.worldBehaviorPacks === undefined) {\r\n      this.worldBehaviorPacks = [];\r\n    }\r\n\r\n    if (this.worldBehaviorPackHistory === undefined) {\r\n      this.worldBehaviorPackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    let wasAdded = false;\r\n\r\n    const bp = this.getBehaviorPack(packId);\r\n\r\n    if (bp === undefined) {\r\n      this.worldBehaviorPacks.push({\r\n        pack_id: packId,\r\n        version: version,\r\n        priority: packPriority,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n\r\n    const bph = this.getBehaviorPackHistory(packId);\r\n\r\n    if (bph === undefined) {\r\n      this.worldBehaviorPackHistory.packs.push({\r\n        uuid: packId,\r\n        version: version,\r\n        name: packName,\r\n        can_be_redownloaded: false,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n    return wasAdded;\r\n  }\r\n\r\n  public getBehaviorPack(packId: string) {\r\n    if (this.worldBehaviorPacks === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    for (let i = 0; i < this.worldBehaviorPacks.length; i++) {\r\n      const worldBP = this.worldBehaviorPacks[i];\r\n\r\n      if (Utilities.canonicalizeId(worldBP.pack_id) === packId) {\r\n        return worldBP;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public getBehaviorPackHistory(packId: string) {\r\n    if (this.worldBehaviorPackHistory === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    const packs = this.worldBehaviorPackHistory.packs;\r\n\r\n    for (let i = 0; i < packs.length; i++) {\r\n      const worldBPH = packs[i];\r\n\r\n      if (Utilities.canonicalizeId(worldBPH.uuid) === packId) {\r\n        return worldBPH;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static sortPackRegByPriority(a: IPackRegistration, b: IPackRegistration) {\r\n    return (a.priority === undefined ? 32767 : a.priority) - (b.priority === undefined ? 32767 : b.priority);\r\n  }\r\n\r\n  static sortPackCollectionByPriority(packRefs: IPackRegistration[]) {\r\n    MCWorld.freezePackRegistrationOrder(packRefs);\r\n\r\n    return packRefs.sort(MCWorld.sortPackRegByPriority);\r\n  }\r\n\r\n  static freezePackRegistrationOrder(packRefs: IPackRegistration[]) {\r\n    for (let i = 0; i < packRefs.length; i++) {\r\n      if (packRefs[i].priority === undefined) {\r\n        packRefs[i].priority = i * 100;\r\n      }\r\n    }\r\n  }\r\n\r\n  async saveWorldBehaviorPacks() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldBehaviorPacks === undefined || this.worldBehaviorPacks.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n\r\n    let packRefColl = MCWorld.freezeAndStripPriorities(this.worldBehaviorPacks);\r\n\r\n    packsFile.setContent(JSON.stringify(packRefColl, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  static freezeAndStripPriorities(coll: IPackRegistration[]) {\r\n    let returnColl: IPackRegistration[] = [];\r\n\r\n    const collSort = MCWorld.sortPackCollectionByPriority(coll);\r\n\r\n    for (let i = 0; i < collSort.length; i++) {\r\n      returnColl.push({\r\n        pack_id: collSort[i].pack_id,\r\n        version: collSort[i].version,\r\n      });\r\n    }\r\n\r\n    return returnColl;\r\n  }\r\n\r\n  async saveWorldBehaviorPackHistory() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldBehaviorPackHistory === undefined || this.worldBehaviorPackHistory.packs.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(BEHAVIOR_PACK_HISTORY_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(BEHAVIOR_PACK_HISTORY_RELPATH);\r\n\r\n    packsFile.setContent(JSON.stringify(this.worldBehaviorPackHistory, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  public ensureResourcePack(packId: string, version: number[], packName: string, packPriority?: number) {\r\n    if (this.worldResourcePacks === undefined) {\r\n      this.worldResourcePacks = [];\r\n    }\r\n\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      this.worldResourcePackHistory = {\r\n        packs: [],\r\n      };\r\n    }\r\n\r\n    let wasAdded = false;\r\n\r\n    const rp = this.getResourcePack(packId);\r\n\r\n    if (rp === undefined) {\r\n      this.worldResourcePacks.push({\r\n        pack_id: packId,\r\n        version: version,\r\n        priority: packPriority,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n\r\n    const rph = this.getResourcePackHistory(packId);\r\n\r\n    if (rph === undefined) {\r\n      this.worldResourcePackHistory.packs.push({\r\n        uuid: packId,\r\n        version: version,\r\n        name: packName,\r\n        can_be_redownloaded: false,\r\n      });\r\n      wasAdded = true;\r\n    }\r\n\r\n    return wasAdded;\r\n  }\r\n\r\n  public getResourcePack(packId: string) {\r\n    if (this.worldResourcePacks === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    for (let i = 0; i < this.worldResourcePacks.length; i++) {\r\n      const worldRP = this.worldResourcePacks[i];\r\n\r\n      if (Utilities.canonicalizeId(worldRP.pack_id) === packId) {\r\n        return worldRP;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public getResourcePackHistory(packId: string) {\r\n    if (this.worldResourcePackHistory === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    packId = Utilities.canonicalizeId(packId);\r\n\r\n    const packs = this.worldResourcePackHistory.packs;\r\n\r\n    for (let i = 0; i < packs.length; i++) {\r\n      const worldBPH = packs[i];\r\n\r\n      if (Utilities.canonicalizeId(worldBPH.uuid) === packId) {\r\n        return worldBPH;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async saveWorldResourcePacks() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldResourcePacks === undefined || this.worldResourcePacks.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n\r\n    let packRefColl = MCWorld.freezeAndStripPriorities(this.worldResourcePacks);\r\n\r\n    packsFile.setContent(JSON.stringify(packRefColl, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  async saveWorldResourcePackHistory() {\r\n    if (this.effectiveRootFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (this.worldResourcePackHistory === undefined || this.worldResourcePackHistory.packs.length === 0) {\r\n      await rootFolder.deleteFileFromRelativePath(RESOURCE_PACK_HISTORY_RELPATH);\r\n      return;\r\n    }\r\n\r\n    const packsFile = await rootFolder.ensureFileFromRelativePath(RESOURCE_PACK_HISTORY_RELPATH);\r\n\r\n    packsFile.setContent(JSON.stringify(this.worldResourcePackHistory, null, 2));\r\n\r\n    packsFile.saveContent();\r\n  }\r\n\r\n  async loadFromBytes(content: Uint8Array) {\r\n    let storage = undefined;\r\n\r\n    if (this._file) {\r\n      if (!this._file.fileContainerStorage) {\r\n        this._file.fileContainerStorage = new ZipStorage();\r\n\r\n        this._file.fileContainerStorage.containerFile = this._file;\r\n        this._file.fileContainerStorage.storagePath = this._file.extendedPath + \"#\";\r\n      }\r\n\r\n      storage = this._file.fileContainerStorage as ZipStorage;\r\n    } else {\r\n      this._zipStorage = new ZipStorage();\r\n      storage = this._zipStorage;\r\n    }\r\n\r\n    await storage.loadFromUint8Array(content, this._file?.name);\r\n\r\n    const rootFolder = storage.rootFolder;\r\n\r\n    await this.loadFromFolder(rootFolder);\r\n  }\r\n\r\n  async applyWorldSettings(worldSettings?: IWorldSettings) {\r\n    if (!this._isLoaded) {\r\n      await this.loadMetaFiles(false);\r\n    }\r\n\r\n    this.ensureLevelData();\r\n\r\n    if (this.levelData) {\r\n      this.levelData.ensureDefaults();\r\n      if (worldSettings) {\r\n        this.levelData.applyFromWorldSettings(worldSettings);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureLevelData() {\r\n    if (this.levelData === undefined) {\r\n      this.levelData = new WorldLevelDat();\r\n    }\r\n\r\n    return this.levelData;\r\n  }\r\n\r\n  async loadFromFolder(rootFolder: IFolder) {\r\n    const rootDataFile = await rootFolder.getFileFromRelativePath(LEVELDAT_RELPATH);\r\n\r\n    if (rootDataFile !== undefined) {\r\n      if (!this.file?.isContentLoaded) {\r\n        await rootDataFile.loadContent();\r\n      }\r\n\r\n      if (rootDataFile.content !== undefined && rootDataFile.content instanceof Uint8Array) {\r\n        this.levelData = new WorldLevelDat();\r\n\r\n        this.levelData.loadFromNbtBytes(rootDataFile.content);\r\n\r\n        Utilities.appendErrors(this, this.levelData);\r\n\r\n        this._loadFromNbt();\r\n      }\r\n    }\r\n\r\n    const levelNameTextFile = await rootFolder.getFileFromRelativePath(LEVELNAMETXT_RELPATH);\r\n\r\n    if (levelNameTextFile !== undefined) {\r\n      if (!levelNameTextFile.isContentLoaded) {\r\n        await levelNameTextFile.loadContent();\r\n      }\r\n\r\n      if (levelNameTextFile.content !== undefined && typeof levelNameTextFile.content === \"string\") {\r\n        this.name = levelNameTextFile.content;\r\n      }\r\n    }\r\n\r\n    const manifestJsonFile = await rootFolder.getFileFromRelativePath(MANIFEST_RELPATH);\r\n\r\n    if (manifestJsonFile !== undefined) {\r\n      if (!manifestJsonFile.isContentLoaded) {\r\n        await manifestJsonFile.loadContent();\r\n      }\r\n\r\n      if (manifestJsonFile.content !== undefined && typeof manifestJsonFile.content === \"string\") {\r\n        this._manifest = StorageUtilities.getJsonObject(manifestJsonFile);\r\n      }\r\n    }\r\n\r\n    let packsFile = await rootFolder.getFileFromRelativePath(BEHAVIOR_PACKS_RELPATH);\r\n\r\n    if (packsFile !== undefined) {\r\n      if (!packsFile.isContentLoaded) {\r\n        await packsFile.loadContent();\r\n      }\r\n\r\n      if (packsFile.content !== undefined && typeof packsFile.content === \"string\") {\r\n        try {\r\n          this.worldBehaviorPacks = StorageUtilities.getJsonObject(packsFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse behavior pack file content\");\r\n          this.worldBehaviorPacks = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    packsFile = await rootFolder.getFileFromRelativePath(RESOURCE_PACKS_RELPATH);\r\n\r\n    if (packsFile !== undefined) {\r\n      if (!packsFile.isContentLoaded) {\r\n        await packsFile.loadContent();\r\n      }\r\n\r\n      if (packsFile.content !== undefined && typeof packsFile.content === \"string\") {\r\n        try {\r\n          this.worldResourcePacks = StorageUtilities.getJsonObject(packsFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse resource pack file content.\" + packsFile.fullPath);\r\n          this.worldResourcePacks = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    let packHistoryFile = await rootFolder.getFileFromRelativePath(BEHAVIOR_PACK_HISTORY_RELPATH);\r\n\r\n    if (packHistoryFile !== undefined) {\r\n      if (!packHistoryFile.isContentLoaded) {\r\n        await packHistoryFile.loadContent();\r\n      }\r\n\r\n      if (packHistoryFile.content !== undefined && typeof packHistoryFile.content === \"string\") {\r\n        try {\r\n          this.worldBehaviorPackHistory = StorageUtilities.getJsonObject(packHistoryFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse behavior pack history file content\");\r\n          this.worldBehaviorPackHistory = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    packHistoryFile = await rootFolder.getFileFromRelativePath(RESOURCE_PACK_HISTORY_RELPATH);\r\n\r\n    if (packHistoryFile !== undefined) {\r\n      if (!packHistoryFile.isContentLoaded) {\r\n        await packHistoryFile.loadContent();\r\n      }\r\n\r\n      if (packHistoryFile.content !== undefined && typeof packHistoryFile.content === \"string\") {\r\n        try {\r\n          this.worldResourcePackHistory = StorageUtilities.getJsonObject(packHistoryFile);\r\n        } catch {\r\n          this._pushError(\"Could not parse resource pack history file content: \" + packHistoryFile.fullPath);\r\n          this.worldResourcePackHistory = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    const imageFile = await rootFolder.getFileFromRelativePath(\"/world_icon.jpeg\");\r\n\r\n    if (imageFile !== undefined) {\r\n      if (!imageFile.isContentLoaded) {\r\n        await imageFile.loadContent();\r\n      }\r\n\r\n      if (imageFile.content instanceof Uint8Array) {\r\n        this.imageBase64 = Utilities.uint8ArrayToBase64(imageFile.content);\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async loadLevelDb(force: boolean = false, options?: IWorldProcessingOptions): Promise<boolean> {\r\n    if (!force && this._isDataLoaded) {\r\n      return true;\r\n    }\r\n\r\n    const useLazyLoad = options?.lazyLoad === true;\r\n    this._isLazyLoadMode = useLazyLoad;\r\n\r\n    // Initialize chunk cache if requested\r\n    if (options?.maxChunksInCache !== undefined || useLazyLoad) {\r\n      this._chunkCache = new WorldChunkCache(options?.maxChunksInCache ?? 20000);\r\n      this._chunkCache.setChunkProvider((key) => this.getChunkByKey(key));\r\n    }\r\n\r\n    const loadOper = await this._project?.creatorTools.notifyOperationStarted(\r\n      \"Starting first-pass load of '\" + this.name + \"' world\",\r\n      StatusTopic.worldLoad\r\n    );\r\n\r\n    const rootFolder = this.effectiveRootFolder;\r\n\r\n    if (!rootFolder) {\r\n      return false;\r\n    }\r\n\r\n    await rootFolder.load(force);\r\n\r\n    const dbFolder = await rootFolder.getFolderFromRelativePath(\"/db\");\r\n\r\n    const ldbFileArr: IFile[] = [];\r\n    const logFileArr: IFile[] = [];\r\n    const manifestFileArr: IFile[] = [];\r\n\r\n    if (dbFolder) {\r\n      await dbFolder.load(force);\r\n\r\n      for (const fileName in dbFolder.files) {\r\n        const file = dbFolder.files[fileName];\r\n\r\n        if (file) {\r\n          const extension = StorageUtilities.getTypeFromName(file.name);\r\n\r\n          if (fileName.startsWith(\"MANIFEST\")) {\r\n            manifestFileArr.push(file);\r\n          } else if (extension === \"ldb\") {\r\n            // console.log(\"Adding map file \" + file.name + \"|\" + ldbFileArr.length);\r\n            ldbFileArr.push(file);\r\n          } else if (extension === \"log\") {\r\n            // console.log(\"Adding map file \" + file.name);\r\n            logFileArr.push(file);\r\n          }\r\n        }\r\n      }\r\n      Log.verbose(\r\n        \"[MCWorld] loadLevelDb: Found \" +\r\n          ldbFileArr.length +\r\n          \" LDB files, \" +\r\n          logFileArr.length +\r\n          \" LOG files, \" +\r\n          manifestFileArr.length +\r\n          \" MANIFEST files\"\r\n      );\r\n    } else {\r\n      Log.verbose(\"[MCWorld] loadLevelDb: No db folder found\");\r\n    }\r\n\r\n    this.levelDb = new LevelDb(ldbFileArr, logFileArr, manifestFileArr, this.name);\r\n\r\n    if (useLazyLoad) {\r\n      // Lazy loading mode: only load manifest initially\r\n      await this._project?.creatorTools.notifyStatusUpdate(\r\n        `Initializing lazy loading for '${this.name}'...`,\r\n        StatusTopic.worldLoad\r\n      );\r\n\r\n      await this.levelDb.initLazy({\r\n        maxKeysInMemory: 50000,\r\n        progressCallback: options?.progressCallback,\r\n      });\r\n\r\n      // Now load all files but with memory management\r\n      const totalFiles = this.levelDb.index?.totalFiles ?? 0;\r\n      let loadedFiles = 0;\r\n\r\n      await this.levelDb.loadAllFiles({\r\n        progressCallback: (phase, current, total) => {\r\n          loadedFiles = current;\r\n          const percent = total > 0 ? Math.round((current / total) * 100) : 0;\r\n          this._project?.creatorTools.notifyStatusUpdate(`${phase}... (${percent}%)`, StatusTopic.worldLoad);\r\n          if (options?.progressCallback) {\r\n            options.progressCallback(phase, current, total);\r\n          }\r\n        },\r\n        unloadFilesAfterParse: true, // Always unload in lazy mode\r\n      });\r\n    } else {\r\n      // Traditional full-load mode\r\n      const totalLdbFiles = ldbFileArr.length + logFileArr.length + manifestFileArr.length;\r\n      let loadedLdbFiles = 0;\r\n\r\n      await this.levelDb.init(\r\n        async (message: string): Promise<void> => {\r\n          loadedLdbFiles++;\r\n          const percent = totalLdbFiles > 0 ? Math.round((loadedLdbFiles / totalLdbFiles) * 100) : 0;\r\n          await this._project?.creatorTools.notifyStatusUpdate(\r\n            `Loading world files (1/2)... (${percent}%)`,\r\n            StatusTopic.worldLoad\r\n          );\r\n          if (options?.progressCallback) {\r\n            options.progressCallback(\"Loading world files (1/2)\", loadedLdbFiles, totalLdbFiles);\r\n          }\r\n        },\r\n        { unloadFilesAfterParse: options?.unloadFilesAfterParse !== false }\r\n      );\r\n    }\r\n\r\n    Utilities.appendErrors(this, this.levelDb);\r\n\r\n    if (loadOper !== undefined) {\r\n      await this._project?.creatorTools.notifyOperationEnded(\r\n        loadOper,\r\n        \"Completed first-pass load of '\" + this.name + \"' world\",\r\n        StatusTopic.worldLoad\r\n      );\r\n    }\r\n\r\n    return await this.loadFromLevelDb(this.levelDb, options);\r\n  }\r\n\r\n  async loadFromLevelDb(levelDb: LevelDb, options?: IWorldProcessingOptions): Promise<boolean> {\r\n    this.levelDb = levelDb;\r\n\r\n    // If skipFullProcessing is enabled, only build a minimal index\r\n    // Chunks will be created on-demand when accessed\r\n    if (options?.skipFullProcessing) {\r\n      const result = await this.buildMinimalWorldIndex(options);\r\n      if (!result) {\r\n        return false;\r\n      }\r\n    } else {\r\n      const result = await this.processWorldData(options);\r\n      if (!result) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    this._updateMeta();\r\n\r\n    this._onDataLoaded.dispatch(this, this);\r\n\r\n    this._isDataLoaded = true;\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Builds a minimal world index without creating WorldChunk objects.\r\n   * This calculates world bounds and chunk count from key names only.\r\n   * Chunks are created on-demand when getChunkAt() or getOrCreateChunk() is called.\r\n   *\r\n   * This dramatically reduces memory usage for large worlds (100k+ chunks).\r\n   *\r\n   * IMPORTANT: Key filtering must use the same approach as processWorldData():\r\n   * explicit named-key prefix checks + keyname.length checks. Do NOT filter by\r\n   * checking if the first byte of keyBytes is in printable ASCII range, because\r\n   * chunk coordinate keys are binary little-endian integers whose low byte can\r\n   * legitimately be any value 0-255 (e.g., chunk X=32 \u2192 first byte 0x20 = space).\r\n   */\r\n  private async buildMinimalWorldIndex(options?: IWorldProcessingOptions): Promise<boolean> {\r\n    if (!this.levelDb) {\r\n      return false;\r\n    }\r\n\r\n    this.chunks = new Map();\r\n    this.chunkCount = 0;\r\n    this._dimensionIdsInChunks = new Set();\r\n    this._dimensionNameIdTable = undefined;\r\n    this._hasDimensionNameIdTable = false;\r\n\r\n    const processOper = await this._project?.creatorTools.notifyOperationStarted(\r\n      \"Building minimal index for '\" + this.name + \"' world\",\r\n      StatusTopic.worldLoad\r\n    );\r\n\r\n    const levelDbKeysArray = Array.from(this.levelDb.keys.keys());\r\n    const totalKeys = levelDbKeysArray.length;\r\n    let processedKeys = 0;\r\n\r\n    // Track unique chunks we've seen (format: \"dim_x_z\")\r\n    const seenChunks = new Set<string>();\r\n\r\n    // Build index mapping chunk keys to their LevelDB key names for fast lookup\r\n    const chunkKeyIndex = new Map<string, string[]>();\r\n\r\n    // Report progress less frequently for this fast operation\r\n    const keyProgressInterval = Math.max(1000, Math.floor(totalKeys / 50));\r\n\r\n    // Yield periodically to allow garbage collection\r\n    const yieldInterval = 5000;\r\n\r\n    for (const keyname of levelDbKeysArray) {\r\n      processedKeys++;\r\n\r\n      // Report progress\r\n      if (processedKeys % keyProgressInterval === 0) {\r\n        const percent = totalKeys > 0 ? Math.round((processedKeys / totalKeys) * 100) : 0;\r\n        await this._project?.creatorTools.notifyStatusUpdate(\r\n          `Building world index... (${percent}%)`,\r\n          StatusTopic.worldLoad\r\n        );\r\n        if (options?.progressCallback) {\r\n          options.progressCallback(\"Building world index\", processedKeys, totalKeys);\r\n        }\r\n\r\n        // Yield periodically\r\n        if (processedKeys % yieldInterval === 0) {\r\n          await new Promise((resolve) => setTimeout(resolve, 0));\r\n        }\r\n      }\r\n\r\n      // Handle DimensionNameIdTable before skipping named keys\r\n      if (keyname === \"DimensionNameIdTable\") {\r\n        const keyValue = this.levelDb.keys.get(keyname);\r\n\r\n        if (keyValue && typeof keyValue !== \"boolean\" && keyValue.value) {\r\n          this._parseDimensionNameIdTable(keyValue.value);\r\n        } else {\r\n          this._hasDimensionNameIdTable = true;\r\n        }\r\n        continue;\r\n      }\r\n\r\n      // Skip known named keys using the same filtering approach as processWorldData.\r\n      // We must NOT filter by first-byte ASCII range because chunk coordinate keys\r\n      // are binary little-endian integers whose low byte can be any value (0-255),\r\n      // including printable ASCII (32-126). For example, chunk X=32 has first byte 0x20 (space).\r\n      if (\r\n        keyname.startsWith(\"AutonomousEntities\") ||\r\n        keyname.startsWith(\"schedulerWT\") ||\r\n        keyname.startsWith(\"Overworld\") ||\r\n        keyname.startsWith(\"BiomeData\") ||\r\n        keyname.startsWith(\"digp\") ||\r\n        keyname.startsWith(\"actorprefix\") ||\r\n        keyname.startsWith(\"player\") ||\r\n        keyname.startsWith(\"portals\") ||\r\n        keyname.startsWith(\"LevelChunk\") ||\r\n        keyname.startsWith(\"structuretemplate\") ||\r\n        keyname.startsWith(\"~local_player\") ||\r\n        keyname.startsWith(\"game_\") ||\r\n        keyname.startsWith(\"CustomProperties\") ||\r\n        keyname.startsWith(\"DynamicProperties\") ||\r\n        keyname.startsWith(\"LevelSpawnWasFixed\") ||\r\n        keyname.startsWith(\"VILLAGE_\") ||\r\n        keyname.startsWith(\"gametestinstance_\") ||\r\n        keyname.startsWith(\"tickingarea_\") ||\r\n        keyname.startsWith(\"map_\") ||\r\n        keyname.startsWith(\"scoreboard\") ||\r\n        keyname.startsWith(\"SavedEntity\") ||\r\n        keyname.startsWith(\"ServerMapRuntime\") ||\r\n        keyname.startsWith(\"VillageRuntime\") ||\r\n        keyname.startsWith(\"WorldFeatureRuntime\") ||\r\n        keyname.startsWith(\"WorldGenerationRuntime\") ||\r\n        keyname.startsWith(\"WorldStreamRuntime\") ||\r\n        keyname.startsWith(\"BSharpRuntime\") ||\r\n        keyname.startsWith(\"BadgerSynced\") ||\r\n        keyname.startsWith(\"CinematicsRuntime\") ||\r\n        keyname.startsWith(\"CustomGameOptions\") ||\r\n        keyname.startsWith(\"DeckRuntime\") ||\r\n        keyname.startsWith(\"EntityFactorySetup\") ||\r\n        keyname.startsWith(\"GeologyRuntime\") ||\r\n        keyname.startsWith(\"InvasionRuntime\") ||\r\n        keyname.startsWith(\"MapRevealRuntime\") ||\r\n        keyname.startsWith(\"RealmsStoriesData\") ||\r\n        keyname.startsWith(\"mobevents\") ||\r\n        keyname.startsWith(\"dimension\") ||\r\n        keyname.startsWith(\"structureplacement\") ||\r\n        keyname.startsWith(\"chunk_loaded_request\") ||\r\n        keyname.startsWith(\"legacy_console_player\") ||\r\n        keyname.startsWith(\"PosTrackDB\") ||\r\n        keyname.startsWith(\"PositionTrackDB\") ||\r\n        keyname.startsWith(\"OwnedEntitiesLimbo\") ||\r\n        keyname.startsWith(\"MCeditMap\") ||\r\n        keyname.startsWith(\"EDU_CurrentCodingURL\") ||\r\n        keyname.startsWith(\"TheEnd\") ||\r\n        keyname.startsWith(\"SST_\") ||\r\n        keyname.startsWith(\"SUSP\") ||\r\n        keyname.startsWith(\"neteaseData\") ||\r\n        keyname.startsWith(\"scriptGid\") ||\r\n        keyname.startsWith(\"Nether\") ||\r\n        keyname.startsWith(\"game_flatworldlayers\")\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      // Only process keys whose length matches chunk coordinate key formats.\r\n      // Chunk keys are 9, 10, 13, or 14 bytes:\r\n      //   [x:4][z:4][tag:1] = 9 bytes (overworld)\r\n      //   [x:4][z:4][tag:1][subchunk:1] = 10 bytes (overworld with subchunk)\r\n      //   [x:4][z:4][dim:4][tag:1] = 13 bytes (nether/end)\r\n      //   [x:4][z:4][dim:4][tag:1][subchunk:1] = 14 bytes (nether/end with subchunk)\r\n      // Use keyname.length as a fast pre-filter (matching processWorldData's approach).\r\n      if (keyname.length !== 9 && keyname.length !== 10 && keyname.length !== 13 && keyname.length !== 14) {\r\n        continue;\r\n      }\r\n\r\n      // Get the LevelKeyValue to access raw keyBytes\r\n      const keyValue = this.levelDb.keys.get(keyname);\r\n      if (!keyValue) {\r\n        continue;\r\n      }\r\n\r\n      // keyValue can be boolean (false for deleted markers)\r\n      if (typeof keyValue === \"boolean\") {\r\n        continue;\r\n      }\r\n\r\n      const keyBytes = keyValue.keyBytes;\r\n      if (!keyBytes) {\r\n        continue;\r\n      }\r\n\r\n      // Key format: [x:4 bytes][z:4 bytes][dim?:4 bytes][tag:1 byte][subchunk?:1 byte]\r\n      if (keyBytes.length >= 9 && keyBytes.length <= 14) {\r\n        const hasDimensionParam = keyBytes.length >= 13;\r\n\r\n        const x = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n        const z = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n        let dim = 0;\r\n\r\n        if (hasDimensionParam) {\r\n          dim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n          // Track all dimension IDs, including custom dimensions (>= 1000)\r\n          this._dimensionIdsInChunks.add(dim);\r\n\r\n          if (dim < 0 || dim > 2) {\r\n            continue; // Skip custom/invalid dimensions from chunk index\r\n          }\r\n        } else {\r\n          // 9/10-byte keys are overworld (dim 0)\r\n          this._dimensionIdsInChunks.add(0);\r\n        }\r\n\r\n        // Track unique chunks\r\n        const chunkKey = `${dim}_${x}_${z}`;\r\n        if (!seenChunks.has(chunkKey)) {\r\n          seenChunks.add(chunkKey);\r\n          this.chunkCount++;\r\n\r\n          // Update bounds\r\n          if (this._minX === undefined || x * 16 < this._minX) {\r\n            this._minX = x * 16;\r\n          }\r\n          if (this._maxX === undefined || (x + 1) * 16 > this._maxX) {\r\n            this._maxX = (x + 1) * 16;\r\n          }\r\n          if (this._minZ === undefined || z * 16 < this._minZ) {\r\n            this._minZ = z * 16;\r\n          }\r\n          if (this._maxZ === undefined || (z + 1) * 16 > this._maxZ) {\r\n            this._maxZ = (z + 1) * 16;\r\n          }\r\n        }\r\n\r\n        // Build chunk key index: map chunk key to list of LevelDB key names\r\n        let keyList = chunkKeyIndex.get(chunkKey);\r\n        if (!keyList) {\r\n          keyList = [];\r\n          chunkKeyIndex.set(chunkKey, keyList);\r\n        }\r\n        keyList.push(keyname);\r\n      }\r\n    }\r\n\r\n    // Store the seen chunks set for O(1) existence checking\r\n    this._chunkExistsSet = seenChunks;\r\n\r\n    // Store the chunk key index for O(1) key lookup in getOrCreateChunk\r\n    this._chunkKeyIndex = chunkKeyIndex;\r\n\r\n    await this.notifyLoadEnded(processOper);\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Gets or creates a chunk at the specified coordinates.\r\n   * If the chunk doesn't exist, creates it and populates it from LevelDB keys.\r\n   * This is used for on-demand chunk loading when skipFullProcessing is enabled.\r\n   */\r\n  getOrCreateChunk(dim: number, x: number, z: number): WorldChunk | undefined {\r\n    // Check if chunk already exists\r\n    let dimMap = this.chunks.get(dim);\r\n    if (dimMap) {\r\n      const xPlane = dimMap.get(x);\r\n      if (xPlane) {\r\n        const existing = xPlane.get(z);\r\n        if (existing) {\r\n          // Track access for LRU cache\r\n          if (this._chunkCache) {\r\n            this._chunkCache.access(dim, x, z);\r\n          }\r\n          return existing;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Chunk doesn't exist - create it on demand if we have LevelDB data\r\n    if (!this.levelDb) {\r\n      return undefined;\r\n    }\r\n\r\n    // Create the chunk\r\n    const chunk = new WorldChunk(this, x, z);\r\n\r\n    // Find all keys that belong to this chunk using the pre-built index (O(1) lookup)\r\n    const chunkKey = `${dim}_${x}_${z}`;\r\n    const indexedKeyNames = this._chunkKeyIndex.get(chunkKey);\r\n\r\n    if (indexedKeyNames && indexedKeyNames.length > 0) {\r\n      // Fast path: use the pre-built chunk key index\r\n      for (const keyname of indexedKeyNames) {\r\n        const keyValue = this.levelDb.keys.get(keyname);\r\n        if (!keyValue || typeof keyValue === \"boolean\") continue;\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    } else if (this._chunkKeyIndex.size > 0) {\r\n      // Index is built but this chunk has no keys \u2014 it doesn't exist in the world.\r\n      // Return undefined to avoid creating empty chunk objects.\r\n      return undefined;\r\n    } else {\r\n      // Fallback: scan all LevelDB keys (used when index isn't built, e.g., full processing mode)\r\n      const hasDim = dim !== 0;\r\n      for (const [keyname, keyValue] of this.levelDb.keys) {\r\n        if (!keyValue) continue;\r\n\r\n        const keyBytes = keyValue.keyBytes;\r\n        if (!keyBytes) continue;\r\n        if (keyBytes.length < 9 || keyBytes.length > 14) continue;\r\n\r\n        const expectedLength = hasDim ? 13 : 9;\r\n        if (keyBytes.length !== expectedLength && keyBytes.length !== expectedLength + 1) continue;\r\n\r\n        const kx = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n        const kz = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n\r\n        if (kx !== x || kz !== z) continue;\r\n\r\n        let kDim = 0;\r\n        if (hasDim && keyBytes.length >= 13) {\r\n          kDim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n        }\r\n\r\n        if (kDim !== dim) continue;\r\n\r\n        // This key belongs to this chunk\r\n        chunk.addKeyValue(keyValue);\r\n      }\r\n    }\r\n\r\n    // Add chunk to the chunks map\r\n    if (!dimMap) {\r\n      dimMap = new Map();\r\n      this.chunks.set(dim, dimMap);\r\n    }\r\n\r\n    let xPlane = dimMap.get(x);\r\n    if (!xPlane) {\r\n      xPlane = new Map();\r\n      dimMap.set(x, xPlane);\r\n    }\r\n\r\n    xPlane.set(z, chunk);\r\n\r\n    // Track access for LRU cache\r\n    if (this._chunkCache) {\r\n      this._chunkCache.access(dim, x, z);\r\n    }\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Iterates over all chunks in a memory-efficient manner, calling the processor function\r\n   * for each chunk and optionally clearing chunk data after processing.\r\n   *\r\n   * @param processor - Async function to process each chunk. Receives the chunk and its coordinates.\r\n   * @param options - Optional configuration for iteration behavior.\r\n   * @param options.clearCacheAfterProcess - If true, clears parsed/cached data after processing but preserves\r\n   *                                          raw LevelKeyValue data, allowing chunks to be re-parsed on demand.\r\n   *                                          This is the recommended option for memory optimization.\r\n   * @param options.clearAllAfterProcess - If true, aggressively clears ALL chunk data including raw bytes.\r\n   *                                        WARNING: Chunks cannot be re-parsed after this. Only use when\r\n   *                                        the world data will never be accessed again.\r\n   * @param options.dimensionFilter - If specified, only iterate chunks in this dimension (0=overworld, 1=nether, 2=end).\r\n   * @param options.progressCallback - Optional callback for progress updates during iteration.\r\n   */\r\n  async forEachChunk(\r\n    processor: (chunk: WorldChunk, x: number, z: number, dimension: number) => Promise<void>,\r\n    options?: {\r\n      clearCacheAfterProcess?: boolean;\r\n      clearAllAfterProcess?: boolean;\r\n      dimensionFilter?: number;\r\n      progressCallback?: (processed: number, total: number) => Promise<void>;\r\n    }\r\n  ): Promise<void> {\r\n    // Handle legacy option name\r\n    const clearCacheAfterProcess = options?.clearCacheAfterProcess ?? false;\r\n    const clearAllAfterProcess = options?.clearAllAfterProcess ?? false;\r\n    const dimensionFilter = options?.dimensionFilter;\r\n    let processedCount = 0;\r\n\r\n    const chunkKeys = this.chunks.keys();\r\n\r\n    for (const dimIndex of chunkKeys) {\r\n      if (dimensionFilter !== undefined && dimIndex !== dimensionFilter) {\r\n        continue;\r\n      }\r\n\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) {\r\n        continue;\r\n      }\r\n\r\n      const xKeys = dim.keys();\r\n      for (const chunkSliverIndex of xKeys) {\r\n        const chunkSliver = dim.get(chunkSliverIndex);\r\n        if (!chunkSliver) {\r\n          continue;\r\n        }\r\n\r\n        const zKeys = chunkSliver.keys();\r\n        for (const chunkZ of zKeys) {\r\n          const chunk = chunkSliver.get(chunkZ);\r\n          if (!chunk) {\r\n            continue;\r\n          }\r\n\r\n          await processor(chunk, chunkSliverIndex, chunkZ, dimIndex);\r\n          processedCount++;\r\n\r\n          // Clear data after processing based on options\r\n          if (clearAllAfterProcess) {\r\n            chunk.clearAllData();\r\n          } else if (clearCacheAfterProcess) {\r\n            chunk.clearCachedData();\r\n          }\r\n\r\n          // Report progress frequently enough for smooth UI updates (~100 updates total)\r\n          // Use dynamic interval based on total chunk count\r\n          const progressInterval = Math.max(100, Math.floor(this.chunkCount / 100));\r\n          if (options?.progressCallback && processedCount % progressInterval === 0) {\r\n            await options.progressCallback(processedCount, this.chunkCount);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears parsed/cached data from all chunks to free memory while preserving the ability\r\n   * to re-parse chunks on demand. This is the recommended approach for memory optimization\r\n   * when you may need to access chunk data again (e.g., for map rendering).\r\n   */\r\n  clearAllChunkCaches() {\r\n    const chunkKeys = this.chunks.keys();\r\n\r\n    for (const dimIndex of chunkKeys) {\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) {\r\n        continue;\r\n      }\r\n\r\n      const xKeys = dim.keys();\r\n      for (const x of xKeys) {\r\n        const xPlane = dim.get(x);\r\n        if (!xPlane) {\r\n          continue;\r\n        }\r\n\r\n        const zKeys = xPlane.keys();\r\n        for (const z of zKeys) {\r\n          const chunk = xPlane.get(z);\r\n          if (chunk) {\r\n            chunk.clearCachedData();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears the raw LevelDB data to free memory after world data has been processed.\r\n   * This can significantly reduce memory usage for large worlds.\r\n   * WARNING: After calling this, the world cannot be re-loaded from the LevelDb.\r\n   */\r\n  clearLevelDbData() {\r\n    if (this.levelDb) {\r\n      this.levelDb.keys.clear();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears all world data to free memory.\r\n   * Use this when the world is no longer needed.\r\n   * WARNING: The world cannot be used after calling this without reloading.\r\n   */\r\n  clearAllData() {\r\n    // Clear chunk cache first\r\n    if (this._chunkCache) {\r\n      this._chunkCache.clear();\r\n    }\r\n\r\n    // Clear all chunk data\r\n    for (const dimIndex of this.chunks.keys()) {\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) continue;\r\n\r\n      for (const x of dim.keys()) {\r\n        const xPlane = dim.get(x);\r\n        if (!xPlane) continue;\r\n\r\n        for (const z of xPlane.keys()) {\r\n          const chunk = xPlane.get(z);\r\n          if (chunk) {\r\n            chunk.clearAllData();\r\n          }\r\n        }\r\n        xPlane.clear();\r\n      }\r\n      dim.clear();\r\n    }\r\n    this.chunks.clear();\r\n\r\n    // Clear LevelDB data\r\n    this.clearLevelDbData();\r\n\r\n    // Clear actors\r\n    this.actorsById = {};\r\n\r\n    // Reset state\r\n    this._isDataLoaded = false;\r\n    this.chunkCount = 0;\r\n    this._minX = undefined;\r\n    this._maxX = undefined;\r\n    this._minZ = undefined;\r\n    this._maxZ = undefined;\r\n  }\r\n\r\n  /**\r\n   * Get statistics about memory usage for this world.\r\n   * Useful for debugging memory issues with large worlds.\r\n   */\r\n  getMemoryStats(): {\r\n    chunkCount: number;\r\n    levelDbKeyCount: number;\r\n    isLazyMode: boolean;\r\n    chunkCacheSize?: number;\r\n    chunkCacheMaxSize?: number;\r\n  } {\r\n    return {\r\n      chunkCount: this.chunkCount,\r\n      levelDbKeyCount: this.levelDb?.keys.size ?? 0,\r\n      isLazyMode: this._isLazyLoadMode,\r\n      chunkCacheSize: this._chunkCache?.size,\r\n      chunkCacheMaxSize: this._chunkCache?.maxChunks,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Clears all chunk data to free memory.\r\n   * WARNING: After calling this, chunk data cannot be accessed without reloading.\r\n   */\r\n  clearAllChunkData() {\r\n    const chunkKeys = this.chunks.keys();\r\n\r\n    for (const dimIndex of chunkKeys) {\r\n      const dim = this.chunks.get(dimIndex);\r\n      if (!dim) {\r\n        continue;\r\n      }\r\n\r\n      const xKeys = dim.keys();\r\n      for (const x of xKeys) {\r\n        const xPlane = dim.get(x);\r\n        if (!xPlane) {\r\n          continue;\r\n        }\r\n\r\n        const zKeys = xPlane.keys();\r\n        for (const z of zKeys) {\r\n          const chunk = xPlane.get(z);\r\n          if (chunk) {\r\n            chunk.clearAllData();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getTopBlockY(x: number, z: number, dim?: number) {\r\n    const chunkX = Math.floor(x / CHUNK_X_SIZE);\r\n    const chunkZ = Math.floor(z / CHUNK_Z_SIZE);\r\n    const dimension = dim ?? 0;\r\n\r\n    // Quick check: if the chunk index has been built and this chunk isn't in it,\r\n    // skip creating an empty chunk object (avoids wasteful allocations on mouse hover)\r\n    if (this.hasChunkData(dimension, chunkX, chunkZ) === false) {\r\n      return undefined;\r\n    }\r\n\r\n    // Use getOrCreateChunk to support on-demand loading when skipFullProcessing is enabled\r\n    const chunk = this.getOrCreateChunk(dimension, chunkX, chunkZ);\r\n\r\n    if (chunk === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return chunk.getTopBlockY(x - chunkX * CHUNK_X_SIZE, z - chunkZ * CHUNK_Z_SIZE);\r\n  }\r\n\r\n  getTopBlock(x: number, z: number, dim?: number) {\r\n    const chunkX = Math.floor(x / CHUNK_X_SIZE);\r\n    const chunkZ = Math.floor(z / CHUNK_Z_SIZE);\r\n    const dimension = dim ?? 0;\r\n\r\n    // Quick check: if the chunk index has been built and this chunk isn't in it,\r\n    // skip creating an empty chunk object (avoids wasteful allocations on mouse hover)\r\n    if (this.hasChunkData(dimension, chunkX, chunkZ) === false) {\r\n      return undefined;\r\n    }\r\n\r\n    // Use getOrCreateChunk to support on-demand loading when skipFullProcessing is enabled\r\n    const chunk = this.getOrCreateChunk(dimension, chunkX, chunkZ);\r\n\r\n    if (chunk === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return chunk.getTopBlock(x - chunkX * CHUNK_X_SIZE, z - chunkZ * CHUNK_Z_SIZE);\r\n  }\r\n\r\n  spawnEntity(entityTypeId: string, location: BlockLocation) {\r\n    const e = new Entity();\r\n\r\n    return e;\r\n  }\r\n\r\n  getBlock(blockLocation: BlockLocation, dim?: number) {\r\n    const chunkX = Math.floor(blockLocation.x / CHUNK_X_SIZE);\r\n    const chunkZ = Math.floor(blockLocation.z / CHUNK_Z_SIZE);\r\n    const dimension = dim ?? 0;\r\n\r\n    // Use getOrCreateChunk to support on-demand loading when skipFullProcessing is enabled\r\n    const chunk = this.getOrCreateChunk(dimension, chunkX, chunkZ);\r\n\r\n    if (chunk === undefined) {\r\n      return new Block(\"air\");\r\n    }\r\n\r\n    let offsetX = blockLocation.x % 16;\r\n    let offsetZ = blockLocation.z % 16;\r\n\r\n    if (offsetX < 0) {\r\n      offsetX += 16;\r\n    }\r\n\r\n    if (offsetZ < 0) {\r\n      offsetZ += 16;\r\n    }\r\n\r\n    const block = chunk.getBlock(offsetX, blockLocation.y, offsetZ);\r\n\r\n    if (!block) {\r\n      return new Block(\"air\");\r\n    }\r\n\r\n    return block;\r\n  }\r\n\r\n  private async processWorldData(options?: IWorldProcessingOptions) {\r\n    if (!this.levelDb) {\r\n      return false;\r\n    }\r\n\r\n    this.chunks = new Map();\r\n    this.chunkCount = 0;\r\n    this._dimensionIdsInChunks = new Set();\r\n    this._dimensionNameIdTable = undefined;\r\n    this._hasDimensionNameIdTable = false;\r\n\r\n    const processOper = await this._project?.creatorTools.notifyOperationStarted(\r\n      \"Starting second-pass load of '\" + this.name + \"' world\",\r\n      StatusTopic.worldLoad\r\n    );\r\n\r\n    const levelDbKeysArray = Array.from(this.levelDb.keys.keys());\r\n    const totalKeys = levelDbKeysArray.length;\r\n    let processedKeys = 0;\r\n\r\n    // Whether to delete keys from LevelDb after processing to reduce memory\r\n    // Default is true for memory optimization\r\n    const clearKeysAfterProcess = options?.clearKeysAfterProcess !== false;\r\n\r\n    // Report progress frequently enough for smooth UI updates (~100 updates total)\r\n    const keyProgressInterval = Math.max(100, Math.floor(totalKeys / 100));\r\n\r\n    // Yield periodically to allow garbage collection and prevent memory pressure\r\n    const yieldInterval = 500;\r\n\r\n    for (const keyname of levelDbKeysArray) {\r\n      const keyValue = this.levelDb.keys.get(keyname);\r\n\r\n      processedKeys++;\r\n\r\n      // Report progress at dynamic intervals for smooth updates\r\n      if (processedKeys % keyProgressInterval === 0) {\r\n        const percent = totalKeys > 0 ? Math.round((processedKeys / totalKeys) * 100) : 0;\r\n        await this._project?.creatorTools.notifyStatusUpdate(\r\n          `Processing world records (2/2)... (${percent}%)`,\r\n          StatusTopic.worldLoad\r\n        );\r\n        if (options?.progressCallback) {\r\n          options.progressCallback(\"Processing world records (2/2)  \", processedKeys, totalKeys);\r\n        }\r\n\r\n        // Yield to event loop periodically to allow garbage collection\r\n        if (processedKeys % yieldInterval === 0) {\r\n          await new Promise((resolve) => setTimeout(resolve, 0));\r\n        }\r\n      }\r\n\r\n      if (options?.maxNumberOfRecordsToProcess && processedKeys > options.maxNumberOfRecordsToProcess) {\r\n        return false;\r\n      }\r\n\r\n      if (keyname.startsWith(\"AutonomousEntities\")) {\r\n      } else if (keyname.startsWith(\"schedulerWT\")) {\r\n      } else if (keyname.startsWith(\"Overworld\") && keyValue) {\r\n        const overworldBytes = keyValue.value;\r\n\r\n        if (overworldBytes) {\r\n          const overworld = new NbtBinary();\r\n\r\n          overworld.context = this.name + \" overworld\";\r\n\r\n          overworld.fromBinary(overworldBytes, true, false, 0, true);\r\n\r\n          this._overworldData = overworld;\r\n        }\r\n      } else if (keyname.startsWith(\"BiomeData\") && keyValue) {\r\n        const biomeDataBytes = keyValue.value;\r\n\r\n        if (biomeDataBytes) {\r\n          const biomeData = new NbtBinary();\r\n\r\n          biomeData.context = this.name + \" biome data\";\r\n\r\n          biomeData.fromBinary(biomeDataBytes, true, false, 0, true);\r\n\r\n          this._biomeData = biomeData;\r\n        }\r\n      } else if (keyname.startsWith(\"CustomProperties\")) {\r\n        this._hasCustomProps = true;\r\n      } else if (keyname.startsWith(\"DynamicProperties\") && keyValue) {\r\n        this._hasDynamicProps = true;\r\n        const dynamicPropertyBytes = keyValue.value;\r\n\r\n        if (dynamicPropertyBytes) {\r\n          const dynamicProps = new NbtBinary();\r\n\r\n          dynamicProps.context = this.name + \" dynamic props\";\r\n\r\n          dynamicProps.fromBinary(dynamicPropertyBytes, true, false, 0, true);\r\n\r\n          if (dynamicProps.singleRoot) {\r\n            const children = dynamicProps.singleRoot.getTagChildren();\r\n            this._dynamicProperties = {};\r\n\r\n            for (const child of children) {\r\n              if (child.name && Utilities.isValidUuid(child.name)) {\r\n                this._dynamicProperties[child.name] = {};\r\n\r\n                const bpChildren = child.getTagChildren();\r\n\r\n                for (const propChild of bpChildren) {\r\n                  if (\r\n                    propChild.name &&\r\n                    propChild.type === NbtTagType.string &&\r\n                    Utilities.isUsableAsObjectKey(child.name) &&\r\n                    Utilities.isUsableAsObjectKey(propChild.name)\r\n                  ) {\r\n                    this._dynamicProperties[child.name][propChild.name] = propChild.valueAsString;\r\n\r\n                    if (child.name === CREATOR_TOOLS_EDITOR_BPUUID) {\r\n                      this.loadAnchorsFromDynamicProperties();\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else if (keyname.startsWith(\"LevelChunkMetaDataDictionary\") && keyValue) {\r\n        const levelChunkMetaBytes = keyValue.value;\r\n\r\n        if (levelChunkMetaBytes) {\r\n          const levelChunkMeta = new NbtBinary();\r\n\r\n          levelChunkMeta.context = this.name + \" level chunk metadata\";\r\n\r\n          levelChunkMeta.fromBinary(levelChunkMetaBytes, true, false, 12, true);\r\n\r\n          this._levelChunkMetaData = levelChunkMeta;\r\n        }\r\n      } else if (keyname === \"DimensionNameIdTable\" && keyValue) {\r\n        if (keyValue.value) {\r\n          this._parseDimensionNameIdTable(keyValue.value);\r\n        } else {\r\n          this._hasDimensionNameIdTable = true;\r\n        }\r\n      } else if (keyname.startsWith(\"structuretemplate_\")) {\r\n      } else if (keyname.startsWith(\"digp\") && keyValue) {\r\n        const keyBytes = keyValue.keyBytes;\r\n\r\n        if (keyBytes) {\r\n          const x = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n          const z = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n          Log.assert(\r\n            keyBytes.length === 16 ||\r\n              keyBytes.length === 24 ||\r\n              keyBytes.length === 20 ||\r\n              keyBytes.length === 14 ||\r\n              keyBytes.length === 13 ||\r\n              keyBytes.length === 12,\r\n            \"Unexpected digp key size (\" + keyBytes.length + \")\"\r\n          );\r\n\r\n          let dim = 0;\r\n\r\n          if (keyBytes.length >= 17) {\r\n            dim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n            Log.assert(dim >= 0 && dim <= 2, \"Unexpected dimension index - digp (\" + dim + \")\");\r\n          }\r\n\r\n          let dimMap = this.chunks.get(dim);\r\n\r\n          if (!dimMap) {\r\n            dimMap = new Map();\r\n            this.chunks.set(dim, dimMap);\r\n          }\r\n\r\n          let xPlane = dimMap.get(x);\r\n\r\n          if (!xPlane) {\r\n            xPlane = new Map();\r\n            dimMap.set(x, xPlane);\r\n          }\r\n\r\n          let wc = xPlane.get(z);\r\n\r\n          if (wc === undefined) {\r\n            wc = new WorldChunk(this, x, z);\r\n            this.chunkCount++;\r\n\r\n            xPlane.set(z, wc);\r\n          }\r\n\r\n          if (keyValue.value !== undefined) {\r\n            const keyValueBytes = keyValue.value;\r\n            if (keyValueBytes.length > 0 && keyValueBytes.length % 8 === 0) {\r\n              let hexStr = \"\";\r\n\r\n              for (let bc = 0; bc < keyValueBytes.length; bc += 8) {\r\n                hexStr += Utilities.convertToHexString([\r\n                  keyValueBytes[bc + 0],\r\n                  keyValueBytes[bc + 1],\r\n                  keyValueBytes[bc + 2],\r\n                  keyValueBytes[bc + 3],\r\n                  keyValueBytes[bc + 4],\r\n                  keyValueBytes[bc + 5],\r\n                  keyValueBytes[bc + 6],\r\n                  keyValueBytes[bc + 7],\r\n                ]);\r\n              }\r\n\r\n              wc.addActorDigest(hexStr);\r\n            } else if (keyValueBytes.length !== 0) {\r\n              // Log.error(\"Unexpected actor digest length\", this.name);\r\n            }\r\n          }\r\n        }\r\n      } else if (keyname.startsWith(\"actorprefix\") && keyValue) {\r\n        const keyBytes = keyValue.keyBytes;\r\n\r\n        if (keyBytes && keyBytes.length === 19 && keyValue.value) {\r\n          const hexStr = Utilities.convertToHexString([\r\n            keyBytes[11],\r\n            keyBytes[12],\r\n            keyBytes[13],\r\n            keyBytes[14],\r\n            keyBytes[15],\r\n            keyBytes[16],\r\n            keyBytes[17],\r\n            keyBytes[18],\r\n          ]);\r\n\r\n          const actorItem = new ActorItem(hexStr, keyValue.value);\r\n          this.actorsById[hexStr] = actorItem;\r\n        } else if (keyBytes && keyBytes.length === 27 && keyValue.value) {\r\n          const hexStr = Utilities.convertToHexString([\r\n            keyBytes[11],\r\n            keyBytes[12],\r\n            keyBytes[13],\r\n            keyBytes[14],\r\n            keyBytes[15],\r\n            keyBytes[16],\r\n            keyBytes[17],\r\n            keyBytes[18],\r\n            keyBytes[19],\r\n            keyBytes[20],\r\n            keyBytes[21],\r\n            keyBytes[22],\r\n            keyBytes[23],\r\n            keyBytes[24],\r\n            keyBytes[25],\r\n            keyBytes[26],\r\n          ]);\r\n\r\n          const actorItem = new ActorItem(hexStr, keyValue.value);\r\n          this.actorsById[hexStr] = actorItem;\r\n        } else {\r\n          // Log.error(\"Unexpected actor prefix length - \" + keyname + \" (\" + keyBytes?.length + \")\", this.name);\r\n        }\r\n      } else if (keyname.startsWith(\"player\")) {\r\n      } else if (keyname.startsWith(\"portals\")) {\r\n      } else if (keyname.startsWith(\"LevelSpawnWasFixed\")) {\r\n      } else if (keyname.startsWith(\"VILLAGE_\")) {\r\n      } else if (keyname.startsWith(\"gametestinstance_\")) {\r\n      } else if (keyname.startsWith(\"tickingarea_\")) {\r\n      } else if (keyname.startsWith(\"map_\")) {\r\n      } else if (keyname.startsWith(\"scoreboard\")) {\r\n      } else if (keyname.startsWith(\"SavedEntity\")) {\r\n      } else if (keyname.startsWith(\"ServerMapRuntime\")) {\r\n      } else if (keyname.startsWith(\"VillageRuntime\")) {\r\n      } else if (keyname.startsWith(\"WorldFeatureRuntime\")) {\r\n      } else if (keyname.startsWith(\"WorldGenerationRuntime\")) {\r\n      } else if (keyname.startsWith(\"WorldStreamRuntime\")) {\r\n      } else if (keyname.startsWith(\"BSharpRuntime\")) {\r\n      } else if (keyname.startsWith(\"BadgerSynced\")) {\r\n      } else if (keyname.startsWith(\"CinematicsRuntime\")) {\r\n      } else if (keyname.startsWith(\"CustomGameOptions\")) {\r\n      } else if (keyname.startsWith(\"DeckRuntime\")) {\r\n      } else if (keyname.startsWith(\"EntityFactorySetup\")) {\r\n      } else if (keyname.startsWith(\"GeologyRuntime\")) {\r\n      } else if (keyname.startsWith(\"InvasionRuntime\")) {\r\n      } else if (keyname.startsWith(\"MapRevealRuntime\")) {\r\n      } else if (keyname.startsWith(\"~local_player\")) {\r\n      } else if (keyname.startsWith(\"RealmsStoriesData\")) {\r\n      } else if (keyname.startsWith(\"mobevents\")) {\r\n      } else if (keyname.startsWith(\"game_flatworldlayers\")) {\r\n      } else if (keyname.startsWith(\"dimension\")) {\r\n      } else if (keyname.startsWith(\"structureplacement\")) {\r\n      } else if (keyname.startsWith(\"chunk_loaded_request\")) {\r\n      } else if (keyname.startsWith(\"legacy_console_player\")) {\r\n      } else if (keyname.startsWith(\"PosTrackDB\")) {\r\n      } else if (keyname.startsWith(\"PositionTrackDB\")) {\r\n      } else if (keyname.startsWith(\"OwnedEntitiesLimbo\")) {\r\n      } else if (keyname.startsWith(\"MCeditMap\")) {\r\n      } else if (keyname.startsWith(\"EDU_CurrentCodingURL\")) {\r\n      } else if (keyname.startsWith(\"TheEnd\")) {\r\n      } else if (keyname.indexOf(\"WasPicked\") >= 0) {\r\n      } else if (keyname.indexOf(\"TextIg\") >= 0) {\r\n      } else if (keyname.startsWith(\"SST_SALOG\")) {\r\n      } else if (keyname.startsWith(\"SST_WORD\")) {\r\n      } else if (keyname.startsWith(\"SST_NAME\")) {\r\n      } else if (keyname.startsWith(\"SST_\")) {\r\n      } else if (keyname.startsWith(\"SUSP\")) {\r\n      } else if (keyname.startsWith(\"neteaseData\")) {\r\n      } else if (keyname.startsWith(\"scriptGid\")) {\r\n      } else if (keyname.startsWith(\"Nether\")) {\r\n      } else if (\r\n        keyValue &&\r\n        (keyname.length === 9 || keyname.length === 10 || keyname.length === 13 || keyname.length === 14)\r\n      ) {\r\n        const keyBytes = keyValue.keyBytes;\r\n        const hasDimensionParam = keyname.length >= 13;\r\n\r\n        Log.assertDefined(keyBytes);\r\n\r\n        if (keyBytes) {\r\n          const x = DataUtilities.getSignedInteger(keyBytes[0], keyBytes[1], keyBytes[2], keyBytes[3], true);\r\n          const z = DataUtilities.getSignedInteger(keyBytes[4], keyBytes[5], keyBytes[6], keyBytes[7], true);\r\n          let dim = 0;\r\n\r\n          if (hasDimensionParam) {\r\n            dim = DataUtilities.getSignedInteger(keyBytes[8], keyBytes[9], keyBytes[10], keyBytes[11], true);\r\n\r\n            // Track all dimension IDs, including custom dimensions (>= 1000)\r\n            this._dimensionIdsInChunks.add(dim);\r\n\r\n            if (dim < 1 || dim > 2) {\r\n              // note overworld dimension = 0, but should be omitted so we should not see overworld = 0.\r\n              // Custom dimensions (>= 1000) are also skipped from chunk processing.\r\n              continue;\r\n            }\r\n          } else {\r\n            // 9/10-byte keys are overworld (dim 0)\r\n            this._dimensionIdsInChunks.add(0);\r\n          }\r\n\r\n          if (this._minX === undefined || x * 16 < this._minX) {\r\n            this._minX = x * 16;\r\n          }\r\n\r\n          if (this._maxX === undefined || (x + 1) * 16 > this._maxX) {\r\n            this._maxX = (x + 1) * 16;\r\n          }\r\n\r\n          if (this._minZ === undefined || z * 16 < this._minZ) {\r\n            this._minZ = z * 16;\r\n          }\r\n\r\n          if (this._maxZ === undefined || (z + 1) * 16 > this._maxZ) {\r\n            this._maxZ = (z + 1) * 16;\r\n          }\r\n\r\n          let didIncrement = false;\r\n          let dimMap = this.chunks.get(dim);\r\n\r\n          if (!dimMap) {\r\n            dimMap = new Map();\r\n            this.chunks.set(dim, dimMap);\r\n          }\r\n\r\n          let xPlane = dimMap.get(x);\r\n\r\n          if (!xPlane) {\r\n            xPlane = new Map();\r\n            dimMap.set(x, xPlane);\r\n          }\r\n\r\n          let wc = xPlane.get(z);\r\n\r\n          if (wc === undefined) {\r\n            wc = new WorldChunk(this, x, z);\r\n            this.chunkCount++;\r\n            didIncrement = true;\r\n            xPlane.set(z, wc);\r\n          }\r\n\r\n          wc.addKeyValue(keyValue);\r\n\r\n          if (this.chunkCount % 10000 === 0 && didIncrement) {\r\n            const chunkPercent = totalKeys > 0 ? Math.round((processedKeys / totalKeys) * 100) : 0;\r\n            await this._project?.creatorTools.notifyStatusUpdate(\r\n              `Initialized ${this.chunkCount / 1000}K chunks... (${chunkPercent}%)`,\r\n              StatusTopic.worldLoad\r\n            );\r\n          }\r\n        }\r\n      } else if (\r\n        keyValue === false &&\r\n        (keyname.length === 9 || keyname.length === 10 || keyname.length === 13 || keyname.length === 14)\r\n      ) {\r\n        // keyValue === false means this is a deleted marker\r\n        // We cannot reliably parse coordinates from keyname string (charCodeAt doesn't give raw bytes)\r\n        // Skip trying to clear the chunk data - the deleted data is inaccessible anyway\r\n      } else if (keyValue === false) {\r\n        // console.log(\"Nulling record '\" + keyname + \"'\");\r\n      } else if (keyValue !== undefined) {\r\n        // this._pushError(\"Unknown record type: '\" + keyname + \"'\", this.name);\r\n      } else {\r\n        // this._pushError(\"Unknown record.\", this.name);\r\n      }\r\n\r\n      // Clear the key from LevelDb to reduce memory usage\r\n      // The key data has been handed off to WorldChunks or is no longer needed\r\n      if (clearKeysAfterProcess) {\r\n        this.levelDb.keys.delete(keyname);\r\n      }\r\n    }\r\n\r\n    await this.notifyLoadEnded(processOper);\r\n\r\n    return true;\r\n  }\r\n\r\n  private async notifyLoadEnded(processOper?: number) {\r\n    if (processOper !== undefined) {\r\n      await this._project?.creatorTools.notifyOperationEnded(\r\n        processOper,\r\n        \"Completed second-pass load of '\" + this.name + \"' world.\",\r\n        StatusTopic.worldLoad\r\n      );\r\n    }\r\n  }\r\n\r\n  private async saveAutoGenItems() {\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    if (this._autogenTsFile === undefined) {\r\n      /*const newFileName = \"LocalWorld.ts\";\r\n\r\n      const genFolder = await this._project.ensureScriptGenFolder();\r\n\r\n      if (genFolder) {\r\n        this._autogenTsFile = genFolder.ensureFile(newFileName);\r\n\r\n        this._project.ensureItemByProjectPath(\r\n          this._autogenTsFile.storageRelativePath,\r\n          ProjectItemStorageType.singleFile,\r\n          this._autogenTsFile.name,\r\n          ProjectItemType.ts,\r\n          FolderContext.behaviorPack,\r\n          undefined,\r\n          ProjectItemCreationType.generated\r\n        );\r\n      }*/\r\n    }\r\n\r\n    if (this._autogenTsFile) {\r\n      const content = this.getAutoGenScript();\r\n\r\n      this._autogenTsFile.setContent(content);\r\n\r\n      await this._autogenTsFile.saveContent(false);\r\n    }\r\n  }\r\n\r\n  private getAutoGenScript() {\r\n    const content: string[] = [];\r\n\r\n    content.push(\"export const \" + MinecraftUtilities.makeNameScriptSafe(this.name) + \" = {\");\r\n    if (this.anchors) {\r\n      const anchorKeys = this.anchors.getKeys();\r\n\r\n      content.push(\"  anchors: {\");\r\n      for (const anchorKey of anchorKeys) {\r\n        const anchor = this.anchors.get(anchorKey);\r\n\r\n        if (anchor) {\r\n          content.push(\r\n            \"    \" +\r\n              MinecraftUtilities.makeNameScriptSafe(anchor.name) +\r\n              \": { from: { x: \" +\r\n              anchor.from.x +\r\n              \", y: \" +\r\n              anchor.from.y +\r\n              \", z:\" +\r\n              anchor.from.z +\r\n              \"}},\"\r\n          );\r\n        }\r\n      }\r\n\r\n      content.push(\"  }\");\r\n    }\r\n\r\n    content.push(\"}\");\r\n\r\n    return content.join(\"\\n\");\r\n  }\r\n\r\n  getCube(from: BlockLocation, to: BlockLocation, dim?: number) {\r\n    const bc = new BlockVolume();\r\n\r\n    let fromY = from.y;\r\n    if (fromY) {\r\n      if (fromY < this.chunkMinY) {\r\n        fromY = this.chunkMinY;\r\n      }\r\n    }\r\n\r\n    bc.setMaxDimensions(Math.abs(to.x - from.x), Math.abs(to.y - fromY), Math.abs(to.z - from.z));\r\n\r\n    const subChunkXStart = Math.floor(from.x / 16);\r\n    const subChunkXEnd = Math.floor(to.x / 16);\r\n\r\n    const subChunkZStart = Math.floor(from.z / 16);\r\n    const subChunkZEnd = Math.floor(to.z / 16);\r\n\r\n    let cubeX = 0;\r\n    let insetX = (from.x - subChunkXStart * 16) % 16;\r\n    let toGoX = Math.abs(to.x - from.x) + 1;\r\n\r\n    for (let iX = subChunkXStart; iX <= subChunkXEnd; iX++) {\r\n      const nextChunkToGoX = Math.min(toGoX, 16, 16 - insetX);\r\n\r\n      let cubeZ = 0;\r\n      let insetZ = (from.z - subChunkZStart * 16) % 16;\r\n      let toGoZ = Math.abs(to.z - from.z) + 1;\r\n\r\n      for (let iZ = subChunkZStart; iZ <= subChunkZEnd; iZ++) {\r\n        const chunkX = this.chunks.get(dim ? dim : 0)?.get(iX);\r\n\r\n        if (chunkX) {\r\n          const chunk = chunkX.get(iZ);\r\n          const nextChunkToGoZ = Math.min(toGoZ, 16, 16 - insetZ);\r\n\r\n          if (chunk) {\r\n            chunk.fillCube(\r\n              bc,\r\n              cubeX,\r\n              0,\r\n              cubeZ,\r\n              cubeX + nextChunkToGoX,\r\n              Math.abs(to.y - fromY),\r\n              cubeZ + nextChunkToGoZ,\r\n              insetX,\r\n              fromY,\r\n              insetZ\r\n            );\r\n          }\r\n        }\r\n\r\n        if (iZ === subChunkZStart) {\r\n          cubeZ += 16 - insetZ;\r\n          toGoZ -= 16 - insetZ;\r\n          insetZ = 0;\r\n        } else {\r\n          cubeZ += 16;\r\n          toGoZ -= 16;\r\n        }\r\n      }\r\n\r\n      if (iX === subChunkXStart) {\r\n        cubeX += 16 - insetX;\r\n        toGoX -= 16 - insetX;\r\n        insetX = 0;\r\n      } else {\r\n        cubeX += 16;\r\n        toGoX -= 16;\r\n      }\r\n    }\r\n\r\n    return bc;\r\n  }\r\n\r\n  getSubChunkCube(x: number, y: number, z: number, dim?: number) {\r\n    const xDim = this.chunks.get(dim ? dim : 0)?.get(Math.floor(x / 16));\r\n\r\n    if (!xDim) {\r\n      return undefined;\r\n    }\r\n\r\n    const zDim = xDim.get(Math.floor(z / 16));\r\n\r\n    if (zDim === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return zDim.getSubChunkCube(Math.floor(y / 16));\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport Log from \"../core/Log\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\n\r\nexport enum WorldItemInfoGeneratorTest {\r\n  betaApisExperiment = 101,\r\n  dataDrivenItemsExperiment = 102,\r\n  deferredTechnicalPreviewExperiment = 103,\r\n  baseGameVersion = 107,\r\n  worldName = 108,\r\n  worldDescription = 109,\r\n}\r\n\r\n/**\r\n * Validates world items including experiments and base game version settings.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/world.form.json} for topic definitions\r\n */\r\nexport default class WorldItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"WORLD\";\r\n  title = \"World Validation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.baseGameVersion = infoSet.getFirstStringValue(this.id, WorldItemInfoGeneratorTest.baseGameVersion);\r\n\r\n    info.minBaseGameVersionString = infoSet.getMinNumberArrayValueAsVersionString(\r\n      this.id,\r\n      WorldItemInfoGeneratorTest.baseGameVersion\r\n    );\r\n\r\n    info.minBaseGameVersion = MinecraftUtilities.getVersionNumber(info.minBaseGameVersionString);\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.itemType === ProjectItemType.MCWorld ||\r\n      projectItem.itemType === ProjectItemType.MCTemplate ||\r\n      projectItem.itemType === ProjectItemType.worldFolder\r\n    ) {\r\n      let mcworld: MCWorld | undefined = await MCWorld.ensureOnItem(projectItem);\r\n\r\n      if (!mcworld) {\r\n        Log.debugAlert(\"Could not find respective world.\");\r\n        return items;\r\n      }\r\n\r\n      await mcworld.loadMetaFiles(false);\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldItemInfoGeneratorTest.betaApisExperiment,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            WorldItemInfoGeneratorTest,\r\n            WorldItemInfoGeneratorTest.betaApisExperiment\r\n          ),\r\n          projectItem,\r\n          mcworld.betaApisExperiment,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldItemInfoGeneratorTest.dataDrivenItemsExperiment,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            WorldItemInfoGeneratorTest,\r\n            WorldItemInfoGeneratorTest.dataDrivenItemsExperiment\r\n          ),\r\n          projectItem,\r\n          mcworld.dataDrivenItemsExperiment,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldItemInfoGeneratorTest.deferredTechnicalPreviewExperiment,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            WorldItemInfoGeneratorTest,\r\n            WorldItemInfoGeneratorTest.deferredTechnicalPreviewExperiment\r\n          ),\r\n          projectItem,\r\n          mcworld.deferredTechnicalPreviewExperiment,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      if (mcworld.manifest && mcworld.manifest.header && mcworld.manifest.header.base_game_version) {\r\n        let val: any = mcworld.manifest.header.base_game_version;\r\n\r\n        if (val.join) {\r\n          val = val.join(\".\");\r\n        }\r\n\r\n        val = val.toString();\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            WorldItemInfoGeneratorTest.baseGameVersion,\r\n            \"Base game version\",\r\n            projectItem,\r\n            val,\r\n            mcworld.name\r\n          )\r\n        );\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            \"WORLD\",\r\n            WorldItemInfoGeneratorTest.worldName,\r\n            ProjectInfoUtilities.getTitleFromEnum(WorldItemInfoGeneratorTest, WorldItemInfoGeneratorTest.worldName),\r\n            projectItem,\r\n            mcworld.manifest.header.name,\r\n            mcworld.name\r\n          )\r\n        );\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            \"WORLD\",\r\n            WorldItemInfoGeneratorTest.worldDescription,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              WorldItemInfoGeneratorTest,\r\n              WorldItemInfoGeneratorTest.worldDescription\r\n            ),\r\n            projectItem,\r\n            mcworld.manifest.header.description,\r\n            mcworld.name\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IFile from \"../storage/IFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\n\r\nconst tagAllowList = [\"render_method\", \"min_difficulty\", \"cause\", \"effect_name\", \"entity_type\", \"event_name\"];\r\nconst numericAllowList: string[] = [\"max_stack_size\"];\r\nconst boolAllowList: string[] = [\"fire_immune\", \"burns_in_daylight\", \"hand_equipped\", \"stacked_by_data\"];\r\n\r\nconst inspectTagList: string[] = [\r\n  \"minecraft:behavior.follow_mob\",\r\n  \"minecraft:behavior.float_wander\",\r\n  \"minecraft:behavior.tempt\",\r\n];\r\n\r\nexport enum JsonFileTagsInfoGeneratorTest {\r\n  entityType = 101,\r\n  blockType = 102,\r\n  itemType = 103,\r\n  terrainTexture = 104,\r\n  itemTexture = 105,\r\n  soundDefinition = 106,\r\n  musicDefinition = 107,\r\n  sound = 108,\r\n  biomeBehaviorType = 109,\r\n  biomeClientType = 110,\r\n  particleType = 111,\r\n}\r\n\r\n/**\r\n * Extracts and aggregates content tags from JSON definition files.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/jsontags.form.json} for topic definitions\r\n */\r\nexport default class JsonFileTagsInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"JSONTAGS\";\r\n  title = \"JSON Tags\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (project.projectFolder) {\r\n      await this.generateFromFolder(project, project.projectFolder, items, contentIndex);\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    const entityTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.entityType);\r\n    const blockTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.blockType);\r\n    const itemTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.itemType);\r\n    const biomeBehaviorTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.biomeBehaviorType);\r\n    const biomeClientTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.biomeClientType);\r\n    const particleTypeComponents = infoSet.getItems(this.id, JsonFileTagsInfoGeneratorTest.particleType);\r\n\r\n    info.entityTypeComponents = [];\r\n    info.blockTypeComponents = [];\r\n    info.itemTypeComponents = [];\r\n    info.biomeBehaviorTypeComponents = [];\r\n    info.biomeClientTypeComponents = [];\r\n    info.particleEmitterTypeComponents = [];\r\n    info.particleTypeComponents = [];\r\n\r\n    for (const entityTypeComponent of entityTypeComponents) {\r\n      let entityComponentSets = entityTypeComponent.featureSets;\r\n\r\n      if (entityComponentSets) {\r\n        const ecInCg = entityComponentSets[\"componentsUsedInComponentGroups\"];\r\n\r\n        if (ecInCg) {\r\n          for (let cgId in ecInCg) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.entityTypeComponents.includes(cgId)) {\r\n              info.entityTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n        const defaultEcInCg = entityComponentSets[\"defaultComponents\"];\r\n\r\n        if (defaultEcInCg) {\r\n          for (let cgId in defaultEcInCg) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.entityTypeComponents.includes(cgId)) {\r\n              info.entityTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const blockTypeComponent of blockTypeComponents) {\r\n      let blockComponentSets = blockTypeComponent.featureSets;\r\n\r\n      if (blockComponentSets) {\r\n        const blockTypeComponents = blockComponentSets[\"blockDefaultComponents\"];\r\n\r\n        if (blockTypeComponents) {\r\n          for (let cgId in blockTypeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.blockTypeComponents.includes(cgId)) {\r\n              info.blockTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n\r\n        const blockPermutationTypeComponents = blockComponentSets[\"blockPermutationComponents\"];\r\n\r\n        if (blockPermutationTypeComponents) {\r\n          for (let cgId in blockPermutationTypeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.blockTypeComponents.includes(cgId)) {\r\n              info.blockTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const itemTypeComponent of itemTypeComponents) {\r\n      let itemComponentSets = itemTypeComponent.featureSets;\r\n\r\n      if (itemComponentSets) {\r\n        const itemTypeComponents = itemComponentSets[\"components\"];\r\n\r\n        if (itemTypeComponents) {\r\n          for (let cgId in itemTypeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.itemTypeComponents.includes(cgId)) {\r\n              info.itemTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const biomeBehaviorTypeComponent of biomeBehaviorTypeComponents) {\r\n      let biomeComponentSets = biomeBehaviorTypeComponent.featureSets;\r\n\r\n      if (biomeComponentSets) {\r\n        const biomeComponents = biomeComponentSets[\"biomeComponents\"];\r\n\r\n        if (biomeComponents) {\r\n          for (let cgId in biomeComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.biomeBehaviorTypeComponents.includes(cgId)) {\r\n              info.biomeBehaviorTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const biomeClientTypeComponent of biomeClientTypeComponents) {\r\n      let biomeClientComponentSets = biomeClientTypeComponent.featureSets;\r\n\r\n      if (biomeClientComponentSets) {\r\n        const biomeClientComponents = biomeClientComponentSets[\"biomeClientComponents\"];\r\n\r\n        if (biomeClientComponents) {\r\n          for (let cgId in biomeClientComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.biomeClientTypeComponents.includes(cgId)) {\r\n              info.biomeClientTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const particleTypeComponent of particleTypeComponents) {\r\n      let particleComponentSets = particleTypeComponent.featureSets;\r\n\r\n      if (particleComponentSets) {\r\n        const emitterComponents = particleComponentSets[\"particleEmitterComponents\"];\r\n\r\n        if (emitterComponents) {\r\n          for (let cgId in emitterComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.particleEmitterTypeComponents.includes(cgId)) {\r\n              info.particleEmitterTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n\r\n        const particleComponents = particleComponentSets[\"particleComponents\"];\r\n\r\n        if (particleComponents) {\r\n          for (let cgId in particleComponents) {\r\n            if (cgId.startsWith(\"minecraft:\")) {\r\n              cgId = cgId.substring(10);\r\n            }\r\n\r\n            if (!info.particleTypeComponents.includes(cgId)) {\r\n              info.particleTypeComponents.push(cgId);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.entityTypeComponents.sort();\r\n    info.itemTypeComponents.sort();\r\n    info.blockTypeComponents.sort();\r\n    info.biomeBehaviorTypeComponents.sort();\r\n    info.biomeClientTypeComponents.sort();\r\n    info.particleEmitterTypeComponents.sort();\r\n    info.particleTypeComponents.sort();\r\n  }\r\n\r\n  async generateFromFolder(project: Project, folder: IFolder, items: ProjectInfoItem[], index: ContentIndex) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const baseType = StorageUtilities.getTypeFromName(fileName);\r\n      const file = folder.files[fileName];\r\n\r\n      if (baseType === \"json\" && file) {\r\n        await this.generateFromFile(project, file, items, index);\r\n      } else if (StorageUtilities.isContainerFile(fileName) && file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        if (file.content && file.content instanceof Uint8Array) {\r\n          if (!file.fileContainerStorage) {\r\n            const zipStorage = new ZipStorage();\r\n\r\n            zipStorage.storagePath = file.storageRelativePath + \"#\";\r\n\r\n            await zipStorage.loadFromUint8Array(file.content, file.name);\r\n\r\n            file.fileContainerStorage = zipStorage;\r\n          }\r\n\r\n          if (file.fileContainerStorage) {\r\n            await this.generateFromFolder(project, file.fileContainerStorage.rootFolder, items, index);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder && !folder.errorStatus) {\r\n        await this.generateFromFolder(project, childFolder, items, index);\r\n      }\r\n    }\r\n  }\r\n\r\n  async generateFromFile(project: Project, file: IFile, items: ProjectInfoItem[], index: ContentIndex) {\r\n    const srPath = file.storageRelativePath.toLowerCase();\r\n\r\n    if (srPath.indexOf(\"/entities/\") >= 0 && !srPath.endsWith(\".entity.json\")) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.entityType,\r\n        \"Entity file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO !== undefined) {\r\n        const entityNode = jsonO[\"minecraft:entity\"];\r\n\r\n        if (entityNode) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"defaultComponents\",\r\n            index,\r\n            AnnotationCategory.entityComponentDependent,\r\n            entityNode[\"components\"]\r\n          );\r\n\r\n          const compGroupsNode = entityNode[\"component_groups\"];\r\n\r\n          if (compGroupsNode) {\r\n            for (const compNodeName in compGroupsNode) {\r\n              await this.addSubTags(\r\n                pi,\r\n                \"componentsUsedInComponentGroups\",\r\n                index,\r\n                AnnotationCategory.entityComponentDependentInGroup,\r\n                compGroupsNode[compNodeName]\r\n              );\r\n            }\r\n          }\r\n          const eventsNode = entityNode[\"events\"];\r\n\r\n          if (eventsNode) {\r\n            for (const evNodeName in eventsNode) {\r\n              await this.addSubTags(pi, \"entityEvents\", index, AnnotationCategory.entityEvent, eventsNode[evNodeName]);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/items/\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.itemType,\r\n        \"Item file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO !== undefined) {\r\n        const itemNode = jsonO[\"minecraft:item\"];\r\n\r\n        if (itemNode) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"components\",\r\n            index,\r\n            AnnotationCategory.itemComponentDependent,\r\n            itemNode[\"components\"]\r\n          );\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/blocks/\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.blockType,\r\n        \"Block file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const blockNode = jsonO[\"minecraft:block\"];\r\n\r\n        if (blockNode) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"blockDefaultComponents\",\r\n            index,\r\n            AnnotationCategory.blockComponentDependent,\r\n            blockNode[\"components\"]\r\n          );\r\n\r\n          const descriptionNode = blockNode[\"description\"];\r\n\r\n          if (descriptionNode) {\r\n            let stateNode = descriptionNode[\"states\"];\r\n\r\n            if (stateNode === undefined) {\r\n              stateNode = descriptionNode[\"properties\"];\r\n            }\r\n\r\n            let permutations = 0;\r\n\r\n            if (stateNode) {\r\n              for (const obj in stateNode) {\r\n                const val = stateNode[obj];\r\n\r\n                if (val && val.length) {\r\n                  if (permutations === 0) {\r\n                    permutations = val.length;\r\n                  } else {\r\n                    permutations *= val.length;\r\n                  }\r\n\r\n                  pi.maxFeature(\"Permutation\", \"values_per_property\", val.length);\r\n                }\r\n              }\r\n            }\r\n\r\n            let traitsNode = descriptionNode[\"traits\"];\r\n\r\n            if (traitsNode) {\r\n              if (traitsNode[\"minecraft:placement_direction\"]) {\r\n                const enabledStates = traitsNode[\"minecraft:placement_direction\"][\"enabled_states\"];\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:cardinal_direction\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 4;\r\n                  } else {\r\n                    permutations *= 4;\r\n                  }\r\n                }\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:facing_direction\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 6;\r\n                  } else {\r\n                    permutations *= 6;\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (traitsNode[\"minecraft:placement_position\"]) {\r\n                const enabledStates = traitsNode[\"minecraft:placement_position\"][\"enabled_states\"];\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:block_face\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 6;\r\n                  } else {\r\n                    permutations *= 6;\r\n                  }\r\n                }\r\n\r\n                if (enabledStates && enabledStates.includes(\"minecraft:vertical_half\")) {\r\n                  if (permutations === 0) {\r\n                    permutations = 2;\r\n                  } else {\r\n                    permutations *= 2;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            if (stateNode || traitsNode) {\r\n              pi.maxFeature(\"Permutation\", \"Values per type\", permutations);\r\n              pi.incrementFeature(\"Permutation\", \"Values\", permutations);\r\n            }\r\n          }\r\n\r\n          const permsNode = blockNode[\"permutations\"];\r\n\r\n          if (permsNode) {\r\n            for (const permNode of permsNode) {\r\n              const permComponentsNode = permNode[\"components\"];\r\n\r\n              if (permComponentsNode) {\r\n                await this.addSubTags(\r\n                  pi,\r\n                  \"blockPermutationComponents\",\r\n                  index,\r\n                  AnnotationCategory.blockComponentDependentInPermutation,\r\n                  permComponentsNode\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/biomes/\") >= 0) {\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const biomeNode = jsonO[\"minecraft:biome\"];\r\n\r\n        if (biomeNode) {\r\n          const pi = new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            JsonFileTagsInfoGeneratorTest.biomeBehaviorType,\r\n            \"Biome behavior file\",\r\n            project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n            file.storageRelativePath\r\n          );\r\n\r\n          await this.addSubTags(\r\n            pi,\r\n            \"biomeComponents\",\r\n            index,\r\n            AnnotationCategory.biomeBehaviorComponentDependent,\r\n            biomeNode[\"components\"]\r\n          );\r\n\r\n          items.push(pi);\r\n        }\r\n\r\n        const clientBiomeNode = jsonO[\"minecraft:client_biome\"];\r\n\r\n        if (clientBiomeNode) {\r\n          const pi = new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            JsonFileTagsInfoGeneratorTest.biomeClientType,\r\n            \"Biome client file\",\r\n            project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n            file.storageRelativePath\r\n          );\r\n\r\n          await this.addSubTags(\r\n            pi,\r\n            \"biomeClientComponents\",\r\n            index,\r\n            AnnotationCategory.biomeClientComponentDependent,\r\n            clientBiomeNode[\"components\"]\r\n          );\r\n\r\n          items.push(pi);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (srPath.indexOf(\"/particles/\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.particleType,\r\n        \"Particle file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO !== undefined) {\r\n        const particleEffectNode = jsonO[\"particle_effect\"];\r\n\r\n        if (particleEffectNode) {\r\n          const componentsNode = particleEffectNode[\"components\"];\r\n\r\n          if (componentsNode) {\r\n            const emitterComponents: { [key: string]: any } = {};\r\n            const particleComponents: { [key: string]: any } = {};\r\n\r\n            for (const compName in componentsNode) {\r\n              if (compName.startsWith(\"minecraft:particle_\") || compName.startsWith(\"particle_\")) {\r\n                particleComponents[compName] = componentsNode[compName];\r\n              } else {\r\n                emitterComponents[compName] = componentsNode[compName];\r\n              }\r\n            }\r\n\r\n            await this.addSubTags(\r\n              pi,\r\n              \"particleEmitterComponents\",\r\n              index,\r\n              AnnotationCategory.particleEmitterComponentDependent,\r\n              emitterComponents\r\n            );\r\n\r\n            await this.addSubTags(\r\n              pi,\r\n              \"particleComponents\",\r\n              index,\r\n              AnnotationCategory.particleComponentDependent,\r\n              particleComponents\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n\r\n    if (srPath.indexOf(\"/textures/terrain_texture.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.terrainTexture,\r\n        \"Terrrain texture file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO && jsonO.texture_data) {\r\n        await this.addSubTags(\r\n          pi,\r\n          \"terrain_texture_elements\",\r\n          index,\r\n          AnnotationCategory.terrainTextureSource,\r\n          jsonO.texture_data,\r\n          true\r\n        );\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/textures/item_texture.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.itemTexture,\r\n        \"Item texture file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      await file.loadContent(false);\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO && jsonO.texture_data) {\r\n        await this.addSubTags(\r\n          pi,\r\n          \"item_texture_elements\",\r\n          index,\r\n          AnnotationCategory.itemTextureSource,\r\n          jsonO.texture_data,\r\n          true\r\n        );\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/sounds/sound_definitions.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.soundDefinition,\r\n        \"Sound definitions file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const soundDef = jsonO[\"sound_definitions\"];\r\n\r\n        if (soundDef) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"sound_definition_elements\",\r\n            index,\r\n            AnnotationCategory.soundDefinitionSource,\r\n            soundDef,\r\n            true\r\n          );\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/sounds/music_definitions.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.musicDefinition,\r\n        \"Music definitions file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        await this.addSubTags(\r\n          pi,\r\n          \"music_definition_elements\",\r\n          index,\r\n          AnnotationCategory.musicDefinitionSource,\r\n          jsonO,\r\n          true\r\n        );\r\n      }\r\n\r\n      items.push(pi);\r\n    } else if (srPath.indexOf(\"/sounds.json\") >= 0) {\r\n      const pi = new ProjectInfoItem(\r\n        InfoItemType.info,\r\n        this.id,\r\n        JsonFileTagsInfoGeneratorTest.sound,\r\n        \"Sounds file\",\r\n        project.getItemByExtendedOrProjectPath(file.storageRelativePath),\r\n        file.storageRelativePath\r\n      );\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const jsonO = StorageUtilities.getJsonObject(file);\r\n\r\n      if (jsonO) {\r\n        const blockSounds = jsonO[\"block_sounds\"];\r\n        if (blockSounds) {\r\n          await this.addSubTags(pi, \"block_sounds\", index, AnnotationCategory.blockSounds, blockSounds, true);\r\n        }\r\n\r\n        const entitySounds = jsonO[\"entity_sounds\"];\r\n        if (entitySounds) {\r\n          await this.addSubTags(pi, \"entity_sounds\", index, AnnotationCategory.entitySounds, entitySounds, true);\r\n        }\r\n\r\n        const individualEventSounds = jsonO[\"individual_event_sounds\"];\r\n        if (individualEventSounds) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"individual_sounds\",\r\n            index,\r\n            AnnotationCategory.individualEventSoundsSource,\r\n            individualEventSounds\r\n          );\r\n        }\r\n\r\n        const interactiveSounds = jsonO[\"interactive_sounds\"];\r\n        if (interactiveSounds) {\r\n          await this.addSubTags(\r\n            pi,\r\n            \"interactive_sounds\",\r\n            index,\r\n            AnnotationCategory.interactiveSounds,\r\n            interactiveSounds,\r\n            true\r\n          );\r\n        }\r\n      }\r\n\r\n      items.push(pi);\r\n    }\r\n  }\r\n\r\n  async addSubTags(\r\n    pi: ProjectInfoItem,\r\n    prefix: string,\r\n    index: ContentIndex,\r\n    annotation: string,\r\n    rootTag?: any,\r\n    doNotIncrement?: boolean\r\n  ) {\r\n    if (!rootTag) {\r\n      return;\r\n    }\r\n\r\n    for (const childEltName in rootTag) {\r\n      if (childEltName) {\r\n        let colon = childEltName.indexOf(\":\");\r\n        const childObj: any = rootTag[childEltName];\r\n\r\n        if (colon <= 0 || childEltName.substring(0, colon) === \"minecraft\") {\r\n          if (!doNotIncrement) {\r\n            pi.incrementFeature(prefix, childEltName);\r\n          }\r\n\r\n          let bareTag = childEltName;\r\n\r\n          if (colon > 1 && colon < childEltName.length - 2) {\r\n            bareTag = childEltName.substring(colon + 1);\r\n          }\r\n\r\n          if (pi.projectItem && pi.projectItem.projectPath) {\r\n            let packRelativePath = await pi.projectItem.getPackRelativePath();\r\n\r\n            if (packRelativePath) {\r\n              packRelativePath = StorageUtilities.getBaseFromName(\r\n                StorageUtilities.ensureNotStartsWithDelimiter(packRelativePath)\r\n              );\r\n\r\n              index.insert(bareTag, packRelativePath, annotation);\r\n            }\r\n\r\n            index.insert(bareTag, pi.projectItem.projectPath, annotation);\r\n\r\n            if (typeof childObj === \"number\") {\r\n              if (numericAllowList.includes(bareTag)) {\r\n                index.insert(bareTag + \"==\" + Math.round(childObj), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (typeof childObj === \"boolean\") {\r\n              if (boolAllowList.includes(bareTag)) {\r\n                index.insert(bareTag + \"==\" + (childObj ? \"t\" : \"f\"), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (Array.isArray(childObj)) {\r\n              index.insert(bareTag + \"==a\", pi.projectItem.projectPath, annotation);\r\n              this.addSubTagsForArray(pi, bareTag, index, annotation, childObj);\r\n            } else if (typeof childObj === \"string\" && childObj.length > 0) {\r\n              if (tagAllowList.includes(bareTag)) {\r\n                index.insert(bareTag + \"==\" + childObj, pi.projectItem.projectPath, annotation);\r\n                index.insert(childObj, pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else {\r\n              if (childObj && !Array.isArray(childObj)) {\r\n                this.addDescendentSubTags(pi, bareTag, index, annotation, childObj, childEltName);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addSubTagsForArray(pi: ProjectInfoItem, prefix: string, index: ContentIndex, annotation: string, rootArr?: any[]) {\r\n    if (!rootArr) {\r\n      return;\r\n    }\r\n\r\n    for (const childObj of rootArr) {\r\n      if (typeof childObj === \"string\" && childObj.length > 0) {\r\n        if (pi && pi.projectItem && pi.projectItem.projectPath) {\r\n          index.insert(prefix + \".\" + childObj, pi.projectItem.projectPath, annotation);\r\n          index.insert(childObj, pi.projectItem.projectPath, annotation);\r\n        }\r\n      } else {\r\n        if (childObj && typeof childObj !== \"number\" && typeof childObj !== \"boolean\" && !Array.isArray(childObj)) {\r\n          this.addDescendentSubTags(pi, prefix, index, annotation, childObj);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addDescendentSubTags(\r\n    pi: ProjectInfoItem,\r\n    prefix: string,\r\n    index: ContentIndex,\r\n    annotation: string,\r\n    rootTag?: any,\r\n    parentName?: string\r\n  ) {\r\n    if (!rootTag) {\r\n      return;\r\n    }\r\n\r\n    for (const childEltName in rootTag) {\r\n      if (childEltName) {\r\n        const obj: any = rootTag[childEltName];\r\n\r\n        if (pi.projectItem && pi.projectItem.projectPath) {\r\n          if (childEltName === \"test\" && parentName === \"filters\" && typeof obj === \"string\") {\r\n            index.insert(obj, pi.projectItem?.projectPath, AnnotationCategory.entityFilter);\r\n          }\r\n\r\n          index.insert(prefix + \".\" + childEltName, pi.projectItem?.projectPath, annotation);\r\n\r\n          let bareTag = childEltName;\r\n          let colon = childEltName.indexOf(\":\");\r\n\r\n          if (colon <= 0 || childEltName.substring(0, colon) === \"minecraft\") {\r\n            if (colon > 1 && colon < childEltName.length - 2) {\r\n              bareTag = childEltName.substring(colon + 1);\r\n            }\r\n            const inspectTag = parentName && inspectTagList.includes(parentName);\r\n\r\n            if (typeof obj === \"number\") {\r\n              if (numericAllowList.includes(bareTag) || inspectTag) {\r\n                index.insert(prefix + \".\" + bareTag + \"==\" + Math.round(obj), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (typeof obj === \"boolean\") {\r\n              if (boolAllowList.includes(bareTag) || inspectTag) {\r\n                index.insert(prefix + \".\" + bareTag + \"==\" + (obj ? \"t\" : \"f\"), pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (typeof obj === \"string\") {\r\n              if (tagAllowList.includes(bareTag) || inspectTag) {\r\n                index.insert(prefix + \".\" + bareTag + \"==\" + obj, pi.projectItem.projectPath, annotation);\r\n              }\r\n            } else if (Array.isArray(obj)) {\r\n              this.addSubTagsForArray(pi, prefix + \".\" + bareTag, index, annotation, obj);\r\n            } else {\r\n              if (obj && !Array.isArray(obj)) {\r\n                this.addDescendentSubTags(pi, prefix + \".\" + bareTag, index, annotation, obj, childEltName);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport default class CommandStructure {\r\n  public fullName: string;\r\n  public commandArguments: string[];\r\n\r\n  constructor(commandFullName: string, commandArguments: string[]) {\r\n    this.fullName = commandFullName;\r\n    this.commandArguments = commandArguments;\r\n  }\r\n\r\n  get isNamespaced() {\r\n    const namespaceColon = this.fullName.indexOf(\":\");\r\n\r\n    return namespaceColon > 0;\r\n  }\r\n\r\n  get namespace() {\r\n    const namespaceColon = this.fullName.indexOf(\":\");\r\n\r\n    if (namespaceColon > 0) {\r\n      return this.fullName.substring(0, namespaceColon);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static parse(commandText: string) {\r\n    let commandName = undefined;\r\n\r\n    commandText = commandText.trim();\r\n\r\n    if (commandText.startsWith(\"/\")) {\r\n      commandText = commandText.substring(1, commandText.length);\r\n    }\r\n\r\n    const firstSpace = commandText.indexOf(\" \");\r\n\r\n    let parseArgs: string[] = [];\r\n\r\n    if (firstSpace < 0) {\r\n      commandName = commandText.toLowerCase();\r\n    } else {\r\n      commandName = commandText.substring(0, firstSpace).toLowerCase();\r\n\r\n      const argumentStr = commandText.substring(firstSpace + 1);\r\n\r\n      let nextSpace = argumentStr.indexOf(\" \");\r\n      let nextDoubleQuote = argumentStr.indexOf('\"');\r\n      let nextSingleQuote = argumentStr.indexOf(\"'\");\r\n      let startIndex = 0;\r\n\r\n      while (nextSpace >= 0 && startIndex < argumentStr.length) {\r\n        let processedNextSegment = false;\r\n\r\n        if (\r\n          nextDoubleQuote >= 0 &&\r\n          nextDoubleQuote < nextSpace &&\r\n          (nextSingleQuote < 0 || nextSingleQuote > nextDoubleQuote)\r\n        ) {\r\n          let nextNextDoubleQuote = argumentStr.indexOf('\"', nextDoubleQuote + 1);\r\n\r\n          if (nextNextDoubleQuote > nextDoubleQuote) {\r\n            parseArgs.push(argumentStr.substring(startIndex + 1, nextNextDoubleQuote));\r\n            startIndex = nextNextDoubleQuote + 1;\r\n\r\n            if (startIndex < argumentStr.length) {\r\n              nextSpace = argumentStr.indexOf(\" \", startIndex);\r\n              nextDoubleQuote = argumentStr.indexOf('\"', startIndex);\r\n              nextSingleQuote = argumentStr.indexOf(\"'\", startIndex);\r\n            }\r\n            processedNextSegment = true;\r\n          }\r\n        } else if (nextSingleQuote >= 0 && nextSingleQuote < nextSpace) {\r\n          const nextNextSingleQuote = argumentStr.indexOf(\"'\", nextSingleQuote + 1);\r\n\r\n          if (nextNextSingleQuote > nextSingleQuote) {\r\n            parseArgs.push(argumentStr.substring(startIndex + 1, nextNextSingleQuote));\r\n            startIndex = nextNextSingleQuote + 1;\r\n\r\n            if (startIndex < argumentStr.length) {\r\n              nextSpace = argumentStr.indexOf(\" \", startIndex);\r\n              nextDoubleQuote = argumentStr.indexOf('\"', startIndex);\r\n              nextSingleQuote = argumentStr.indexOf(\"'\", startIndex);\r\n            }\r\n            processedNextSegment = true;\r\n          }\r\n        }\r\n\r\n        // consider space as the next element\r\n        if (!processedNextSegment) {\r\n          parseArgs.push(argumentStr.substring(startIndex, nextSpace));\r\n\r\n          startIndex = nextSpace + 1;\r\n\r\n          if (startIndex < argumentStr.length) {\r\n            nextSpace = argumentStr.indexOf(\" \", startIndex);\r\n            nextDoubleQuote = argumentStr.indexOf('\"', startIndex);\r\n            nextSingleQuote = argumentStr.indexOf(\"'\", startIndex);\r\n          }\r\n        }\r\n      }\r\n\r\n      parseArgs.push(argumentStr.substring(startIndex));\r\n    }\r\n\r\n    // if the command is a comment, push the comment into args and identify this command\r\n    // consistently as a comment (\"#\").\r\n    if (commandName.indexOf(\"#\") >= 0) {\r\n      let newArgs = [];\r\n\r\n      newArgs.push(commandName);\r\n\r\n      for (let i = 0; i < parseArgs.length; i++) {\r\n        newArgs.push(parseArgs[i]);\r\n      }\r\n\r\n      parseArgs = newArgs;\r\n      commandName = \"#\";\r\n    }\r\n\r\n    return new CommandStructure(\r\n      commandName,\r\n      parseArgs // arguments is a keyword, so commandArguments here.\r\n    );\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nexport enum CommandStatus {\r\n  completed = 100,\r\n  invalidEnvironment = 2,\r\n  invalidArguments = 1,\r\n  fail = 0,\r\n}\r\n\r\nexport interface ICommandResult {\r\n  status: CommandStatus;\r\n  data?: any;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommand System - Unified command interface for MCT\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * ToolCommands provide a unified way to expose MCT functionality across multiple surfaces:\r\n * - CLI commands (via thin adapter to Commander.js)\r\n * - MCP tools (via auto-registration with Zod schemas)\r\n * - In-game edit bar (via SearchCommandEditor)\r\n * - Serve mode terminal (via stdin processing)\r\n * - Server management UI (via HTTP API)\r\n * - Home page command bar\r\n *\r\n * DESIGN PRINCIPLES:\r\n * 1. Commands exist in the same \"/\" namespace as Bedrock server commands\r\n * 2. The /help command is the only one we override from Bedrock (unified help)\r\n * 3. All other unrecognized commands pass through to Bedrock server\r\n * 4. Commands support tab-completion via autocomplete providers\r\n * 5. Commands use a flag syntax for optional parameters (--flag value)\r\n *\r\n * RELATIONSHIP TO CLI COMMANDS:\r\n * - CLI commands (ICommand in cli/core/) handle CLI-specific concerns (workers, etc.)\r\n * - ToolCommands use the same core libraries (ProjectItemCreateManager, etc.)\r\n * - CLI commands can delegate to ToolCommands for argument parsing\r\n * - New commands should prefer ToolCommand implementation\r\n *\r\n * RELATED FILES:\r\n * - IToolCommandArgument.ts: Argument/flag definitions\r\n * - IToolCommandContext.ts: Execution context\r\n * - ToolCommandRegistry.ts: Central registry\r\n * - ToolCommandParser.ts: Parsing and autocomplete\r\n * - cli/core/ToolCommandCliAdapter.ts: CLI integration\r\n */\r\n\r\nimport type { IToolCommandArgument, IToolCommandFlag } from \"./IToolCommandArgument\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\n\r\n/**\r\n * Scopes where a ToolCommand can be invoked.\r\n * By default, commands are available in all scopes.\r\n */\r\nexport enum ToolCommandScope {\r\n  /** Available in web/Electron UI (SearchCommandEditor, Home page) */\r\n  ui = \"ui\",\r\n\r\n  /** Available as MCP tool */\r\n  mcp = \"mcp\",\r\n\r\n  /** Available in serve mode interactive terminal */\r\n  serveTerminal = \"serveTerminal\",\r\n\r\n  /** Available in server management HTTP API */\r\n  serverApi = \"serverApi\",\r\n\r\n  /** Available as CLI command (via adapter) */\r\n  cli = \"cli\",\r\n}\r\n\r\n/**\r\n * Standard exit codes for ToolCommands.\r\n * These align with Unix conventions and enable intelligent error handling in CI/CD scripts.\r\n */\r\nexport enum ToolCommandExitCode {\r\n  Success = 0,\r\n  GenericError = 1,\r\n  PortConflict = 2,\r\n  EulaNotAccepted = 3,\r\n  NetworkError = 4,\r\n  CrashOnStartup = 5,\r\n  Timeout = 6,\r\n  InvalidArguments = 7,\r\n  PermissionDenied = 8,\r\n}\r\n\r\n/**\r\n * Result of executing a ToolCommand.\r\n */\r\nexport interface IToolCommandResult {\r\n  /** Whether the command succeeded */\r\n  success: boolean;\r\n\r\n  /** Human-readable result message */\r\n  message?: string;\r\n\r\n  /** Structured data returned by the command */\r\n  data?: unknown;\r\n\r\n  /** Process exit code for CLI consumers */\r\n  exitCode?: ToolCommandExitCode;\r\n\r\n  /** Error information if success is false */\r\n  error?: {\r\n    code: string;\r\n    message: string;\r\n    details?: unknown;\r\n  };\r\n}\r\n\r\n/**\r\n * Category for grouping commands in help output.\r\n */\r\nexport type ToolCommandCategory = \"General\" | \"Project\" | \"Content\" | \"Server\" | \"Validation\" | \"World\" | \"Render\";\r\n\r\n/**\r\n * Metadata for a ToolCommand.\r\n * Mirrors ICommandMetadata from CLI but simplified for ToolCommand use.\r\n */\r\nexport interface IToolCommandMetadata {\r\n  /** Command name (e.g., 'create', 'add', 'help') - without leading slash */\r\n  name: string;\r\n\r\n  /** Short description for help text */\r\n  description: string;\r\n\r\n  /** Command aliases (e.g., ['c'] for 'create') */\r\n  aliases?: string[];\r\n\r\n  /** Category for grouping in help output */\r\n  category: ToolCommandCategory;\r\n\r\n  /** Positional arguments for this command */\r\n  arguments?: IToolCommandArgument[];\r\n\r\n  /** Named flags for this command (--flag value) */\r\n  flags?: IToolCommandFlag[];\r\n\r\n  /** Whether this command requires a project context */\r\n  requiresProject?: boolean;\r\n\r\n  /** Whether this command requires an active Minecraft server connection */\r\n  requiresMinecraft?: boolean;\r\n\r\n  /** Whether this command modifies content (vs read-only) */\r\n  isWriteCommand?: boolean;\r\n\r\n  /** Scopes where this command is available (default: all) */\r\n  scopes?: ToolCommandScope[];\r\n\r\n  /** Example usages for help text */\r\n  examples?: string[];\r\n}\r\n\r\n/**\r\n * IToolCommand is the interface all ToolCommands must implement.\r\n */\r\nexport interface IToolCommand {\r\n  /**\r\n   * Command metadata for registration and help.\r\n   */\r\n  readonly metadata: IToolCommandMetadata;\r\n\r\n  /**\r\n   * Execute the command with the provided context.\r\n   *\r\n   * @param context The execution context with project, server, and output access\r\n   * @param args Parsed positional arguments (in order of metadata.arguments)\r\n   * @param flags Parsed flag values (keyed by flag name without --)\r\n   * @returns Result indicating success/failure and any return data\r\n   */\r\n  execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult>;\r\n\r\n  /**\r\n   * Get autocomplete suggestions for a partial argument.\r\n   * Default implementation uses argument autocompleteProviders.\r\n   *\r\n   * @param context The execution context\r\n   * @param args Arguments provided so far\r\n   * @param partialArg The partial argument being typed\r\n   * @param argIndex Index of the argument being completed\r\n   * @returns Array of completion suggestions\r\n   */\r\n  getCompletions?(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]>;\r\n}\r\n\r\n/**\r\n * Base class for ToolCommands providing common functionality.\r\n */\r\nexport abstract class ToolCommandBase implements IToolCommand {\r\n  abstract readonly metadata: IToolCommandMetadata;\r\n\r\n  abstract execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult>;\r\n\r\n  /**\r\n   * Default completion implementation using argument autocompleteProviders.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    const argDef = this.metadata.arguments?.[argIndex];\r\n    if (!argDef?.autocompleteProvider) {\r\n      return [];\r\n    }\r\n\r\n    return argDef.autocompleteProvider(partialArg, context);\r\n  }\r\n\r\n  /**\r\n   * Helper to create a success result.\r\n   */\r\n  protected success(message?: string, data?: unknown): IToolCommandResult {\r\n    return { success: true, message, data };\r\n  }\r\n\r\n  /**\r\n   * Helper to create an error result.\r\n   */\r\n  protected error(code: string, message: string, details?: unknown): IToolCommandResult {\r\n    return {\r\n      success: false,\r\n      error: { code, message, details },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Helper to validate required arguments.\r\n   */\r\n  protected validateRequiredArgs(args: string[]): IToolCommandResult | undefined {\r\n    const requiredArgs = this.metadata.arguments?.filter((a) => a.required) ?? [];\r\n\r\n    for (let i = 0; i < requiredArgs.length; i++) {\r\n      if (!args[i] || args[i].trim() === \"\") {\r\n        return this.error(\"MISSING_ARGUMENT\", `Missing required argument: ${requiredArgs[i].name}`, {\r\n          argumentName: requiredArgs[i].name,\r\n          argumentIndex: i,\r\n        });\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport type Project from \"../Project\";\r\nimport type CreatorTools from \"../CreatorTools\";\r\nimport type IMinecraft from \"../IMinecraft\";\r\nimport type ServerManager from \"../../local/ServerManager\";\r\nimport Log from \"../../core/Log\";\r\n\r\n/**\r\n * Session context for ToolCommands that interact with Minecraft servers.\r\n * Maps to the MCP concept of \"session\" for managing server instances.\r\n */\r\nexport interface IToolCommandSession {\r\n  /**\r\n   * Session name - identifies this server instance.\r\n   * In MCP context, this is the sessionName parameter.\r\n   */\r\n  sessionName: string;\r\n\r\n  /**\r\n   * The ServerManager that owns this session.\r\n   */\r\n  serverManager?: ServerManager;\r\n\r\n  /**\r\n   * The slot ID where this server is running.\r\n   */\r\n  slot?: number;\r\n}\r\n\r\n/**\r\n * Output writer for ToolCommand messages.\r\n * Abstraction that works across different surfaces (terminal, UI, etc.)\r\n */\r\nexport interface IToolCommandOutput {\r\n  /** Write an informational message */\r\n  info(message: string): void;\r\n\r\n  /** Write a success message */\r\n  success(message: string): void;\r\n\r\n  /** Write a warning message */\r\n  warn(message: string): void;\r\n\r\n  /** Write an error message */\r\n  error(message: string): void;\r\n\r\n  /** Write a debug/verbose message */\r\n  debug(message: string): void;\r\n\r\n  /** Update progress (for long-running operations) */\r\n  progress(current: number, total: number, message?: string): void;\r\n}\r\n\r\n/**\r\n * Execution context for ToolCommands.\r\n *\r\n * Provides access to:\r\n * - Optional project context\r\n * - Optional Minecraft server connection\r\n * - CreatorTools instance for gallery, preferences, etc.\r\n * - Output writer for command feedback\r\n */\r\nexport interface IToolCommandContext {\r\n  /**\r\n   * The CreatorTools instance.\r\n   * Provides gallery, preferences, storage, etc.\r\n   * May be undefined in contexts where CreatorTools is not available (e.g., serve terminal).\r\n   */\r\n  creatorTools?: CreatorTools;\r\n\r\n  /**\r\n   * The active project, if one is loaded.\r\n   * Undefined when running commands from Home page or without project context.\r\n   */\r\n  project?: Project;\r\n\r\n  /**\r\n   * Active Minecraft server connection, if available.\r\n   * Used for commands that interact with Bedrock Dedicated Server.\r\n   */\r\n  minecraft?: IMinecraft;\r\n\r\n  /**\r\n   * Session context for server-based commands.\r\n   * Provides access to the server manager and session info.\r\n   */\r\n  session?: IToolCommandSession;\r\n\r\n  /**\r\n   * Output writer for command messages.\r\n   */\r\n  output: IToolCommandOutput;\r\n\r\n  /**\r\n   * The scope from which this command was invoked.\r\n   */\r\n  scope: \"ui\" | \"mcp\" | \"serveTerminal\" | \"serverApi\" | \"cli\";\r\n\r\n  /**\r\n   * Whether verbose/debug output is enabled.\r\n   */\r\n  verbose?: boolean;\r\n\r\n  /**\r\n   * Intermediate output messages collected during command execution.\r\n   * Used by command providers to capture output for the response.\r\n   */\r\n  messages?: string[];\r\n}\r\n\r\n/**\r\n * Factory to create ToolCommandContext from various sources.\r\n */\r\nexport class ToolCommandContextFactory {\r\n  /**\r\n   * Create a minimal context for commands that don't need a project.\r\n   */\r\n  static createMinimal(creatorTools: CreatorTools, output: IToolCommandOutput): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      output,\r\n      scope: \"ui\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context with a project.\r\n   */\r\n  static createWithProject(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    output: IToolCommandOutput\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      project,\r\n      output,\r\n      scope: \"ui\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context for serve mode with Minecraft connection.\r\n   */\r\n  static createServeContext(\r\n    creatorTools: CreatorTools,\r\n    project: Project | undefined,\r\n    minecraft: IMinecraft | undefined,\r\n    output: IToolCommandOutput\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      project,\r\n      minecraft,\r\n      output,\r\n      scope: \"serveTerminal\",\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context for MCP or HTTP API with session support.\r\n   */\r\n  static createSessionContext(\r\n    creatorTools: CreatorTools,\r\n    session: IToolCommandSession,\r\n    minecraft: IMinecraft | undefined,\r\n    output: IToolCommandOutput,\r\n    scope: \"mcp\" | \"serverApi\"\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      session,\r\n      minecraft,\r\n      output,\r\n      scope,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a context with a ServerManager for BDS lifecycle operations.\r\n   * Used when the caller has a ServerManager (e.g., Electron app, serve mode, tests).\r\n   */\r\n  static createWithServer(\r\n    creatorTools: CreatorTools,\r\n    serverManager: ServerManager,\r\n    output: IToolCommandOutput,\r\n    scope: \"ui\" | \"serveTerminal\" | \"mcp\" | \"serverApi\" | \"cli\" = \"ui\",\r\n    options?: {\r\n      project?: Project;\r\n      sessionName?: string;\r\n      slot?: number;\r\n    }\r\n  ): IToolCommandContext {\r\n    return {\r\n      creatorTools,\r\n      project: options?.project,\r\n      session: {\r\n        sessionName: options?.sessionName || \"default\",\r\n        serverManager,\r\n        slot: options?.slot ?? 0,\r\n      },\r\n      output,\r\n      scope,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create a console-based output writer for terminal use.\r\n   */\r\n  static createConsoleOutput(): IToolCommandOutput {\r\n    return {\r\n      info: (msg) => Log.message(msg),\r\n      success: (msg) => Log.message(`\u2713 ${msg}`),\r\n      warn: (msg) => Log.debug(`\u26A0 ${msg}`),\r\n      error: (msg) => Log.error(msg),\r\n      debug: (msg) => Log.verbose(`  ${msg}`),\r\n      progress: (current, total, msg) => {\r\n        const pct = Math.round((current / total) * 100);\r\n        Log.message(`[${pct}%] ${msg || \"\"}`);\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommandParser - Parse and tokenize ToolCommand strings\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * Handles parsing of command strings in the format:\r\n *   /commandName arg1 arg2 --flag value --boolFlag\r\n *\r\n * PARSING RULES:\r\n * 1. Commands start with / (optional, stripped during parsing)\r\n * 2. Positional arguments are space-separated\r\n * 3. Flags start with -- or - (for short names)\r\n * 4. Boolean flags have no value\r\n * 5. String array flags use comma-separated values\r\n * 6. Quoted strings preserve spaces\r\n *\r\n * AUTOCOMPLETE:\r\n * The parser provides completion suggestions based on:\r\n * - Cursor position in the input\r\n * - Available commands in the registry\r\n * - Argument autocomplete providers\r\n * - Flag names and values\r\n */\r\n\r\nimport type { IToolCommand } from \"./IToolCommand\";\r\nimport { type ToolCommandScope } from \"./IToolCommand\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\n\r\n/**\r\n * Result of parsing a command string.\r\n */\r\nexport interface ParsedToolCommand {\r\n  /** The command name (without leading /) */\r\n  commandName: string;\r\n\r\n  /** Positional arguments */\r\n  args: string[];\r\n\r\n  /** Flag values keyed by flag name (without --) */\r\n  flags: Record<string, string | boolean | string[]>;\r\n\r\n  /** The original input text */\r\n  originalText: string;\r\n}\r\n\r\n/**\r\n * Token from command parsing.\r\n */\r\ninterface CommandToken {\r\n  type: \"command\" | \"arg\" | \"flag\" | \"flagValue\";\r\n  value: string;\r\n  start: number;\r\n  end: number;\r\n}\r\n\r\n/**\r\n * Parser for ToolCommand strings.\r\n */\r\nexport class ToolCommandParser {\r\n  /**\r\n   * Parse a command string into structured parts.\r\n   * @param text The command string to parse\r\n   * @returns Parsed command, or undefined if invalid\r\n   */\r\n  static parse(text: string): ParsedToolCommand | undefined {\r\n    const trimmed = text.trim();\r\n    if (!trimmed) return undefined;\r\n\r\n    // Remove leading / if present\r\n    const commandText = trimmed.startsWith(\"/\") ? trimmed.slice(1) : trimmed;\r\n    if (!commandText) return undefined;\r\n\r\n    const tokens = this.tokenize(commandText);\r\n    if (tokens.length === 0) return undefined;\r\n\r\n    const commandName = tokens[0].value;\r\n    const args: string[] = [];\r\n    const flags: Record<string, string | boolean | string[]> = {};\r\n\r\n    let i = 1;\r\n    while (i < tokens.length) {\r\n      const token = tokens[i];\r\n\r\n      if (token.type === \"flag\") {\r\n        const flagName = token.value.replace(/^-+/, \"\");\r\n\r\n        // Check if next token is a value or another flag\r\n        if (i + 1 < tokens.length && tokens[i + 1].type === \"flagValue\") {\r\n          const valueToken = tokens[i + 1];\r\n          // Check for comma-separated values\r\n          if (valueToken.value.includes(\",\")) {\r\n            flags[flagName] = valueToken.value.split(\",\").map((v) => v.trim());\r\n          } else {\r\n            flags[flagName] = valueToken.value;\r\n          }\r\n          i += 2;\r\n        } else {\r\n          // Boolean flag\r\n          flags[flagName] = true;\r\n          i++;\r\n        }\r\n      } else if (token.type === \"arg\") {\r\n        args.push(token.value);\r\n        i++;\r\n      } else {\r\n        i++;\r\n      }\r\n    }\r\n\r\n    return {\r\n      commandName,\r\n      args,\r\n      flags,\r\n      originalText: text,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Tokenize a command string.\r\n   */\r\n  private static tokenize(text: string): CommandToken[] {\r\n    const tokens: CommandToken[] = [];\r\n    let i = 0;\r\n    let isFirstToken = true;\r\n    let expectingFlagValue = false;\r\n\r\n    while (i < text.length) {\r\n      // Skip whitespace\r\n      while (i < text.length && /\\s/.test(text[i])) {\r\n        i++;\r\n      }\r\n      if (i >= text.length) break;\r\n\r\n      const start = i;\r\n\r\n      // Check for quoted string\r\n      if (text[i] === '\"' || text[i] === \"'\") {\r\n        const quote = text[i];\r\n        i++;\r\n        while (i < text.length && text[i] !== quote) {\r\n          if (text[i] === \"\\\\\" && i + 1 < text.length) {\r\n            i += 2;\r\n          } else {\r\n            i++;\r\n          }\r\n        }\r\n        if (i < text.length) i++; // Skip closing quote\r\n\r\n        const value = text.slice(start + 1, i - 1).replace(/\\\\(.)/g, \"$1\");\r\n        tokens.push({\r\n          type: expectingFlagValue ? \"flagValue\" : isFirstToken ? \"command\" : \"arg\",\r\n          value,\r\n          start,\r\n          end: i,\r\n        });\r\n        expectingFlagValue = false;\r\n        isFirstToken = false;\r\n        continue;\r\n      }\r\n\r\n      // Check for flag\r\n      if (text[i] === \"-\") {\r\n        let flagEnd = i;\r\n        // Skip -- or -\r\n        while (flagEnd < text.length && text[flagEnd] === \"-\") {\r\n          flagEnd++;\r\n        }\r\n        // Read flag name\r\n        while (flagEnd < text.length && /[a-zA-Z0-9_-]/.test(text[flagEnd])) {\r\n          flagEnd++;\r\n        }\r\n\r\n        tokens.push({\r\n          type: \"flag\",\r\n          value: text.slice(i, flagEnd),\r\n          start,\r\n          end: flagEnd,\r\n        });\r\n        i = flagEnd;\r\n        expectingFlagValue = true;\r\n        isFirstToken = false;\r\n        continue;\r\n      }\r\n\r\n      // Regular token (command name, arg, or flag value)\r\n      while (i < text.length && !/\\s/.test(text[i])) {\r\n        i++;\r\n      }\r\n\r\n      const value = text.slice(start, i);\r\n      tokens.push({\r\n        type: expectingFlagValue ? \"flagValue\" : isFirstToken ? \"command\" : \"arg\",\r\n        value,\r\n        start,\r\n        end: i,\r\n      });\r\n      expectingFlagValue = false;\r\n      isFirstToken = false;\r\n    }\r\n\r\n    return tokens;\r\n  }\r\n\r\n  /**\r\n   * Get autocomplete suggestions for a partial command.\r\n   * @param text The partial command text\r\n   * @param cursorPos Cursor position in the text\r\n   * @param registry The command registry to search\r\n   * @param context Execution context\r\n   */\r\n  static async getCompletions(\r\n    text: string,\r\n    cursorPos: number,\r\n    registry: {\r\n      get: (name: string) => IToolCommand | undefined;\r\n      getCommandNames: (scope?: ToolCommandScope) => string[];\r\n      getAll: (scope?: ToolCommandScope) => IToolCommand[];\r\n    },\r\n    context: IToolCommandContext\r\n  ): Promise<string[]> {\r\n    const beforeCursor = text.slice(0, cursorPos);\r\n    const trimmed = beforeCursor.trim();\r\n\r\n    // Get available command names, filtering by scope and project availability\r\n    const getAvailableNames = (): string[] => {\r\n      const scope = context.scope as ToolCommandScope | undefined;\r\n      const all = registry.getAll(scope);\r\n      return all\r\n        .filter((c) => !c.metadata.requiresProject || context.project)\r\n        .map((c) => c.metadata.name);\r\n    };\r\n\r\n    // Handle empty or just /\r\n    if (!trimmed || trimmed === \"/\") {\r\n      return getAvailableNames().map((n) => \"/\" + n);\r\n    }\r\n\r\n    // Remove leading /\r\n    const commandText = trimmed.startsWith(\"/\") ? trimmed.slice(1) : trimmed;\r\n    const tokens = this.tokenize(commandText);\r\n\r\n    if (tokens.length === 0) {\r\n      return getAvailableNames().map((n) => \"/\" + n);\r\n    }\r\n\r\n    // Get current token at cursor\r\n    const lastToken = tokens[tokens.length - 1];\r\n    const isCompletingLastToken = cursorPos >= (trimmed.startsWith(\"/\") ? 1 : 0) + lastToken.start;\r\n\r\n    // If ending with a space, we're completing a new token (not the last one)\r\n    const isNewToken = beforeCursor.endsWith(\" \");\r\n\r\n    // If completing the command name (only one token AND not followed by a space)\r\n    if (tokens.length === 1 && isCompletingLastToken && !isNewToken) {\r\n      const partial = lastToken.value.toLowerCase();\r\n      return getAvailableNames()\r\n        .filter((n) => n.toLowerCase().startsWith(partial))\r\n        .map((n) => \"/\" + n);\r\n    }\r\n\r\n    // Get the command\r\n    const command = registry.get(tokens[0].value);\r\n    if (!command) {\r\n      return [];\r\n    }\r\n\r\n    // If completing a flag name\r\n    if (lastToken.type === \"flag\" && isCompletingLastToken && !isNewToken) {\r\n      const flagDefs = command.metadata.flags || [];\r\n      const partial = lastToken.value.replace(/^-+/, \"\").toLowerCase();\r\n      return flagDefs.filter((f) => f.name.toLowerCase().startsWith(partial)).map((f) => \"--\" + f.name);\r\n    }\r\n\r\n    // If we just typed a flag, suggest its values\r\n    if (lastToken.type === \"flag\" && isNewToken) {\r\n      const flagName = lastToken.value.replace(/^-+/, \"\");\r\n      const flagDef = command.metadata.flags?.find(\r\n        (f) => f.name.toLowerCase() === flagName.toLowerCase() || f.shortName === flagName\r\n      );\r\n      if (flagDef) {\r\n        if (flagDef.choices) {\r\n          return flagDef.choices;\r\n        }\r\n        if (flagDef.autocompleteProvider) {\r\n          return flagDef.autocompleteProvider(\"\", context);\r\n        }\r\n      }\r\n      return [];\r\n    }\r\n\r\n    // If completing a flag value\r\n    if (lastToken.type === \"flagValue\" && isCompletingLastToken) {\r\n      // Find the flag this value belongs to\r\n      const flagToken = tokens[tokens.length - 2];\r\n      if (flagToken?.type === \"flag\") {\r\n        const flagName = flagToken.value.replace(/^-+/, \"\");\r\n        const flagDef = command.metadata.flags?.find(\r\n          (f) => f.name.toLowerCase() === flagName.toLowerCase() || f.shortName === flagName\r\n        );\r\n        if (flagDef) {\r\n          if (flagDef.choices) {\r\n            return flagDef.choices.filter((c) => c.toLowerCase().startsWith(lastToken.value.toLowerCase()));\r\n          }\r\n          if (flagDef.autocompleteProvider) {\r\n            return flagDef.autocompleteProvider(lastToken.value, context);\r\n          }\r\n        }\r\n      }\r\n      return [];\r\n    }\r\n\r\n    // Completing a positional argument\r\n    const argTokens = tokens.filter((t) => t.type === \"arg\");\r\n    const argIndex = isNewToken ? argTokens.length : argTokens.length - 1;\r\n    const partial = isNewToken ? \"\" : lastToken.value;\r\n\r\n    // Use command's getCompletions if available\r\n    if (command.getCompletions) {\r\n      const argValues = argTokens.map((t) => t.value);\r\n      const completions = await command.getCompletions(context, argValues, partial, argIndex);\r\n      if (completions.length > 0) {\r\n        return completions;\r\n      }\r\n      // Fall through to argument metadata for hints\r\n    }\r\n\r\n    // Fall back to argument metadata\r\n    const argDef = command.metadata.arguments?.[argIndex];\r\n    if (argDef) {\r\n      if (argDef.choices) {\r\n        return argDef.choices.filter((c) => c.toLowerCase().startsWith(partial.toLowerCase()));\r\n      }\r\n      if (argDef.autocompleteProvider) {\r\n        return argDef.autocompleteProvider(partial, context);\r\n      }\r\n      // No specific completions \u2014 return a usage hint so the UI can show what's expected\r\n      if (!partial) {\r\n        return [`<${argDef.name}>`];\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  /**\r\n   * Format a command with arguments for display/execution.\r\n   */\r\n  static format(commandName: string, args: string[], flags: Record<string, string | boolean | string[]>): string {\r\n    const parts = [\"/\" + commandName];\r\n\r\n    for (const arg of args) {\r\n      parts.push(arg.includes(\" \") ? `\"${arg}\"` : arg);\r\n    }\r\n\r\n    for (const [key, value] of Object.entries(flags)) {\r\n      if (value === true) {\r\n        parts.push(`--${key}`);\r\n      } else if (Array.isArray(value)) {\r\n        parts.push(`--${key}`, value.join(\",\"));\r\n      } else if (value !== false) {\r\n        parts.push(`--${key}`, value.includes(\" \") ? `\"${value}\"` : value);\r\n      }\r\n    }\r\n\r\n    return parts.join(\" \");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommandRegistry - Central registry for all ToolCommands\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * This registry is the central hub for ToolCommand management:\r\n *\r\n * RESPONSIBILITIES:\r\n * 1. Hold all registered IToolCommand instances\r\n * 2. Provide lookup by command name or alias\r\n * 3. Execute commands with parsed arguments\r\n * 4. Provide autocomplete suggestions\r\n * 5. Filter commands by scope\r\n * 6. Generate help documentation\r\n *\r\n * SINGLETON PATTERN:\r\n * Use ToolCommandRegistry.instance to access the global registry.\r\n * Commands are registered at module load time.\r\n *\r\n * RELATED FILES:\r\n * - IToolCommand.ts: Command interface\r\n * - IToolCommandContext.ts: Execution context\r\n * - ToolCommandParser.ts: Command line parsing\r\n * - commands/: Individual command implementations\r\n */\r\n\r\nimport type { IToolCommand, IToolCommandResult } from \"./IToolCommand\";\r\nimport { ToolCommandScope } from \"./IToolCommand\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\nimport { ToolCommandParser } from \"./ToolCommandParser\";\r\n\r\n/**\r\n * Central registry for ToolCommands.\r\n */\r\nexport class ToolCommandRegistry {\r\n  private static _instance: ToolCommandRegistry | undefined;\r\n\r\n  private commands: Map<string, IToolCommand> = new Map();\r\n\r\n  /**\r\n   * Get the singleton instance.\r\n   */\r\n  static get instance(): ToolCommandRegistry {\r\n    if (!this._instance) {\r\n      this._instance = new ToolCommandRegistry();\r\n    }\r\n    return this._instance;\r\n  }\r\n\r\n  /**\r\n   * Register a ToolCommand.\r\n   * @param command The command to register\r\n   */\r\n  register(command: IToolCommand): void {\r\n    const { name, aliases } = command.metadata;\r\n\r\n    // Register by name (lowercase for case-insensitive lookup)\r\n    const lowerName = name.toLowerCase();\r\n    if (this.commands.has(lowerName)) {\r\n      throw new Error(`ToolCommand '${name}' is already registered`);\r\n    }\r\n    this.commands.set(lowerName, command);\r\n\r\n    // Register aliases\r\n    if (aliases) {\r\n      for (const alias of aliases) {\r\n        const lowerAlias = alias.toLowerCase();\r\n        if (this.commands.has(lowerAlias)) {\r\n          throw new Error(`ToolCommand alias '${alias}' conflicts with existing command`);\r\n        }\r\n        this.commands.set(lowerAlias, command);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Register multiple commands.\r\n   */\r\n  registerAll(commands: IToolCommand[]): void {\r\n    for (let i = 0; i < commands.length; i++) {\r\n      const command = commands[i];\r\n      if (!command) {\r\n        throw new Error(`ToolCommand at index ${i} is undefined or null (out of ${commands.length} commands)`);\r\n      }\r\n      this.register(command);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get a command by name or alias.\r\n   * @param name Command name or alias (case-insensitive)\r\n   */\r\n  get(name: string): IToolCommand | undefined {\r\n    return this.commands.get(name.toLowerCase());\r\n  }\r\n\r\n  /**\r\n   * Check if a command exists.\r\n   */\r\n  has(name: string): boolean {\r\n    return this.commands.has(name.toLowerCase());\r\n  }\r\n\r\n  /**\r\n   * Get all unique commands (excluding alias duplicates).\r\n   * Optionally filter by scope.\r\n   */\r\n  getAll(scope?: ToolCommandScope): IToolCommand[] {\r\n    const seen = new Set<IToolCommand>();\r\n    const result: IToolCommand[] = [];\r\n\r\n    for (const command of this.commands.values()) {\r\n      if (seen.has(command)) continue;\r\n      seen.add(command);\r\n\r\n      // Filter by scope if specified\r\n      if (scope) {\r\n        const scopes = command.metadata.scopes;\r\n        // If no scopes defined, command is available everywhere\r\n        if (scopes && !scopes.includes(scope)) {\r\n          continue;\r\n        }\r\n      }\r\n\r\n      result.push(command);\r\n    }\r\n\r\n    // Sort by category then name\r\n    result.sort((a, b) => {\r\n      const catCmp = a.metadata.category.localeCompare(b.metadata.category);\r\n      if (catCmp !== 0) return catCmp;\r\n      return a.metadata.name.localeCompare(b.metadata.name);\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Get all command names (for autocomplete).\r\n   */\r\n  getCommandNames(scope?: ToolCommandScope): string[] {\r\n    return this.getAll(scope).map((c) => c.metadata.name);\r\n  }\r\n\r\n  /**\r\n   * Execute a command from a command string.\r\n   * @param commandText Full command text (e.g., \"/create template myproject --traits mob\")\r\n   * @param context Execution context\r\n   * @returns Command result, or undefined if command not found\r\n   */\r\n  async execute(commandText: string, context: IToolCommandContext): Promise<IToolCommandResult | undefined> {\r\n    const parsed = ToolCommandParser.parse(commandText);\r\n\r\n    if (!parsed) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.executeCommand(parsed.commandName, parsed.args, parsed.flags, context);\r\n  }\r\n\r\n  /**\r\n   * Execute a command with pre-parsed arguments.\r\n   */\r\n  async executeCommand(\r\n    name: string,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>,\r\n    context: IToolCommandContext\r\n  ): Promise<IToolCommandResult | undefined> {\r\n    const command = this.get(name);\r\n\r\n    if (!command) {\r\n      return undefined;\r\n    }\r\n\r\n    // Check scope restrictions\r\n    const scopes = command.metadata.scopes;\r\n    if (scopes && !scopes.includes(context.scope as ToolCommandScope)) {\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"SCOPE_RESTRICTED\",\r\n          message: `Command '${name}' is not available in ${context.scope} context`,\r\n        },\r\n      };\r\n    }\r\n\r\n    // Check project requirement\r\n    if (command.metadata.requiresProject && !context.project) {\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"PROJECT_REQUIRED\",\r\n          message: `Command '${name}' requires an active project`,\r\n        },\r\n      };\r\n    }\r\n\r\n    // Check Minecraft requirement\r\n    if (command.metadata.requiresMinecraft && !context.minecraft) {\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"MINECRAFT_REQUIRED\",\r\n          message: `Command '${name}' requires an active Minecraft server connection`,\r\n        },\r\n      };\r\n    }\r\n\r\n    try {\r\n      return await command.execute(context, args, flags);\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return {\r\n        success: false,\r\n        error: {\r\n          code: \"EXECUTION_ERROR\",\r\n          message: `Error executing '${name}': ${message}`,\r\n        },\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get autocomplete suggestions for a partial command.\r\n   * @param text The partial command text being typed\r\n   * @param cursorPos The cursor position in the text\r\n   * @param context Execution context\r\n   */\r\n  async getCompletions(text: string, cursorPos: number, context: IToolCommandContext): Promise<string[]> {\r\n    return ToolCommandParser.getCompletions(text, cursorPos, this, context);\r\n  }\r\n\r\n  /**\r\n   * Clear all registered commands (for testing).\r\n   */\r\n  clear(): void {\r\n    this.commands.clear();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport ILocalizable from \"../core/ILocalizable\";\r\n\r\nexport enum GalleryItemType {\r\n  project = 0,\r\n  chunk = 1,\r\n  blockType = 2,\r\n  codeSample = 3,\r\n  entityType = 4,\r\n  editorCodeSample = 5,\r\n  editorProject = 6,\r\n  itemType = 7,\r\n  actionSet = 8,\r\n  modelDesign = 9, // Model design template (IMcpModelDesign JSON)\r\n  spawnLootRecipes = 21,\r\n  worldGen = 22,\r\n  visuals = 23,\r\n  entityItemBlockSingleFiles = 41,\r\n  worldGenSingleFiles = 42,\r\n  visualSingleFiles = 43,\r\n  catalogSingleFiles = 44,\r\n}\r\n\r\nexport interface LogoLocation {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  imageHeight: number;\r\n  imageWidth: number;\r\n}\r\n\r\nexport default interface IGalleryItem extends ILocalizable {\r\n  gitHubOwner: string;\r\n  gitHubRepoName: string;\r\n  gitHubFolder?: string;\r\n  gitHubBranch?: string;\r\n  thumbnailImage: string;\r\n  logoImage?: string;\r\n  localLogo?: string;\r\n  snapshotImage?: string;\r\n  sampleSet?: string;\r\n  topics?: string[];\r\n  logoLocation?: LogoLocation;\r\n  title: string;\r\n  targetType?: ProjectItemType;\r\n  description: string;\r\n  targetRuntimeIdentifier?: string;\r\n  containsStructures?: boolean;\r\n  containsGameTests?: boolean;\r\n  itemImages?: string[];\r\n  creationData?: object | any;\r\n  codeLineStart?: number;\r\n  fileList?: string[];\r\n  tags?: string[];\r\n  type: GalleryItemType;\r\n  nameReplacers?: string[];\r\n  id: string;\r\n  /** Difficulty level shown as a badge on template cards. */\r\n  difficulty?: \"beginner\" | \"intermediate\" | \"advanced\";\r\n  /** When true, this gallery item was synthesized from an existing ProjectItem, not from a gallery catalog. */\r\n  isProjectItem?: boolean;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * AutocompleteProviders - Built-in autocomplete providers for ToolCommands\r\n *\r\n * These providers supply suggestions for command arguments and flags.\r\n * They query CreatorTools, Project, and content wizard data to provide\r\n * context-aware completions.\r\n */\r\n\r\nimport type { AutocompleteProvider } from \"./IToolCommandArgument\";\r\nimport type { IToolCommandContext } from \"./IToolCommandContext\";\r\nimport { GalleryItemType } from \"../IGalleryItem\";\r\n\r\n// ============================================================================\r\n// TRAIT DEFINITIONS (from ContentWizard)\r\n// ============================================================================\r\n// MAINTENANCE: These trait lists are manually maintained and must be updated\r\n// when new traits are added to the ContentWizard / ContentIndexManager system.\r\n// Cross-reference with ContentWizard trait definitions to keep in sync.\r\n// ============================================================================\r\n\r\n/**\r\n * Entity traits available in the content wizard.\r\n */\r\nexport const ENTITY_TRAITS = [\r\n  \"humanoid\",\r\n  \"quadruped\",\r\n  \"flying\",\r\n  \"aquatic\",\r\n  \"hostile\",\r\n  \"passive\",\r\n  \"neutral\",\r\n  \"melee_attacker\",\r\n  \"ranged_attacker\",\r\n  \"exploder\",\r\n  \"tameable\",\r\n  \"rideable\",\r\n  \"breedable\",\r\n  \"undead\",\r\n  \"wanders\",\r\n  \"teleporter\",\r\n];\r\n\r\n/**\r\n * Block traits available in the content wizard.\r\n */\r\nexport const BLOCK_TRAITS = [\r\n  \"solid\",\r\n  \"transparent\",\r\n  \"slab\",\r\n  \"stairs\",\r\n  \"fence\",\r\n  \"door\",\r\n  \"container\",\r\n  \"light_source\",\r\n  \"gravity\",\r\n  \"redstone_signal\",\r\n];\r\n\r\n/**\r\n * Item traits available in the content wizard.\r\n */\r\nexport const ITEM_TRAITS = [\r\n  \"sword\",\r\n  \"pickaxe\",\r\n  \"axe\",\r\n  \"shovel\",\r\n  \"food\",\r\n  \"armor_helmet\",\r\n  \"armor_chestplate\",\r\n  \"armor_leggings\",\r\n  \"armor_boots\",\r\n  \"throwable\",\r\n];\r\n\r\n/**\r\n * All traits combined for general trait completion.\r\n */\r\nexport const ALL_TRAITS = [...ENTITY_TRAITS, ...BLOCK_TRAITS, ...ITEM_TRAITS];\r\n\r\n// ============================================================================\r\n// CONTENT TYPE NAMES\r\n// ============================================================================\r\n// MAINTENANCE: This list must be updated when new content types are added.\r\n// Cross-reference with GalleryItemType enum and CONTENT_TYPE_TO_GALLERY mapping.\r\n// ============================================================================\r\n\r\n/**\r\n * Content types that can be added via the /add command.\r\n */\r\nexport const CONTENT_TYPES = [\r\n  \"entity\",\r\n  \"block\",\r\n  \"item\",\r\n  \"script\",\r\n  \"function\",\r\n  \"spawn_rule\",\r\n  \"loot_table\",\r\n  \"trade_table\",\r\n  \"recipe\",\r\n  \"biome\",\r\n  \"feature\",\r\n  \"feature_rule\",\r\n  \"structure\",\r\n  \"animation\",\r\n  \"animation_controller\",\r\n  \"render_controller\",\r\n  \"model\",\r\n  \"texture\",\r\n  \"particle\",\r\n  \"fog\",\r\n  \"sound\",\r\n];\r\n\r\n/**\r\n * Map content type names to GalleryItemType for lookup.\r\n */\r\nexport const CONTENT_TYPE_TO_GALLERY: Record<string, GalleryItemType> = {\r\n  entity: GalleryItemType.entityType,\r\n  block: GalleryItemType.blockType,\r\n  item: GalleryItemType.itemType,\r\n  script: GalleryItemType.codeSample,\r\n  spawn_rule: GalleryItemType.spawnLootRecipes,\r\n  loot_table: GalleryItemType.spawnLootRecipes,\r\n  trade_table: GalleryItemType.spawnLootRecipes,\r\n  recipe: GalleryItemType.spawnLootRecipes,\r\n  biome: GalleryItemType.worldGen,\r\n  feature: GalleryItemType.worldGen,\r\n  feature_rule: GalleryItemType.worldGen,\r\n  structure: GalleryItemType.chunk,\r\n  animation: GalleryItemType.visuals,\r\n  animation_controller: GalleryItemType.visuals,\r\n  render_controller: GalleryItemType.visuals,\r\n  model: GalleryItemType.visuals,\r\n  texture: GalleryItemType.visuals,\r\n  particle: GalleryItemType.visuals,\r\n  fog: GalleryItemType.visuals,\r\n  sound: GalleryItemType.visuals,\r\n};\r\n\r\n// ============================================================================\r\n// PROJECT TEMPLATE NAMES\r\n// ============================================================================\r\n\r\n/**\r\n * Common project template identifiers.\r\n */\r\nexport const PROJECT_TEMPLATES = [\r\n  \"addonstarter\",\r\n  \"tsstarter\",\r\n  \"addonfull\",\r\n  \"scriptbox\",\r\n  \"dlstarter\",\r\n  \"editorscriptbox\",\r\n  \"editorbasics\",\r\n];\r\n\r\n// ============================================================================\r\n// AUTOCOMPLETE PROVIDER IMPLEMENTATIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Provides autocomplete for content type names (entity, block, item, etc.)\r\n */\r\nexport const contentTypeProvider: AutocompleteProvider = (partial: string, _context: IToolCommandContext) => {\r\n  const lower = partial.toLowerCase();\r\n  return CONTENT_TYPES.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for traits based on the content type being created.\r\n * @param contentType The type of content (entity, block, item)\r\n */\r\nexport function createTraitProvider(contentType?: string): AutocompleteProvider {\r\n  return (partial: string, _context: IToolCommandContext) => {\r\n    const lower = partial.toLowerCase();\r\n\r\n    let traits: string[];\r\n    switch (contentType?.toLowerCase()) {\r\n      case \"entity\":\r\n        traits = ENTITY_TRAITS;\r\n        break;\r\n      case \"block\":\r\n        traits = BLOCK_TRAITS;\r\n        break;\r\n      case \"item\":\r\n        traits = ITEM_TRAITS;\r\n        break;\r\n      default:\r\n        traits = ALL_TRAITS;\r\n    }\r\n\r\n    return traits.filter((t) => t.startsWith(lower));\r\n  };\r\n}\r\n\r\n/**\r\n * Provides autocomplete for all traits (entity, block, and item).\r\n */\r\nexport const allTraitsProvider: AutocompleteProvider = (partial: string, _context: IToolCommandContext) => {\r\n  const lower = partial.toLowerCase();\r\n  return ALL_TRAITS.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for project templates.\r\n */\r\nexport const projectTemplateProvider: AutocompleteProvider = async (partial: string, context: IToolCommandContext) => {\r\n  const lower = partial.toLowerCase();\r\n\r\n  if (!context.creatorTools) {\r\n    return PROJECT_TEMPLATES.filter((t) => t.startsWith(lower));\r\n  }\r\n\r\n  // Try to get templates from gallery\r\n  await context.creatorTools.loadGallery();\r\n  const projects = context.creatorTools.getGalleryProjectByType(GalleryItemType.project) || [];\r\n  const editorProjects = context.creatorTools.getGalleryProjectByType(GalleryItemType.editorProject) || [];\r\n\r\n  const allProjects = [...projects, ...editorProjects];\r\n\r\n  if (allProjects.length > 0) {\r\n    return allProjects.map((p) => p.id).filter((id) => id.toLowerCase().startsWith(lower));\r\n  }\r\n\r\n  // Fall back to static list\r\n  return PROJECT_TEMPLATES.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for gallery items of a specific type.\r\n * @param itemType The gallery item type to filter by\r\n */\r\nexport function createGalleryItemProvider(itemType?: GalleryItemType): AutocompleteProvider {\r\n  return async (partial: string, context: IToolCommandContext) => {\r\n    const lower = partial.toLowerCase();\r\n\r\n    if (!context.creatorTools) {\r\n      return [];\r\n    }\r\n\r\n    await context.creatorTools.loadGallery();\r\n\r\n    let items;\r\n    if (itemType !== undefined) {\r\n      items = context.creatorTools.getGalleryProjectByType(itemType) || [];\r\n    } else {\r\n      // Return all gallery items\r\n      const gallery = context.creatorTools.gallery;\r\n      items = gallery?.items || [];\r\n    }\r\n\r\n    return items.map((item) => item.id).filter((id) => id.toLowerCase().startsWith(lower));\r\n  };\r\n}\r\n\r\n/**\r\n * Provides autocomplete for project items (files in the current project).\r\n */\r\n/**\r\n * Paths excluded from remove autocomplete to prevent accidental deletion of\r\n * config files, dotfiles, and other non-content project infrastructure.\r\n */\r\nconst REMOVE_EXCLUDED_PATTERNS = [\r\n  /(?:^|\\/)\\./, // dotfiles and dot-directories (e.g., .vscode/, .env)\r\n  /(?:^|\\/)package\\.json$/i,\r\n  /(?:^|\\/)package-lock\\.json$/i,\r\n  /(?:^|\\/)tsconfig\\.json$/i,\r\n  /\\.config\\./i, // e.g., vite.config.ts, jest.config.js\r\n  /(?:^|\\/)\\.env/i, // .env, .env.local, etc.\r\n];\r\n\r\nfunction isExcludedFromRemove(path: string): boolean {\r\n  return REMOVE_EXCLUDED_PATTERNS.some((pattern) => pattern.test(path));\r\n}\r\n\r\nexport const projectItemProvider: AutocompleteProvider = (partial: string, context: IToolCommandContext) => {\r\n  if (!context.project) {\r\n    return [];\r\n  }\r\n\r\n  const lower = partial.toLowerCase();\r\n  const items = context.project.items || [];\r\n\r\n  return items\r\n    .filter((item) => item.projectPath)\r\n    .map((item) => item.projectPath!)\r\n    .filter((path) => path.toLowerCase().includes(lower) && !isExcludedFromRemove(path));\r\n};\r\n\r\n/**\r\n * Provides autocomplete for project item names (display names).\r\n */\r\nexport const projectItemNameProvider: AutocompleteProvider = (partial: string, context: IToolCommandContext) => {\r\n  if (!context.project) {\r\n    return [];\r\n  }\r\n\r\n  const lower = partial.toLowerCase();\r\n  const items = context.project.items || [];\r\n\r\n  return items\r\n    .filter((item) => item.name)\r\n    .map((item) => item.name)\r\n    .filter((name) => name.toLowerCase().includes(lower));\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * HelpCommand - Unified help for ToolCommands and Bedrock commands\r\n *\r\n * This is the ONE command that overrides Bedrock's built-in /help.\r\n * It provides unified documentation for both MCT ToolCommands and\r\n * Bedrock server commands.\r\n */\r\n\r\nimport type { IToolCommand, IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { ToolCommandRegistry } from \"../ToolCommandRegistry\";\r\n\r\n// Bedrock built-in commands for reference in help.\r\n// MAINTENANCE: This list is manually maintained and should be updated when\r\n// new slash commands are added to Minecraft Bedrock Edition.\r\n// Reference: https://learn.microsoft.com/en-us/minecraft/creator/commands/\r\nconst BEDROCK_COMMANDS = [\r\n  \"allowlist\",\r\n  \"alwaysday\",\r\n  \"camera\",\r\n  \"camerashake\",\r\n  \"clear\",\r\n  \"clearspawnpoint\",\r\n  \"clone\",\r\n  \"damage\",\r\n  \"daylock\",\r\n  \"deop\",\r\n  \"dialogue\",\r\n  \"difficulty\",\r\n  \"effect\",\r\n  \"enchant\",\r\n  \"event\",\r\n  \"execute\",\r\n  \"fill\",\r\n  \"fog\",\r\n  \"function\",\r\n  \"gamemode\",\r\n  \"gamerule\",\r\n  \"give\",\r\n  \"hud\",\r\n  \"inputpermission\",\r\n  \"kick\",\r\n  \"kill\",\r\n  \"list\",\r\n  \"locate\",\r\n  \"loot\",\r\n  \"me\",\r\n  \"mobevent\",\r\n  \"music\",\r\n  \"op\",\r\n  \"ops\",\r\n  \"particle\",\r\n  \"permission\",\r\n  \"place\",\r\n  \"playanimation\",\r\n  \"playsound\",\r\n  \"recipe\",\r\n  \"reload\",\r\n  \"replaceitem\",\r\n  \"ride\",\r\n  \"say\",\r\n  \"schedule\",\r\n  \"scoreboard\",\r\n  \"script\",\r\n  \"scriptevent\",\r\n  \"setblock\",\r\n  \"setmaxplayers\",\r\n  \"setworldspawn\",\r\n  \"spawnpoint\",\r\n  \"spreadplayers\",\r\n  \"stop\",\r\n  \"stopsound\",\r\n  \"structure\",\r\n  \"summon\",\r\n  \"tag\",\r\n  \"teleport\",\r\n  \"tell\",\r\n  \"tellraw\",\r\n  \"testfor\",\r\n  \"testforblock\",\r\n  \"testforblocks\",\r\n  \"tickingarea\",\r\n  \"time\",\r\n  \"title\",\r\n  \"titleraw\",\r\n  \"toggledownfall\",\r\n  \"tp\",\r\n  \"transfer\",\r\n  \"volumearea\",\r\n  \"weather\",\r\n  \"wsserver\",\r\n  \"xp\",\r\n];\r\n\r\nexport class HelpCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"help\",\r\n    description: \"Show help for ToolCommands and Bedrock server commands\",\r\n    aliases: [\"?\"],\r\n    category: \"General\",\r\n    arguments: [\r\n      {\r\n        name: \"command\",\r\n        description: \"Command name to get help for (optional)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n    ],\r\n    examples: [\"/help\", \"/help create\", \"/help add\", \"/help summon\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const commandName = args[0];\r\n\r\n    if (commandName) {\r\n      return this.showCommandHelp(context, commandName);\r\n    }\r\n\r\n    return this.showAllHelp(context);\r\n  }\r\n\r\n  private showAllHelp(context: IToolCommandContext): IToolCommandResult {\r\n    const output = context.output;\r\n    const registry = ToolCommandRegistry.instance;\r\n\r\n    output.info(\"=== Minecraft Creator Tools Commands ===\");\r\n\r\n    // Group commands by category\r\n    const commands = registry.getAll();\r\n    const byCategory = new Map<string, IToolCommand[]>();\r\n\r\n    for (const cmd of commands) {\r\n      const category = cmd.metadata.category;\r\n      if (!byCategory.has(category)) {\r\n        byCategory.set(category, []);\r\n      }\r\n      byCategory.get(category)!.push(cmd);\r\n    }\r\n\r\n    // Output by category\r\n    for (const [category, cmds] of byCategory) {\r\n      output.info(`\\n${category}:`);\r\n      for (const cmd of cmds) {\r\n        const aliases = cmd.metadata.aliases ? ` (${cmd.metadata.aliases.join(\", \")})` : \"\";\r\n        output.info(`  /${cmd.metadata.name}${aliases} - ${cmd.metadata.description}`);\r\n      }\r\n    }\r\n\r\n    // Output Bedrock commands\r\n    output.info(\"\\n=== Bedrock Server Commands ===\\n\");\r\n    output.info(\"The following Minecraft commands are passed through to the server:\");\r\n    output.info(`  ${BEDROCK_COMMANDS.slice(0, 15).join(\", \")}, ...`);\r\n    output.info(\"  (Use /help <command> for details on specific Bedrock commands)\\n\");\r\n\r\n    output.info(\"Use /help <command> for detailed help on a specific command.\");\r\n\r\n    return this.success(\"Help displayed\");\r\n  }\r\n\r\n  private showCommandHelp(context: IToolCommandContext, commandName: string): IToolCommandResult {\r\n    const output = context.output;\r\n    const registry = ToolCommandRegistry.instance;\r\n\r\n    // Check if it's a ToolCommand\r\n    const command = registry.get(commandName);\r\n    if (command) {\r\n      return this.showToolCommandHelp(context, command);\r\n    }\r\n\r\n    // Check if it's a Bedrock command\r\n    if (BEDROCK_COMMANDS.includes(commandName.toLowerCase())) {\r\n      output.info(`/${commandName} is a Bedrock server command.`);\r\n      output.info(\"This command is passed through to the Minecraft server.\");\r\n      output.info(\"Run this command in-game or consult the Minecraft documentation for details.\");\r\n      return this.success(`Bedrock command: ${commandName}`);\r\n    }\r\n\r\n    return this.error(\"COMMAND_NOT_FOUND\", `Unknown command: ${commandName}`);\r\n  }\r\n\r\n  private showToolCommandHelp(context: IToolCommandContext, command: IToolCommand): IToolCommandResult {\r\n    const output = context.output;\r\n    const meta = command.metadata;\r\n\r\n    output.info(`=== /${meta.name} ===`);\r\n    output.info(meta.description);\r\n\r\n    if (meta.aliases && meta.aliases.length > 0) {\r\n      output.info(`\\nAliases: ${meta.aliases.map((a) => \"/\" + a).join(\", \")}`);\r\n    }\r\n\r\n    // Usage line\r\n    let usage = `/${meta.name}`;\r\n    if (meta.arguments) {\r\n      for (const arg of meta.arguments) {\r\n        usage += arg.required ? ` <${arg.name}>` : ` [${arg.name}]`;\r\n      }\r\n    }\r\n    if (meta.flags) {\r\n      for (const flag of meta.flags) {\r\n        const flagStr = flag.isBoolean ? `--${flag.name}` : `--${flag.name} <value>`;\r\n        usage += flag.required ? ` ${flagStr}` : ` [${flagStr}]`;\r\n      }\r\n    }\r\n    output.info(`\\nUsage: ${usage}`);\r\n\r\n    // Arguments\r\n    if (meta.arguments && meta.arguments.length > 0) {\r\n      output.info(\"\\nArguments:\");\r\n      for (const arg of meta.arguments) {\r\n        const required = arg.required ? \"(required)\" : \"(optional)\";\r\n        let line = `  ${arg.name} ${required} - ${arg.description}`;\r\n        if (arg.defaultValue) {\r\n          line += ` [default: ${arg.defaultValue}]`;\r\n        }\r\n        if (arg.choices) {\r\n          line += ` [choices: ${arg.choices.join(\", \")}]`;\r\n        }\r\n        output.info(line);\r\n      }\r\n    }\r\n\r\n    // Flags\r\n    if (meta.flags && meta.flags.length > 0) {\r\n      output.info(\"\\nFlags:\");\r\n      for (const flag of meta.flags) {\r\n        const shortName = flag.shortName ? `, -${flag.shortName}` : \"\";\r\n        let line = `  --${flag.name}${shortName} - ${flag.description}`;\r\n        if (flag.defaultValue !== undefined) {\r\n          line += ` [default: ${flag.defaultValue}]`;\r\n        }\r\n        if (flag.choices) {\r\n          line += ` [choices: ${flag.choices.join(\", \")}]`;\r\n        }\r\n        output.info(line);\r\n      }\r\n    }\r\n\r\n    // Examples\r\n    if (meta.examples && meta.examples.length > 0) {\r\n      output.info(\"\\nExamples:\");\r\n      for (const example of meta.examples) {\r\n        output.info(`  ${example}`);\r\n      }\r\n    }\r\n\r\n    // Requirements\r\n    const reqs: string[] = [];\r\n    if (meta.requiresProject) reqs.push(\"project\");\r\n    if (meta.requiresMinecraft) reqs.push(\"Minecraft server\");\r\n    if (reqs.length > 0) {\r\n      output.info(`\\nRequires: ${reqs.join(\", \")}`);\r\n    }\r\n\r\n    return this.success(`Help for ${meta.name}`);\r\n  }\r\n\r\n  /**\r\n   * Override getCompletions to provide command name suggestions.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex !== 0) return [];\r\n\r\n    const lower = partialArg.toLowerCase();\r\n    const registry = ToolCommandRegistry.instance;\r\n\r\n    // Combine ToolCommand names with Bedrock commands\r\n    const toolCommands = registry.getCommandNames();\r\n    const allCommands = [...toolCommands, ...BEDROCK_COMMANDS];\r\n\r\n    return allCommands.filter((name) => name.toLowerCase().startsWith(lower));\r\n  }\r\n}\r\n\r\nexport const helpCommand = new HelpCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport FileBase from \"../storage/FileBase\";\r\nimport GitHubFolder from \"./GitHubFolder\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport GitHubStorage from \"./GitHubStorage\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport axios from \"axios\";\r\nimport Log from \"../core/Log\";\r\n\r\n// import { Endpoints } from '@octokit/types';\r\n// type getContentReposResponse = Endpoints[\"GET /repos/{owner}/{repo}/contents/{path}\"][\"response\"];\r\n\r\nexport default class GitHubFile extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: GitHubFolder;\r\n\r\n  public sha: string | undefined;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    return this.lastLoadedOrSaved !== null;\r\n  }\r\n\r\n  get parentFolder(): GitHubFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentFolder.fullPath;\r\n\r\n    if (!path.endsWith(GitHubStorage.slashFolderDelimiter)) {\r\n      path += GitHubStorage.slashFolderDelimiter;\r\n    }\r\n\r\n    path += this._name;\r\n\r\n    return path;\r\n  }\r\n\r\n  constructor(parentFolder: GitHubFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for GitHub storage\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    if (force || !this.lastLoadedOrSaved) {\r\n      this._content = null;\r\n\r\n      const storage = this._parentFolder.storage;\r\n\r\n      // on web sources, use GH APIs to retrieve content because that should work from a web/CORS/permissions perspective to retrieve binary files\r\n      // on non-web sources, just retrieve the binary directly from raw.githubusercontent.com\r\n      if (CreatorToolsHost.isWeb) {\r\n        const octo = storage.manager.octokit;\r\n\r\n        let fullPathMinusSlash = this.fullPath;\r\n\r\n        if (fullPathMinusSlash.startsWith(\"/\")) {\r\n          fullPathMinusSlash = fullPathMinusSlash.substring(1, fullPathMinusSlash.length);\r\n        }\r\n\r\n        let file = undefined;\r\n\r\n        try {\r\n          file = await octo.rest.repos.getContent({\r\n            owner: storage.ownerName,\r\n            repo: storage.repoName,\r\n            ref: storage.branch,\r\n            path: fullPathMinusSlash,\r\n          });\r\n        } catch (e: any) {\r\n          if (e.name && e.name === \"HttpError\" && e.message.indexOf(\"rate limit\") >= 0) {\r\n            throw new Error(e.message);\r\n          } else {\r\n            Log.debugAlert(\"Could not get content for GitHub file: '\" + e.toString() + \"'\");\r\n          }\r\n        }\r\n\r\n        if (file) {\r\n          const fileData = file.data as {\r\n            encoding?: string;\r\n            content?: string;\r\n          };\r\n\r\n          if (fileData.content !== undefined && fileData.encoding !== undefined) {\r\n            if (fileData.encoding === \"base64\") {\r\n              let contentA = fileData.content;\r\n\r\n              if (contentA && typeof contentA === \"string\") {\r\n                contentA = contentA.replace(/\\n/gi, \"\");\r\n              }\r\n\r\n              this._content = new Uint8Array(Utilities.base64ToArrayBuffer(contentA));\r\n\r\n              const preferredEncoding = StorageUtilities.getEncodingByFileName(this.name);\r\n\r\n              if (preferredEncoding === EncodingType.Utf8String) {\r\n                const result = Utilities.readStringUTF8(new DataView(this._content.buffer), 0, this._content.length);\r\n\r\n                this._content = result.str;\r\n              }\r\n            } else {\r\n              this._content = fileData.content;\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        this._content = null;\r\n\r\n        /*      if (this.fullPath.startsWith(\"/\")) {\r\n        path = this.fullPath.substring(1, this.fullPath.length);\r\n      }*/\r\n\r\n        const ghs = this._parentFolder.storage as GitHubStorage;\r\n        const path =\r\n          \"https://raw.githubusercontent.com/\" +\r\n          ghs.ownerName +\r\n          \"/\" +\r\n          ghs.repoName +\r\n          \"/\" +\r\n          (ghs.branch ? ghs.branch : \"main\") +\r\n          Utilities.ensureStartsWithSlash(this.fullPath);\r\n\r\n        if (StorageUtilities.getEncodingByFileName(this.name) === EncodingType.ByteBuffer) {\r\n          let response = undefined;\r\n\r\n          try {\r\n            response = await axios.get(path, {\r\n              responseType: \"arraybuffer\",\r\n              headers: {},\r\n            });\r\n          } catch (e: any) {\r\n            Log.error(\"Could not retrieve file '\" + this.fullPath + \"' from '\" + path + \"' - \" + e.toString());\r\n            this.lastLoadedOrSaved = new Date();\r\n            return this.lastLoadedOrSaved;\r\n          }\r\n\r\n          this._content = new Uint8Array(response.data);\r\n        } else {\r\n          let response = undefined;\r\n\r\n          try {\r\n            response = await axios.get(path, {\r\n              headers: {},\r\n            });\r\n          } catch (e: any) {\r\n            Log.error(\"Could not retrieve file '\" + this.fullPath + \"' - \" + e.toString(), path);\r\n\r\n            this.lastLoadedOrSaved = new Date();\r\n            return this.lastLoadedOrSaved;\r\n          }\r\n\r\n          let result = response.data;\r\n\r\n          if (typeof result === \"object\") {\r\n            try {\r\n              result = JSON.stringify(result, null, 2);\r\n            } catch (e) {\r\n              Log.fail(\"Could not convert file to JSON\");\r\n            }\r\n          }\r\n\r\n          if (response.status !== 200) {\r\n            Log.fail(\"Could not retrieve file from '\" + path + \"' - response code is \" + response.status);\r\n            Log.verbose(\"Could not retrieve file from '\" + path + \"' - response code is \" + response.status);\r\n          }\r\n\r\n          if (result === null || result === \"null\") {\r\n            Log.fail(\"Could not retrieve file from '\" + path + \"' - result is null.\");\r\n            Log.verbose(\"Could not retrieve file from '\" + path + \"' - result is null.\");\r\n          }\r\n\r\n          this._content = result;\r\n        }\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IFile from \"../storage/IFile\";\r\nimport GitHubFile from \"./GitHubFile\";\r\nimport GitHubStorage from \"./GitHubStorage\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport FolderBase from \"../storage/FolderBase\";\r\nimport { Endpoints } from \"@octokit/types\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\ntype getContentReposResponse = Endpoints[\"GET /repos/{owner}/{repo}/contents/{path}\"][\"response\"];\r\n\r\nexport default class GitHubFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _parentPath: string;\r\n\r\n  public sha?: string;\r\n\r\n  folders: { [name: string]: GitHubFolder | undefined };\r\n  files: { [name: string]: GitHubFile | undefined };\r\n\r\n  private _storage: GitHubStorage;\r\n  private _parentFolder: GitHubFolder | null;\r\n\r\n  get storage(): GitHubStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): GitHubFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentPath;\r\n\r\n    if (!path.endsWith(GitHubStorage.slashFolderDelimiter)) {\r\n      path += GitHubStorage.slashFolderDelimiter;\r\n    }\r\n\r\n    path += this.name;\r\n\r\n    return path;\r\n  }\r\n\r\n  constructor(storage: GitHubStorage, parentFolder: GitHubFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._parentPath = parentPath;\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists() {\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for GitHub storage\r\n  }\r\n\r\n  ensureFile(name: string): GitHubFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new GitHubFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  ensureFolder(name: string): GitHubFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new GitHubFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    throw new Error(\"Deletion of files not supported\");\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    throw new Error(\"Creation of files not supported\");\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    const repos = this.storage.manager.octokit.rest.repos;\r\n    let pathMinusSlash = this.fullPath;\r\n\r\n    if (pathMinusSlash === \"/\") {\r\n      pathMinusSlash = \"\";\r\n    } else if (!pathMinusSlash.startsWith(\"/\")) {\r\n      pathMinusSlash = \"/\" + pathMinusSlash;\r\n    }\r\n\r\n    if (pathMinusSlash.endsWith(\"/\")) {\r\n      pathMinusSlash = pathMinusSlash.substring(0, pathMinusSlash.length - 1);\r\n    }\r\n\r\n    // Log.debug(\"Loading GH folder from '\" + pathMinusSlash + \"'\");\r\n\r\n    const options = {\r\n      owner: this.storage.ownerName,\r\n      repo: this.storage.repoName,\r\n      path: pathMinusSlash,\r\n    };\r\n\r\n    let contentListing = undefined;\r\n\r\n    try {\r\n      contentListing = await repos.getContent(options);\r\n    } catch (e) {\r\n      Log.debug(\"Error retrieving repo information: \" + this.storage.ownerName + \" \" + this.storage.repoName + \" \" + e);\r\n    }\r\n\r\n    if (contentListing === undefined) {\r\n      Log.debug(\"No data retrieved from repo: \" + this.storage.ownerName + \" \" + this.storage.repoName);\r\n\r\n      this.updateLastLoadedOrSaved();\r\n\r\n      return this.lastLoadedOrSaved as Date;\r\n    }\r\n\r\n    const response: getContentReposResponse = contentListing;\r\n\r\n    const fileObjects = response.data as {\r\n      type: string;\r\n      size: number;\r\n      name: string;\r\n      path: string;\r\n      content?: string | undefined;\r\n      sha: string;\r\n      url: string;\r\n      git_url: string | null;\r\n      html_url: string | null;\r\n      download_url: string | null;\r\n      //            _links: {};\r\n    }[];\r\n\r\n    // Log.debug(\"Retrieved '\" + fileObjects.length + \"' GitHub objects.\");\r\n\r\n    for (const i in fileObjects) {\r\n      const fso = fileObjects[i];\r\n\r\n      if (fso.type === \"dir\") {\r\n        const childFolder = this.ensureFolder(fso.name);\r\n        childFolder.sha = fso.sha;\r\n      } else if (fso.type === \"file\") {\r\n        if (StorageUtilities.isUsableFile(fso.name)) {\r\n          const childFile = this.ensureFile(fso.name);\r\n          childFile.sha = fso.sha;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport GitHubFolder from \"./GitHubFolder\";\r\nimport StorageBase from \"../storage/StorageBase\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport GitHubManager from \"./GitHubManager\";\r\n\r\nexport default class GitHubStorage extends StorageBase implements IStorage {\r\n  rootFolder: GitHubFolder;\r\n  manager: GitHubManager;\r\n  repoName: string;\r\n  ownerName: string;\r\n  branch?: string;\r\n\r\n  subPath: string;\r\n\r\n  constructor(manager: GitHubManager, repoName: string, ownerName: string, branch?: string, subPath: string = \"\") {\r\n    super();\r\n\r\n    this.manager = manager;\r\n    this.repoName = repoName;\r\n    this.branch = branch;\r\n    this.ownerName = ownerName;\r\n\r\n    if (ownerName !== \"microsoft\" && ownerName !== \"mojang\") {\r\n      throw new Error(\"Unsupported GitHub action.\");\r\n    }\r\n\r\n    this.subPath = subPath;\r\n\r\n    this.rootFolder = new GitHubFolder(this, null, subPath, \"\");\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(GitHubStorage.slashFolderDelimiter)) {\r\n      fullPath += GitHubStorage.slashFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(this.slashFolderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport FileBase from \"./FileBase\";\r\nimport HttpFolder from \"./HttpFolder\";\r\nimport IFile from \"./IFile\";\r\nimport StorageUtilities, { EncodingType } from \"./StorageUtilities\";\r\nimport axios from \"axios\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class HttpFile extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: HttpFolder;\r\n\r\n  private _pendingLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _isLoading = false;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    return this.lastLoadedOrSaved !== null;\r\n  }\r\n\r\n  get parentFolder(): HttpFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._parentFolder.fullPath + this.name;\r\n  }\r\n\r\n  constructor(parentFolder: HttpFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async exists() {\r\n    await this.loadContent(false);\r\n\r\n    return this._content !== null;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    await this.loadContent(true);\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    //        Log.assert(this.fullPath.startsWith(\"/\"), \"Expecting a full absolute path\");\r\n\r\n    if (force || this.lastLoadedOrSaved === null) {\r\n      if (this._isLoading) {\r\n        const pendingLoad = this._pendingLoadRequests;\r\n\r\n        const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n          pendingLoad.push(resolve);\r\n        };\r\n\r\n        await new Promise(prom);\r\n\r\n        if (this.lastLoadedOrSaved === null) {\r\n          throw new Error();\r\n        }\r\n\r\n        return this.lastLoadedOrSaved;\r\n      } else {\r\n        this._content = null;\r\n\r\n        const path = this.fullPath;\r\n\r\n        if (StorageUtilities.getEncodingByFileName(this.name) === EncodingType.ByteBuffer) {\r\n          try {\r\n            const headers: Record<string, string> = {};\r\n            if (this._parentFolder.storage.authToken) {\r\n              headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n            }\r\n            const response = await axios.get(path, {\r\n              responseType: \"arraybuffer\",\r\n              headers,\r\n            });\r\n\r\n            this._content = new Uint8Array(response.data);\r\n          } catch (e) {}\r\n        } else {\r\n          let result = null;\r\n\r\n          try {\r\n            const headers: Record<string, string> = {};\r\n            if (this._parentFolder.storage.authToken) {\r\n              headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n            }\r\n            const response = await axios.get(path, {\r\n              headers,\r\n            });\r\n\r\n            result = response.data;\r\n\r\n            if (typeof result === \"object\") {\r\n              try {\r\n                result = JSON.stringify(result, null, 2);\r\n              } catch (e) {\r\n                Log.fail(\"Could not convert file to JSON\");\r\n              }\r\n            }\r\n\r\n            if (response.status !== 200) {\r\n              Log.verbose(\"Could not retrieve file from '\" + path + \"' - response code is \" + response.status);\r\n            }\r\n\r\n            if (result === null || result === \"null\") {\r\n              Log.verbose(\"Could not retrieve file from '\" + path + \"' - result is null.\");\r\n            }\r\n          } catch (e) {\r\n            Log.verbose(\"Could not retrieve file from '\" + path + \"' - \" + e + \" - \" + (e as any)?.stack);\r\n          }\r\n\r\n          this._content = result;\r\n        }\r\n\r\n        this.lastLoadedOrSaved = new Date();\r\n\r\n        this._isLoading = false;\r\n\r\n        const pendingLoad = this._pendingLoadRequests;\r\n        this._pendingLoadRequests = [];\r\n\r\n        for (const prom of pendingLoad) {\r\n          prom(undefined);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this._parentFolder.storage.readOnly) {\r\n      throw new Error(\"HttpFile is read-only.\");\r\n    }\r\n\r\n    try {\r\n      const path = this.fullPath;\r\n      const headers: Record<string, string> = {};\r\n      if (this._parentFolder.storage.authToken) {\r\n        headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n      }\r\n\r\n      await axios.delete(path, { headers });\r\n\r\n      if (!skipRemoveFromParent) {\r\n        this._parentFolder.removeFile(this.name);\r\n      }\r\n\r\n      return true;\r\n    } catch (e) {\r\n      Log.debug(\"Failed to delete file: \" + e);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"HttpFile does not support move operations.\");\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null): boolean {\r\n    if (this._parentFolder.storage.readOnly) {\r\n      throw new Error(\"HttpFile is read-only.\");\r\n    }\r\n\r\n    this._content = newContent;\r\n    this.modified = new Date();\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this._parentFolder.storage.readOnly) {\r\n      throw new Error(\"HttpFile is read-only.\");\r\n    }\r\n\r\n    if (this._content === null) {\r\n      throw new Error(\"Cannot save file with null content\");\r\n    }\r\n\r\n    try {\r\n      const path = this.fullPath;\r\n      const headers: Record<string, string> = {};\r\n      if (this._parentFolder.storage.authToken) {\r\n        headers[\"Authorization\"] = `Bearer mctauth=${this._parentFolder.storage.authToken}`;\r\n      }\r\n\r\n      // Determine content type based on file type\r\n      const encoding = StorageUtilities.getEncodingByFileName(this.name);\r\n      if (encoding === EncodingType.ByteBuffer) {\r\n        headers[\"Content-Type\"] = \"application/octet-stream\";\r\n      } else {\r\n        headers[\"Content-Type\"] = \"text/plain; charset=utf-8\";\r\n      }\r\n\r\n      await axios.put(path, this._content, { headers });\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.modified = null;\r\n\r\n      return this.lastLoadedOrSaved;\r\n    } catch (e) {\r\n      Log.debug(\"Failed to save file: \" + e);\r\n      throw new Error(\"Failed to save file: \" + e);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport HttpFile from \"./HttpFile\";\r\nimport HttpStorage from \"./HttpStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport FolderBase from \"./FolderBase\";\r\nimport Log from \"../core/Log\";\r\nimport axios from \"axios\";\r\nimport IIndexJson from \"./IIndexJson\";\r\n\r\nexport default class HttpFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n\r\n  folders: { [name: string]: HttpFolder | undefined };\r\n  files: { [name: string]: HttpFile | undefined };\r\n\r\n  private _storage: HttpStorage;\r\n  private _parentFolder: HttpFolder | null;\r\n\r\n  private _pendingLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _isLoading = false;\r\n\r\n  get storage(): HttpStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): HttpFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath(): string {\r\n    if (this._parentFolder === null) {\r\n      return this._storage.baseUrl;\r\n    }\r\n\r\n    return this._parentFolder.fullPath + this.name + HttpStorage.slashFolderDelimiter;\r\n  }\r\n\r\n  constructor(storage: HttpStorage, parentFolder: HttpFolder | null, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._name = folderName;\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    await this.load(true);\r\n  }\r\n\r\n  async exists() {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    if (this._storage.readOnly) {\r\n      return true;\r\n    }\r\n\r\n    try {\r\n      const headers: Record<string, string> = {};\r\n      if (this._storage.authToken) {\r\n        headers[\"Authorization\"] = `Bearer mctauth=${this._storage.authToken}`;\r\n      }\r\n\r\n      // POST with action=mkdir to create the folder\r\n      await axios.post(this.fullPath + \"?action=mkdir\", null, { headers });\r\n      return true;\r\n    } catch (e) {\r\n      Log.debug(\"Failed to create folder: \" + e);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  ensureFile(name: string): HttpFile {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in file name: \" + name);\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile === undefined) {\r\n      candFile = new HttpFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    throw new Error(\"Not implemented.\");\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n  }\r\n\r\n  _addExistingFile(file: HttpFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    this.files[nameCanon] = file;\r\n  }\r\n\r\n  ensureFolder(name: string): HttpFolder {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in folder name: \" + name);\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new HttpFolder(this._storage, this, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async deleteFile(name: string): Promise<boolean> {\r\n    if (this._storage.readOnly) {\r\n      throw new Error(\"Deletion of file not supported in read-only mode\");\r\n    }\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n    const file = this.files[nameCanon];\r\n\r\n    if (file) {\r\n      return await file.deleteThisFile();\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    const file = this.ensureFile(name);\r\n    return file;\r\n  }\r\n\r\n  /**\r\n   * Remove a file from the folder's file list (used after deletion).\r\n   */\r\n  removeFile(name: string): void {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n    this.files[nameCanon] = undefined;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    if (this._isLoading) {\r\n      const pendingLoad = this._pendingLoadRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      if (this.lastLoadedOrSaved === null) {\r\n        throw new Error();\r\n      }\r\n\r\n      return this.lastLoadedOrSaved;\r\n    } else {\r\n      this._isLoading = true;\r\n      let response = undefined;\r\n\r\n      try {\r\n        // Include Authorization header if the storage has an auth token\r\n        const headers: Record<string, string> = {};\r\n        if (this._storage.authToken) {\r\n          headers[\"Authorization\"] = `Bearer mctauth=${this._storage.authToken}`;\r\n        }\r\n        const requestUrl = this.fullPath + \"index.json\";\r\n        response = await axios.get(requestUrl, {\r\n          headers,\r\n        });\r\n      } catch (e: any) {\r\n        Log.debug(\"HttpFolder: Could not load index for \" + this.fullPath + \" - \" + (e?.message || e));\r\n      }\r\n\r\n      if (response) {\r\n        const index: IIndexJson = response.data;\r\n\r\n        if (index.files !== null && index.files !== undefined) {\r\n          for (let i = 0; i < index.files.length; i++) {\r\n            const file = index.files[i];\r\n\r\n            if (StorageUtilities.isUsableFile(file)) {\r\n              this.ensureFile(file);\r\n            }\r\n          }\r\n        }\r\n\r\n        if (index.folders !== null && index.folders !== undefined) {\r\n          for (let i = 0; i < index.folders.length; i++) {\r\n            const folder = index.folders[i];\r\n\r\n            this.ensureFolder(folder);\r\n          }\r\n        }\r\n      }\r\n\r\n      this.updateLastLoadedOrSaved();\r\n\r\n      this._isLoading = false;\r\n\r\n      const pendingLoad = this._pendingLoadRequests;\r\n      this._pendingLoadRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * HttpStorage.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * HttpStorage is a client-side storage implementation that fetches content\r\n * via HTTP and receives real-time updates via WebSocket notifications.\r\n *\r\n * REAL-TIME SYNCHRONIZATION:\r\n * --------------------------\r\n * 1. HttpStorage connects to /ws/notifications WebSocket endpoint\r\n * 2. Subscribes to file/folder change events for specific slots\r\n * 3. When notifications arrive, converts them to standard IStorage events\r\n * 4. Consumers (MCWorld, etc.) subscribe to these events\r\n *\r\n * DATA FLOW:\r\n * ----------\r\n * NodeStorage (fs.watch) -> HttpServer (broadcast) -> WebSocket ->\r\n *   HttpStorage (this) -> notifyFileAdded/Removed/Updated -> MCWorld -> WorldView\r\n *\r\n * WEBSOCKET PROTOCOL:\r\n * -------------------\r\n * - Connect: ws://host:port/ws/notifications?token=<authToken>\r\n * - Subscribe: { header: {..., messageType: \"subscriptionRequest\", messagePurpose: \"subscribe\" },\r\n *               body: { eventNames: [\"fileChanged\", \"fileAdded\", ...], slot: 0 } }\r\n * - Receive: IServerNotification messages with file/folder change details\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IServerNotification.ts: WebSocket message format definitions\r\n * - IStorageWatcher.ts: INotificationReceiver interface\r\n * - HttpServer.ts: Server-side WebSocket broadcaster\r\n * - NodeStorage.ts: Server-side file watcher source\r\n *\r\n * USAGE:\r\n * ------\r\n * const storage = HttpStorage.get(\"http://localhost:6126/api/worldContent/0/\");\r\n * storage.authToken = \"encrypted-token\";\r\n * await storage.connectToNotifications();\r\n * storage.onFileAdded.subscribe((sender, file) => console.log(\"File added:\", file.name));\r\n */\r\n\r\nimport HttpFolder from \"./HttpFolder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport IStorage from \"./IStorage\";\r\nimport Log from \"../core/Log\";\r\nimport { INotificationReceiver } from \"./IStorageWatcher\";\r\nimport { FileUpdateType } from \"./IFile\";\r\nimport { EventDispatcher } from \"ste-events\";\r\n\r\n/**\r\n * Notification message structure from server.\r\n * Matches IServerNotification from IServerNotification.ts\r\n */\r\ninterface IServerNotificationMessage {\r\n  header: {\r\n    version: number;\r\n    requestId: string;\r\n    messageType: string;\r\n    messagePurpose: string;\r\n  };\r\n  body: {\r\n    eventName: string;\r\n    timestamp: number;\r\n    slot?: number;\r\n    category?: string;\r\n    path?: string;\r\n    [key: string]: any;\r\n  };\r\n}\r\n\r\nexport default class HttpStorage extends StorageBase implements IStorage, INotificationReceiver {\r\n  rootFolder: HttpFolder;\r\n\r\n  baseUrl: string;\r\n\r\n  /**\r\n   * Bearer token for Authorization header.\r\n   * When set, requests will include \"Authorization: Bearer <token>\" header.\r\n   * This is used for authenticated endpoints like /api/content.\r\n   */\r\n  authToken?: string;\r\n\r\n  /**\r\n   * When true (default), the storage is read-only and write operations will throw.\r\n   * Set to false to enable HTTP PUT/DELETE operations for editing content.\r\n   */\r\n  readOnly: boolean = true;\r\n\r\n  /** WebSocket connection for receiving notifications */\r\n  private _webSocket: WebSocket | null = null;\r\n\r\n  /** Currently subscribed event names */\r\n  private _subscribedEvents: Set<string> = new Set();\r\n\r\n  /** Server slot this storage is associated with (for filtering notifications) */\r\n  private _slot?: number;\r\n\r\n  /** Whether we're currently connected to the notification server */\r\n  private _isConnected: boolean = false;\r\n\r\n  /** Reconnection timer */\r\n  private _reconnectTimer?: any;\r\n\r\n  /** Whether auto-reconnect is enabled */\r\n  private _autoReconnect: boolean = true;\r\n\r\n  /**\r\n   * Event fired when the server sends a shutdown notification.\r\n   * This indicates the entire MCT server is shutting down (not just a BDS instance).\r\n   * Subscribers should show appropriate UI feedback and disable auto-reconnect.\r\n   * Args: (reason: string, graceful: boolean)\r\n   */\r\n  private _onServerShutdown = new EventDispatcher<HttpStorage, { reason: string; graceful: boolean }>();\r\n\r\n  /**\r\n   * Subscribe to server shutdown notifications.\r\n   * This is fired when the MCT server is about to shut down.\r\n   */\r\n  public get onServerShutdown() {\r\n    return this._onServerShutdown.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Static cache of HttpStorage instances by base URL.\r\n   * Used to avoid creating duplicate storage instances for the same URL.\r\n   */\r\n  private static _storageCache: Map<string, HttpStorage> = new Map();\r\n\r\n  /**\r\n   * Get or create an HttpStorage instance for the given base URL.\r\n   * Reuses cached instances to avoid creating duplicates.\r\n   * @param baseUrl The base URL for the storage\r\n   * @returns A cached or new HttpStorage instance\r\n   */\r\n  static get(baseUrl: string): HttpStorage {\r\n    // Normalize the URL to ensure consistent caching\r\n    let normalizedUrl = baseUrl;\r\n    if (!normalizedUrl.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      normalizedUrl += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    let storage = HttpStorage._storageCache.get(normalizedUrl);\r\n    if (!storage) {\r\n      storage = new HttpStorage(baseUrl);\r\n      HttpStorage._storageCache.set(normalizedUrl, storage);\r\n    }\r\n    return storage;\r\n  }\r\n\r\n  /**\r\n   * Clear the storage cache. Useful for testing or when storage should be refreshed.\r\n   */\r\n  static clearCache() {\r\n    HttpStorage._storageCache.clear();\r\n  }\r\n\r\n  constructor(newUrl: string) {\r\n    super();\r\n\r\n    this.baseUrl = newUrl;\r\n\r\n    if (!this.baseUrl.endsWith(StorageBase.slashFolderDelimiter)) {\r\n      this.baseUrl += StorageBase.slashFolderDelimiter;\r\n    }\r\n\r\n    this.rootFolder = new HttpFolder(this, null, \"\");\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n\r\n  get isConnected(): boolean {\r\n    return this._isConnected;\r\n  }\r\n\r\n  /**\r\n   * Get the underlying WebSocket connection.\r\n   * Can be used to listen for raw notifications (e.g., debug stats).\r\n   */\r\n  get webSocket(): WebSocket | null {\r\n    return this._webSocket;\r\n  }\r\n\r\n  /**\r\n   * Set the slot number for filtering notifications.\r\n   */\r\n  set slot(value: number | undefined) {\r\n    this._slot = value;\r\n  }\r\n\r\n  get slot(): number | undefined {\r\n    return this._slot;\r\n  }\r\n\r\n  /**\r\n   * Connect to the WebSocket notification endpoint.\r\n   * The WebSocket URL is derived from the baseUrl.\r\n   *\r\n   * @param url Optional override URL for the WebSocket endpoint\r\n   * @param authToken Optional auth token (uses this.authToken if not provided)\r\n   */\r\n  async connect(url?: string, authToken?: string): Promise<void> {\r\n    if (this._isConnected) {\r\n      return;\r\n    }\r\n\r\n    const token = authToken || this.authToken;\r\n    if (!token) {\r\n      Log.debug(\"Cannot connect to notifications: no auth token\");\r\n      return;\r\n    }\r\n\r\n    // Derive WebSocket URL from baseUrl if not provided\r\n    let wsUrl = url;\r\n    if (!wsUrl) {\r\n      // Convert http(s)://host:port/api/... to ws(s)://host:port/ws/notifications\r\n      // Handle both absolute URLs and relative URLs (using window.location as base)\r\n      let urlObj: URL;\r\n      try {\r\n        // First try as absolute URL\r\n        urlObj = new URL(this.baseUrl);\r\n      } catch {\r\n        // If that fails, treat as relative URL and use current page location as base\r\n        // Use globalThis to safely access window in a cross-platform way\r\n        const globalWindow = globalThis as { location?: { origin?: string } };\r\n        if (globalWindow.location?.origin) {\r\n          urlObj = new URL(this.baseUrl, globalWindow.location.origin);\r\n        } else {\r\n          Log.message(\"[HttpStorage] Cannot derive WebSocket URL: no window.location available\");\r\n          return;\r\n        }\r\n      }\r\n      const wsProtocol = urlObj.protocol === \"https:\" ? \"wss:\" : \"ws:\";\r\n      wsUrl = `${wsProtocol}//${urlObj.host}/ws/notifications`;\r\n    }\r\n\r\n    // Add auth token as query parameter\r\n    wsUrl += `?token=${encodeURIComponent(token)}`;\r\n\r\n    try {\r\n      this._webSocket = new WebSocket(wsUrl);\r\n\r\n      // Set up event handlers\r\n      this._webSocket.onopen = () => {\r\n        this._isConnected = true;\r\n        Log.verbose(`[HttpStorage] WebSocket connected to ${wsUrl?.split(\"?\")[0]}`);\r\n\r\n        // Re-subscribe to any previously subscribed events\r\n        if (this._subscribedEvents.size > 0) {\r\n          this._sendSubscription(\"subscribe\", Array.from(this._subscribedEvents));\r\n        }\r\n      };\r\n\r\n      this._webSocket.onclose = () => {\r\n        this._isConnected = false;\r\n        Log.verbose(\"[HttpStorage] WebSocket connection closed\");\r\n\r\n        // Auto-reconnect after a delay\r\n        if (this._autoReconnect && !this._reconnectTimer) {\r\n          this._reconnectTimer = setTimeout(() => {\r\n            this._reconnectTimer = undefined;\r\n            this.connect(url, authToken).catch((err) => {\r\n              Log.debug(\"[HttpStorage] WebSocket reconnection failed: \" + err);\r\n            });\r\n          }, 5000);\r\n        }\r\n      };\r\n\r\n      this._webSocket.onerror = (error) => {\r\n        Log.message(\"[HttpStorage] WebSocket error: \" + error);\r\n      };\r\n\r\n      this._webSocket.onmessage = (event) => {\r\n        Log.debug(\"[HttpStorage] Received WebSocket message: \" + event.data.substring(0, 200));\r\n        this._handleNotification(event.data);\r\n      };\r\n\r\n      // Wait for connection to be established\r\n      await new Promise<void>((resolve, reject) => {\r\n        if (!this._webSocket) {\r\n          reject(new Error(\"WebSocket not created\"));\r\n          return;\r\n        }\r\n\r\n        const onOpen = () => {\r\n          this._webSocket?.removeEventListener(\"open\", onOpen);\r\n          this._webSocket?.removeEventListener(\"error\", onError);\r\n          resolve();\r\n        };\r\n\r\n        const onError = (e: Event) => {\r\n          this._webSocket?.removeEventListener(\"open\", onOpen);\r\n          this._webSocket?.removeEventListener(\"error\", onError);\r\n          reject(new Error(\"WebSocket connection failed\"));\r\n        };\r\n\r\n        if (this._webSocket.readyState === WebSocket.OPEN) {\r\n          resolve();\r\n        } else {\r\n          this._webSocket.addEventListener(\"open\", onOpen);\r\n          this._webSocket.addEventListener(\"error\", onError);\r\n        }\r\n      });\r\n    } catch (e) {\r\n      Log.debug(\"Failed to connect to notification server: \" + e);\r\n      throw e;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Disconnect from the WebSocket notification server.\r\n   */\r\n  disconnect(): void {\r\n    this._autoReconnect = false;\r\n\r\n    if (this._reconnectTimer) {\r\n      clearTimeout(this._reconnectTimer);\r\n      this._reconnectTimer = undefined;\r\n    }\r\n\r\n    if (this._webSocket) {\r\n      this._webSocket.close();\r\n      this._webSocket = null;\r\n    }\r\n\r\n    this._isConnected = false;\r\n  }\r\n\r\n  /**\r\n   * Subscribe to specific event types.\r\n   *\r\n   * @param eventNames Array of event names to subscribe to\r\n   * @param slot Optional slot number to filter events\r\n   */\r\n  async subscribe(eventNames: string[], slot?: number): Promise<void> {\r\n    for (const name of eventNames) {\r\n      this._subscribedEvents.add(name);\r\n    }\r\n\r\n    if (slot !== undefined) {\r\n      this._slot = slot;\r\n    }\r\n\r\n    if (this._isConnected) {\r\n      this._sendSubscription(\"subscribe\", eventNames);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Unsubscribe from specific event types.\r\n   */\r\n  async unsubscribe(eventNames: string[]): Promise<void> {\r\n    for (const name of eventNames) {\r\n      this._subscribedEvents.delete(name);\r\n    }\r\n\r\n    if (this._isConnected) {\r\n      this._sendSubscription(\"unsubscribe\", eventNames);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Send a subscription request to the server.\r\n   */\r\n  private _sendSubscription(purpose: \"subscribe\" | \"unsubscribe\", eventNames: string[]): void {\r\n    if (!this._webSocket || this._webSocket.readyState !== WebSocket.OPEN) {\r\n      return;\r\n    }\r\n\r\n    const request = {\r\n      header: {\r\n        version: 1,\r\n        requestId: crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random()}`,\r\n        messageType: \"subscriptionRequest\",\r\n        messagePurpose: purpose,\r\n      },\r\n      body: {\r\n        eventNames: eventNames,\r\n        slot: this._slot,\r\n      },\r\n    };\r\n\r\n    Log.message(`[HttpStorage] Sending subscription request: ${JSON.stringify(request)}`);\r\n    this._webSocket.send(JSON.stringify(request));\r\n  }\r\n\r\n  /**\r\n   * Handle an incoming notification message.\r\n   */\r\n  private async _handleNotification(data: string): Promise<void> {\r\n    try {\r\n      const message: IServerNotificationMessage = JSON.parse(data);\r\n\r\n      Log.debug(\r\n        `[HttpStorage] _handleNotification: messageType=${message.header?.messageType}, eventName=${message.body?.eventName}, path=${message.body?.path}, category=${message.body?.category}`\r\n      );\r\n\r\n      if (message.header.messageType !== \"notification\") {\r\n        Log.debug(`[HttpStorage] Skipping non-notification message: ${message.header.messageType}`);\r\n        return;\r\n      }\r\n\r\n      const { eventName, path, category } = message.body;\r\n\r\n      // Handle server shutdown notification specially\r\n      if (eventName === \"serverShutdown\") {\r\n        const reason = message.body.reason || \"Server shutting down\";\r\n        const graceful = message.body.graceful !== false; // Default to true if not specified\r\n\r\n        Log.verbose(`[HttpStorage] Server shutdown notification received: ${reason}`);\r\n\r\n        // Disable auto-reconnect since the server is going away intentionally\r\n        this._autoReconnect = false;\r\n\r\n        // Dispatch the shutdown event to subscribers\r\n        this._onServerShutdown.dispatch(this, { reason, graceful });\r\n        return;\r\n      }\r\n\r\n      // Skip if not a file/folder event\r\n      if (!path) {\r\n        Log.debug(`[HttpStorage] Skipping notification without path: ${eventName}`);\r\n        return;\r\n      }\r\n\r\n      // The server sends paths relative to the category storage (e.g., /db/000040.ldb for world storage)\r\n      // We need to prepend the category to get the full path relative to worldContentStorage\r\n      // e.g., /world/db/000040.ldb for the world category\r\n      // Note: getFileFromRelativePath expects paths to start with /\r\n      let fullPath = path;\r\n      if (category && !path.startsWith(category + \"/\") && !path.startsWith(\"/\" + category + \"/\")) {\r\n        // Prepend category, handling leading slashes\r\n        const cleanPath = path.startsWith(\"/\") ? path.substring(1) : path;\r\n        fullPath = `/${category}/${cleanPath}`;\r\n      }\r\n      // Ensure fullPath starts with /\r\n      if (!fullPath.startsWith(\"/\")) {\r\n        fullPath = \"/\" + fullPath;\r\n      }\r\n\r\n      Log.message(`[HttpStorage] Processing ${eventName} for path: ${path} -> ${fullPath}`);\r\n\r\n      // Convert the notification to storage events\r\n      switch (eventName) {\r\n        case \"fileAdded\": {\r\n          // Ensure the file exists in our folder structure and notify\r\n          const file = await this.rootFolder.ensureFileFromRelativePath(fullPath);\r\n          Log.debug(`[HttpStorage] fileAdded: ensured file=${file?.fullPath}`);\r\n          if (file) {\r\n            this.notifyFileAdded(file);\r\n          }\r\n          break;\r\n        }\r\n\r\n        case \"fileRemoved\": {\r\n          this.notifyFileRemoved(fullPath);\r\n          Log.debug(`[HttpStorage] fileRemoved: notified for ${fullPath}`);\r\n          break;\r\n        }\r\n\r\n        case \"fileChanged\": {\r\n          // Reload the file content and notify\r\n          try {\r\n            const file = await this.rootFolder.getFileFromRelativePath(fullPath);\r\n            if (file) {\r\n              // Force reload content\r\n              await file.loadContent(true);\r\n              this.notifyFileContentsUpdated({\r\n                file: file,\r\n                updateType: FileUpdateType.externalChange,\r\n                sourceId: \"websocket\",\r\n              });\r\n            } else {\r\n              Log.debug(`[HttpStorage] fileChanged: file not found for path ${fullPath}`);\r\n            }\r\n          } catch (fileErr) {\r\n            Log.error(`[HttpStorage] fileChanged: error processing ${fullPath}: ${fileErr}`);\r\n          }\r\n          break;\r\n        }\r\n\r\n        case \"folderChanged\": {\r\n          // Reload the folder and notify\r\n          const folder = await this.rootFolder.getFolderFromRelativePath(fullPath);\r\n          Log.debug(`[HttpStorage] folderChanged: got folder=${folder?.fullPath}`);\r\n          if (folder) {\r\n            await folder.scanForChanges();\r\n            this.notifyFolderAdded(folder);\r\n          }\r\n          break;\r\n        }\r\n      }\r\n\r\n      Log.message(`[HttpStorage] Processed notification: ${eventName} ${fullPath}`);\r\n    } catch (e) {\r\n      Log.message(`[HttpStorage] Error handling notification: ` + e);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"./Project\";\r\nimport * as esbuild from \"esbuild-wasm\";\r\nimport ITypeDefCatalog from \"../minecraft/ITypeDefCatalog\";\r\nimport { IErrorMessage, IErrorable } from \"../core/IErrorable\";\r\nimport { StatusTopic } from \"./Status\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport { FileUpdateType } from \"../storage/IFile\";\r\n\r\nexport default class ProjectBuild implements IErrorable {\r\n  private project: Project;\r\n  private mainScriptsFolder: IFolder | undefined = undefined;\r\n  private libs: ITypeDefCatalog | null = null;\r\n  private distScriptsFolder: IFolder | undefined = undefined;\r\n  private entry: string | undefined = undefined;\r\n\r\n  private static isInitialized = false;\r\n\r\n  constructor(projectIn: Project) {\r\n    this.project = projectIn;\r\n\r\n    this.loadFile = this.loadFile.bind(this);\r\n  }\r\n\r\n  isInErrorState?: boolean;\r\n  errorMessages?: IErrorMessage[];\r\n\r\n  resolveFile(resolve: esbuild.OnResolveArgs): esbuild.OnResolveResult {\r\n    if (Database.minecraftModuleNames.includes(resolve.path)) {\r\n      return {\r\n        external: true,\r\n        namespace: \"ct\",\r\n      };\r\n    }\r\n\r\n    return {\r\n      path: resolve.path,\r\n      namespace: \"ct\",\r\n    };\r\n  }\r\n\r\n  _pushError(message: string) {\r\n    this.isInErrorState = true;\r\n    if (!this.errorMessages) {\r\n      this.errorMessages = [];\r\n    }\r\n\r\n    this.errorMessages.push({ message: message });\r\n  }\r\n\r\n  _getErrorResponse(id: string, message: string) {\r\n    this._pushError(\"Project Build:\" + message);\r\n\r\n    return {\r\n      errors: [\r\n        {\r\n          id: id,\r\n          text: message,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n\r\n  getTypeDefContentFor(name: string, isTs: boolean): esbuild.OnLoadResult {\r\n    if (!this.libs) {\r\n      return this._getErrorResponse(\"esb-typenotfound\", \"Could not find typedef '\" + name + \"'\");\r\n    }\r\n\r\n    for (const typeDef of this.libs.typeDefs) {\r\n      if (typeDef.name === name) {\r\n        return {\r\n          contents: typeDef.content.join(\"\\n\"),\r\n          loader: isTs ? \"ts\" : \"js\",\r\n        };\r\n      }\r\n    }\r\n\r\n    return this._getErrorResponse(\"esb-typenotfound\", \"Could not find typedef '\" + name + \"'\");\r\n  }\r\n\r\n  get isBuildable() {\r\n    return this.project && this.project.projectFolder !== undefined;\r\n  }\r\n\r\n  getHasBuildableElements() {\r\n    for (const projectItem of this.project.items) {\r\n      if (projectItem.itemType === ProjectItemType.ts) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async loadFile(build: esbuild.OnLoadArgs): Promise<esbuild.OnLoadResult> {\r\n    if (\r\n      !this.project ||\r\n      !this.project.projectFolder ||\r\n      !this.mainScriptsFolder ||\r\n      !this.distScriptsFolder ||\r\n      !this.libs\r\n    ) {\r\n      return this._getErrorResponse(\"esb-uninit\", \"Project does not have buildable elements.\");\r\n    }\r\n\r\n    if (build.path === \"@minecraft/vanilla-data\") {\r\n      return this.getTypeDefContentFor(\"@minecraft/vanilla-data\", true);\r\n    } else if (build.path === \"@minecraft/math\") {\r\n      return this.getTypeDefContentFor(\"@minecraft/math\", false);\r\n    }\r\n\r\n    let path = build.path;\r\n\r\n    if (path.startsWith(\"./\")) {\r\n      path = path.substring(1);\r\n    }\r\n\r\n    const ext = StorageUtilities.getTypeFromName(path);\r\n\r\n    if (ext === \"js\") {\r\n      path = path.substring(0, path.length - 3) + \".ts\";\r\n    } else if (ext === \"\") {\r\n      path = path + \".ts\";\r\n    }\r\n\r\n    if (!path.startsWith(\"/\")) {\r\n      return this._getErrorResponse(\"esb-importnotfound\", \"Could not find import '\" + path + \"'\");\r\n    }\r\n\r\n    let file = await this.mainScriptsFolder.ensureFileFromRelativePath(path);\r\n\r\n    // Use existing in-memory content if already loaded (it may have been modified by the editor)\r\n    // Only load from storage if not yet loaded\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent(true);\r\n    }\r\n\r\n    let content = file.content;\r\n\r\n    if (!content || typeof content !== \"string\") {\r\n      if (StorageUtilities.getTypeFromName(path) === \"ts\") {\r\n        path = path.substring(0, path.length - 3) + \".js\";\r\n\r\n        file = await this.mainScriptsFolder.ensureFileFromRelativePath(path);\r\n\r\n        // Use existing in-memory content if available\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent(true);\r\n        }\r\n        content = file.content;\r\n\r\n        if (!content || typeof content !== \"string\") {\r\n          content = \"\";\r\n        }\r\n      } else {\r\n        return this._getErrorResponse(\"esb-filenotfound\", \"Could not find file '\" + build.path + \"'\");\r\n      }\r\n    }\r\n\r\n    return {\r\n      contents: content,\r\n      loader: \"ts\",\r\n      resolveDir: StorageUtilities.getFolderPath(build.path),\r\n    };\r\n  }\r\n\r\n  async build() {\r\n    if (!this.isBuildable) {\r\n      return;\r\n    }\r\n\r\n    if (!this.getHasBuildableElements()) {\r\n      return;\r\n    }\r\n\r\n    const operId = await this.project.creatorTools.notifyOperationStarted(\r\n      \"Script building '\" + this.project.name + \"'\"\r\n    );\r\n\r\n    const defaultBehaviorPack = await this.project.getDefaultBehaviorPack();\r\n\r\n    if (defaultBehaviorPack === undefined) {\r\n      return;\r\n    }\r\n\r\n    const behaviorPackDefinition = await defaultBehaviorPack.ensureManifest();\r\n\r\n    if (!behaviorPackDefinition || !(behaviorPackDefinition instanceof BehaviorManifestDefinition)) {\r\n      return;\r\n    }\r\n\r\n    const scriptModule = behaviorPackDefinition.getScriptModule();\r\n    const libScriptsFolder = this.project.getLibScriptsFolder();\r\n    this.mainScriptsFolder = await this.project.getMainScriptsFolder();\r\n\r\n    if (scriptModule && scriptModule.entry && libScriptsFolder) {\r\n      this.libs = await Database.getLibs();\r\n\r\n      this.distScriptsFolder = await this.project.ensureDistBuildScriptsFolder();\r\n\r\n      if (this.libs) {\r\n        this.entry = scriptModule.entry;\r\n\r\n        if (this.entry.toLowerCase().startsWith(\"scripts/\")) {\r\n          this.entry = this.entry.substring(7);\r\n        }\r\n\r\n        if (!ProjectBuild.isInitialized) {\r\n          try {\r\n            // In Node.js, esbuild-wasm auto-locates its .wasm file from the\r\n            // package directory \u2014 no wasmURL needed. In browsers, wasmURL must\r\n            // point to the .wasm file served by the web server.\r\n            const isNodeJs = typeof process !== \"undefined\" && process.versions?.node;\r\n            if (isNodeJs) {\r\n              await esbuild.initialize({});\r\n            } else {\r\n              await esbuild.initialize({\r\n                wasmURL: \"./dist/esbuild-wasm/esbuild.wasm\",\r\n              });\r\n            }\r\n          } catch (e: any) {\r\n            this._pushError(\"Failed to initialize build system: \" + e.toString());\r\n            await this.project.creatorTools?.notifyOperationEnded(\r\n              operId,\r\n              \"Unable to continue script building '\" + this.project.name + \"'\",\r\n              StatusTopic.scriptBuild,\r\n              this.isInErrorState\r\n            );\r\n            return;\r\n          }\r\n\r\n          ProjectBuild.isInitialized = true;\r\n        }\r\n\r\n        const me = this;\r\n\r\n        try {\r\n          const result = await esbuild.build({\r\n            bundle: true,\r\n            entryPoints: [this.entry],\r\n            format: \"esm\",\r\n            external: Database.minecraftModuleNames,\r\n            plugins: [\r\n              {\r\n                name: \"ct\",\r\n                setup(build) {\r\n                  build.onResolve({ filter: /.*/ }, me.resolveFile);\r\n                  build.onLoad({ filter: /.*/, namespace: \"ct\" }, me.loadFile);\r\n                },\r\n              },\r\n            ],\r\n          });\r\n\r\n          if (result && result.outputFiles && result.outputFiles.length > 0) {\r\n            const mainJsFile = await this.distScriptsFolder.ensureFileFromRelativePath(this.entry);\r\n\r\n            mainJsFile.setContent(result.outputFiles[0].text, FileUpdateType.regularEdit);\r\n\r\n            await mainJsFile.saveContent();\r\n          }\r\n        } catch (e: any) {\r\n          if (!this.isInErrorState && e) {\r\n            this._pushError(e.toString());\r\n          }\r\n        }\r\n\r\n        await me.project.creatorTools?.notifyOperationEnded(\r\n          operId,\r\n          \"Completed script building '\" + this.project.name + \"'\",\r\n          StatusTopic.scriptBuild,\r\n          this.isInErrorState\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  async aggregateScripts(scriptFolder: IFolder) {\r\n    if (!scriptFolder.isLoaded) {\r\n      await scriptFolder.load();\r\n    }\r\n\r\n    let script = \"\";\r\n\r\n    for (const fileName in scriptFolder.files) {\r\n      const ext = StorageUtilities.getTypeFromName(fileName);\r\n\r\n      if (ext === \"js\") {\r\n        const scriptFile = scriptFolder.files[fileName];\r\n\r\n        if (scriptFile) {\r\n          if (!scriptFile.isContentLoaded) {\r\n            await scriptFile.loadContent();\r\n          }\r\n\r\n          if (scriptFile.content && typeof scriptFile.content === \"string\") {\r\n            script += \"// \" + fileName + \"\\n\" + scriptFile.content + \"\\n\";\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in scriptFolder.folders) {\r\n      const childFolder = scriptFolder.folders[folderName];\r\n\r\n      if (childFolder) {\r\n        const fileScript = await this.aggregateScripts(childFolder);\r\n\r\n        script += fileScript;\r\n      }\r\n    }\r\n\r\n    return script;\r\n  }\r\n\r\n  async syncToBehaviorPack(bpTargetFolder: IFolder) {\r\n    if (!this.getHasBuildableElements()) {\r\n      return;\r\n    }\r\n\r\n    const distScriptsFolder = await this.project.ensureDistBuildScriptsFolder();\r\n\r\n    const scriptsFolder = bpTargetFolder.ensureFolder(\"scripts\");\r\n\r\n    await StorageUtilities.syncFolderTo(distScriptsFolder, scriptsFolder, true, true, false, []);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../../core/Utilities\";\r\nimport CreatorToolsHost from \"../CreatorToolsHost\";\r\nimport IGalleryItem from \"../IGalleryItem\";\r\n\r\nexport default class GalleryReader {\r\n  /**\r\n   * Maps a GitHub repository name (e.g., \"minecraft-samples\") to the shortened\r\n   * local folder name used under res/samples/<owner>/. These must match the\r\n   * `replaceFirstFolderWith` values in app/reslist/*.resources.json.\r\n   *\r\n   * Falls back to the conventional `<repoName>-<branch>` pattern for unknown repos.\r\n   */\r\n  static readonly repoFolderMap: Record<string, string> = {\r\n    \"minecraft-samples\": \"samples\",\r\n    \"minecraft-scripting-samples\": \"script-samples\",\r\n    \"minecraft-gametests\": \"gametests\",\r\n  };\r\n\r\n  static getLocalRepoFolder(gitHubRepoName: string, gitHubBranch?: string): string {\r\n    return GalleryReader.repoFolderMap[gitHubRepoName] ?? gitHubRepoName + \"-\" + (gitHubBranch ?? \"main\");\r\n  }\r\n\r\n  constructor(private defaultProjectImage: string) {}\r\n\r\n  private getStandinImage() {\r\n    return this.defaultProjectImage;\r\n  }\r\n\r\n  public getGalleryImage(item: IGalleryItem) {\r\n    if (item.logoImage === undefined && item.localLogo === undefined) {\r\n      return this.getStandinImage();\r\n    }\r\n\r\n    let imagePath = item.logoImage;\r\n\r\n    if (imagePath === undefined) {\r\n      imagePath = CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/serve/resource_pack/textures/\" + item.localLogo;\r\n    }\r\n\r\n    if (item.logoImage === undefined) return imagePath;\r\n\r\n    if (item.gitHubRepoName === \"bedrock-samples\") {\r\n      imagePath = CreatorToolsHost.getVanillaContentRoot() + Utilities.ensureEndsWithSlash(\"res/latest/van/serve/\");\r\n    } else {\r\n      imagePath =\r\n        CreatorToolsHost.contentWebRoot +\r\n        \"res/samples/\" +\r\n        item.gitHubOwner +\r\n        \"/\" +\r\n        GalleryReader.getLocalRepoFolder(item.gitHubRepoName ?? \"\", item.gitHubBranch) +\r\n        \"/\";\r\n    }\r\n\r\n    imagePath += Utilities.ensureNotStartsWithSlash(item.logoImage);\r\n\r\n    return imagePath;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport MCWorld from \"./../minecraft/MCWorld\";\r\nimport StorageUtilities from \"./../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./../minecraft/Database\";\r\nimport IFolder from \"./../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport GitHubStorage from \"./../github/GitHubStorage\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"./../core/AppServiceProxy\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { ProjectFocus } from \"../app/IProjectData\";\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport ProjectUpdateRunner from \"../updates/ProjectUpdateRunner\";\r\nimport CreatorToolsHost from \"./CreatorToolsHost\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport ProjectBuild from \"./ProjectBuild\";\r\nimport { Generator } from \"../minecraft/WorldLevelDat\";\r\nimport IConversionSettings from \"../core/IConversionSettings\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport telemetryService from \"../analytics/Telemetry\";\r\nimport { TelemetryEvents, TelemetryProperties, WorldDownloadProperties } from \"../analytics/TelemetryConstants\";\r\nimport GalleryReader from \"./gallery/GalleryReader\";\r\n\r\nexport const enum FolderDeploy {\r\n  retailFolders = 0,\r\n  developmentFolders = 1,\r\n  noFolders = 2,\r\n}\r\n\r\nexport const ProjectImportExclusions = [\r\n  \"build\",\r\n  \"node_modules\",\r\n  \"dist\",\r\n  \"lib\",\r\n  \".env\",\r\n  \"*/.*\",\r\n  \"out\",\r\n  \"*just.config*\",\r\n  \"*package-lock*\",\r\n  \"*.mjs*\",\r\n  \"index.json\",\r\n];\r\n\r\nexport default class ProjectExporter {\r\n  static async generateFlatBetaApisWorldWithPacksZipBytes(creatorTools: CreatorTools, project: Project, name: string) {\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedNull();\r\n      return undefined;\r\n    }\r\n\r\n    const mcworld = await this.generateWorldWithPacksAndContent(project, name, undefined, {\r\n      generator: Generator.flat,\r\n      betaApisExperiment: true,\r\n    });\r\n\r\n    if (!mcworld) {\r\n      return undefined;\r\n    }\r\n\r\n    const newBytes = await mcworld.getBytes();\r\n\r\n    // Track pack info for flat world\r\n    const properties: WorldDownloadProperties = {};\r\n\r\n    const additionalPackCount = (mcworld.worldBehaviorPacks?.length || 0) + (mcworld.worldResourcePacks?.length || 0);\r\n    properties[TelemetryProperties.ADDITIONAL_PACKS_ADDED] = additionalPackCount > 0 ? additionalPackCount : undefined;\r\n\r\n    const behaviorPackUuids = mcworld.worldBehaviorPacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.BEHAVIOR_PACKS] = behaviorPackUuids || \"\";\r\n\r\n    const resourcePackUuids = mcworld.worldResourcePacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.RESOURCE_PACKS] = resourcePackUuids || \"\";\r\n\r\n    telemetryService.trackEvent({\r\n      name: TelemetryEvents.FLAT_WORLD_DOWNLOADED,\r\n      properties,\r\n    });\r\n\r\n    return newBytes;\r\n  }\r\n\r\n  static async syncProjectFromGitHub(\r\n    isNewProject: boolean,\r\n    creatorTools: CreatorTools,\r\n    gitHubRepoName: string,\r\n    gitHubOwner: string,\r\n    gitHubBranch: string | undefined,\r\n    gitHubFolder: string | undefined,\r\n    projName: string | undefined,\r\n    project: Project | undefined,\r\n    fileList: string[] | undefined,\r\n    messageUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ) {\r\n    let gh = undefined;\r\n\r\n    // Use GalleryReader to map repo names to local folder names (e.g.,\r\n    // \"minecraft-scripting-samples\" \u2192 \"script-samples\") for bundled content.\r\n    const localRepoFolder = GalleryReader.getLocalRepoFolder(gitHubRepoName, gitHubBranch);\r\n    const localUrlExtension = \"res/samples/\" + gitHubOwner + \"/\" + localRepoFolder + \"/\" + gitHubFolder;\r\n\r\n    if (CreatorToolsHost.isWeb) {\r\n      gh = HttpStorage.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + localUrlExtension);\r\n    } else if (creatorTools.local) {\r\n      // In Node.js contexts (CLI, VS Code, Electron), use bundled samples from the\r\n      // local package instead of downloading from GitHub. This is faster, works offline,\r\n      // and avoids GitHub API rate limits for unauthenticated requests.\r\n      const localGh = creatorTools.local.createStorage(localUrlExtension);\r\n\r\n      if (localGh) {\r\n        try {\r\n          // Verify the local folder actually exists before committing to it\r\n          const exists = await localGh.rootFolder.exists();\r\n          if (exists) {\r\n            gh = localGh;\r\n          }\r\n        } catch {\r\n          // Local storage not available, will fall back to GitHub\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fall back to GitHub if bundled samples aren't available\r\n    if (!gh) {\r\n      gh = new GitHubStorage(creatorTools.anonGitHub, gitHubRepoName, gitHubOwner, gitHubBranch, gitHubFolder);\r\n    }\r\n\r\n    if (!projName) {\r\n      projName = \"local \" + gitHubOwner + \" \" + gitHubRepoName;\r\n\r\n      if (gitHubFolder !== undefined) {\r\n        projName += \" \" + gitHubFolder.replace(/\\//gi, \" \");\r\n        projName = projName.replace(\" behavior_packs\", \"\");\r\n      }\r\n    }\r\n\r\n    const newProjectName = await creatorTools.getNewProjectName(projName);\r\n\r\n    if (!project) {\r\n      project = await creatorTools.createNewProject(\r\n        newProjectName,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        ProjectFocus.gameTests,\r\n        false\r\n      );\r\n    }\r\n\r\n    /*if (fileList) {\r\n      await gh.rootFolder.setStructureFromFileList(fileList);\r\n    } else {*/\r\n    await gh.rootFolder.load();\r\n    //}\r\n\r\n    const rootFolder = await project.ensureProjectFolder();\r\n\r\n    try {\r\n      await StorageUtilities.syncFolderTo(\r\n        gh.rootFolder,\r\n        rootFolder,\r\n        false,\r\n        false,\r\n        false,\r\n        ProjectImportExclusions,\r\n        undefined,\r\n        messageUpdater,\r\n        dontOverwriteExistingFiles\r\n      );\r\n    } catch (e) {\r\n      Log.error(\"Error synchronizing from GitHub:\" + (e as any).toString());\r\n    }\r\n\r\n    await rootFolder.saveAll();\r\n\r\n    if (isNewProject) {\r\n      await ProjectUtilities.renameDefaultFolders(project, projName);\r\n\r\n      project.originalGitHubOwner = gitHubOwner;\r\n      project.originalGitHubRepoName = gitHubRepoName;\r\n      project.originalGitHubBranch = gitHubBranch;\r\n      project.originalGitHubFolder = gitHubFolder;\r\n      project.originalFileList = fileList;\r\n    }\r\n\r\n    await project.inferProjectItemsFromFiles(true);\r\n\r\n    const pur = new ProjectUpdateRunner(project);\r\n\r\n    await pur.updateProject();\r\n\r\n    await project.save(true);\r\n\r\n    await creatorTools.save();\r\n\r\n    return project;\r\n  }\r\n\r\n  static async getPackFolder(folder: IFolder, seekingResource: boolean) {\r\n    await folder.load();\r\n\r\n    const manifest = folder.files[\"manifest.json\"];\r\n\r\n    if (manifest !== undefined) {\r\n      const parentFolder = folder.parentFolder;\r\n\r\n      let isResource = false;\r\n\r\n      if (parentFolder !== null) {\r\n        const name = StorageUtilities.canonicalizeName(parentFolder.name);\r\n\r\n        if (name.indexOf(\"resource\") >= 0) {\r\n          isResource = true;\r\n        }\r\n      }\r\n\r\n      if (seekingResource && isResource) {\r\n        return folder;\r\n      } else if (!seekingResource) {\r\n        return folder;\r\n      }\r\n    } else {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder !== undefined && !childFolder.errorStatus) {\r\n          const result = (await ProjectExporter.getPackFolder(childFolder, seekingResource)) as IFolder | undefined;\r\n\r\n          if (result !== undefined) {\r\n            return result;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async ensureWorldsFolder(rootMinecraftFolder: IFolder) {\r\n    let worldsFolder = await rootMinecraftFolder.getFolderFromRelativePath(\"/minecraftWorlds/\");\r\n\r\n    if (!worldsFolder) {\r\n      worldsFolder = await rootMinecraftFolder.getFolderFromRelativePath(\"/worlds/\");\r\n    }\r\n\r\n    if (!worldsFolder) {\r\n      worldsFolder = await rootMinecraftFolder.ensureFolderFromRelativePath(\"/minecraftWorlds/\");\r\n    }\r\n\r\n    if (!worldsFolder) {\r\n      Log.unexpectedUndefined(\"EWF\");\r\n      return undefined;\r\n    }\r\n\r\n    await worldsFolder.ensureExists();\r\n\r\n    return worldsFolder;\r\n  }\r\n\r\n  static async ensureMinecraftWorldsFolder(creatorTools: CreatorTools) {\r\n    if (!creatorTools.defaultDeploymentStorage) {\r\n      Log.unexpectedUndefined(\"EMWF\");\r\n      return undefined;\r\n    }\r\n\r\n    let isAvailable = creatorTools.defaultDeploymentStorage.available;\r\n\r\n    if (isAvailable === undefined) {\r\n      isAvailable = await creatorTools.defaultDeploymentStorage.getAvailable();\r\n    }\r\n\r\n    if (!isAvailable) {\r\n      return;\r\n    }\r\n\r\n    return await this.ensureWorldsFolder(creatorTools.defaultDeploymentStorage.rootFolder);\r\n  }\r\n\r\n  static async prepareProject(project: Project): Promise<ProjectBuild | undefined> {\r\n    await ProjectExporter.updateProjects(project);\r\n\r\n    await project.save();\r\n\r\n    const projectBuild = new ProjectBuild(project);\r\n\r\n    await projectBuild.build();\r\n\r\n    if (projectBuild.isInErrorState) {\r\n      project.appendErrors(projectBuild);\r\n      return undefined;\r\n    }\r\n\r\n    return projectBuild;\r\n  }\r\n\r\n  static async deployProject(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    deployTargetFolder: IFolder,\r\n    folderDeploy: FolderDeploy = FolderDeploy.developmentFolders\r\n  ) {\r\n    const ctProjectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!ctProjectBuild) {\r\n      return false;\r\n    }\r\n\r\n    await ProjectExporter.deployProjectPacks(project, ctProjectBuild, deployTargetFolder, undefined, folderDeploy);\r\n\r\n    await deployTargetFolder.saveAll();\r\n\r\n    const rpFolderName =\r\n      folderDeploy === FolderDeploy.noFolders\r\n        ? undefined\r\n        : folderDeploy === FolderDeploy.developmentFolders\r\n          ? \"development_resource_packs\"\r\n          : \"resource_packs\";\r\n\r\n    if (rpFolderName) {\r\n      const targetResourcePacksFolder = deployTargetFolder.ensureFolder(rpFolderName);\r\n      const rpDeployFolderExists = await targetResourcePacksFolder.exists();\r\n\r\n      if (rpDeployFolderExists) {\r\n        await project.ensureProjectFolder();\r\n\r\n        const rpi = await project.getDefaultResourcePackFolder();\r\n\r\n        if (rpi) {\r\n          const deployProjectFolder = targetResourcePacksFolder.ensureFolder(project.name);\r\n\r\n          await deployProjectFolder.ensureExists();\r\n\r\n          await StorageUtilities.syncFolderTo(rpi, deployProjectFolder, true, true, true, [\r\n            \"/mcworlds\",\r\n            \"/minecraftWorlds\",\r\n          ]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static async deployProjectPacks(\r\n    project: Project,\r\n    projectBuild: ProjectBuild,\r\n    targetFolder: IFolder,\r\n    mcworld?: MCWorld,\r\n    useDeveloperFolders?: FolderDeploy\r\n  ) {\r\n    const bpGroupFolder =\r\n      useDeveloperFolders === FolderDeploy.noFolders\r\n        ? targetFolder\r\n        : targetFolder.ensureFolder(\r\n            useDeveloperFolders === FolderDeploy.developmentFolders ? \"development_behavior_packs\" : \"behavior_packs\"\r\n          );\r\n\r\n    await bpGroupFolder.ensureExists();\r\n\r\n    const activeBehaviorPackFolder = await project.getDefaultBehaviorPackFolder();\r\n    const scriptsFolder = await project.getMainScriptsFolder();\r\n\r\n    if (activeBehaviorPackFolder) {\r\n      const bpTargetFolder = bpGroupFolder.ensureFolder(\r\n        activeBehaviorPackFolder.ensuredName + (useDeveloperFolders === FolderDeploy.noFolders ? \"_bp\" : \"\")\r\n      );\r\n\r\n      await bpTargetFolder.ensureExists();\r\n\r\n      await StorageUtilities.syncFolderTo(activeBehaviorPackFolder, bpTargetFolder, true, true, false, [\r\n        \"mcworlds\",\r\n        \"db\",\r\n        \"level.dat\",\r\n        \"level.dat_old\",\r\n        \"levelname.txt\",\r\n        \"behavior_packs\",\r\n        \"resource_packs\",\r\n      ]);\r\n\r\n      await projectBuild.syncToBehaviorPack(bpTargetFolder);\r\n\r\n      if (scriptsFolder && scriptsFolder.parentFolder !== activeBehaviorPackFolder) {\r\n        const scriptsTargetFolder = bpTargetFolder.ensureFolder(\"scripts\");\r\n\r\n        await scriptsTargetFolder.ensureExists();\r\n\r\n        await StorageUtilities.syncFolderTo(scriptsFolder, scriptsTargetFolder, true, true, false, [\"*.ts\"]);\r\n      }\r\n\r\n      if (mcworld) {\r\n        mcworld.ensureBehaviorPack(\r\n          project.defaultBehaviorPackUniqueId,\r\n          project.defaultBehaviorPackVersion,\r\n          activeBehaviorPackFolder.name\r\n        );\r\n      }\r\n\r\n      await bpTargetFolder.saveAll();\r\n    }\r\n\r\n    const activeResourcePackFolder = await project.getDefaultResourcePackFolder();\r\n\r\n    if (activeResourcePackFolder) {\r\n      const rpGroupFolder =\r\n        useDeveloperFolders === FolderDeploy.noFolders\r\n          ? targetFolder\r\n          : targetFolder.ensureFolder(\r\n              useDeveloperFolders === FolderDeploy.developmentFolders ? \"development_resource_packs\" : \"resource_packs\"\r\n            );\r\n\r\n      await rpGroupFolder.ensureExists();\r\n\r\n      const rpTargetFolder = rpGroupFolder.ensureFolder(\r\n        activeResourcePackFolder.ensuredName + (useDeveloperFolders === FolderDeploy.noFolders ? \"_rp\" : \"\")\r\n      );\r\n\r\n      await rpTargetFolder.ensureExists();\r\n\r\n      await StorageUtilities.syncFolderTo(activeResourcePackFolder, rpTargetFolder, true, true, false, [\r\n        \"mcworlds\",\r\n        \"db\",\r\n        \"level.dat\",\r\n        \"level.dat_old\",\r\n        \"levelname.txt\",\r\n        \"behavior_packs\",\r\n        \"resource_packs\",\r\n      ]);\r\n\r\n      if (mcworld) {\r\n        mcworld.ensureResourcePack(\r\n          project.defaultResourcePackUniqueId,\r\n          project.defaultResourcePackVersion,\r\n          activeResourcePackFolder.name\r\n        );\r\n\r\n        await rpTargetFolder.saveAll();\r\n      }\r\n    }\r\n  }\r\n\r\n  static async deployAsWorldAndTestAssets(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldProjectItem: ProjectItem,\r\n    returnZipBytes: boolean,\r\n    deployFolder?: IFolder\r\n  ) {\r\n    let mcworld: MCWorld | undefined;\r\n\r\n    const operId = await creatorTools.notifyOperationStarted(\r\n      \"Deploying world '\" + worldProjectItem.name + \"' and test assets.\"\r\n    );\r\n\r\n    if (!worldProjectItem.isContentLoaded) {\r\n      await worldProjectItem.loadContent();\r\n    }\r\n\r\n    const itemFile = worldProjectItem.primaryFile;\r\n    if (!itemFile && !worldProjectItem.defaultFolder) {\r\n      Log.unexpectedUndefined(\"DAWATA\");\r\n      return;\r\n    }\r\n\r\n    if (worldProjectItem.defaultFolder) {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(worldProjectItem.defaultFolder, project);\r\n    } else if (itemFile) {\r\n      mcworld = await MCWorld.ensureOnFile(itemFile, project);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n      return;\r\n    }\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      await creatorTools.notifyOperationEnded(operId, \"Packaging the world not be completed.\", undefined, true);\r\n      return;\r\n    }\r\n\r\n    const dateNow = new Date();\r\n\r\n    const title = mcworld.name + \" - \" + Utilities.getFriendlySummary(dateNow);\r\n\r\n    let targetFolder: IFolder | undefined;\r\n    let zipStorage: ZipStorage | undefined;\r\n\r\n    if (deployFolder) {\r\n      const worldsFolder = await ProjectExporter.ensureWorldsFolder(deployFolder);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAB\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    } else if (returnZipBytes) {\r\n      zipStorage = new ZipStorage();\r\n\r\n      targetFolder = zipStorage.rootFolder;\r\n    } else {\r\n      const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(creatorTools);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAC\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    }\r\n\r\n    await mcworld.syncFolderTo(targetFolder);\r\n\r\n    if (projectBuild) {\r\n      await ProjectExporter.deployProjectPacks(project, projectBuild, targetFolder, mcworld);\r\n    }\r\n\r\n    const creatorToolsProject = await Database.ensureCreatorToolsIngameProject();\r\n\r\n    if (creatorToolsProject) {\r\n      const ctProjectBuild = await ProjectExporter.prepareProject(creatorToolsProject);\r\n\r\n      if (ctProjectBuild) {\r\n        await ProjectExporter.deployProjectPacks(creatorToolsProject, ctProjectBuild, targetFolder, mcworld);\r\n      }\r\n\r\n      await mcworld.save();\r\n    }\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    const newMcWorld = await MCWorld.ensureMCWorldOnFolder(targetFolder);\r\n\r\n    if (!newMcWorld) {\r\n      Log.debugAlert(\"Could not build new world.\");\r\n      return;\r\n    }\r\n\r\n    //    newMcWorld.betaApisExperiment = true;\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    await newMcWorld.save();\r\n\r\n    await creatorTools.notifyOperationEnded(operId, \"World + local test assets deploy completed.\");\r\n\r\n    if (zipStorage) {\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      return zipBytes;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async deployAsWorld(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldProjectItem: ProjectItem,\r\n    returnZipBytes: boolean,\r\n    deployFolder?: IFolder\r\n  ) {\r\n    let mcworld: MCWorld | undefined;\r\n    const operId = await creatorTools.notifyOperationStarted(\"Deploying world '\" + worldProjectItem.name + \"'\");\r\n\r\n    if (!worldProjectItem.isContentLoaded) {\r\n      await worldProjectItem.loadContent();\r\n    }\r\n\r\n    if (!worldProjectItem.primaryFile && !worldProjectItem.defaultFolder) {\r\n      Log.unexpectedUndefined(\"DAWATA\");\r\n      return;\r\n    }\r\n\r\n    if (worldProjectItem.defaultFolder) {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(worldProjectItem.defaultFolder, project);\r\n    } else if (worldProjectItem.primaryFile) {\r\n      mcworld = await MCWorld.ensureOnFile(worldProjectItem.primaryFile, project);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n      return;\r\n    }\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      await creatorTools.notifyOperationEnded(operId, \"Packaging the world not be completed.\", undefined, true);\r\n      return;\r\n    }\r\n\r\n    const dateNow = new Date();\r\n\r\n    const title = mcworld.name + \" - \" + Utilities.getFriendlySummary(dateNow);\r\n\r\n    let targetFolder: IFolder | undefined;\r\n    let zipStorage: ZipStorage | undefined;\r\n\r\n    if (deployFolder) {\r\n      const worldsFolder = await ProjectExporter.ensureWorldsFolder(deployFolder);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAB\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    } else if (returnZipBytes) {\r\n      zipStorage = new ZipStorage();\r\n\r\n      targetFolder = zipStorage.rootFolder;\r\n    } else {\r\n      const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(creatorTools);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DAWATAC\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(title);\r\n\r\n      await targetFolder.ensureExists();\r\n    }\r\n\r\n    await mcworld.syncFolderTo(targetFolder);\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    await creatorTools.notifyOperationEnded(operId, \"World + local assets deploy completed.\");\r\n\r\n    if (zipStorage) {\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      return zipBytes;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n  static async updateProjects(project: Project) {\r\n    const pur = new ProjectUpdateRunner(project);\r\n\r\n    await pur.updateProject([\"SCRIPTMODULE\"]);\r\n  }\r\n\r\n  static async generateWorldWithPacks(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldSettings: IWorldSettings,\r\n    targetFolder?: IFolder\r\n  ) {\r\n    const operId = await creatorTools.notifyOperationStarted(\"Generating world and packs for '\" + project.name + \"'.\");\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (projectBuild === undefined) {\r\n      await creatorTools.notifyOperationEnded(operId);\r\n      return;\r\n    }\r\n\r\n    let mcworld = undefined;\r\n\r\n    if (targetFolder === undefined) {\r\n      mcworld = new MCWorld();\r\n\r\n      mcworld.ensureZipStorage();\r\n\r\n      targetFolder = mcworld.effectiveRootFolder;\r\n\r\n      if (targetFolder === undefined) {\r\n        Log.throwUnexpectedUndefined(\"PEPW\");\r\n        return;\r\n      }\r\n    } else {\r\n      mcworld = await MCWorld.ensureMCWorldOnFolder(targetFolder);\r\n    }\r\n\r\n    if (!mcworld) {\r\n      Log.debugAlert(\"Could not find respective world.\");\r\n      return;\r\n    }\r\n\r\n    await mcworld.loadMetaFiles(false);\r\n\r\n    await mcworld.applyWorldSettings(worldSettings);\r\n\r\n    await ProjectExporter.ensureExperimentsEnabledOnWorld(mcworld, project);\r\n\r\n    if (projectBuild) {\r\n      await ProjectExporter.deployProjectPacks(project, projectBuild, targetFolder, mcworld);\r\n    }\r\n\r\n    mcworld.name = project.name;\r\n\r\n    await targetFolder.saveAll();\r\n\r\n    await mcworld.save();\r\n\r\n    const properties: WorldDownloadProperties = {};\r\n\r\n    const additionalPackCount = (mcworld.worldBehaviorPacks?.length || 0) + (mcworld.worldResourcePacks?.length || 0);\r\n    properties[TelemetryProperties.ADDITIONAL_PACKS_ADDED] = additionalPackCount > 0 ? additionalPackCount : undefined;\r\n\r\n    const behaviorPackUuids = mcworld.worldBehaviorPacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.BEHAVIOR_PACKS] = behaviorPackUuids || \"\";\r\n\r\n    const resourcePackUuids = mcworld.worldResourcePacks?.map((pack) => pack.pack_id)?.join(\";\");\r\n    properties[TelemetryProperties.RESOURCE_PACKS] = resourcePackUuids || \"\";\r\n\r\n    const levelDat = mcworld.levelData;\r\n    if (levelDat) {\r\n      properties[TelemetryProperties.GAME_TYPE] = levelDat.gameType;\r\n      properties[TelemetryProperties.DIFFICULTY] = levelDat.difficulty;\r\n      properties[TelemetryProperties.MAP_STYLE] = levelDat.generator ?? (levelDat.flatWorldLayers ? \"flat\" : undefined);\r\n      properties[TelemetryProperties.SEED] = levelDat.randomSeed;\r\n    }\r\n\r\n    properties[TelemetryProperties.WORLD_TEMPLATE_USED] = worldSettings?.worldTemplateReferences?.length\r\n      ? true\r\n      : undefined;\r\n\r\n    telemetryService.trackEvent({\r\n      name: TelemetryEvents.CUSTOM_WORLD_DOWNLOADED,\r\n      properties,\r\n    });\r\n\r\n    await creatorTools.notifyOperationEnded(\r\n      operId,\r\n      \"World + local assets generation for '\" + targetFolder.fullPath + \"' completed.\"\r\n    );\r\n\r\n    return mcworld;\r\n  }\r\n\r\n  static async deployProjectAndGeneratedWorldTo(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldSettings: IWorldSettings,\r\n    deployFolder: IFolder\r\n  ) {\r\n    const operId = await creatorTools.notifyOperationStarted(\r\n      \"Deploying project '\" + project.name + \"' plus world and test assets.\"\r\n    );\r\n\r\n    await project.ensureLoadedProjectFolder();\r\n\r\n    const worldFolderName = project.deployWorldId;\r\n    const title = project.name + \" Test World\";\r\n\r\n    let targetFolder: IFolder | undefined;\r\n\r\n    if (deployFolder) {\r\n      const worldsFolder = await ProjectExporter.ensureWorldsFolder(deployFolder);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DPWATAD\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n      await targetFolder.ensureExists();\r\n    } else {\r\n      const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(creatorTools);\r\n\r\n      if (!worldsFolder) {\r\n        Log.unexpectedUndefined(\"DPWATAE\");\r\n        return;\r\n      }\r\n\r\n      targetFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n      await targetFolder.ensureExists();\r\n    }\r\n\r\n    const mcworld = await ProjectExporter.generateWorldWithPacks(creatorTools, project, worldSettings, targetFolder);\r\n\r\n    if (mcworld) {\r\n      await targetFolder.saveAll();\r\n\r\n      await mcworld.save();\r\n    }\r\n\r\n    await project.save();\r\n\r\n    await creatorTools.notifyOperationEnded(\r\n      operId,\r\n      \"World + local assets deploy to '\" + targetFolder.fullPath + \"' completed.\"\r\n    );\r\n\r\n    return title;\r\n  }\r\n\r\n  static async deployAsFlatPackRefWorld(creatorTools: CreatorTools, project: Project) {\r\n    await creatorTools.notifyStatusUpdate(\"Saving...\");\r\n    await ProjectExporter.updateProjects(project);\r\n\r\n    await project.save();\r\n    await creatorTools.notifyStatusUpdate(\"Saved\");\r\n\r\n    let deployTarget = creatorTools.defaultDeploymentTarget;\r\n\r\n    // only do an explicit deploy here autodeployment is not turned on; otherwise, deployment should happen in the save() above.\r\n    if (\r\n      //  project.autoDeploymentMode !== ProjectAutoDeploymntMode.deployOnSave &&\r\n      deployTarget &&\r\n      deployTarget.deployBehaviorPacksFolder !== null &&\r\n      creatorTools.activeMinecraft\r\n    ) {\r\n      await creatorTools.notifyStatusUpdate(\"Deploying pack add-ons\");\r\n      creatorTools.activeMinecraft.syncWithDeployment();\r\n      await creatorTools.notifyStatusUpdate(\"Deployed\");\r\n    }\r\n\r\n    const hash = project.defaultBehaviorPackUniqueId + \"|\";\r\n\r\n    if (\r\n      (project.lastMapDeployedHash === undefined || project.lastMapDeployedHash !== hash) &&\r\n      creatorTools.workingStorage !== null\r\n    ) {\r\n      await ProjectExporter.generateAndInvokeFlatPackRefMCWorld(creatorTools, project);\r\n\r\n      project.lastMapDeployedHash = hash;\r\n      project.lastMapDeployedDate = new Date();\r\n    }\r\n  }\r\n\r\n  static async convertWorld(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    settings: IConversionSettings,\r\n    world?: MCWorld\r\n  ) {\r\n    if (!world) {\r\n      return;\r\n    }\r\n\r\n    if (creatorTools.workingStorage === null) {\r\n      Log.fail(\"Did not find expected working storage.\");\r\n      return;\r\n    }\r\n    const dtNow = new Date();\r\n    const tempWorkingPathName = \"WorldConvert\" + Utilities.getDateStr(dtNow);\r\n\r\n    const workingFolder = creatorTools.workingStorage.rootFolder.ensureFolder(tempWorkingPathName);\r\n\r\n    await workingFolder.ensureExists();\r\n\r\n    if (world) {\r\n      const inputFolder = workingFolder.ensureFolder(\"source-\" + settings.name);\r\n\r\n      await inputFolder.ensureExists();\r\n\r\n      await world.copyAsFolderTo(inputFolder);\r\n    }\r\n\r\n    const jsonContent = JSON.stringify(settings);\r\n\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.convertFile, jsonContent, true);\r\n\r\n    await workingFolder.load(true);\r\n\r\n    if (workingFolder.folderExists(settings.name)) {\r\n      const outputFolder = workingFolder.ensureFolder(settings.name);\r\n\r\n      const zs = new ZipStorage();\r\n\r\n      await StorageUtilities.syncFolderTo(outputFolder, zs.rootFolder, false, false, false);\r\n\r\n      const resultBytes = await zs.generateCompressedUint8ArrayAsync();\r\n\r\n      return resultBytes;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async syncFlatPackRefWorldTo(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    worldFolder: IFolder,\r\n    name: string\r\n  ) {\r\n    if (creatorTools.workingStorage === null) {\r\n      Log.fail(\"Did not find expected working storage.\");\r\n      return;\r\n    }\r\n\r\n    const mcworld = await ProjectExporter.generateFlatGameTestWorldWithPackRefs(project, name);\r\n\r\n    if (mcworld !== undefined) {\r\n      // Log.debugAlert(\"Synchronizing '\" + worldFolder.name + \"' with '\" + worldFolder.files.length + \"' files\");\r\n\r\n      await mcworld.syncFolderTo(worldFolder);\r\n    } else {\r\n      Log.fail(\"Could not retrieve flat game test world\");\r\n    }\r\n  }\r\n\r\n  static async generateAndInvokeFlatPackRefMCWorld(creatorTools: CreatorTools, project: Project) {\r\n    if (creatorTools.workingStorage === null) {\r\n      Log.fail(\"Did not find expected working storage.\");\r\n      return;\r\n    }\r\n\r\n    const fileName = project.name + \" flatpack.mcworld\";\r\n    const name = project.name + \" Flat\";\r\n\r\n    const mcworld = await ProjectExporter.generateFlatGameTestWorldWithPackRefs(project, name);\r\n\r\n    if (mcworld !== undefined) {\r\n      const newBytes = await mcworld.getBytes();\r\n\r\n      if (newBytes !== undefined) {\r\n        const file = creatorTools.workingStorage.rootFolder.ensureFile(fileName);\r\n\r\n        file.setContent(newBytes);\r\n\r\n        await file.saveContent();\r\n\r\n        if (AppServiceProxy.hasAppService) {\r\n          await AppServiceProxy.sendAsync(AppServiceProxyCommands.shellOpenPath, file.fullPath);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async generateFlatGameTestWorldWithPackRefs(project: Project, worldName: string) {\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const file = Database.contentFolder.ensureFile(\"flatcreativegt.mcworld\");\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    if (file.content instanceof Uint8Array) {\r\n      const mcworld = await this.generateBetaApisWorldWithPackRefs(project, worldName, file.content);\r\n\r\n      return mcworld;\r\n    }\r\n\r\n    Log.fail(\"Unexpectedly could not find default content.\");\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async generateMCAddonAsZip(\r\n    creatorTools: CreatorTools,\r\n    project: Project,\r\n    returnAsBlob: boolean\r\n  ): Promise<Blob | Uint8Array | undefined> {\r\n    const operId = await creatorTools.notifyOperationStarted(\"Exporting '\" + project.name + \"' as MCPack\");\r\n\r\n    const zipStorage = new ZipStorage();\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      return undefined;\r\n    }\r\n\r\n    await ProjectExporter.deployProjectPacks(\r\n      project,\r\n      projectBuild,\r\n      zipStorage.rootFolder,\r\n      undefined,\r\n      FolderDeploy.noFolders\r\n    );\r\n\r\n    await zipStorage.rootFolder.saveAll();\r\n\r\n    if (returnAsBlob) {\r\n      const zipBinary = await zipStorage.generateBlobAsync();\r\n\r\n      await creatorTools.notifyOperationEnded(\r\n        operId,\r\n        \"Export MCPack of '\" + project.name + \"' created; downloading...\"\r\n      );\r\n\r\n      return zipBinary;\r\n    } else {\r\n      const zipBytes = await zipStorage.generateUint8ArrayAsync();\r\n\r\n      return zipBytes;\r\n    }\r\n  }\r\n\r\n  static async generateWorldWithPacksAndContent(\r\n    project: Project,\r\n    worldName: string,\r\n    worldContent?: Uint8Array,\r\n    worldSettings?: IWorldSettings\r\n  ): Promise<MCWorld | undefined> {\r\n    await project.ensureLoadedProjectFolder();\r\n\r\n    const mcworld = new MCWorld();\r\n\r\n    if (worldContent) {\r\n      mcworld.loadFromBytes(worldContent);\r\n    } else if (!worldSettings) {\r\n      const levelDat = mcworld.ensureLevelData();\r\n      levelDat.ensureDefaults();\r\n    }\r\n\r\n    if (worldSettings) {\r\n      mcworld.applyWorldSettings(worldSettings);\r\n    }\r\n\r\n    mcworld.project = project;\r\n\r\n    const projectBuild = await ProjectExporter.prepareProject(project);\r\n\r\n    if (!projectBuild) {\r\n      return undefined;\r\n    }\r\n\r\n    await this.ensureExperimentsEnabledOnWorld(mcworld, project);\r\n\r\n    mcworld.name = worldName;\r\n\r\n    await ProjectExporter.deployProjectPacks(project, projectBuild, mcworld.storage.rootFolder, mcworld);\r\n\r\n    return mcworld;\r\n  }\r\n\r\n  static async ensureExperimentsEnabledOnWorld(mcworld: MCWorld, project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const itemFile = projectItem.primaryFile;\r\n\r\n        if (itemFile) {\r\n          if (!itemFile.isContentLoaded) {\r\n            await itemFile.loadContent();\r\n          }\r\n\r\n          let content = itemFile.content;\r\n\r\n          if (typeof content === \"string\" && content.indexOf(\"-beta\") >= 0) {\r\n            mcworld.betaApisExperiment = true;\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const itemFile = projectItem.primaryFile;\r\n        if (itemFile) {\r\n          if (!itemFile.isContentLoaded) {\r\n            await itemFile.loadContent();\r\n          }\r\n\r\n          let content = itemFile.content;\r\n\r\n          if (typeof content === \"string\" && content.indexOf(\"pbr\") >= 0 && content.indexOf(\"capabilities\") >= 0) {\r\n            mcworld.deferredTechnicalPreviewExperiment = true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async generateBetaApisWorldWithPackRefs(\r\n    project: Project,\r\n    worldName: string,\r\n    worldContent: Uint8Array\r\n  ): Promise<MCWorld> {\r\n    const mcworld = new MCWorld();\r\n    mcworld.project = project;\r\n\r\n    await mcworld.loadFromBytes(worldContent);\r\n\r\n    const behaviorPackFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (behaviorPackFolder !== null) {\r\n      mcworld.ensureBehaviorPack(project.defaultBehaviorPackUniqueId, project.defaultBehaviorPackVersion, project.name);\r\n    }\r\n\r\n    const resourcePackFolder = await project.getDefaultResourcePackFolder();\r\n    if (resourcePackFolder !== null) {\r\n      mcworld.ensureResourcePack(project.defaultResourcePackUniqueId, project.defaultResourcePackVersion, project.name);\r\n    }\r\n\r\n    mcworld.betaApisExperiment = true;\r\n    mcworld.name = worldName;\r\n\r\n    return mcworld;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * CreateCommand - Create a new Minecraft project\r\n *\r\n * This ToolCommand provides project creation capabilities across all surfaces.\r\n * It uses the same core libraries as the CLI CreateCommand but without\r\n * the interactive prompting logic.\r\n *\r\n * The command creates a project from a template, syncing content from GitHub.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectTemplateProvider } from \"../AutocompleteProviders\";\r\nimport { GalleryItemType } from \"../../IGalleryItem\";\r\nimport ProjectExporter from \"../../ProjectExporter\";\r\nimport ProjectUtilities from \"../../ProjectUtilities\";\r\nimport Project, { ProjectAutoDeploymentMode } from \"../../Project\";\r\nimport { ProjectFocus } from \"../../IProjectData\";\r\n\r\nexport class CreateCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"create\",\r\n    description: \"Create a new Minecraft project from a template\",\r\n    aliases: [\"c\", \"new\"],\r\n    category: \"Project\",\r\n    arguments: [\r\n      {\r\n        name: \"template\",\r\n        description: \"Template ID (e.g., addonstarter, tsstarter, addonfull)\",\r\n        type: \"choice\",\r\n        required: false,\r\n        defaultValue: \"addonstarter\",\r\n        autocompleteProvider: projectTemplateProvider,\r\n      },\r\n      {\r\n        name: \"name\",\r\n        description: \"Project name\",\r\n        type: \"string\",\r\n        required: false,\r\n        defaultValue: \"my-project\",\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"creator\",\r\n        shortName: \"c\",\r\n        description: \"Creator name for the project\",\r\n        type: \"string\",\r\n        defaultValue: \"Creator\",\r\n      },\r\n      {\r\n        name: \"description\",\r\n        shortName: \"d\",\r\n        description: \"Project description\",\r\n        type: \"string\",\r\n      },\r\n      {\r\n        name: \"output\",\r\n        shortName: \"o\",\r\n        description: \"Output folder path\",\r\n        type: \"path\",\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\r\n      \"/create\",\r\n      \"/create addonstarter my-addon\",\r\n      \"/create tsstarter my-ts-project --creator MyName\",\r\n      '/create addonfull my-full-addon --description \"A complete addon\"',\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const templateId = args[0] || \"addonstarter\";\r\n    const projectName = args[1] || \"my-project\";\r\n    const creator = (flags.creator as string) || \"Creator\";\r\n    const description = (flags.description as string) || projectName;\r\n    const outputPath = flags.output as string | undefined;\r\n\r\n    if (!context.creatorTools) {\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    const creatorTools = context.creatorTools;\r\n\r\n    // Load gallery to find template\r\n    await creatorTools.loadGallery();\r\n\r\n    if (!creatorTools.gallery) {\r\n      return this.error(\"GALLERY_ERROR\", \"Could not load project gallery\");\r\n    }\r\n\r\n    // Find the template\r\n    const galProject = await creatorTools.getGalleryProjectById(templateId);\r\n\r\n    if (!galProject) {\r\n      // List available templates\r\n      const projects = creatorTools.getGalleryProjectByType(GalleryItemType.project) || [];\r\n      const available = projects.map((p) => p.id).join(\", \");\r\n      return this.error(\"TEMPLATE_NOT_FOUND\", `Template '${templateId}' not found. Available: ${available}`);\r\n    }\r\n\r\n    context.output.info(`Creating project '${projectName}' from template '${galProject.title}'...`);\r\n\r\n    // Determine output location\r\n    let project: Project;\r\n\r\n    if (outputPath) {\r\n      // Use specified output path\r\n      project = new Project(creatorTools, projectName, null);\r\n      project.localFolderPath = outputPath;\r\n      project.autoDeploymentMode = ProjectAutoDeploymentMode.noAutoDeployment;\r\n    } else if (context.project) {\r\n      // Use current project folder if available\r\n      project = context.project;\r\n    } else {\r\n      // Create in projects storage\r\n      const newProjectName = await creatorTools.getNewProjectName(projectName);\r\n      project = await creatorTools.createNewProject(\r\n        newProjectName,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        ProjectFocus.general,\r\n        false,\r\n        undefined\r\n      );\r\n    }\r\n\r\n    if (!project) {\r\n      return this.error(\"PROJECT_ERROR\", \"Could not create project\");\r\n    }\r\n\r\n    try {\r\n      // Sync from GitHub\r\n      project = await ProjectExporter.syncProjectFromGitHub(\r\n        true,\r\n        creatorTools,\r\n        galProject.gitHubRepoName,\r\n        galProject.gitHubOwner,\r\n        galProject.gitHubBranch,\r\n        galProject.gitHubFolder,\r\n        projectName,\r\n        project,\r\n        galProject.fileList,\r\n        async (message: string) => {\r\n          context.output.debug(message);\r\n        },\r\n        true\r\n      );\r\n\r\n      // Apply customizations\r\n      if (creator) {\r\n        await ProjectUtilities.applyCreator(project, creator);\r\n      }\r\n\r\n      const suggestedShortName = ProjectUtilities.getSuggestedProjectShortName(creator, projectName);\r\n      await ProjectUtilities.processNewProject(project, projectName, description, suggestedShortName, false);\r\n\r\n      await project.save();\r\n\r\n      // Set context.project so the UI navigates into the newly created project\r\n      context.project = project;\r\n\r\n      const projectPath = project.projectFolder?.fullPath || project.localFolderPath || \"unknown location\";\r\n      context.output.success(`Project created at: ${projectPath}`);\r\n\r\n      return this.success(`Project '${projectName}' created successfully`, {\r\n        projectPath,\r\n        template: galProject.id,\r\n        name: projectName,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"CREATE_ERROR\", `Failed to create project: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Custom completions for template argument.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex === 0) {\r\n      // Complete template names\r\n      return projectTemplateProvider(partialArg, context);\r\n    }\r\n    return [];\r\n  }\r\n}\r\n\r\nexport const createCommand = new CreateCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\n/**\r\n * Pre-encoded placeholder PNG textures as base64.\r\n * These are small, simple solid-color textures that work in all environments.\r\n * Generated using MCP writeImageFileFromPixelArt tool.\r\n */\r\nconst PLACEHOLDER_TEXTURES = {\r\n  // 64x64 gray solid for entities\r\n  entity:\r\n    \"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAeElEQVR4AeXBAQEAMAyDMI7yOt+FkLxtR5jESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzESZzEfbNUAv/+T/uYAAAAAElFTkSuQmCC\",\r\n\r\n  // 16x16 gray solid for blocks\r\n  block:\r\n    \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALElEQVR4AaXBAQEAMAyDMI7yOt9FkLxtRyCRRBJJJJFEEkkkkUQSSSSRRBJ9YpoCnyiF6V0AAAAASUVORK5CYII=\",\r\n\r\n  // 16x16 light gray solid for items\r\n  item: \"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALUlEQVR4AaXBAQEAMAyDMI5/EXW6iyB5245AIokkkkgiiSSSSCKJJJJIIokk+ufpAv+MBfj8AAAAAElFTkSuQmCC\",\r\n};\r\n\r\nexport function parseHex(hex: string): { r: number; g: number; b: number } {\r\n  const h = hex.startsWith(\"#\") ? hex.slice(1) : hex;\r\n  return {\r\n    r: parseInt(h.slice(0, 2), 16) || 128,\r\n    g: parseInt(h.slice(2, 4), 16) || 128,\r\n    b: parseInt(h.slice(4, 6), 16) || 128,\r\n  };\r\n}\r\n\r\n/**\r\n * Generate checkerboard RGBA pixel data for two colors.\r\n */\r\nfunction generateCheckerboardPixels(\r\n  width: number,\r\n  height: number,\r\n  primaryHex: string,\r\n  secondaryHex: string,\r\n  cellSize: number\r\n): Uint8Array {\r\n  const pixels = new Uint8Array(width * height * 4);\r\n  const primary = parseHex(primaryHex);\r\n  const secondary = parseHex(secondaryHex);\r\n\r\n  for (let y = 0; y < height; y++) {\r\n    for (let x = 0; x < width; x++) {\r\n      const idx = (y * width + x) * 4;\r\n      const isSecondary = Math.floor(x / cellSize) % 2 === Math.floor(y / cellSize) % 2;\r\n      const color = isSecondary ? secondary : primary;\r\n\r\n      pixels[idx] = color.r;\r\n      pixels[idx + 1] = color.g;\r\n      pixels[idx + 2] = color.b;\r\n      pixels[idx + 3] = 255;\r\n    }\r\n  }\r\n\r\n  return pixels;\r\n}\r\n\r\n/**\r\n * Cross-platform PNG encoder that works in both browser and NodeJS environments.\r\n * Provides pre-encoded placeholder textures for reliable cross-platform use.\r\n */\r\nexport default class PngEncoder {\r\n  /**\r\n   * Create a simple solid-color texture.\r\n   *\r\n   * @param width Texture width\r\n   * @param height Texture height\r\n   * @param hexColor Hex color (e.g., \"#FF0000\")\r\n   * @returns PNG data as Uint8Array\r\n   */\r\n  static createSolidColorPng(width: number, height: number, hexColor: string): Uint8Array | undefined {\r\n    const { r, g, b } = parseHex(hexColor);\r\n\r\n    const decoded = ImageCodec.createSolidColor(width, height, r, g, b, 255);\r\n    return ImageCodec.encodeToPngSync(decoded.pixels, decoded.width, decoded.height);\r\n  }\r\n\r\n  /**\r\n   * Create a checkerboard pattern texture with two colors.\r\n   *\r\n   * @param width Texture width\r\n   * @param height Texture height\r\n   * @param primaryHex Primary color hex\r\n   * @param secondaryHex Secondary color hex\r\n   * @param cellSize Size of each checkerboard cell\r\n   * @returns PNG data as Uint8Array\r\n   */\r\n  static createCheckerboardPng(\r\n    width: number,\r\n    height: number,\r\n    primaryHex: string,\r\n    secondaryHex: string,\r\n    cellSize: number = 8\r\n  ): Uint8Array | undefined {\r\n    const pixels = generateCheckerboardPixels(width, height, primaryHex, secondaryHex, cellSize);\r\n\r\n    // Try runtime encoding first\r\n    const encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (encoded) {\r\n      return encoded;\r\n    }\r\n\r\n    // Fall back to pre-encoded placeholder for browser environments\r\n    if (width === 64 && height === 64) {\r\n      return PngEncoder.getPlaceholderTexture(\"entity\");\r\n    } else if (width === 16 && height === 16) {\r\n      return PngEncoder.getPlaceholderTexture(\"block\");\r\n    }\r\n\r\n    // Last resort: return entity placeholder scaled\r\n    return PngEncoder.getPlaceholderTexture(\"entity\");\r\n  }\r\n\r\n  /**\r\n   * Async version of createCheckerboardPng that works in browser environments.\r\n   * Falls back to sync encoding first, then tries browser Canvas API.\r\n   */\r\n  static async createCheckerboardPngAsync(\r\n    width: number,\r\n    height: number,\r\n    primaryHex: string,\r\n    secondaryHex: string,\r\n    cellSize: number = 8\r\n  ): Promise<Uint8Array | undefined> {\r\n    const pixels = generateCheckerboardPixels(width, height, primaryHex, secondaryHex, cellSize);\r\n\r\n    // Try sync encoding first (Node.js)\r\n    const encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (encoded) {\r\n      return encoded;\r\n    }\r\n\r\n    // Try async browser encoding (Canvas API)\r\n    const browserEncoded = await ImageCodec.encodeToPngBrowser(pixels, width, height);\r\n    if (browserEncoded) {\r\n      return browserEncoded;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a pre-encoded placeholder texture.\r\n   * These work in all environments without requiring runtime PNG encoding.\r\n   *\r\n   * @param type Type of placeholder: \"entity\" (64x64), \"block\" (16x16), or \"item\" (16x16)\r\n   * @returns PNG data as Uint8Array\r\n   */\r\n  static getPlaceholderTexture(type: \"entity\" | \"block\" | \"item\"): Uint8Array {\r\n    let base64: string;\r\n    switch (type) {\r\n      case \"entity\":\r\n        base64 = PLACEHOLDER_TEXTURES.entity;\r\n        break;\r\n      case \"block\":\r\n        base64 = PLACEHOLDER_TEXTURES.block;\r\n        break;\r\n      case \"item\":\r\n        base64 = PLACEHOLDER_TEXTURES.item;\r\n        break;\r\n      default:\r\n        base64 = PLACEHOLDER_TEXTURES.entity;\r\n    }\r\n    return Utilities.base64ToUint8Array(base64);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ItemTextureTemplates - Template-based item texture generation.\r\n *\r\n * Stores 16x16 shape masks for each item type (sword, helmet, etc.) extracted\r\n * from the custom_items sample pack. Each pixel is encoded as a shade level:\r\n *   0 = transparent\r\n *   1 = dark (shadow)\r\n *   2 = mid (base color)\r\n *   3 = light (highlight)\r\n *\r\n * The recolor function applies a user-chosen color, producing darker/lighter\r\n * variants for depth, then encodes the result as RGBA pixels.\r\n */\r\n\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport { parseHex } from \"./PngEncoder\";\r\n\r\n/**\r\n * 16x16 shape masks. Each string is 16 rows of 16 chars.\r\n * Chars: '0'=transparent, '1'=dark, '2'=mid, '3'=highlight\r\n */\r\nconst TEMPLATES: Record<string, string> = {\r\n  sword:\r\n    \"0000000000000111\" +\r\n    \"0000000000001331\" +\r\n    \"0000000000013231\" +\r\n    \"0000000000132310\" +\r\n    \"0000000001322100\" +\r\n    \"0000000013221000\" +\r\n    \"0011000122210000\" +\r\n    \"0011101222100000\" +\r\n    \"0001112121000000\" +\r\n    \"0001111210000000\" +\r\n    \"0000111100000000\" +\r\n    \"0001111110000000\" +\r\n    \"0012101111000000\" +\r\n    \"1111000011000000\" +\r\n    \"1110000000000000\" +\r\n    \"1110000000000000\",\r\n\r\n  tool:\r\n    \"0000000000000000\" +\r\n    \"0000000002300000\" +\r\n    \"0000000023300000\" +\r\n    \"0000000233000000\" +\r\n    \"0000000230000000\" +\r\n    \"0000000213000330\" +\r\n    \"0000000231203320\" +\r\n    \"0000000222133200\" +\r\n    \"0000002222222000\" +\r\n    \"0000022200000000\" +\r\n    \"0000232000000000\" +\r\n    \"0002320000000000\" +\r\n    \"0023200000000000\" +\r\n    \"0232000000000000\" +\r\n    \"2220000000000000\" +\r\n    \"2200000000000000\",\r\n\r\n  helmet:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000011111100000\" +\r\n    \"0000122222210000\" +\r\n    \"0001233322221000\" +\r\n    \"0001233222221000\" +\r\n    \"0001221111221000\" +\r\n    \"0001211111121000\" +\r\n    \"0001211111121000\" +\r\n    \"0001211111121000\" +\r\n    \"0000110000110000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\",\r\n\r\n  chestplate:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0111110000111110\" +\r\n    \"0133210000133210\" +\r\n    \"0132221001232210\" +\r\n    \"0122232112222210\" +\r\n    \"0122233332222210\" +\r\n    \"0112333222222110\" +\r\n    \"0001332222221000\" +\r\n    \"0001232222221000\" +\r\n    \"0001222222221000\" +\r\n    \"0001222222221000\" +\r\n    \"0001222222221000\" +\r\n    \"0000122222210000\" +\r\n    \"0000011111100000\" +\r\n    \"0000000000000000\",\r\n\r\n  leggings:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000111111110000\" +\r\n    \"0001333332221000\" +\r\n    \"0001332222221000\" +\r\n    \"0001322222221000\" +\r\n    \"0001322112221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001111001111000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\",\r\n\r\n  boots:\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000111001110000\" +\r\n    \"0001331001331000\" +\r\n    \"0001331001321000\" +\r\n    \"0001321001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0001221001221000\" +\r\n    \"0012221001222100\" +\r\n    \"0122221001222210\" +\r\n    \"0122211001122210\" +\r\n    \"0111100000011110\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\" +\r\n    \"0000000000000000\",\r\n\r\n  food:\r\n    \"0000002200000000\" +\r\n    \"0000023320000000\" +\r\n    \"0000232232220000\" +\r\n    \"0002232332332000\" +\r\n    \"0023323323223200\" +\r\n    \"0232232223233200\" +\r\n    \"0232232222332200\" +\r\n    \"0223322223222000\" +\r\n    \"0022222223233200\" +\r\n    \"0002332332322200\" +\r\n    \"0023223222322200\" +\r\n    \"0023223233232000\" +\r\n    \"0002332322320000\" +\r\n    \"0000222322200000\" +\r\n    \"0000000220000000\" +\r\n    \"0000000000000000\",\r\n};\r\n\r\n/** Map item trait IDs to template names */\r\nconst TRAIT_TO_TEMPLATE: Record<string, string> = {\r\n  sword: \"sword\",\r\n  pickaxe: \"tool\",\r\n  axe: \"tool\",\r\n  shovel: \"tool\",\r\n  armor_helmet: \"helmet\",\r\n  armor_chestplate: \"chestplate\",\r\n  armor_leggings: \"leggings\",\r\n  armor_boots: \"boots\",\r\n  food: \"food\",\r\n};\r\n\r\nfunction clamp(v: number): number {\r\n  return Math.max(0, Math.min(255, Math.round(v)));\r\n}\r\n\r\n/**\r\n * Generate a recolored 16x16 RGBA pixel array from a template and a hex color.\r\n *\r\n * Shade levels map to color multipliers:\r\n *   1 (dark)      = color * 0.45\r\n *   2 (mid/base)  = color * 0.75\r\n *   3 (highlight) = color * 1.0 + 40 brightness boost\r\n */\r\nexport function recolorTemplate(\r\n  templateName: string,\r\n  hexColor: string\r\n): { pixels: Uint8Array; width: number; height: number } | undefined {\r\n  const template = TEMPLATES[templateName];\r\n  if (!template || template.length !== 256) {\r\n    return undefined;\r\n  }\r\n\r\n  const { r, g, b } = parseHex(hexColor);\r\n  const pixels = new Uint8Array(16 * 16 * 4);\r\n\r\n  for (let i = 0; i < 256; i++) {\r\n    const shade = template.charCodeAt(i) - 48; // '0'=0, '1'=1, '2'=2, '3'=3\r\n    const idx = i * 4;\r\n\r\n    if (shade === 0) {\r\n      // Transparent\r\n      pixels[idx] = 0;\r\n      pixels[idx + 1] = 0;\r\n      pixels[idx + 2] = 0;\r\n      pixels[idx + 3] = 0;\r\n    } else if (shade === 1) {\r\n      // Dark shadow\r\n      pixels[idx] = clamp(r * 0.45);\r\n      pixels[idx + 1] = clamp(g * 0.45);\r\n      pixels[idx + 2] = clamp(b * 0.45);\r\n      pixels[idx + 3] = 255;\r\n    } else if (shade === 2) {\r\n      // Mid tone (base)\r\n      pixels[idx] = clamp(r * 0.75);\r\n      pixels[idx + 1] = clamp(g * 0.75);\r\n      pixels[idx + 2] = clamp(b * 0.75);\r\n      pixels[idx + 3] = 255;\r\n    } else {\r\n      // Highlight\r\n      pixels[idx] = clamp(r + 40);\r\n      pixels[idx + 1] = clamp(g + 40);\r\n      pixels[idx + 2] = clamp(b + 40);\r\n      pixels[idx + 3] = 255;\r\n    }\r\n  }\r\n\r\n  return { pixels, width: 16, height: 16 };\r\n}\r\n\r\n/**\r\n * Get the template name for an item based on its traits.\r\n * Returns undefined if no matching template exists.\r\n */\r\nexport function getTemplateForTraits(traits: string[]): string | undefined {\r\n  if (!traits) return undefined;\r\n\r\n  for (const traitId of traits) {\r\n    const template = TRAIT_TO_TEMPLATE[traitId];\r\n    if (template) {\r\n      return template;\r\n    }\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * Generate a recolored item texture PNG from traits and a color.\r\n * Returns PNG bytes, or undefined if no template matches or encoding fails.\r\n */\r\nexport async function generateItemTextureFromTemplate(\r\n  traits: string[],\r\n  hexColor: string\r\n): Promise<Uint8Array | undefined> {\r\n  const templateName = getTemplateForTraits(traits);\r\n  if (!templateName) {\r\n    return undefined;\r\n  }\r\n\r\n  const result = recolorTemplate(templateName, hexColor);\r\n  if (!result) {\r\n    return undefined;\r\n  }\r\n\r\n  // Try sync encoding (Node.js)\r\n  const syncEncoded = ImageCodec.encodeToPngSync(result.pixels, result.width, result.height);\r\n  if (syncEncoded) {\r\n    return syncEncoded;\r\n  }\r\n\r\n  // Try async browser encoding (Canvas API)\r\n  const browserEncoded = await ImageCodec.encodeToPngBrowser(result.pixels, result.width, result.height);\r\n  if (browserEncoded) {\r\n    return browserEncoded;\r\n  }\r\n\r\n  return undefined;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentTraits - Trait System for Content Generation\r\n *\r\n * This module defines the trait architecture for the Content Wizard meta-schema.\r\n * Traits are pre-packaged bundles of Minecraft components, states, and behaviors\r\n * that can be easily combined to create complex content.\r\n *\r\n * ARCHITECTURE:\r\n * - ITraitData: Base interface for all trait data\r\n * - IEntityTraitData: Entity-specific (has component groups, events)\r\n * - IBlockTraitData: Block-specific (has properties, permutations)\r\n * - IItemTraitData: Item-specific (has events, simpler structure)\r\n *\r\n * - ContentTrait: Abstract base class for trait implementations\r\n * - EntityContentTrait: Generates IEntityTraitData\r\n * - BlockContentTrait: Generates IBlockTraitData\r\n * - ItemContentTrait: Generates IItemTraitData\r\n *\r\n * Each ContentTrait implementation encapsulates the logic for a specific trait\r\n * and can accept parameters to customize the generated data.\r\n */\r\n\r\n// ============================================================================\r\n// BASE TRAIT DATA INTERFACES\r\n// ============================================================================\r\n\r\n/**\r\n * Base interface for all trait data.\r\n * Contains common metadata about a trait.\r\n */\r\nexport interface ITraitData {\r\n  /** Unique identifier for this trait */\r\n  id: string;\r\n\r\n  /** Human-readable display name */\r\n  displayName: string;\r\n\r\n  /** Description of what this trait provides */\r\n  description: string;\r\n\r\n  /** Category for UI grouping */\r\n  category: TraitCategory;\r\n\r\n  /** Other traits this requires */\r\n  requires?: string[];\r\n\r\n  /** Traits this conflicts with */\r\n  conflicts?: string[];\r\n\r\n  /** Base components that are always applied */\r\n  components: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Categories for organizing traits in the UI.\r\n */\r\nexport type TraitCategory =\r\n  | \"body_type\"\r\n  | \"behavior\"\r\n  | \"combat\"\r\n  | \"interaction\"\r\n  | \"special\"\r\n  | \"movement\"\r\n  | \"environment\"\r\n  | \"material\"\r\n  | \"shape\"\r\n  | \"tool\"\r\n  | \"armor\"\r\n  | \"consumable\"\r\n  | \"placement\"\r\n  | \"usable\"\r\n  | \"basic\"\r\n  | \"visual\"\r\n  | \"interactive\";\r\n\r\n// ============================================================================\r\n// ENTITY TRAIT DATA\r\n// ============================================================================\r\n\r\n/**\r\n * Entity-specific trait data.\r\n * Entities support component groups (states) and events (transitions).\r\n */\r\nexport interface IEntityTraitData extends ITraitData {\r\n  /**\r\n   * Component groups define different states the entity can be in.\r\n   * Each group is a set of components that are applied together.\r\n   * Example: \"wild\" vs \"tamed\" states for a wolf.\r\n   */\r\n  componentGroups?: Record<string, Record<string, any>>;\r\n\r\n  /**\r\n   * Events define transitions between states.\r\n   * They can add/remove component groups and trigger other events.\r\n   */\r\n  events?: Record<string, IEntityEvent>;\r\n\r\n  /**\r\n   * The spawn event is triggered when the entity first spawns.\r\n   * Use this to set initial state.\r\n   */\r\n  spawnEvent?: IEntityEvent;\r\n\r\n  /**\r\n   * Resource-related data (textures, animations, sounds).\r\n   */\r\n  resources?: {\r\n    textures?: Record<string, string>;\r\n    animations?: Record<string, string>;\r\n    sounds?: Record<string, string>;\r\n    particles?: string[];\r\n  };\r\n}\r\n\r\n/**\r\n * Entity event structure.\r\n */\r\nexport interface IEntityEvent {\r\n  /** Add component groups */\r\n  add?: {\r\n    component_groups: string[];\r\n  };\r\n\r\n  /** Remove component groups */\r\n  remove?: {\r\n    component_groups: string[];\r\n  };\r\n\r\n  /** Trigger another event */\r\n  trigger?: {\r\n    event: string;\r\n    target?: string;\r\n    filters?: any;\r\n  };\r\n\r\n  /** Queue a command */\r\n  queue_command?: {\r\n    command: string | string[];\r\n  };\r\n\r\n  /** Randomize between options */\r\n  randomize?: Array<{\r\n    weight: number;\r\n    add?: { component_groups: string[] };\r\n    remove?: { component_groups: string[] };\r\n    trigger?: { event: string; target?: string };\r\n  }>;\r\n\r\n  /** Sequence of events */\r\n  sequence?: IEntityEvent[];\r\n\r\n  /** Set property value */\r\n  set_property?: Record<string, any>;\r\n}\r\n\r\n// ============================================================================\r\n// BLOCK TRAIT DATA\r\n// ============================================================================\r\n\r\n/**\r\n * Block-specific trait data.\r\n * Blocks support properties (states) and permutations (conditional components).\r\n */\r\nexport interface IBlockTraitData extends ITraitData {\r\n  /** Block properties (states) - e.g., { \"custom:open\": [false, true] } */\r\n  properties?: Record<string, (string | number | boolean)[]>;\r\n\r\n  /** Conditional component application based on property values */\r\n  permutations?: IBlockPermutation[];\r\n\r\n  /** Block event triggers */\r\n  events?: Record<string, IBlockEvent>;\r\n\r\n  /** Geometry files to include in the resource pack (path \u2192 geo JSON content) */\r\n  geometryFiles?: { path: string; content: object }[];\r\n\r\n  /**\r\n   * Minecraft-native block traits to add to description.traits.\r\n   * These are built-in Minecraft traits like minecraft:placement_position\r\n   * and minecraft:connection that the engine handles automatically.\r\n   * Example: { \"minecraft:placement_position\": { enabled_states: [\"minecraft:vertical_half\"] } }\r\n   */\r\n  minecraftTraits?: Record<string, any>;\r\n\r\n  /** Tags for categorization (e.g., [\"stone\", \"pickaxe_mineable\"]) */\r\n  tags?: string[];\r\n\r\n  /** Menu category for creative inventory */\r\n  menuCategory?: {\r\n    category: string;\r\n    group?: string;\r\n  };\r\n}\r\n\r\n/**\r\n * Block permutation - applies components when condition is met.\r\n */\r\nexport interface IBlockPermutation {\r\n  /** Molang condition (e.g., \"q.block_property('custom:open') == true\") */\r\n  condition: string;\r\n\r\n  /** Components to apply when condition is true */\r\n  components: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Block event structure.\r\n */\r\nexport interface IBlockEvent {\r\n  /** Set block property values */\r\n  set_block_property?: Record<string, any>;\r\n\r\n  /** Trigger event on another block/entity */\r\n  trigger?: {\r\n    event: string;\r\n    target?: string;\r\n    conditions?: any;\r\n    delay?: number;\r\n  };\r\n\r\n  /** Run command */\r\n  run_command?: {\r\n    command: string | string[];\r\n  };\r\n\r\n  /** Spawn loot */\r\n  spawn_loot?: {\r\n    table: string;\r\n  };\r\n\r\n  /** Sequence of actions */\r\n  sequence?: IBlockEvent[];\r\n\r\n  /** Randomized actions */\r\n  randomize?: Array<\r\n    {\r\n      weight: number;\r\n    } & IBlockEvent\r\n  >;\r\n}\r\n\r\n// ============================================================================\r\n// ITEM TRAIT DATA\r\n// ============================================================================\r\n\r\n/**\r\n * Item-specific trait data.\r\n * Items have a simpler event system than entities.\r\n */\r\nexport interface IItemTraitData extends ITraitData {\r\n  /** Item events (on_use, on_consume, etc.) */\r\n  events?: Record<string, IItemEvent>;\r\n\r\n  /** Attachable definition for equipped rendering */\r\n  attachable?: IAttachableData;\r\n}\r\n\r\n/**\r\n * Item event structure.\r\n */\r\nexport interface IItemEvent {\r\n  /** Run command on use */\r\n  run_command?: {\r\n    command: string | string[];\r\n    target?: string;\r\n  };\r\n\r\n  /** Trigger entity event */\r\n  trigger?: {\r\n    event: string;\r\n    target?: string;\r\n  };\r\n\r\n  /** Damage item */\r\n  damage?: {\r\n    type: string;\r\n    amount: number;\r\n  };\r\n\r\n  /** Decrement stack */\r\n  decrement_stack?: {};\r\n\r\n  /** Swing animation */\r\n  swing?: boolean;\r\n\r\n  /** Shoot projectile */\r\n  shoot?: {\r\n    projectile: string;\r\n    launch_power?: number;\r\n  };\r\n\r\n  /** Sequence of events */\r\n  sequence?: IItemEvent[];\r\n}\r\n\r\n/**\r\n * Attachable definition for items that render when equipped.\r\n */\r\nexport interface IAttachableData {\r\n  /** Materials for rendering */\r\n  materials?: Record<string, string>;\r\n\r\n  /** Texture references */\r\n  textures?: Record<string, string>;\r\n\r\n  /** Geometry reference */\r\n  geometry?: Record<string, string>;\r\n\r\n  /** Animation references */\r\n  animations?: Record<string, string>;\r\n\r\n  /** Render controllers */\r\n  renderControllers?: string[];\r\n\r\n  /** Scripts for attachable */\r\n  scripts?: {\r\n    animate?: string[];\r\n  };\r\n}\r\n\r\n// ============================================================================\r\n// CONTENT TRAIT BASE CLASSES\r\n// ============================================================================\r\n\r\n/**\r\n * Configuration options that can be passed to traits.\r\n */\r\nexport interface ITraitConfig {\r\n  [key: string]: any;\r\n}\r\n\r\n/**\r\n * Abstract base class for entity content traits.\r\n */\r\nexport abstract class EntityContentTrait {\r\n  /** Unique identifier for this trait */\r\n  abstract get id(): string;\r\n\r\n  /**\r\n   * Generate the trait data with optional configuration.\r\n   * @param config - Optional parameters to customize the trait\r\n   */\r\n  abstract getData(config?: ITraitConfig): IEntityTraitData;\r\n}\r\n\r\n/**\r\n * Abstract base class for block content traits.\r\n */\r\nexport abstract class BlockContentTrait {\r\n  /** Unique identifier for this trait */\r\n  abstract get id(): string;\r\n\r\n  /**\r\n   * Generate the trait data with optional configuration.\r\n   * @param config - Optional parameters to customize the trait\r\n   */\r\n  abstract getData(config?: ITraitConfig): IBlockTraitData;\r\n}\r\n\r\n/**\r\n * Abstract base class for item content traits.\r\n */\r\nexport abstract class ItemContentTrait {\r\n  /** Unique identifier for this trait */\r\n  abstract get id(): string;\r\n\r\n  /**\r\n   * Generate the trait data with optional configuration.\r\n   * @param config - Optional parameters to customize the trait\r\n   */\r\n  abstract getData(config?: ITraitConfig): IItemTraitData;\r\n}\r\n\r\n// ============================================================================\r\n// TRAIT REGISTRY\r\n// ============================================================================\r\n\r\n/**\r\n * Registry for all trait implementations.\r\n * Allows lookup by trait ID.\r\n */\r\nexport class TraitRegistry {\r\n  private static entityTraits: Map<string, EntityContentTrait> = new Map();\r\n  private static blockTraits: Map<string, BlockContentTrait> = new Map();\r\n  private static itemTraits: Map<string, ItemContentTrait> = new Map();\r\n\r\n  static registerEntityTrait(trait: EntityContentTrait): void {\r\n    this.entityTraits.set(trait.id, trait);\r\n  }\r\n\r\n  static registerBlockTrait(trait: BlockContentTrait): void {\r\n    this.blockTraits.set(trait.id, trait);\r\n  }\r\n\r\n  static registerItemTrait(trait: ItemContentTrait): void {\r\n    this.itemTraits.set(trait.id, trait);\r\n  }\r\n\r\n  static getEntityTrait(id: string): EntityContentTrait | undefined {\r\n    return this.entityTraits.get(id);\r\n  }\r\n\r\n  static getBlockTrait(id: string): BlockContentTrait | undefined {\r\n    return this.blockTraits.get(id);\r\n  }\r\n\r\n  static getItemTrait(id: string): ItemContentTrait | undefined {\r\n    return this.itemTraits.get(id);\r\n  }\r\n\r\n  static getAllEntityTraits(): EntityContentTrait[] {\r\n    return Array.from(this.entityTraits.values());\r\n  }\r\n\r\n  static getAllBlockTraits(): BlockContentTrait[] {\r\n    return Array.from(this.blockTraits.values());\r\n  }\r\n\r\n  static getAllItemTraits(): ItemContentTrait[] {\r\n    return Array.from(this.itemTraits.values());\r\n  }\r\n\r\n  static getEntityTraitsByCategory(category: TraitCategory): EntityContentTrait[] {\r\n    return this.getAllEntityTraits().filter((t) => t.getData().category === category);\r\n  }\r\n\r\n  static getBlockTraitsByCategory(category: TraitCategory): BlockContentTrait[] {\r\n    return this.getAllBlockTraits().filter((t) => t.getData().category === category);\r\n  }\r\n\r\n  static getItemTraitsByCategory(category: TraitCategory): ItemContentTrait[] {\r\n    return this.getAllItemTraits().filter((t) => t.getData().category === category);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Humanoid body type - bipedal, can climb and jump.\r\n */\r\nexport class HumanoidEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"humanoid\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"humanoid\",\r\n      displayName: \"Humanoid\",\r\n      description: \"Bipedal humanoid body with arms and legs\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:jump.static\": {},\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          walk: \"animation.humanoid.walk\",\r\n          idle: \"animation.humanoid.idle\",\r\n          attack: \"animation.humanoid.attack\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Quadruped body type - four-legged animal.\r\n */\r\nexport class QuadrupedEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"quadruped\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"quadruped\",\r\n      displayName: \"Quadruped\",\r\n      description: \"Four-legged animal body\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:jump.static\": {},\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          walk: \"animation.quadruped.walk\",\r\n          idle: \"animation.quadruped.idle\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Small quadruped body type - rabbit, cat sized.\r\n */\r\nexport class QuadrupedSmallEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"quadruped_small\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"quadruped_small\",\r\n      displayName: \"Small Quadruped\",\r\n      description: \"Small four-legged animal (rabbit, cat size)\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:jump.static\": { jump_power: 0.6 },\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n        \"minecraft:scale\": { value: 0.5 },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Flying body type - bird, bat, phantom.\r\n */\r\nexport class FlyingEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"flying\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"flying\",\r\n      displayName: \"Flying\",\r\n      description: \"Can fly through the air\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:navigation.fly\": {\r\n          can_path_over_water: true,\r\n          can_path_over_lava: false,\r\n        },\r\n        \"minecraft:can_fly\": {},\r\n        \"minecraft:movement.fly\": {},\r\n      },\r\n      resources: {\r\n        animations: {\r\n          fly: \"animation.flying.fly\",\r\n          glide: \"animation.flying.glide\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Aquatic body type - fish, dolphin.\r\n */\r\nexport class AquaticEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"aquatic\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"aquatic\",\r\n      displayName: \"Aquatic\",\r\n      description: \"Lives in water, can swim\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:navigation.swim\": {\r\n          can_path_over_water: false,\r\n          can_swim: true,\r\n          avoid_damage_blocks: true,\r\n        },\r\n        \"minecraft:underwater_movement\": { value: 0.3 },\r\n        \"minecraft:movement.sway\": {\r\n          sway_amplitude: 0.0,\r\n        },\r\n        \"minecraft:breathable\": {\r\n          total_supply: 15,\r\n          suffocate_time: 0,\r\n          breathes_water: true,\r\n          breathes_air: false,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Arthropod body type - spider, silverfish.\r\n */\r\nexport class ArthropodEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"arthropod\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"arthropod\",\r\n      displayName: \"Arthropod\",\r\n      description: \"Insect or spider-like body\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:can_climb\": {},\r\n        \"minecraft:mark_variant\": { value: 0 },\r\n        \"minecraft:movement.basic\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_damage_blocks: true,\r\n          can_walk_in_lava: false,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Slime body type - bouncy cube.\r\n */\r\nexport class SlimeEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"slime\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"slime\",\r\n      displayName: \"Slime\",\r\n      description: \"Bouncy cube body\",\r\n      category: \"body_type\",\r\n      components: {\r\n        \"minecraft:movement.sway\": { sway_amplitude: 0.0 },\r\n        \"minecraft:movement.jump\": {},\r\n        \"minecraft:jump.static\": {},\r\n        \"minecraft:navigation.walk\": {\r\n          avoid_damage_blocks: true,\r\n        },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          move: \"animation.slime.move\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Hostile behavior - attacks players on sight.\r\n */\r\nexport class HostileEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"hostile\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const attackDamage = config?.attackDamage ?? 3;\r\n\r\n    return {\r\n      id: \"hostile\",\r\n      displayName: \"Hostile\",\r\n      description: \"Attacks players on sight\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.hurt_by_target\": { priority: 1 },\r\n        \"minecraft:attack\": { damage: attackDamage },\r\n      },\r\n      componentGroups: {\r\n        hostile_calm: {\r\n          \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n          \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n        },\r\n        hostile_angry: {\r\n          \"minecraft:behavior.nearest_attackable_target\": {\r\n            priority: 2,\r\n            must_see: true,\r\n            reselect_targets: true,\r\n            entity_types: [\r\n              {\r\n                filters: { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                max_dist: 35,\r\n              },\r\n            ],\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        become_hostile: {\r\n          add: { component_groups: [\"hostile_angry\"] },\r\n        },\r\n        calm_down: {\r\n          remove: { component_groups: [\"hostile_angry\"] },\r\n          add: { component_groups: [\"hostile_calm\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"hostile_angry\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Passive behavior - flees when hurt.\r\n */\r\nexport class PassiveEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"passive\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"passive\",\r\n      displayName: \"Passive\",\r\n      description: \"Flees when attacked, does not fight back\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.panic\": {\r\n          priority: 1,\r\n          speed_multiplier: 1.25,\r\n        },\r\n        \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n        \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n        \"minecraft:behavior.look_at_player\": {\r\n          priority: 8,\r\n          look_distance: 6.0,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Neutral behavior - attacks only when provoked.\r\n */\r\nexport class NeutralEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"neutral\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"neutral\",\r\n      displayName: \"Neutral\",\r\n      description: \"Only attacks when provoked\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n        \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n      },\r\n      componentGroups: {\r\n        neutral_calm: {},\r\n        neutral_angry: {\r\n          \"minecraft:behavior.hurt_by_target\": {\r\n            priority: 1,\r\n            alert_same_type: true,\r\n          },\r\n          \"minecraft:behavior.nearest_attackable_target\": {\r\n            priority: 2,\r\n            entity_types: [\r\n              {\r\n                filters: {\r\n                  all_of: [\r\n                    { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                    { test: \"has_component\", subject: \"self\", value: \"minecraft:angry\" },\r\n                  ],\r\n                },\r\n              },\r\n            ],\r\n          },\r\n          \"minecraft:angry\": {\r\n            duration: 25,\r\n            broadcast_anger: true,\r\n            broadcast_range: 20,\r\n            calm_event: { event: \"on_calm\" },\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        \"minecraft:on_hurt\": {\r\n          add: { component_groups: [\"neutral_angry\"] },\r\n        },\r\n        on_calm: {\r\n          remove: { component_groups: [\"neutral_angry\"] },\r\n          add: { component_groups: [\"neutral_calm\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"neutral_calm\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Boss behavior - boss bar, phases, special abilities.\r\n */\r\nexport class BossEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"boss\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const bossName = config?.bossName ?? \"Boss\";\r\n    const phases = config?.phases ?? 3;\r\n\r\n    const componentGroups: Record<string, Record<string, any>> = {};\r\n    const events: Record<string, any> = {};\r\n\r\n    // Create phase component groups\r\n    for (let i = 1; i <= phases; i++) {\r\n      componentGroups[`phase_${i}`] = {\r\n        \"minecraft:scale\": { value: 1.0 + (i - 1) * 0.1 },\r\n        \"minecraft:movement\": { value: 0.25 + (i - 1) * 0.05 },\r\n      };\r\n\r\n      if (i < phases) {\r\n        events[`enter_phase_${i + 1}`] = {\r\n          remove: { component_groups: [`phase_${i}`] },\r\n          add: { component_groups: [`phase_${i + 1}`] },\r\n        };\r\n      }\r\n    }\r\n\r\n    return {\r\n      id: \"boss\",\r\n      displayName: \"Boss\",\r\n      description: \"Boss mob with health bar and phases\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:boss\": {\r\n          should_darken_sky: true,\r\n          hud_range: 55,\r\n          name: bossName,\r\n        },\r\n        \"minecraft:knockback_resistance\": { value: 1.0 },\r\n      },\r\n      componentGroups,\r\n      events,\r\n      spawnEvent: {\r\n        add: { component_groups: [\"phase_1\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Wanders - randomly wanders around.\r\n */\r\nexport class WandersEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"wanders\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const wanderSpeed = config?.speed ?? 1.0;\r\n\r\n    return {\r\n      id: \"wanders\",\r\n      displayName: \"Wanders\",\r\n      description: \"Randomly wanders around\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.random_stroll\": {\r\n          priority: 6,\r\n          speed_multiplier: wanderSpeed,\r\n        },\r\n        \"minecraft:behavior.random_look_around\": {\r\n          priority: 8,\r\n        },\r\n        \"minecraft:behavior.look_at_player\": {\r\n          priority: 7,\r\n          look_distance: 6.0,\r\n          probability: 0.02,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * FleesDaylight - seeks shelter from sunlight.\r\n */\r\nexport class FleesDaylightEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"flees_daylight\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const fleeSpeed = config?.speed ?? 1.0;\r\n\r\n    return {\r\n      id: \"flees_daylight\",\r\n      displayName: \"Flees Daylight\",\r\n      description: \"Seeks shelter from sunlight\",\r\n      category: \"behavior\",\r\n      components: {\r\n        \"minecraft:behavior.flee_sun\": {\r\n          priority: 2,\r\n          speed_multiplier: fleeSpeed,\r\n        },\r\n        \"minecraft:navigation.walk\": {\r\n          can_path_over_water: true,\r\n          avoid_sun: true,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Melee attacker - uses close-range attacks.\r\n */\r\nexport class MeleeAttackerEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"melee_attacker\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const damage = config?.damage ?? 3;\r\n    const attackSpeed = config?.attackSpeed ?? 1.2;\r\n\r\n    return {\r\n      id: \"melee_attacker\",\r\n      displayName: \"Melee Attacker\",\r\n      description: \"Attacks with close-range melee strikes\",\r\n      category: \"combat\",\r\n      components: {\r\n        \"minecraft:behavior.melee_attack\": {\r\n          priority: 3,\r\n          speed_multiplier: attackSpeed,\r\n          track_target: true,\r\n        },\r\n        \"minecraft:attack\": { damage },\r\n      },\r\n      resources: {\r\n        animations: {\r\n          attack: \"animation.humanoid.attack\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Ranged attacker - uses projectiles.\r\n */\r\nexport class RangedAttackerEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"ranged_attacker\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const projectile = config?.projectile ?? \"minecraft:arrow\";\r\n    const attackRadius = config?.attackRadius ?? 15.0;\r\n\r\n    return {\r\n      id: \"ranged_attacker\",\r\n      displayName: \"Ranged Attacker\",\r\n      description: \"Attacks with ranged projectiles\",\r\n      category: \"combat\",\r\n      components: {\r\n        \"minecraft:behavior.ranged_attack\": {\r\n          priority: 3,\r\n          attack_interval_min: 1.0,\r\n          attack_interval_max: 3.0,\r\n          attack_radius: attackRadius,\r\n        },\r\n        \"minecraft:shooter\": {\r\n          def: projectile,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Exploder - explodes when near target.\r\n */\r\nexport class ExploderEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"exploder\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const power = config?.power ?? 3;\r\n    const fuseTime = config?.fuseTime ?? 1.5;\r\n    const causesFire = config?.causesFire ?? false;\r\n\r\n    return {\r\n      id: \"exploder\",\r\n      displayName: \"Exploder\",\r\n      description: \"Explodes when near its target\",\r\n      category: \"combat\",\r\n      components: {},\r\n      componentGroups: {\r\n        exploder_idle: {\r\n          \"minecraft:behavior.nearest_attackable_target\": {\r\n            priority: 1,\r\n            entity_types: [\r\n              {\r\n                filters: { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                max_dist: 25,\r\n              },\r\n            ],\r\n          },\r\n        },\r\n        exploder_fuse_lit: {\r\n          \"minecraft:explode\": {\r\n            fuse_length: fuseTime,\r\n            fuse_lit: true,\r\n            power,\r\n            causes_fire: causesFire,\r\n          },\r\n          \"minecraft:behavior.melee_attack\": {\r\n            priority: 2,\r\n            speed_multiplier: 1.5,\r\n            track_target: true,\r\n            reach_multiplier: 0.0,\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        start_exploding: {\r\n          remove: { component_groups: [\"exploder_idle\"] },\r\n          add: { component_groups: [\"exploder_fuse_lit\"] },\r\n        },\r\n        stop_exploding: {\r\n          remove: { component_groups: [\"exploder_fuse_lit\"] },\r\n          add: { component_groups: [\"exploder_idle\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"exploder_idle\"] },\r\n      },\r\n      resources: {\r\n        sounds: {\r\n          fuse: \"mob.creeper.say\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Tameable - can be tamed by the player.\r\n */\r\nexport class TameableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"tameable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const tameItems = config?.tameItems ?? [\"bone\"];\r\n    const tameChance = config?.tameChance ?? 0.33;\r\n\r\n    return {\r\n      id: \"tameable\",\r\n      displayName: \"Tameable\",\r\n      description: \"Can be tamed by the player with specific items\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:tameable\": {\r\n          probability: tameChance,\r\n          tame_items: tameItems,\r\n          tame_event: { event: \"on_tame\", target: \"self\" },\r\n        },\r\n      },\r\n      componentGroups: {\r\n        wild: {\r\n          \"minecraft:behavior.avoid_mob_type\": {\r\n            priority: 4,\r\n            entity_types: [\r\n              {\r\n                filters: { test: \"is_family\", subject: \"other\", value: \"player\" },\r\n                max_dist: 8,\r\n                walk_speed_multiplier: 1.0,\r\n                sprint_speed_multiplier: 1.0,\r\n              },\r\n            ],\r\n          },\r\n        },\r\n        tamed: {\r\n          \"minecraft:is_tamed\": {},\r\n          \"minecraft:behavior.follow_owner\": {\r\n            priority: 4,\r\n            speed_multiplier: 1.0,\r\n            start_distance: 10,\r\n            stop_distance: 2,\r\n          },\r\n          \"minecraft:behavior.owner_hurt_by_target\": { priority: 1 },\r\n          \"minecraft:behavior.owner_hurt_target\": { priority: 2 },\r\n          \"minecraft:sittable\": {},\r\n          \"minecraft:behavior.stay_while_sitting\": { priority: 3 },\r\n        },\r\n      },\r\n      events: {\r\n        on_tame: {\r\n          remove: { component_groups: [\"wild\"] },\r\n          add: { component_groups: [\"tamed\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        add: { component_groups: [\"wild\"] },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Rideable - can be ridden by the player.\r\n */\r\nexport class RideableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"rideable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const seatCount = config?.seatCount ?? 1;\r\n    const controllable = config?.controllable ?? true;\r\n    const requiresSaddle = config?.requiresSaddle ?? true;\r\n\r\n    const baseComponents: Record<string, any> = {\r\n      \"minecraft:rideable\": {\r\n        seat_count: seatCount,\r\n        family_types: [\"player\"],\r\n        interact_text: \"action.interact.ride.horse\",\r\n        seats: [{ position: [0.0, 1.1, -0.2] }],\r\n      },\r\n    };\r\n\r\n    if (controllable) {\r\n      baseComponents[\"minecraft:input_ground_controlled\"] = {};\r\n    }\r\n\r\n    const componentGroups: Record<string, Record<string, any>> = {};\r\n    const events: Record<string, any> = {};\r\n\r\n    if (requiresSaddle) {\r\n      componentGroups[\"unsaddled\"] = {};\r\n      componentGroups[\"saddled\"] = {\r\n        \"minecraft:is_saddled\": {},\r\n        ...baseComponents,\r\n      };\r\n\r\n      events[\"on_saddle\"] = {\r\n        remove: { component_groups: [\"unsaddled\"] },\r\n        add: { component_groups: [\"saddled\"] },\r\n      };\r\n\r\n      return {\r\n        id: \"rideable\",\r\n        displayName: \"Rideable\",\r\n        description: \"Can be ridden by the player\",\r\n        category: \"interaction\",\r\n        components: {\r\n          \"minecraft:equippable\": {\r\n            slots: [\r\n              {\r\n                slot: 0,\r\n                item: \"saddle\",\r\n                accepted_items: [\"saddle\"],\r\n                on_equip: { event: \"on_saddle\" },\r\n              },\r\n            ],\r\n          },\r\n        },\r\n        componentGroups,\r\n        events,\r\n        spawnEvent: {\r\n          add: { component_groups: [\"unsaddled\"] },\r\n        },\r\n      };\r\n    }\r\n\r\n    return {\r\n      id: \"rideable\",\r\n      displayName: \"Rideable\",\r\n      description: \"Can be ridden by the player\",\r\n      category: \"interaction\",\r\n      components: baseComponents,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Breedable - can be bred to produce offspring.\r\n */\r\nexport class BreedableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"breedable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const breedItems = config?.breedItems ?? [\"wheat\"];\r\n\r\n    return {\r\n      id: \"breedable\",\r\n      displayName: \"Breedable\",\r\n      description: \"Can be bred to produce offspring\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:breedable\": {\r\n          require_tame: false,\r\n          breeds_with: {\r\n            mate_type: \"self\",\r\n            baby_type: \"self\",\r\n          },\r\n          breed_items: breedItems,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Leasable - can be leashed with a lead.\r\n */\r\nexport class LeasableEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"leasable\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"leasable\",\r\n      displayName: \"Leasable\",\r\n      description: \"Can be leashed with a lead\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:leashable\": {\r\n          soft_distance: 4.0,\r\n          hard_distance: 6.0,\r\n          max_distance: 10.0,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Trader - can trade with the player.\r\n */\r\nexport class TraderEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"trader\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"trader\",\r\n      displayName: \"Trader\",\r\n      description: \"Can trade with the player\",\r\n      category: \"interaction\",\r\n      components: {\r\n        \"minecraft:trade_table\": {\r\n          display_name: \"entity.trader.name\",\r\n          table: \"trading/custom_trades.json\",\r\n        },\r\n        \"minecraft:economy_trade_table\": {\r\n          display_name: \"entity.trader.name\",\r\n          table: \"trading/custom_trades.json\",\r\n          new_screen: true,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Undead - takes damage from healing, heals from damage potions.\r\n */\r\nexport class UndeadEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"undead\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IEntityTraitData {\r\n    return {\r\n      id: \"undead\",\r\n      displayName: \"Undead\",\r\n      description: \"Takes damage from healing, heals from damage potions\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:type_family\": {\r\n          family: [\"undead\", \"monster\"],\r\n        },\r\n        \"minecraft:burns_in_daylight\": {},\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * BabyVariant - has baby/adult variants.\r\n */\r\nexport class BabyVariantEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"baby_variant\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const growUpTime = config?.growUpTime ?? 1200;\r\n\r\n    return {\r\n      id: \"baby_variant\",\r\n      displayName: \"Baby Variant\",\r\n      description: \"Has baby/adult variants\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:ageable\": {\r\n          duration: growUpTime,\r\n          grow_up: {\r\n            event: \"grow_up\",\r\n            target: \"self\",\r\n          },\r\n        },\r\n      },\r\n      componentGroups: {\r\n        baby: {\r\n          \"minecraft:is_baby\": {},\r\n          \"minecraft:scale\": {\r\n            value: 0.5,\r\n          },\r\n          \"minecraft:ageable\": {\r\n            duration: growUpTime,\r\n            grow_up: {\r\n              event: \"grow_up\",\r\n              target: \"self\",\r\n            },\r\n          },\r\n        },\r\n        adult: {\r\n          \"minecraft:scale\": {\r\n            value: 1.0,\r\n          },\r\n        },\r\n      },\r\n      events: {\r\n        grow_up: {\r\n          remove: { component_groups: [\"baby\"] },\r\n          add: { component_groups: [\"adult\"] },\r\n        },\r\n        spawn_baby: {\r\n          add: { component_groups: [\"baby\"] },\r\n        },\r\n      },\r\n      spawnEvent: {\r\n        randomize: [\r\n          { weight: 95, add: { component_groups: [\"adult\"] } },\r\n          { weight: 5, add: { component_groups: [\"baby\"] } },\r\n        ],\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EntityContentTrait, IEntityTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Teleporter - can teleport.\r\n */\r\nexport class TeleporterEntityTrait extends EntityContentTrait {\r\n  get id(): string {\r\n    return \"teleporter\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IEntityTraitData {\r\n    const teleportChance = config?.teleportChance ?? 0.01;\r\n\r\n    return {\r\n      id: \"teleporter\",\r\n      displayName: \"Teleporter\",\r\n      description: \"Can teleport\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:teleport\": {\r\n          random_teleports: true,\r\n          max_random_teleport_time: 30.0,\r\n          random_teleport_cube: [32, 16, 32],\r\n          target_distance: 16.0,\r\n          target_teleport_chance: teleportChance,\r\n          light_teleport_chance: 0.01,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Stone material - standard stone properties.\r\n */\r\nexport class StoneMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"stone_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 1.5;\r\n\r\n    return {\r\n      id: \"stone_material\",\r\n      displayName: \"Stone Material\",\r\n      description: \"Standard stone properties\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 6.0,\r\n        },\r\n        \"minecraft:map_color\": \"#808080\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Wood material - standard wood properties.\r\n */\r\nexport class WoodMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"wood_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 2.0;\r\n\r\n    return {\r\n      id: \"wood_material\",\r\n      displayName: \"Wood Material\",\r\n      description: \"Standard wood properties\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 3.0,\r\n        },\r\n        \"minecraft:flammable\": {\r\n          catch_chance_modifier: 5,\r\n          destroy_chance_modifier: 20,\r\n        },\r\n        \"minecraft:map_color\": \"#8B4513\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Metal material - strong and blast resistant.\r\n */\r\nexport class MetalMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"metal_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 5.0;\r\n\r\n    return {\r\n      id: \"metal_material\",\r\n      displayName: \"Metal Material\",\r\n      description: \"Strong and blast resistant\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 6.0,\r\n        },\r\n        \"minecraft:map_color\": \"#C0C0C0\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Soft material - easily breakable.\r\n */\r\nexport class SoftMaterialBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"soft_material\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const hardness = config?.hardness ?? 0.5;\r\n\r\n    return {\r\n      id: \"soft_material\",\r\n      displayName: \"Soft Material\",\r\n      description: \"Easily breakable\",\r\n      category: \"material\",\r\n      components: {\r\n        \"minecraft:destructible_by_mining\": {\r\n          seconds_to_destroy: hardness,\r\n        },\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: 0.5,\r\n        },\r\n        \"minecraft:map_color\": \"#D2B48C\",\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Door - can be opened and closed.\r\n */\r\nexport class DoorBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"door\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"door\",\r\n      displayName: \"Door\",\r\n      description: \"Can be opened and closed\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"toggle_open\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.door\",\r\n        \"minecraft:collision_box\": {\r\n          origin: [-8, 0, -2],\r\n          size: [16, 32, 4],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-8, 0, -2],\r\n          size: [16, 32, 4],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Trapdoor - horizontal door.\r\n */\r\nexport class TrapdoorBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"trapdoor\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"trapdoor\",\r\n      displayName: \"Trapdoor\",\r\n      description: \"Horizontal door\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"toggle_open\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.trapdoor\",\r\n        \"minecraft:collision_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 3, 16],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 3, 16],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Button - momentary switch.\r\n */\r\nexport class ButtonBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"button\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"button\",\r\n      displayName: \"Button\",\r\n      description: \"Momentary switch\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"pressed\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.button\",\r\n        \"minecraft:collision_box\": false,\r\n        \"minecraft:selection_box\": {\r\n          origin: [-2, 0, -3],\r\n          size: [4, 2, 6],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Lever - toggle switch.\r\n */\r\nexport class LeverBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"lever\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"lever\",\r\n      displayName: \"Lever\",\r\n      description: \"Toggle switch\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:on_interact\": {\r\n          event: \"toggle\",\r\n        },\r\n        \"minecraft:geometry\": \"geometry.lever\",\r\n        \"minecraft:collision_box\": false,\r\n        \"minecraft:selection_box\": {\r\n          origin: [-3, 0, -2],\r\n          size: [6, 10, 4],\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Crafting station - allows crafting.\r\n */\r\nexport class CraftingStationBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"crafting_station\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const craftingTags = config?.craftingTags ?? [\"crafting_table\"];\r\n\r\n    return {\r\n      id: \"crafting_station\",\r\n      displayName: \"Crafting Station\",\r\n      description: \"Allows crafting\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:crafting_table\": {\r\n          crafting_tags: craftingTags,\r\n          table_name: \"container.crafting\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Redstone producer - block emits a redstone signal.\r\n * Uses minecraft:redstone_producer to output power on all faces.\r\n */\r\nexport class RedstoneProducerBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"redstone_signal\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const power = config?.redstonePower ?? 15;\r\n\r\n    return {\r\n      id: \"redstone_signal\",\r\n      displayName: \"Redstone Signal\",\r\n      description: \"Outputs redstone power\",\r\n      category: \"interactive\",\r\n      components: {\r\n        \"minecraft:redstone_producer\": {\r\n          power: power,\r\n          connected_faces: [\"down\", \"up\", \"north\", \"south\", \"east\", \"west\"],\r\n        },\r\n        \"minecraft:redstone_conductivity\": {\r\n          redstone_conductor: true,\r\n          allows_wire_to_step_down: true,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Rotatable horizontal - can be placed in 4 directions.\r\n */\r\nexport class RotatableHorizontalBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"rotatable_horizontal\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"rotatable_horizontal\",\r\n      displayName: \"Rotatable Horizontal\",\r\n      description: \"Can be placed in 4 directions\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:transformation\": {\r\n          rotation: [0, 0, 0],\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:direction\": [0, 1, 2, 3],\r\n      },\r\n      permutations: [\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 0\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 1\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 90, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 2\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 180, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 3\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 270, 0] } },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Rotatable all - can be placed in 6 directions.\r\n */\r\nexport class RotatableAllBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"rotatable_all\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"rotatable_all\",\r\n      displayName: \"Rotatable All\",\r\n      description: \"Can be placed in 6 directions\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:transformation\": {\r\n          rotation: [0, 0, 0],\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:facing\": [\"up\", \"down\", \"north\", \"south\", \"east\", \"west\"],\r\n      },\r\n      permutations: [\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'up'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'down'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'north'\",\r\n          components: { \"minecraft:transformation\": { rotation: [90, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'south'\",\r\n          components: { \"minecraft:transformation\": { rotation: [-90, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'east'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, -90] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:facing') == 'west'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 90] } },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Slab geometry definition.\r\n * A single half-height cube (16\u00D78\u00D716 in pixel units).\r\n */\r\nconst SLAB_GEOMETRY = {\r\n  format_version: \"1.21.40\",\r\n  \"minecraft:geometry\": [\r\n    {\r\n      description: {\r\n        identifier: \"geometry.slab\",\r\n        texture_width: 16,\r\n        texture_height: 16,\r\n      },\r\n      bones: [\r\n        {\r\n          name: \"body\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 0, -8],\r\n              size: [16, 8, 16],\r\n              uv: {\r\n                north: { uv: [0, 8], uv_size: [16, 8] },\r\n                south: { uv: [0, 8], uv_size: [16, 8] },\r\n                east: { uv: [0, 8], uv_size: [16, 8] },\r\n                west: { uv: [0, 8], uv_size: [16, 8] },\r\n                up: { uv: [0, 0], uv_size: [16, 16] },\r\n                down: { uv: [0, 0], uv_size: [16, 16] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\n/**\r\n * Slab - half-height block.\r\n * Uses the minecraft:placement_position trait with minecraft:vertical_half\r\n * to automatically handle top/bottom placement based on where the player clicks.\r\n */\r\nexport class SlabBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"slab\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"slab\",\r\n      displayName: \"Slab\",\r\n      description: \"Half-height block with top/bottom placement\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:geometry\": \"geometry.slab\",\r\n        \"minecraft:collision_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 8, 16],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-8, 0, -8],\r\n          size: [16, 8, 16],\r\n        },\r\n      },\r\n      minecraftTraits: {\r\n        \"minecraft:placement_position\": {\r\n          enabled_states: [\"minecraft:vertical_half\"],\r\n        },\r\n      },\r\n      geometryFiles: [\r\n        {\r\n          path: \"models/blocks/slab.geo.json\",\r\n          content: SLAB_GEOMETRY,\r\n        },\r\n      ],\r\n      permutations: [\r\n        {\r\n          condition: \"q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: {\r\n            \"minecraft:transformation\": {\r\n              translation: [0, 0.5, 0],\r\n            },\r\n          },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Stairs geometry definition.\r\n * Two cubes: bottom half is a full slab, top half is half-depth to form the step.\r\n * Uses pixel units: 16\u00D716\u00D716 = one full block.\r\n */\r\nconst STAIRS_GEOMETRY = {\r\n  format_version: \"1.21.40\",\r\n  \"minecraft:geometry\": [\r\n    {\r\n      description: {\r\n        identifier: \"geometry.stairs\",\r\n        texture_width: 16,\r\n        texture_height: 16,\r\n      },\r\n      bones: [\r\n        {\r\n          name: \"body\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 0, -8],\r\n              size: [16, 8, 16],\r\n              uv: {\r\n                north: { uv: [0, 8], uv_size: [16, 8] },\r\n                south: { uv: [0, 8], uv_size: [16, 8] },\r\n                east: { uv: [0, 8], uv_size: [16, 8] },\r\n                west: { uv: [0, 8], uv_size: [16, 8] },\r\n                up: { uv: [0, 0], uv_size: [16, 16] },\r\n                down: { uv: [0, 0], uv_size: [16, 16] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-8, 8, 0],\r\n              size: [16, 8, 8],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [16, 8] },\r\n                south: { uv: [0, 0], uv_size: [16, 8] },\r\n                east: { uv: [8, 0], uv_size: [8, 8] },\r\n                west: { uv: [0, 0], uv_size: [8, 8] },\r\n                up: { uv: [0, 0], uv_size: [16, 8] },\r\n                down: { uv: [0, 0], uv_size: [16, 8] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\n/**\r\n * Stairs - stair-shaped block.\r\n * Uses minecraft:placement_position trait for vertical_half (upside-down placement)\r\n * and minecraft:connection trait for cardinal connections (connecting to adjacent stairs).\r\n * Requires format_version 1.21.130+ for the connection trait.\r\n */\r\nexport class StairsBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"stairs\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"stairs\",\r\n      displayName: \"Stairs\",\r\n      description: \"Stair-shaped block with directional placement and connections\",\r\n      category: \"placement\",\r\n      components: {\r\n        \"minecraft:geometry\": \"geometry.stairs\",\r\n        \"minecraft:transformation\": {\r\n          rotation: [0, 0, 0],\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:direction\": [0, 1, 2, 3],\r\n      },\r\n      minecraftTraits: {\r\n        \"minecraft:placement_position\": {\r\n          enabled_states: [\"minecraft:vertical_half\"],\r\n        },\r\n        \"minecraft:connection\": {\r\n          enabled_states: [\"minecraft:cardinal_connections\"],\r\n        },\r\n      },\r\n      geometryFiles: [\r\n        {\r\n          path: \"models/blocks/stairs.geo.json\",\r\n          content: STAIRS_GEOMETRY,\r\n        },\r\n      ],\r\n      permutations: [\r\n        // Normal stairs (bottom)\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 0 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 1 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 90, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 2 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 180, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 3 && q.block_state('minecraft:vertical_half') == 'bottom'\",\r\n          components: { \"minecraft:transformation\": { rotation: [0, 270, 0] } },\r\n        },\r\n        // Upside-down stairs (top)\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 0 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 0, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 1 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 90, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 2 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 180, 0] } },\r\n        },\r\n        {\r\n          condition: \"q.block_state('custom:direction') == 3 && q.block_state('minecraft:vertical_half') == 'top'\",\r\n          components: { \"minecraft:transformation\": { rotation: [180, 270, 0] } },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Fence geometry definition.\r\n * Center post with 4 directional connection arms controlled by bone_visibility.\r\n * Uses minecraft:cardinal_connections states from the connection trait.\r\n */\r\nconst FENCE_GEOMETRY = {\r\n  format_version: \"1.21.40\",\r\n  \"minecraft:geometry\": [\r\n    {\r\n      description: {\r\n        identifier: \"geometry.fence\",\r\n        texture_width: 16,\r\n        texture_height: 16,\r\n      },\r\n      bones: [\r\n        {\r\n          name: \"post\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-2, 0, -2],\r\n              size: [4, 16, 4],\r\n              uv: {\r\n                north: { uv: [6, 0], uv_size: [4, 16] },\r\n                south: { uv: [6, 0], uv_size: [4, 16] },\r\n                east: { uv: [6, 0], uv_size: [4, 16] },\r\n                west: { uv: [6, 0], uv_size: [4, 16] },\r\n                up: { uv: [6, 6], uv_size: [4, 4] },\r\n                down: { uv: [6, 6], uv_size: [4, 4] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_north\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-1, 6, -8],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-1, 12, -8],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_south\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-1, 6, 2],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-1, 12, 2],\r\n              size: [2, 3, 6],\r\n              uv: {\r\n                north: { uv: [7, 0], uv_size: [2, 3] },\r\n                south: { uv: [7, 0], uv_size: [2, 3] },\r\n                east: { uv: [0, 0], uv_size: [6, 3] },\r\n                west: { uv: [0, 0], uv_size: [6, 3] },\r\n                up: { uv: [7, 0], uv_size: [2, 6] },\r\n                down: { uv: [7, 0], uv_size: [2, 6] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_east\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [2, 6, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n            {\r\n              origin: [2, 12, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n        {\r\n          name: \"arm_west\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 6, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n            {\r\n              origin: [-8, 12, -1],\r\n              size: [6, 3, 2],\r\n              uv: {\r\n                north: { uv: [0, 0], uv_size: [6, 3] },\r\n                south: { uv: [0, 0], uv_size: [6, 3] },\r\n                east: { uv: [7, 0], uv_size: [2, 3] },\r\n                west: { uv: [7, 0], uv_size: [2, 3] },\r\n                up: { uv: [0, 7], uv_size: [6, 2] },\r\n                down: { uv: [0, 7], uv_size: [6, 2] },\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n\r\n/**\r\n * Fence - post-shaped block that connects to adjacent blocks.\r\n * Uses the minecraft:connection trait for automatic cardinal connection states,\r\n * minecraft:support shape \"fence\" for proper collision, and\r\n * bone_visibility in the geometry to show/hide connection arms.\r\n */\r\nexport class FenceBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"fence\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"fence\",\r\n      displayName: \"Fence\",\r\n      description: \"Fence post that connects to adjacent blocks\",\r\n      category: \"shape\",\r\n      components: {\r\n        \"minecraft:geometry\": {\r\n          identifier: \"geometry.fence\",\r\n          bone_visibility: {\r\n            arm_north: \"q.block_state('minecraft:north_connection') != 'none'\",\r\n            arm_south: \"q.block_state('minecraft:south_connection') != 'none'\",\r\n            arm_east: \"q.block_state('minecraft:east_connection') != 'none'\",\r\n            arm_west: \"q.block_state('minecraft:west_connection') != 'none'\",\r\n          },\r\n        },\r\n        \"minecraft:collision_box\": {\r\n          origin: [-2, 0, -2],\r\n          size: [4, 24, 4],\r\n        },\r\n        \"minecraft:selection_box\": {\r\n          origin: [-2, 0, -2],\r\n          size: [4, 16, 4],\r\n        },\r\n        \"minecraft:support\": {\r\n          shape: \"fence\",\r\n        },\r\n        \"minecraft:connection_rule\": {\r\n          accepts_connections_from: \"all\",\r\n          enabled_directions: [\"north\", \"south\", \"east\", \"west\"],\r\n        },\r\n      },\r\n      minecraftTraits: {\r\n        \"minecraft:connection\": {\r\n          enabled_states: [\"minecraft:cardinal_connections\"],\r\n        },\r\n      },\r\n      geometryFiles: [\r\n        {\r\n          path: \"models/blocks/fence.geo.json\",\r\n          content: FENCE_GEOMETRY,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Light source - emits light.\r\n */\r\nexport class LightSourceBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"light_source\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const lightLevel = config?.lightLevel ?? 15;\r\n\r\n    return {\r\n      id: \"light_source\",\r\n      displayName: \"Light Source\",\r\n      description: \"Emits light\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:light_emission\": lightLevel,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Variable light - light level can change.\r\n */\r\nexport class VariableLightBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"variable_light\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const maxLightLevel = config?.maxLightLevel ?? 15;\r\n\r\n    return {\r\n      id: \"variable_light\",\r\n      displayName: \"Variable Light\",\r\n      description: \"Light level can change\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:light_emission\": 0,\r\n      },\r\n      properties: {\r\n        \"custom:light_level\": Array.from({ length: maxLightLevel + 1 }, (_, i) => i),\r\n      },\r\n      permutations: Array.from({ length: maxLightLevel + 1 }, (_, i) => ({\r\n        condition: `q.block_state('custom:light_level') == ${i}`,\r\n        components: { \"minecraft:light_emission\": i },\r\n      })),\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Passable - entities can walk through.\r\n */\r\nexport class PassableBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"passable\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"passable\",\r\n      displayName: \"Passable\",\r\n      description: \"Entities can walk through\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:collision_box\": false,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Transparent - allows light through.\r\n */\r\nexport class TransparentBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"transparent\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"transparent\",\r\n      displayName: \"Transparent\",\r\n      description: \"Allows light through\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:light_dampening\": 0,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Gravity affected - falls when unsupported.\r\n */\r\nexport class GravityAffectedBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"gravity_affected\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IBlockTraitData {\r\n    return {\r\n      id: \"gravity_affected\",\r\n      displayName: \"Gravity Affected\",\r\n      description: \"Falls when unsupported\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:on_placed\": {\r\n          event: \"check_fall\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Crop - can grow over time.\r\n */\r\nexport class CropBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"crop\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const growthStages = config?.growthStages ?? 7;\r\n\r\n    return {\r\n      id: \"crop\",\r\n      displayName: \"Crop\",\r\n      description: \"Can grow over time\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:collision_box\": false,\r\n        \"minecraft:tick\": {\r\n          interval_range: [10, 20],\r\n          looping: true,\r\n        },\r\n        \"minecraft:random_ticking\": {\r\n          on_tick: {\r\n            event: \"grow\",\r\n          },\r\n        },\r\n      },\r\n      properties: {\r\n        \"custom:growth_stage\": Array.from({ length: growthStages + 1 }, (_, i) => i),\r\n      },\r\n      permutations: Array.from({ length: growthStages + 1 }, (_, i) => ({\r\n        condition: `q.block_state('custom:growth_stage') == ${i}`,\r\n        components: {\r\n          \"minecraft:geometry\": `geometry.crop_stage_${i}`,\r\n        },\r\n      })),\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Flammable - block can catch fire and be destroyed by flames.\r\n */\r\nexport class FlammableBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"flammable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const catchChance = config?.catchChanceModifier ?? 5;\r\n    const destroyChance = config?.destroyChanceModifier ?? 20;\r\n\r\n    return {\r\n      id: \"flammable\",\r\n      displayName: \"Flammable\",\r\n      description: \"Can catch fire and burn\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:flammable\": {\r\n          catch_chance_modifier: catchChance,\r\n          destroy_chance_modifier: destroyChance,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Explosion resistant - block is highly resistant or immune to explosions.\r\n */\r\nexport class ExplosionResistantBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"explosion_resistant\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const resistance = config?.explosionResistance ?? 1200;\r\n\r\n    return {\r\n      id: \"explosion_resistant\",\r\n      displayName: \"Explosion Resistant\",\r\n      description: \"Highly resistant to explosions\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:destructible_by_explosion\": {\r\n          explosion_resistance: resistance,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { BlockContentTrait, IBlockTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Slippery - low-friction surface like ice.\r\n * Friction range is 0.0-0.9 where lower = more slippery.\r\n * Default block friction is 0.4; this uses 0.1 for a very slippery surface.\r\n */\r\nexport class SlipperyBlockTrait extends BlockContentTrait {\r\n  get id(): string {\r\n    return \"slippery\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IBlockTraitData {\r\n    const friction = config?.friction ?? 0.1;\r\n\r\n    return {\r\n      id: \"slippery\",\r\n      displayName: \"Slippery\",\r\n      description: \"Low-friction surface, entities slide\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:friction\": friction,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Sword - melee weapon.\r\n */\r\nexport class SwordItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"sword\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const damage = config?.damage ?? 5;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"sword\",\r\n      displayName: \"Sword\",\r\n      description: \"Melee weapon\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:damage\": {\r\n          value: damage,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"sword\",\r\n        },\r\n        \"minecraft:can_destroy_in_creative\": false,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Pickaxe - mining tool.\r\n */\r\nexport class PickaxeItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"pickaxe\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const miningSpeed = config?.miningSpeed ?? 1.2;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"pickaxe\",\r\n      displayName: \"Pickaxe\",\r\n      description: \"Mining tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:digger\": {\r\n          use_efficiency: true,\r\n          destroy_speeds: [\r\n            {\r\n              block: { tags: \"q.any_tag('stone', 'metal', 'diamond_pick_diggable')\" },\r\n              speed: miningSpeed,\r\n            },\r\n          ],\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"pickaxe\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Axe - chopping tool.\r\n */\r\nexport class AxeItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"axe\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const miningSpeed = config?.miningSpeed ?? 1.2;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"axe\",\r\n      displayName: \"Axe\",\r\n      description: \"Chopping tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:digger\": {\r\n          use_efficiency: true,\r\n          destroy_speeds: [\r\n            {\r\n              block: { tags: \"q.any_tag('wood', 'log')\" },\r\n              speed: miningSpeed,\r\n            },\r\n          ],\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"axe\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Shovel - digging tool.\r\n */\r\nexport class ShovelItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"shovel\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const miningSpeed = config?.miningSpeed ?? 1.2;\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"shovel\",\r\n      displayName: \"Shovel\",\r\n      description: \"Digging tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:digger\": {\r\n          use_efficiency: true,\r\n          destroy_speeds: [\r\n            {\r\n              block: { tags: \"q.any_tag('dirt', 'sand', 'gravel', 'soul_sand', 'snow')\" },\r\n              speed: miningSpeed,\r\n            },\r\n          ],\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"shovel\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Hoe - farming tool.\r\n */\r\nexport class HoeItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"hoe\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const durability = config?.durability ?? 250;\r\n\r\n    return {\r\n      id: \"hoe\",\r\n      displayName: \"Hoe\",\r\n      description: \"Farming tool\",\r\n      category: \"tool\",\r\n      components: {\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:hand_equipped\": true,\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"hoe\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Helmet - head armor.\r\n */\r\nexport class HelmetItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"helmet\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 2;\r\n    const durability = config?.durability ?? 165;\r\n\r\n    return {\r\n      id: \"helmet\",\r\n      displayName: \"Helmet\",\r\n      description: \"Head armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.head\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_head\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Chestplate - chest armor.\r\n */\r\nexport class ChestplateItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"chestplate\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 6;\r\n    const durability = config?.durability ?? 240;\r\n\r\n    return {\r\n      id: \"chestplate\",\r\n      displayName: \"Chestplate\",\r\n      description: \"Chest armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.chest\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_torso\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Leggings - leg armor.\r\n */\r\nexport class LeggingsItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"leggings\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 5;\r\n    const durability = config?.durability ?? 225;\r\n\r\n    return {\r\n      id: \"leggings\",\r\n      displayName: \"Leggings\",\r\n      description: \"Leg armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.legs\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_legs\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Boots - foot armor.\r\n */\r\nexport class BootsItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"boots\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const protection = config?.protection ?? 2;\r\n    const durability = config?.durability ?? 195;\r\n\r\n    return {\r\n      id: \"boots\",\r\n      displayName: \"Boots\",\r\n      description: \"Foot armor\",\r\n      category: \"armor\",\r\n      components: {\r\n        \"minecraft:armor\": {\r\n          protection: protection,\r\n        },\r\n        \"minecraft:durability\": {\r\n          max_durability: durability,\r\n        },\r\n        \"minecraft:wearable\": {\r\n          slot: \"slot.armor.feet\",\r\n          dispensable: true,\r\n        },\r\n        \"minecraft:enchantable\": {\r\n          value: 10,\r\n          slot: \"armor_feet\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Food - can be eaten.\r\n */\r\nexport class FoodItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"food\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const nutrition = config?.nutrition ?? 4;\r\n    const saturation = config?.saturation ?? 0.6;\r\n\r\n    return {\r\n      id: \"food\",\r\n      displayName: \"Food\",\r\n      description: \"Can be eaten\",\r\n      category: \"consumable\",\r\n      components: {\r\n        \"minecraft:food\": {\r\n          nutrition: nutrition,\r\n          saturation_modifier: saturation,\r\n          can_always_eat: false,\r\n        },\r\n        \"minecraft:use_modifiers\": {\r\n          use_duration: 1.6,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Drink - can be drunk.\r\n */\r\nexport class DrinkItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"drink\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const nutrition = config?.nutrition ?? 0;\r\n\r\n    return {\r\n      id: \"drink\",\r\n      displayName: \"Drink\",\r\n      description: \"Can be drunk\",\r\n      category: \"consumable\",\r\n      components: {\r\n        \"minecraft:food\": {\r\n          nutrition: nutrition,\r\n          saturation_modifier: 0,\r\n          can_always_eat: true,\r\n        },\r\n        \"minecraft:use_modifiers\": {\r\n          use_duration: 2.0,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Throwable - can be thrown.\r\n */\r\nexport class ThrowableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"throwable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const launchPower = config?.launchPower ?? 1.0;\r\n\r\n    return {\r\n      id: \"throwable\",\r\n      displayName: \"Throwable\",\r\n      description: \"Can be thrown\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:throwable\": {\r\n          do_swing_animation: true,\r\n          launch_power_scale: launchPower,\r\n          max_launch_power: 1.5,\r\n        },\r\n        \"minecraft:projectile\": {\r\n          projectile_entity: \"minecraft:snowball\",\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Stackable - can stack to 64.\r\n */\r\nexport class StackableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"stackable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const maxStackSize = config?.maxStackSize ?? 64;\r\n\r\n    return {\r\n      id: \"stackable\",\r\n      displayName: \"Stackable\",\r\n      description: \"Can stack to 64\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:max_stack_size\": maxStackSize,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Non-stackable - cannot stack.\r\n */\r\nexport class NonStackableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"non_stackable\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IItemTraitData {\r\n    return {\r\n      id: \"non_stackable\",\r\n      displayName: \"Non-Stackable\",\r\n      description: \"Cannot stack\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:max_stack_size\": 1,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Fuel - can be used as fuel in a furnace.\r\n */\r\nexport class FuelItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"fuel\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const burnDuration = config?.burnDuration ?? 200;\r\n\r\n    return {\r\n      id: \"fuel\",\r\n      displayName: \"Fuel\",\r\n      description: \"Can be used as fuel in a furnace\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:fuel\": {\r\n          duration: burnDuration,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Glinting - has enchantment glint effect.\r\n */\r\nexport class GlintingItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"glinting\";\r\n  }\r\n\r\n  getData(_config?: ITraitConfig): IItemTraitData {\r\n    return {\r\n      id: \"glinting\",\r\n      displayName: \"Glinting\",\r\n      description: \"Has enchantment glint effect\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:glint\": true,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Repairable - can be repaired.\r\n */\r\nexport class RepairableItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"repairable\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const repairItems = config?.repairItems ?? [\"minecraft:iron_ingot\"];\r\n\r\n    return {\r\n      id: \"repairable\",\r\n      displayName: \"Repairable\",\r\n      description: \"Can be repaired\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:repairable\": {\r\n          repair_items: repairItems.map((item: string) => ({\r\n            items: [item],\r\n            repair_amount: \"context.other->q.remaining_durability + 0.05 * context.other->q.max_durability\",\r\n          })),\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Cooldown - has a cooldown after use.\r\n */\r\nexport class CooldownItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"cooldown\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const cooldownDuration = config?.cooldownDuration ?? 1.0;\r\n    const cooldownCategory = config?.cooldownCategory ?? \"attack\";\r\n\r\n    return {\r\n      id: \"cooldown\",\r\n      displayName: \"Cooldown\",\r\n      description: \"Has a cooldown after use\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:cooldown\": {\r\n          category: cooldownCategory,\r\n          duration: cooldownDuration,\r\n        },\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ItemContentTrait, IItemTraitData, ITraitConfig } from \"./ContentTraits\";\r\n\r\n/**\r\n * Music disc - can be played in a jukebox.\r\n */\r\nexport class MusicDiscItemTrait extends ItemContentTrait {\r\n  get id(): string {\r\n    return \"music_disc\";\r\n  }\r\n\r\n  getData(config?: ITraitConfig): IItemTraitData {\r\n    const soundEvent = config?.soundEvent ?? \"record.13\";\r\n\r\n    return {\r\n      id: \"music_disc\",\r\n      displayName: \"Music Disc\",\r\n      description: \"Can be played in a jukebox\",\r\n      category: \"special\",\r\n      components: {\r\n        \"minecraft:record\": {\r\n          sound_event: soundEvent,\r\n          duration: 178.0,\r\n          comparator_signal: 1,\r\n        },\r\n        \"minecraft:max_stack_size\": 1,\r\n      },\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Traits Index\r\n *\r\n * This module exports all content traits for Minecraft content generation.\r\n * Traits are organized by content type: Entity, Block, and Item.\r\n */\r\n\r\n// Base types and registry\r\nexport type {\r\n  ITraitData,\r\n  IEntityTraitData,\r\n  IBlockTraitData,\r\n  IItemTraitData,\r\n  ITraitConfig,\r\n  TraitCategory,\r\n} from \"./ContentTraits\";\r\n\r\nexport { EntityContentTrait, BlockContentTrait, ItemContentTrait, TraitRegistry } from \"./ContentTraits\";\r\n\r\n// ============================================================================\r\n// ENTITY TRAITS\r\n// ============================================================================\r\n\r\n// Body Types\r\nexport { HumanoidEntityTrait } from \"./HumanoidEntityTrait\";\r\nexport { QuadrupedEntityTrait } from \"./QuadrupedEntityTrait\";\r\nexport { QuadrupedSmallEntityTrait } from \"./QuadrupedSmallEntityTrait\";\r\nexport { FlyingEntityTrait } from \"./FlyingEntityTrait\";\r\nexport { AquaticEntityTrait } from \"./AquaticEntityTrait\";\r\nexport { ArthropodEntityTrait } from \"./ArthropodEntityTrait\";\r\nexport { SlimeEntityTrait } from \"./SlimeEntityTrait\";\r\n\r\n// Behaviors\r\nexport { HostileEntityTrait } from \"./HostileEntityTrait\";\r\nexport { PassiveEntityTrait } from \"./PassiveEntityTrait\";\r\nexport { NeutralEntityTrait } from \"./NeutralEntityTrait\";\r\nexport { BossEntityTrait } from \"./BossEntityTrait\";\r\nexport { WandersEntityTrait } from \"./WandersEntityTrait\";\r\nexport { FleesDaylightEntityTrait } from \"./FleesDaylightEntityTrait\";\r\n\r\n// Combat\r\nexport { MeleeAttackerEntityTrait } from \"./MeleeAttackerEntityTrait\";\r\nexport { RangedAttackerEntityTrait } from \"./RangedAttackerEntityTrait\";\r\nexport { ExploderEntityTrait } from \"./ExploderEntityTrait\";\r\n\r\n// Interaction\r\nexport { TameableEntityTrait } from \"./TameableEntityTrait\";\r\nexport { RideableEntityTrait } from \"./RideableEntityTrait\";\r\nexport { BreedableEntityTrait } from \"./BreedableEntityTrait\";\r\nexport { LeasableEntityTrait } from \"./LeasableEntityTrait\";\r\nexport { TraderEntityTrait } from \"./TraderEntityTrait\";\r\n\r\n// Special\r\nexport { UndeadEntityTrait } from \"./UndeadEntityTrait\";\r\nexport { BabyVariantEntityTrait } from \"./BabyVariantEntityTrait\";\r\nexport { TeleporterEntityTrait } from \"./TeleporterEntityTrait\";\r\n\r\n// ============================================================================\r\n// BLOCK TRAITS\r\n// ============================================================================\r\n\r\n// Materials\r\nexport { StoneMaterialBlockTrait } from \"./StoneMaterialBlockTrait\";\r\nexport { WoodMaterialBlockTrait } from \"./WoodMaterialBlockTrait\";\r\nexport { MetalMaterialBlockTrait } from \"./MetalMaterialBlockTrait\";\r\nexport { SoftMaterialBlockTrait } from \"./SoftMaterialBlockTrait\";\r\n\r\n// Interactive\r\nexport { DoorBlockTrait } from \"./DoorBlockTrait\";\r\nexport { TrapdoorBlockTrait } from \"./TrapdoorBlockTrait\";\r\nexport { ButtonBlockTrait } from \"./ButtonBlockTrait\";\r\nexport { LeverBlockTrait } from \"./LeverBlockTrait\";\r\nexport { CraftingStationBlockTrait } from \"./CraftingStationBlockTrait\";\r\nexport { RedstoneProducerBlockTrait } from \"./RedstoneProducerBlockTrait\";\r\n\r\n// Placement\r\nexport { RotatableHorizontalBlockTrait } from \"./RotatableHorizontalBlockTrait\";\r\nexport { RotatableAllBlockTrait } from \"./RotatableAllBlockTrait\";\r\nexport { SlabBlockTrait } from \"./SlabBlockTrait\";\r\nexport { StairsBlockTrait } from \"./StairsBlockTrait\";\r\nexport { FenceBlockTrait } from \"./FenceBlockTrait\";\r\n\r\n// Special\r\nexport { LightSourceBlockTrait } from \"./LightSourceBlockTrait\";\r\nexport { VariableLightBlockTrait } from \"./VariableLightBlockTrait\";\r\nexport { PassableBlockTrait } from \"./PassableBlockTrait\";\r\nexport { TransparentBlockTrait } from \"./TransparentBlockTrait\";\r\nexport { GravityAffectedBlockTrait } from \"./GravityAffectedBlockTrait\";\r\nexport { CropBlockTrait } from \"./CropBlockTrait\";\r\nexport { FlammableBlockTrait } from \"./FlammableBlockTrait\";\r\nexport { ExplosionResistantBlockTrait } from \"./ExplosionResistantBlockTrait\";\r\nexport { SlipperyBlockTrait } from \"./SlipperyBlockTrait\";\r\n\r\n// ============================================================================\r\n// ITEM TRAITS\r\n// ============================================================================\r\n\r\n// Tools\r\nexport { SwordItemTrait } from \"./SwordItemTrait\";\r\nexport { PickaxeItemTrait } from \"./PickaxeItemTrait\";\r\nexport { AxeItemTrait } from \"./AxeItemTrait\";\r\nexport { ShovelItemTrait } from \"./ShovelItemTrait\";\r\nexport { HoeItemTrait } from \"./HoeItemTrait\";\r\n\r\n// Armor\r\nexport { HelmetItemTrait } from \"./HelmetItemTrait\";\r\nexport { ChestplateItemTrait } from \"./ChestplateItemTrait\";\r\nexport { LeggingsItemTrait } from \"./LeggingsItemTrait\";\r\nexport { BootsItemTrait } from \"./BootsItemTrait\";\r\n\r\n// Consumables\r\nexport { FoodItemTrait } from \"./FoodItemTrait\";\r\nexport { DrinkItemTrait } from \"./DrinkItemTrait\";\r\n\r\n// Special\r\nexport { ThrowableItemTrait } from \"./ThrowableItemTrait\";\r\nexport { StackableItemTrait } from \"./StackableItemTrait\";\r\nexport { NonStackableItemTrait } from \"./NonStackableItemTrait\";\r\nexport { FuelItemTrait } from \"./FuelItemTrait\";\r\nexport { GlintingItemTrait } from \"./GlintingItemTrait\";\r\nexport { RepairableItemTrait } from \"./RepairableItemTrait\";\r\nexport { CooldownItemTrait } from \"./CooldownItemTrait\";\r\nexport { MusicDiscItemTrait } from \"./MusicDiscItemTrait\";\r\n\r\n// ============================================================================\r\n// TRAIT REGISTRATION FUNCTIONS\r\n// ============================================================================\r\n\r\nimport { TraitRegistry } from \"./ContentTraits\";\r\n\r\n// Entity traits\r\nimport { HumanoidEntityTrait } from \"./HumanoidEntityTrait\";\r\nimport { QuadrupedEntityTrait } from \"./QuadrupedEntityTrait\";\r\nimport { QuadrupedSmallEntityTrait } from \"./QuadrupedSmallEntityTrait\";\r\nimport { FlyingEntityTrait } from \"./FlyingEntityTrait\";\r\nimport { AquaticEntityTrait } from \"./AquaticEntityTrait\";\r\nimport { ArthropodEntityTrait } from \"./ArthropodEntityTrait\";\r\nimport { SlimeEntityTrait } from \"./SlimeEntityTrait\";\r\nimport { HostileEntityTrait } from \"./HostileEntityTrait\";\r\nimport { PassiveEntityTrait } from \"./PassiveEntityTrait\";\r\nimport { NeutralEntityTrait } from \"./NeutralEntityTrait\";\r\nimport { BossEntityTrait } from \"./BossEntityTrait\";\r\nimport { WandersEntityTrait } from \"./WandersEntityTrait\";\r\nimport { FleesDaylightEntityTrait } from \"./FleesDaylightEntityTrait\";\r\nimport { MeleeAttackerEntityTrait } from \"./MeleeAttackerEntityTrait\";\r\nimport { RangedAttackerEntityTrait } from \"./RangedAttackerEntityTrait\";\r\nimport { ExploderEntityTrait } from \"./ExploderEntityTrait\";\r\nimport { TameableEntityTrait } from \"./TameableEntityTrait\";\r\nimport { RideableEntityTrait } from \"./RideableEntityTrait\";\r\nimport { BreedableEntityTrait } from \"./BreedableEntityTrait\";\r\nimport { LeasableEntityTrait } from \"./LeasableEntityTrait\";\r\nimport { TraderEntityTrait } from \"./TraderEntityTrait\";\r\nimport { UndeadEntityTrait } from \"./UndeadEntityTrait\";\r\nimport { BabyVariantEntityTrait } from \"./BabyVariantEntityTrait\";\r\nimport { TeleporterEntityTrait } from \"./TeleporterEntityTrait\";\r\n\r\n// Block traits\r\nimport { StoneMaterialBlockTrait } from \"./StoneMaterialBlockTrait\";\r\nimport { WoodMaterialBlockTrait } from \"./WoodMaterialBlockTrait\";\r\nimport { MetalMaterialBlockTrait } from \"./MetalMaterialBlockTrait\";\r\nimport { SoftMaterialBlockTrait } from \"./SoftMaterialBlockTrait\";\r\nimport { DoorBlockTrait } from \"./DoorBlockTrait\";\r\nimport { TrapdoorBlockTrait } from \"./TrapdoorBlockTrait\";\r\nimport { ButtonBlockTrait } from \"./ButtonBlockTrait\";\r\nimport { LeverBlockTrait } from \"./LeverBlockTrait\";\r\nimport { CraftingStationBlockTrait } from \"./CraftingStationBlockTrait\";\r\nimport { RedstoneProducerBlockTrait } from \"./RedstoneProducerBlockTrait\";\r\nimport { RotatableHorizontalBlockTrait } from \"./RotatableHorizontalBlockTrait\";\r\nimport { RotatableAllBlockTrait } from \"./RotatableAllBlockTrait\";\r\nimport { SlabBlockTrait } from \"./SlabBlockTrait\";\r\nimport { StairsBlockTrait } from \"./StairsBlockTrait\";\r\nimport { FenceBlockTrait } from \"./FenceBlockTrait\";\r\nimport { LightSourceBlockTrait } from \"./LightSourceBlockTrait\";\r\nimport { VariableLightBlockTrait } from \"./VariableLightBlockTrait\";\r\nimport { PassableBlockTrait } from \"./PassableBlockTrait\";\r\nimport { TransparentBlockTrait } from \"./TransparentBlockTrait\";\r\nimport { GravityAffectedBlockTrait } from \"./GravityAffectedBlockTrait\";\r\nimport { CropBlockTrait } from \"./CropBlockTrait\";\r\nimport { FlammableBlockTrait } from \"./FlammableBlockTrait\";\r\nimport { ExplosionResistantBlockTrait } from \"./ExplosionResistantBlockTrait\";\r\nimport { SlipperyBlockTrait } from \"./SlipperyBlockTrait\";\r\n\r\n// Item traits\r\nimport { SwordItemTrait } from \"./SwordItemTrait\";\r\nimport { PickaxeItemTrait } from \"./PickaxeItemTrait\";\r\nimport { AxeItemTrait } from \"./AxeItemTrait\";\r\nimport { ShovelItemTrait } from \"./ShovelItemTrait\";\r\nimport { HoeItemTrait } from \"./HoeItemTrait\";\r\nimport { HelmetItemTrait } from \"./HelmetItemTrait\";\r\nimport { ChestplateItemTrait } from \"./ChestplateItemTrait\";\r\nimport { LeggingsItemTrait } from \"./LeggingsItemTrait\";\r\nimport { BootsItemTrait } from \"./BootsItemTrait\";\r\nimport { FoodItemTrait } from \"./FoodItemTrait\";\r\nimport { DrinkItemTrait } from \"./DrinkItemTrait\";\r\nimport { ThrowableItemTrait } from \"./ThrowableItemTrait\";\r\nimport { StackableItemTrait } from \"./StackableItemTrait\";\r\nimport { NonStackableItemTrait } from \"./NonStackableItemTrait\";\r\nimport { FuelItemTrait } from \"./FuelItemTrait\";\r\nimport { GlintingItemTrait } from \"./GlintingItemTrait\";\r\nimport { RepairableItemTrait } from \"./RepairableItemTrait\";\r\nimport { CooldownItemTrait } from \"./CooldownItemTrait\";\r\nimport { MusicDiscItemTrait } from \"./MusicDiscItemTrait\";\r\n\r\n/**\r\n * Registers all built-in entity traits with the TraitRegistry.\r\n */\r\nexport function registerAllEntityTraits(): void {\r\n  // Body types\r\n  TraitRegistry.registerEntityTrait(new HumanoidEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new QuadrupedEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new QuadrupedSmallEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new FlyingEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new AquaticEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new ArthropodEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new SlimeEntityTrait());\r\n\r\n  // Behaviors\r\n  TraitRegistry.registerEntityTrait(new HostileEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new PassiveEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new NeutralEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new BossEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new WandersEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new FleesDaylightEntityTrait());\r\n\r\n  // Combat\r\n  TraitRegistry.registerEntityTrait(new MeleeAttackerEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new RangedAttackerEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new ExploderEntityTrait());\r\n\r\n  // Interaction\r\n  TraitRegistry.registerEntityTrait(new TameableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new RideableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new BreedableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new LeasableEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new TraderEntityTrait());\r\n\r\n  // Special\r\n  TraitRegistry.registerEntityTrait(new UndeadEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new BabyVariantEntityTrait());\r\n  TraitRegistry.registerEntityTrait(new TeleporterEntityTrait());\r\n}\r\n\r\n/**\r\n * Registers all built-in block traits with the TraitRegistry.\r\n */\r\nexport function registerAllBlockTraits(): void {\r\n  // Materials\r\n  TraitRegistry.registerBlockTrait(new StoneMaterialBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new WoodMaterialBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new MetalMaterialBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new SoftMaterialBlockTrait());\r\n\r\n  // Interactive\r\n  TraitRegistry.registerBlockTrait(new DoorBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new TrapdoorBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new ButtonBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new LeverBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new CraftingStationBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new RedstoneProducerBlockTrait());\r\n\r\n  // Placement\r\n  TraitRegistry.registerBlockTrait(new RotatableHorizontalBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new RotatableAllBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new SlabBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new StairsBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new FenceBlockTrait());\r\n\r\n  // Special\r\n  TraitRegistry.registerBlockTrait(new LightSourceBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new VariableLightBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new PassableBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new TransparentBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new GravityAffectedBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new CropBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new FlammableBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new ExplosionResistantBlockTrait());\r\n  TraitRegistry.registerBlockTrait(new SlipperyBlockTrait());\r\n}\r\n\r\n/**\r\n * Registers all built-in item traits with the TraitRegistry.\r\n */\r\nexport function registerAllItemTraits(): void {\r\n  // Tools\r\n  TraitRegistry.registerItemTrait(new SwordItemTrait());\r\n  TraitRegistry.registerItemTrait(new PickaxeItemTrait());\r\n  TraitRegistry.registerItemTrait(new AxeItemTrait());\r\n  TraitRegistry.registerItemTrait(new ShovelItemTrait());\r\n  TraitRegistry.registerItemTrait(new HoeItemTrait());\r\n\r\n  // Armor\r\n  TraitRegistry.registerItemTrait(new HelmetItemTrait());\r\n  TraitRegistry.registerItemTrait(new ChestplateItemTrait());\r\n  TraitRegistry.registerItemTrait(new LeggingsItemTrait());\r\n  TraitRegistry.registerItemTrait(new BootsItemTrait());\r\n\r\n  // Consumables\r\n  TraitRegistry.registerItemTrait(new FoodItemTrait());\r\n  TraitRegistry.registerItemTrait(new DrinkItemTrait());\r\n\r\n  // Special\r\n  TraitRegistry.registerItemTrait(new ThrowableItemTrait());\r\n  TraitRegistry.registerItemTrait(new StackableItemTrait());\r\n  TraitRegistry.registerItemTrait(new NonStackableItemTrait());\r\n  TraitRegistry.registerItemTrait(new FuelItemTrait());\r\n  TraitRegistry.registerItemTrait(new GlintingItemTrait());\r\n  TraitRegistry.registerItemTrait(new RepairableItemTrait());\r\n  TraitRegistry.registerItemTrait(new CooldownItemTrait());\r\n  TraitRegistry.registerItemTrait(new MusicDiscItemTrait());\r\n}\r\n\r\n/**\r\n * Registers all built-in traits with the TraitRegistry.\r\n */\r\nexport function registerAllTraits(): void {\r\n  registerAllEntityTraits();\r\n  registerAllBlockTraits();\r\n  registerAllItemTraits();\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * MCP Model Design Format\r\n *\r\n * This file defines the intermediary format for AI-assisted 3D model design.\r\n * It uses a per-face specification that is intuitive for AI reasoning while\r\n * being straightforward to convert to Minecraft's .geo.json format.\r\n *\r\n * Key design principles:\r\n * 1. Each bone contains cubes, each cube has 6 faces\r\n * 2. Faces can be colored with solid colors or SVG content\r\n * 3. SVG content is tiled into a texture atlas automatically\r\n * 4. UV coordinates are computed based on atlas layout\r\n */\r\n\r\n// Re-export effect types for convenient access\r\nexport type {\r\n  ITextureEffects,\r\n  ILightingEffect,\r\n  LightingPreset,\r\n  IBorderEffect,\r\n  IBorderSide,\r\n  BorderStyle,\r\n  IOverlayEffect,\r\n  OverlayPattern,\r\n  IColorVariationEffect,\r\n  ColorVariationMode,\r\n  ITilingEffect,\r\n  TilingPattern,\r\n} from \"./TextureEffects\";\r\n\r\n/**\r\n * A single color in RGBA format (0-255 for each channel)\r\n */\r\nexport interface IMcpColorRGBA {\r\n  r: number; // 0-255\r\n  g: number; // 0-255\r\n  b: number; // 0-255\r\n  a?: number; // 0-255, defaults to 255 (fully opaque)\r\n}\r\n\r\n/**\r\n * Textured rectangle fill type - defines how a rectangular area is filled with color/pattern.\r\n * This unified concept replaces separate \"color\" and \"noise\" properties for easier AI reasoning.\r\n */\r\nexport type TexturedRectangleType =\r\n  | \"none\" // No background fill - produces a fully transparent rectangle (useful for pixelArt-only textures)\r\n  | \"solid\" // Solid color fill - uses first color in colors array\r\n  | \"random_noise\" // Simple random noise - each pixel randomly picks from colors\r\n  | \"dither_noise\" // Ordered dithering using Bayer matrix - creates regular pattern\r\n  | \"perlin_noise\" // Perlin-like noise - smoother, organic-looking variation\r\n  | \"stipple_noise\" // Stipple pattern - dots/spots scattered on base color\r\n  | \"gradient\"; // Gradient - smooth transition between colors\r\n\r\n/**\r\n * @deprecated Use TexturedRectangleType instead. This alias is for backwards compatibility.\r\n */\r\nexport type NoisePatternType = \"random\" | \"dither\" | \"perlin\" | \"stipple\" | \"gradient\";\r\n\r\n/**\r\n * Textured rectangle configuration for procedural Minecraft-style textures.\r\n * A unified way to specify how a rectangular area should be filled.\r\n *\r\n * Examples:\r\n * - Solid red: { type: \"solid\", colors: [\"#FF0000\"] }\r\n * - Stone texture: { type: \"stipple_noise\", colors: [\"#8B8B8B\", \"#7A7A7A\"], seed: 123 }\r\n * - Wood grain: { type: \"dither_noise\", colors: [\"#8B4513\", \"#A0522D\"], seed: 456 }\r\n */\r\nexport interface IMcpTexturedRectangle {\r\n  /**\r\n   * The fill algorithm to use.\r\n   * - \"solid\": Solid color fill using the first color\r\n   * - \"random_noise\": Random pixel-by-pixel color selection\r\n   * - \"dither_noise\": Ordered dithering using Bayer matrix pattern\r\n   * - \"perlin_noise\": Smooth organic Perlin-like noise\r\n   * - \"stipple_noise\": Scattered dots/spots on base color (best for organic materials)\r\n   * - \"gradient\": Smooth transition between colors\r\n   */\r\n  type: TexturedRectangleType;\r\n\r\n  /**\r\n   * Array of colors to use. For \"solid\", only the first color is used.\r\n   * For noise types, provide 2+ colors for richer textures.\r\n   * Colors can be hex strings (\"#FF0000\") or rgb strings (\"rgb(255,0,0)\").\r\n   * For \"none\", colors are ignored and may be omitted (background is fully transparent).\r\n   */\r\n  colors: (string | IMcpColorRGBA)[];\r\n\r\n  /**\r\n   * Noise intensity/factor from 0 to 1. Default is 0.2.\r\n   * - 0: Minimal noise variation\r\n   * - 0.5: Balanced mix of colors\r\n   * - 1: Maximum noise variation\r\n   * Only applies to noise types, ignored for \"solid\".\r\n   */\r\n  factor?: number;\r\n\r\n  /**\r\n   * Random seed for deterministic noise generation.\r\n   * If not provided, a seed is generated from a hash of the texture context.\r\n   * Only applies to noise types, ignored for \"solid\".\r\n   */\r\n  seed?: number;\r\n\r\n  /**\r\n   * Pixel size for the noise pattern. Default is 1.\r\n   * Higher values create blockier/chunkier noise patterns.\r\n   * Only applies to noise types, ignored for \"solid\".\r\n   */\r\n  pixelSize?: number;\r\n\r\n  /**\r\n   * Scale factor for Perlin noise. Default is 4.\r\n   * Higher values create smaller/tighter noise patterns.\r\n   * Only applies to \"perlin_noise\" type.\r\n   */\r\n  scale?: number;\r\n\r\n  /**\r\n   * Post-processing effects to apply to the generated texture.\r\n   * Effects are applied in order: colorVariation -> lighting -> overlay -> border -> tiling.\r\n   *\r\n   * Example - weathered stone with inset lighting:\r\n   * ```json\r\n   * {\r\n   *   \"type\": \"stipple_noise\",\r\n   *   \"colors\": [\"#808080\", \"#707070\"],\r\n   *   \"effects\": {\r\n   *     \"lighting\": { \"preset\": \"inset\", \"intensity\": 0.3 },\r\n   *     \"overlay\": { \"pattern\": \"cracks\", \"density\": 0.2 }\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n}\r\n\r\n/**\r\n * @deprecated Use IMcpTexturedRectangle instead. This interface is for backwards compatibility.\r\n */\r\nexport interface IMcpNoiseConfig {\r\n  pattern?: NoisePatternType;\r\n  colors: (string | IMcpColorRGBA)[];\r\n  factor?: number;\r\n  seed?: number;\r\n  pixelSize?: number;\r\n  scale?: number;\r\n}\r\n\r\n/**\r\n * A single pixel color for pixel art.\r\n * Specify color using EITHER r/g/b values (0-255) OR hex string.\r\n */\r\nexport interface IMcpPixelColor {\r\n  /** Red channel (0-255) */\r\n  r?: number;\r\n  /** Green channel (0-255) */\r\n  g?: number;\r\n  /** Blue channel (0-255) */\r\n  b?: number;\r\n  /** Alpha channel (0-255, default 255 = opaque) */\r\n  a?: number;\r\n  /** Alternative: hex color string like \"#FF0000\" or \"#FF0000FF\" */\r\n  hex?: string;\r\n}\r\n\r\n/**\r\n * Pixel art overlay for face textures.\r\n *\r\n * Uses ASCII art patterns where each character maps to a color in the palette.\r\n * This format is optimized for AI readability - the pattern is visible in the text itself.\r\n *\r\n * Example - A creeper face:\r\n * ```json\r\n * {\r\n *   \"x\": 1, \"y\": 2,\r\n *   \"lines\": [\r\n *     \"B BB B\",\r\n *     \"B BB B\",\r\n *     \"  BB  \",\r\n *     \" BBBB \",\r\n *     \" B  B \"\r\n *   ],\r\n *   \"palette\": {\r\n *     \"B\": { \"r\": 0, \"g\": 0, \"b\": 0 }\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * Rules:\r\n * - Space character (' ') is always transparent (not drawn)\r\n * - Lines can be different lengths - shorter lines are right-padded with transparent pixels\r\n * - Any printable ASCII character can be used as a palette key\r\n * - Palette colors support RGBA (0-255) or hex strings\r\n */\r\n/**\r\n * Scale mode for pixel art rendering.\r\n * - \"unit\": Each character represents 1 Minecraft unit, scaled by pixelsPerUnit (default)\r\n * - \"exact\": Each character is exactly 1 pixel, no scaling\r\n * - \"cover\": Pixel art is scaled to completely cover the face texture\r\n */\r\nexport type IMcpPixelArtScaleMode = \"unit\" | \"exact\" | \"cover\";\r\n\r\nexport interface IMcpPixelArt {\r\n  /**\r\n   * How to scale the pixel art relative to the face texture.\r\n   *\r\n   * - \"unit\" (default): Each character = 1 Minecraft unit. Scaled by pixelsPerUnit.\r\n   *   An 8\u00D710 character grid on an 8\u00D710 unit face fills it completely.\r\n   *   x/y offsets are in Minecraft units.\r\n   *\r\n   * - \"exact\": Each character = exactly 1 pixel. No scaling applied.\r\n   *   Use for precise pixel-level control.\r\n   *   x/y offsets are in pixels.\r\n   *\r\n   * - \"cover\": Pixel art is stretched to completely cover the face texture.\r\n   *   x/y offsets are ignored.\r\n   */\r\n  scaleMode?: IMcpPixelArtScaleMode;\r\n\r\n  /**\r\n   * X offset from the left edge of the face texture.\r\n   * Units depend on scaleMode:\r\n   * - \"unit\" (default): Minecraft units (scaled by pixelsPerUnit)\r\n   * - \"exact\": Pixels\r\n   * - \"cover\": Ignored\r\n   * Default: 0\r\n   */\r\n  x?: number;\r\n\r\n  /**\r\n   * Y offset from the top edge of the face texture.\r\n   * Units depend on scaleMode:\r\n   * - \"unit\" (default): Minecraft units (scaled by pixelsPerUnit)\r\n   * - \"exact\": Pixels\r\n   * - \"cover\": Ignored\r\n   * Default: 0\r\n   */\r\n  y?: number;\r\n\r\n  /**\r\n   * Array of strings representing rows of pixels from top to bottom.\r\n   * Each character is looked up in the palette.\r\n   * Space (' ') is always transparent.\r\n   *\r\n   * Example for a 5x3 pattern:\r\n   * [\"XXXXX\", \" XXX \", \"  X  \"]\r\n   */\r\n  lines: string[];\r\n\r\n  /**\r\n   * Color palette mapping characters to RGBA colors.\r\n   * Space (' ') should not be defined - it's always transparent.\r\n   *\r\n   * Example:\r\n   * {\r\n   *   \"X\": { \"r\": 255, \"g\": 0, \"b\": 0 },\r\n   *   \"O\": { \"hex\": \"#00FF00\" }\r\n   * }\r\n   */\r\n  palette: { [char: string]: IMcpPixelColor };\r\n}\r\n\r\n/**\r\n * Converts legacy IMcpNoiseConfig to IMcpTexturedRectangle.\r\n */\r\nexport function convertNoiseConfigToTexturedRectangle(noise: IMcpNoiseConfig): IMcpTexturedRectangle {\r\n  const patternToType: { [key: string]: TexturedRectangleType } = {\r\n    random: \"random_noise\",\r\n    dither: \"dither_noise\",\r\n    perlin: \"perlin_noise\",\r\n    stipple: \"stipple_noise\",\r\n    gradient: \"gradient\",\r\n  };\r\n  return {\r\n    type: patternToType[noise.pattern || \"random\"] || \"random_noise\",\r\n    colors: noise.colors,\r\n    factor: noise.factor,\r\n    seed: noise.seed,\r\n    pixelSize: noise.pixelSize,\r\n    scale: noise.scale,\r\n  };\r\n}\r\n\r\n/**\r\n * Converts a color string to a solid IMcpTexturedRectangle.\r\n */\r\nexport function colorToTexturedRectangle(color: string | IMcpColorRGBA): IMcpTexturedRectangle {\r\n  return {\r\n    type: \"solid\",\r\n    colors: [typeof color === \"string\" ? color : color],\r\n  };\r\n}\r\n\r\n/**\r\n * Texture definition for reuse across multiple faces.\r\n * Define textures once in the model's `textures` dictionary, then reference by ID.\r\n */\r\nexport interface IMcpTextureDefinition {\r\n  /**\r\n   * @deprecated Use `background` with type: \"solid\" instead.\r\n   * Solid color fill for this texture.\r\n   * Can be a hex string like \"#FF0000\" or \"rgb(255,0,0)\" or an object.\r\n   */\r\n  color?: string | IMcpColorRGBA;\r\n\r\n  /**\r\n   * SVG content for this texture. Rendered on top of background.\r\n   * The SVG should be a complete SVG document or fragment.\r\n   * The SVG viewBox determines the texture resolution.\r\n   *\r\n   * Example:\r\n   * \"<svg viewBox='0 0 16 16'><rect fill='#ff0000' width='16' height='16'/></svg>\"\r\n   */\r\n  svg?: string;\r\n\r\n  /**\r\n   * @deprecated Use `background` instead.\r\n   * Noise texture configuration for procedural Minecraft-style textures.\r\n   */\r\n  noise?: IMcpNoiseConfig;\r\n\r\n  /**\r\n   * Background fill for this texture using a textured rectangle.\r\n   * Supports solid colors and various noise patterns.\r\n   *\r\n   * Examples:\r\n   * - Solid: { type: \"solid\", colors: [\"#808080\"] }\r\n   * - Stone: { type: \"stipple_noise\", colors: [\"#8B8B8B\", \"#7A7A7A\"], seed: 123 }\r\n   *\r\n   * Priority: background -> svg (overlay) -> color (fallback for backwards compat)\r\n   */\r\n  background?: IMcpTexturedRectangle;\r\n\r\n  /**\r\n   * Pixel art overlays rendered on top of background and svg.\r\n   * Each pixel art layer is rendered in array order (first = bottom, last = top).\r\n   * Uses ASCII art patterns for AI-friendly specification.\r\n   *\r\n   * Example - simple eyes:\r\n   * ```json\r\n   * [{\r\n   *   \"x\": 2, \"y\": 2,\r\n   *   \"lines\": [\"O O\", \"   \", \" v \"],\r\n   *   \"palette\": { \"O\": { \"r\": 0, \"g\": 0, \"b\": 0 }, \"v\": { \"r\": 0, \"g\": 0, \"b\": 0 } }\r\n   * }]\r\n   * ```\r\n   */\r\n  pixelArt?: IMcpPixelArt[];\r\n\r\n  /**\r\n   * Post-processing effects to apply to this texture.\r\n   * Effects are applied after background, svg, and pixelArt rendering.\r\n   *\r\n   * Example:\r\n   * ```json\r\n   * {\r\n   *   \"background\": { \"type\": \"stipple_noise\", \"colors\": [\"#808080\", \"#707070\"] },\r\n   *   \"effects\": {\r\n   *     \"lighting\": { \"preset\": \"outset\", \"intensity\": 0.3 },\r\n   *     \"border\": { \"all\": { \"style\": \"highlight\", \"width\": 1 } }\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n}\r\n\r\n/**\r\n * Face content specification - reference a texture by ID, or specify inline content.\r\n * Priority: textureId > background+svg > svg > background > color\r\n */\r\nexport interface IMcpFaceContent {\r\n  /**\r\n   * Reference to a texture defined in the model's `textures` dictionary.\r\n   * If specified, the texture's background/svg will be used for this face.\r\n   * This is the preferred approach for textures used on multiple faces.\r\n   */\r\n  textureId?: string;\r\n\r\n  /**\r\n   * @deprecated Use `background` with type: \"solid\" instead.\r\n   * Solid color fill for this face.\r\n   */\r\n  color?: string | IMcpColorRGBA;\r\n\r\n  /**\r\n   * SVG content for this face. Rendered on top of background.\r\n   * The SVG should be a complete SVG document or fragment.\r\n   * The SVG viewBox determines the texture resolution for this face.\r\n   *\r\n   * Example:\r\n   * \"<svg viewBox='0 0 16 16'><rect fill='#ff0000' width='16' height='16'/></svg>\"\r\n   */\r\n  svg?: string;\r\n\r\n  /**\r\n   * @deprecated Use `background` instead.\r\n   * Noise texture configuration for procedural Minecraft-style textures.\r\n   */\r\n  noise?: IMcpNoiseConfig;\r\n\r\n  /**\r\n   * Background fill for this face using a textured rectangle.\r\n   * Supports solid colors and various noise patterns.\r\n   *\r\n   * Examples:\r\n   * - Solid: { type: \"solid\", colors: [\"#808080\"] }\r\n   * - Grass: { type: \"perlin_noise\", colors: [\"#228B22\", \"#32CD32\"], seed: 456 }\r\n   *\r\n   * Priority: textureId > background+svg > svg > background > color\r\n   */\r\n  background?: IMcpTexturedRectangle;\r\n\r\n  /**\r\n   * Pixel art overlays rendered on top of background and svg.\r\n   * Each pixel art layer is rendered in array order (first = bottom, last = top).\r\n   * Uses ASCII art patterns for AI-friendly specification.\r\n   *\r\n   * Example - simple face:\r\n   * ```json\r\n   * [{\r\n   *   \"x\": 1, \"y\": 1,\r\n   *   \"lines\": [\"O O\", \"   \", \" U \"],\r\n   *   \"palette\": { \"O\": { \"r\": 0, \"g\": 0, \"b\": 0 }, \"U\": { \"r\": 0, \"g\": 0, \"b\": 0 } }\r\n   * }]\r\n   * ```\r\n   */\r\n  pixelArt?: IMcpPixelArt[];\r\n\r\n  /**\r\n   * Post-processing effects to apply to this face.\r\n   * Effects are applied after background, svg, and pixelArt rendering.\r\n   * If textureId is used, effects are applied to the resolved texture.\r\n   *\r\n   * Example:\r\n   * ```json\r\n   * {\r\n   *   \"background\": { \"type\": \"solid\", \"colors\": [\"#404040\"] },\r\n   *   \"effects\": {\r\n   *     \"lighting\": { \"preset\": \"pillow\", \"intensity\": 0.4 }\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n\r\n  /**\r\n   * Optional rotation of the face content in degrees.\r\n   * Typically 0, 90, 180, or 270 degrees.\r\n   * Applied after the content is rendered.\r\n   */\r\n  rotation?: number;\r\n}\r\n\r\n/**\r\n * The six faces of a cube\r\n */\r\nexport interface IMcpCubeFaces {\r\n  north?: IMcpFaceContent;\r\n  south?: IMcpFaceContent;\r\n  east?: IMcpFaceContent;\r\n  west?: IMcpFaceContent;\r\n  up?: IMcpFaceContent;\r\n  down?: IMcpFaceContent;\r\n}\r\n\r\n/**\r\n * A cube within a bone, with position, size, and per-face content.\r\n *\r\n * ROTATION NOTE: Cubes do NOT have pivot/rotation properties in the MCP schema.\r\n * All rotation should be done at the BONE level. If you need a rotated cube,\r\n * place it in its own single-cube bone and rotate that bone. This simplifies\r\n * the model structure and avoids confusion about which rotation applies where.\r\n */\r\nexport interface IMcpDesignCube {\r\n  /**\r\n   * The origin (corner) of the cube in Minecraft coordinates.\r\n   * [x, y, z] where y is up.\r\n   */\r\n  origin: [number, number, number];\r\n\r\n  /**\r\n   * The size of the cube in [width, height, depth].\r\n   */\r\n  size: [number, number, number];\r\n\r\n  /**\r\n   * Per-face content specification.\r\n   * Faces not specified will be transparent.\r\n   */\r\n  faces: IMcpCubeFaces;\r\n\r\n  /**\r\n   * Optional inflation value (expands cube by this amount on all sides).\r\n   */\r\n  inflate?: number;\r\n\r\n  /**\r\n   * If true, mirror the UV coordinates for this cube.\r\n   */\r\n  mirror?: boolean;\r\n}\r\n\r\n/**\r\n * A bone in the model hierarchy, containing cubes and optional child bones.\r\n *\r\n * ROTATION: All rotation in MCP models is done at the BONE level, not cube level.\r\n * Use `pivot` to set the rotation point (e.g., shoulder for an arm) and `rotation`\r\n * to rotate the bone. Child bones and all cubes in the bone rotate together.\r\n */\r\nexport interface IMcpDesignBone {\r\n  /**\r\n   * Unique name for this bone within the model\r\n   */\r\n  name: string;\r\n\r\n  /**\r\n   * Optional parent bone name for hierarchical models.\r\n   * Child bones rotate with their parent.\r\n   */\r\n  parent?: string;\r\n\r\n  /**\r\n   * The pivot point for rotation of this bone and its children.\r\n   * [x, y, z] in Minecraft coordinates.\r\n   * Example: For an arm, set pivot at the shoulder joint.\r\n   */\r\n  pivot?: [number, number, number];\r\n\r\n  /**\r\n   * Rotation of the entire bone in degrees [x, y, z].\r\n   * The bone rotates around its pivot point.\r\n   * All cubes in the bone and child bones rotate together.\r\n   */\r\n  rotation?: [number, number, number];\r\n\r\n  /**\r\n   * The cubes that make up this bone's geometry\r\n   */\r\n  cubes: IMcpDesignCube[];\r\n\r\n  /**\r\n   * Whether to mirror texture UVs for this bone\r\n   */\r\n  mirror?: boolean;\r\n}\r\n\r\n/**\r\n * The complete model design input for MCP tools\r\n */\r\nexport interface IMcpModelDesign {\r\n  /**\r\n   * Format version for the design format. Currently \"1.0.0\".\r\n   */\r\n  formatVersion?: string;\r\n\r\n  /**\r\n   * The identifier for this model (e.g., \"geometry.custom_entity\").\r\n   * Will be prefixed with \"geometry.\" if not already.\r\n   */\r\n  identifier: string;\r\n\r\n  /**\r\n   * Optional description of the model\r\n   */\r\n  description?: string;\r\n\r\n  /**\r\n   * Texture resolution for the generated atlas.\r\n   * Default is [64, 64] for item-sized models.\r\n   * Use [64, 64], [128, 128], [256, 256] for increasing detail.\r\n   */\r\n  textureSize?: [number, number];\r\n\r\n  /**\r\n   * Pixels per Minecraft unit for texture generation.\r\n   * This controls texture resolution: pixelsPerUnit \u00D7 16 = pixels per block.\r\n   *\r\n   * Common values:\r\n   * - 1: 16 pixels per block (vanilla Minecraft resolution)\r\n   * - 2: 32 pixels per block (default, HD textures)\r\n   * - 4: 64 pixels per block (high-resolution textures)\r\n   *\r\n   * Default: 2 (32 pixels per block)\r\n   */\r\n  pixelsPerUnit?: number;\r\n\r\n  /**\r\n   * Named texture definitions that can be referenced by faces using textureId.\r\n   * This allows texture reuse across multiple faces, reducing token usage and\r\n   * enabling automatic atlas optimization (shared textures use the same UV region).\r\n   *\r\n   * Example:\r\n   * ```\r\n   * textures: {\r\n   *   \"wood_grain\": { svg: \"<svg>...</svg>\" },\r\n   *   \"bark\": { color: \"#4a3728\" }\r\n   * }\r\n   * ```\r\n   * Then reference in faces: `{ textureId: \"wood_grain\" }`\r\n   */\r\n  textures?: { [textureId: string]: IMcpTextureDefinition };\r\n\r\n  /**\r\n   * The visible bounding box of the model.\r\n   * [width, height] in Minecraft units.\r\n   * Used for culling and shadow calculations.\r\n   */\r\n  visibleBoundsSize?: [number, number, number];\r\n\r\n  /**\r\n   * Offset for the visible bounds from origin.\r\n   */\r\n  visibleBoundsOffset?: [number, number, number];\r\n\r\n  /**\r\n   * The bones that make up this model\r\n   */\r\n  bones: IMcpDesignBone[];\r\n}\r\n\r\n/**\r\n * Options for the previewModelDesign tool\r\n */\r\nexport interface IMcpModelPreviewOptions {\r\n  /**\r\n   * Width of the preview image in pixels. Default: 512\r\n   */\r\n  width?: number;\r\n\r\n  /**\r\n   * Height of the preview image in pixels. Default: 512\r\n   */\r\n  height?: number;\r\n\r\n  /**\r\n   * Camera distance from the model. Default: auto-calculated from model size\r\n   */\r\n  cameraDistance?: number;\r\n\r\n  /**\r\n   * Camera rotation angle (horizontal). Default: 0.8 radians\r\n   */\r\n  cameraAlpha?: number;\r\n\r\n  /**\r\n   * Camera rotation angle (vertical). Default: 1.0 radians\r\n   */\r\n  cameraBeta?: number;\r\n\r\n  /**\r\n   * Background color for the preview. Default: transparent\r\n   */\r\n  backgroundColor?: string | IMcpColorRGBA;\r\n\r\n  /**\r\n   * When true, renders the model from multiple angles in a side-by-side grid.\r\n   * Each view is labeled with its angle name.\r\n   * Default: false (single angle render)\r\n   */\r\n  multiAngle?: boolean;\r\n\r\n  /**\r\n   * Which angle presets to include in multi-angle mode.\r\n   * Default: [\"front-right\", \"back-left\"] for 2-view layout\r\n   * Available presets: \"front-right\", \"front-left\", \"back-right\", \"back-left\", \"top-down\", \"side-right\", \"side-left\"\r\n   */\r\n  anglePresets?: string[];\r\n}\r\n\r\n/**\r\n * Result from the previewModelDesign tool\r\n */\r\nexport interface IMcpModelPreviewResult {\r\n  /**\r\n   * Base64-encoded PNG image of the preview\r\n   */\r\n  previewImage?: string;\r\n\r\n  /**\r\n   * MIME type of the preview image (always \"image/png\")\r\n   */\r\n  mimeType?: string;\r\n\r\n  /**\r\n   * Generated geometry JSON (for debugging)\r\n   */\r\n  geometryJson?: object;\r\n\r\n  /**\r\n   * Any errors or warnings encountered\r\n   */\r\n  errors?: string[];\r\n  warnings?: string[];\r\n}\r\n\r\n/**\r\n * Options for the exportModelDesign tool\r\n */\r\nexport interface IMcpModelExportOptions {\r\n  /**\r\n   * Path to write the .geo.json file\r\n   */\r\n  geometryOutputPath: string;\r\n\r\n  /**\r\n   * Path to write the texture.png file\r\n   */\r\n  textureOutputPath: string;\r\n\r\n  /**\r\n   * If true, overwrite existing files. Default: false\r\n   */\r\n  overwrite?: boolean;\r\n\r\n  /**\r\n   * If true, also generate a preview image alongside the exported files\r\n   */\r\n  generatePreview?: boolean;\r\n\r\n  /**\r\n   * Path for the preview image if generatePreview is true\r\n   */\r\n  previewOutputPath?: string;\r\n}\r\n\r\n/**\r\n * Result from the exportModelDesign tool\r\n */\r\nexport interface IMcpModelExportResult {\r\n  /**\r\n   * Whether the export was successful\r\n   */\r\n  success: boolean;\r\n\r\n  /**\r\n   * Paths of files that were written\r\n   */\r\n  filesWritten: string[];\r\n\r\n  /**\r\n   * The generated geometry JSON\r\n   */\r\n  geometryJson?: object;\r\n\r\n  /**\r\n   * Any errors or warnings encountered\r\n   */\r\n  errors?: string[];\r\n  warnings?: string[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * NoiseGenerationUtilities\r\n *\r\n * Pure noise generation algorithms for procedural texture generation.\r\n * This module provides the core algorithms without any rendering/output concerns.\r\n *\r\n * Used by TexturedRectangleGenerator to create Minecraft-style pixel art textures.\r\n */\r\n\r\nimport { IMcpColorRGBA, NoisePatternType } from \"./IMcpModelDesign\";\r\nimport ModelDesignUtilities from \"./ModelDesignUtilities\";\r\n\r\n/**\r\n * Parsed color with r, g, b, a components\r\n */\r\nexport interface ParsedColor {\r\n  r: number;\r\n  g: number;\r\n  b: number;\r\n  a: number;\r\n}\r\n\r\n/**\r\n * Simple seeded pseudo-random number generator (Mulberry32).\r\n * Produces deterministic sequences for consistent noise generation.\r\n */\r\nexport class SeededRandom {\r\n  private state: number;\r\n\r\n  constructor(seed: number) {\r\n    this.state = seed;\r\n  }\r\n\r\n  /**\r\n   * Generate next random number in [0, 1)\r\n   */\r\n  next(): number {\r\n    let t = (this.state += 0x6d2b79f5);\r\n    t = Math.imul(t ^ (t >>> 15), t | 1);\r\n    t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\r\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\r\n  }\r\n\r\n  /**\r\n   * Generate random integer in [min, max] inclusive\r\n   */\r\n  nextInt(min: number, max: number): number {\r\n    return Math.floor(this.next() * (max - min + 1)) + min;\r\n  }\r\n}\r\n\r\n/**\r\n * 4x4 Bayer dithering matrix (normalized to 0-1 range)\r\n */\r\nconst BAYER_MATRIX_4X4 = [\r\n  [0 / 16, 8 / 16, 2 / 16, 10 / 16],\r\n  [12 / 16, 4 / 16, 14 / 16, 6 / 16],\r\n  [3 / 16, 11 / 16, 1 / 16, 9 / 16],\r\n  [15 / 16, 7 / 16, 13 / 16, 5 / 16],\r\n];\r\n\r\n/**\r\n * Noise generation utilities - pure algorithms for procedural noise patterns.\r\n */\r\nexport default class NoiseGenerationUtilities {\r\n  /**\r\n   * Hash function to generate seed from string (djb2 algorithm)\r\n   */\r\n  static hashString(str: string): number {\r\n    let hash = 5381;\r\n    for (let i = 0; i < str.length; i++) {\r\n      hash = (hash * 33) ^ str.charCodeAt(i);\r\n    }\r\n    return hash >>> 0; // Convert to unsigned 32-bit\r\n  }\r\n\r\n  /**\r\n   * Generate noise grid based on pattern type\r\n   */\r\n  static generateNoiseGrid(\r\n    pattern: NoisePatternType,\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom,\r\n    scale: number\r\n  ): ParsedColor[][] {\r\n    switch (pattern) {\r\n      case \"dither\":\r\n        return this.generateDitherGrid(colors, factor, width, height);\r\n      case \"perlin\":\r\n        return this.generatePerlinGrid(colors, factor, width, height, rng, scale);\r\n      case \"stipple\":\r\n        return this.generateStippleGrid(colors, factor, width, height, rng);\r\n      case \"gradient\":\r\n        return this.generateGradientGrid(colors, width, height, rng);\r\n      case \"random\":\r\n      default:\r\n        return this.generateRandomGrid(colors, factor, width, height, rng);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Simple random noise - each pixel randomly picks from colors\r\n   */\r\n  static generateRandomGrid(\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom\r\n  ): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n    const baseColor = colors[0];\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        if (rng.next() < factor && colors.length > 1) {\r\n          // Pick a random color from the palette\r\n          const colorIndex = rng.nextInt(0, colors.length - 1);\r\n          row.push(colors[colorIndex]);\r\n        } else {\r\n          row.push(baseColor);\r\n        }\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Ordered dithering using Bayer matrix\r\n   */\r\n  static generateDitherGrid(colors: ParsedColor[], factor: number, width: number, height: number): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Get threshold from Bayer matrix\r\n        const threshold = BAYER_MATRIX_4X4[y % 4][x % 4];\r\n\r\n        // Determine which color to use based on threshold and factor\r\n        const colorIndex = threshold * factor * (colors.length - 1);\r\n        const index = Math.min(Math.floor(colorIndex), colors.length - 1);\r\n        row.push(colors[index]);\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Perlin-like noise for organic variation\r\n   * Uses simplified value noise with interpolation and smooth color blending\r\n   */\r\n  static generatePerlinGrid(\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom,\r\n    scale: number\r\n  ): ParsedColor[][] {\r\n    // Generate base noise at lower resolution\r\n    const noiseWidth = Math.ceil(width / scale) + 2;\r\n    const noiseHeight = Math.ceil(height / scale) + 2;\r\n    const baseNoise: number[][] = [];\r\n\r\n    for (let y = 0; y < noiseHeight; y++) {\r\n      const row: number[] = [];\r\n      for (let x = 0; x < noiseWidth; x++) {\r\n        row.push(rng.next());\r\n      }\r\n      baseNoise.push(row);\r\n    }\r\n\r\n    // Interpolate to full resolution\r\n    const grid: ParsedColor[][] = [];\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Get interpolated noise value\r\n        const nx = x / scale;\r\n        const ny = y / scale;\r\n        const value = this.bilinearInterpolate(baseNoise, nx, ny);\r\n\r\n        // Apply factor to control spread (factor 1.0 = full range, lower = more subtle)\r\n        const adjustedValue = (value - 0.5) * factor + 0.5;\r\n        const clampedValue = Math.max(0, Math.min(1, adjustedValue));\r\n\r\n        // Blend between colors smoothly instead of hard quantization\r\n        // Map value to position in color array and interpolate\r\n        const colorPos = clampedValue * (colors.length - 1);\r\n        const colorIndex = Math.floor(colorPos);\r\n        const colorFrac = colorPos - colorIndex;\r\n\r\n        const color1 = colors[Math.min(colorIndex, colors.length - 1)];\r\n        const color2 = colors[Math.min(colorIndex + 1, colors.length - 1)];\r\n\r\n        // Linearly interpolate between adjacent colors\r\n        const blendedColor: ParsedColor = {\r\n          r: Math.round(color1.r * (1 - colorFrac) + color2.r * colorFrac),\r\n          g: Math.round(color1.g * (1 - colorFrac) + color2.g * colorFrac),\r\n          b: Math.round(color1.b * (1 - colorFrac) + color2.b * colorFrac),\r\n          a: Math.round(color1.a * (1 - colorFrac) + color2.a * colorFrac),\r\n        };\r\n        row.push(blendedColor);\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Bilinear interpolation for smooth noise\r\n   */\r\n  static bilinearInterpolate(grid: number[][], x: number, y: number): number {\r\n    const x0 = Math.floor(x);\r\n    const y0 = Math.floor(y);\r\n    const x1 = x0 + 1;\r\n    const y1 = y0 + 1;\r\n\r\n    const xFrac = x - x0;\r\n    const yFrac = y - y0;\r\n\r\n    // Get values at corners (with bounds checking)\r\n    const v00 = grid[Math.min(y0, grid.length - 1)]?.[Math.min(x0, grid[0].length - 1)] ?? 0;\r\n    const v10 = grid[Math.min(y0, grid.length - 1)]?.[Math.min(x1, grid[0].length - 1)] ?? 0;\r\n    const v01 = grid[Math.min(y1, grid.length - 1)]?.[Math.min(x0, grid[0].length - 1)] ?? 0;\r\n    const v11 = grid[Math.min(y1, grid.length - 1)]?.[Math.min(x1, grid[0].length - 1)] ?? 0;\r\n\r\n    // Interpolate\r\n    const top = v00 * (1 - xFrac) + v10 * xFrac;\r\n    const bottom = v01 * (1 - xFrac) + v11 * xFrac;\r\n    return top * (1 - yFrac) + bottom * yFrac;\r\n  }\r\n\r\n  /**\r\n   * Stipple pattern - scattered dots on base color\r\n   */\r\n  static generateStippleGrid(\r\n    colors: ParsedColor[],\r\n    factor: number,\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom\r\n  ): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n    const baseColor = colors[0];\r\n    const dotColors = colors.slice(1);\r\n\r\n    if (dotColors.length === 0) {\r\n      dotColors.push(baseColor);\r\n    }\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Stipple probability based on factor (factor of 0.5 = ~50% dots)\r\n        if (rng.next() < factor * 0.7) {\r\n          const dotIndex = rng.nextInt(0, dotColors.length - 1);\r\n          row.push(dotColors[dotIndex]);\r\n        } else {\r\n          row.push(baseColor);\r\n        }\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Gradient noise - smooth transition between colors\r\n   * Creates horizontal or vertical gradient with slight noise\r\n   */\r\n  static generateGradientGrid(\r\n    colors: ParsedColor[],\r\n    width: number,\r\n    height: number,\r\n    rng: SeededRandom\r\n  ): ParsedColor[][] {\r\n    const grid: ParsedColor[][] = [];\r\n    const isVertical = rng.next() > 0.5;\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      const row: ParsedColor[] = [];\r\n      for (let x = 0; x < width; x++) {\r\n        // Calculate position along gradient (0 to 1)\r\n        const t = isVertical ? y / Math.max(height - 1, 1) : x / Math.max(width - 1, 1);\r\n\r\n        // Add slight noise\r\n        const noiseT = t + (rng.next() - 0.5) * 0.1;\r\n        const clampedT = Math.max(0, Math.min(1, noiseT));\r\n\r\n        // Interpolate between colors\r\n        const colorPos = clampedT * (colors.length - 1);\r\n        const colorIndex = Math.floor(colorPos);\r\n        const colorFrac = colorPos - colorIndex;\r\n\r\n        const c1 = colors[Math.min(colorIndex, colors.length - 1)];\r\n        const c2 = colors[Math.min(colorIndex + 1, colors.length - 1)];\r\n\r\n        row.push(this.lerpColor(c1, c2, colorFrac));\r\n      }\r\n      grid.push(row);\r\n    }\r\n\r\n    return grid;\r\n  }\r\n\r\n  /**\r\n   * Linear interpolation between two colors\r\n   */\r\n  static lerpColor(c1: ParsedColor, c2: ParsedColor, t: number): ParsedColor {\r\n    return {\r\n      r: Math.round(c1.r * (1 - t) + c2.r * t),\r\n      g: Math.round(c1.g * (1 - t) + c2.g * t),\r\n      b: Math.round(c1.b * (1 - t) + c2.b * t),\r\n      a: Math.round(c1.a * (1 - t) + c2.a * t),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Check if two colors are equal\r\n   */\r\n  static colorsEqual(c1: ParsedColor, c2: ParsedColor): boolean {\r\n    return c1.r === c2.r && c1.g === c2.g && c1.b === c2.b && c1.a === c2.a;\r\n  }\r\n\r\n  /**\r\n   * Convert parsed color to hex string\r\n   */\r\n  static colorToHex(color: ParsedColor): string {\r\n    const r = color.r.toString(16).padStart(2, \"0\");\r\n    const g = color.g.toString(16).padStart(2, \"0\");\r\n    const b = color.b.toString(16).padStart(2, \"0\");\r\n\r\n    if (color.a < 255) {\r\n      const a = color.a.toString(16).padStart(2, \"0\");\r\n      return `#${r}${g}${b}${a}`;\r\n    }\r\n\r\n    return `#${r}${g}${b}`;\r\n  }\r\n\r\n  /**\r\n   * Parse color input (string or RGBA object) to ParsedColor\r\n   */\r\n  static parseColorInput(input: string | IMcpColorRGBA): ParsedColor {\r\n    if (typeof input === \"object\") {\r\n      return {\r\n        r: Math.max(0, Math.min(255, input.r)),\r\n        g: Math.max(0, Math.min(255, input.g)),\r\n        b: Math.max(0, Math.min(255, input.b)),\r\n        a: input.a !== undefined ? Math.max(0, Math.min(255, input.a)) : 255,\r\n      };\r\n    }\r\n\r\n    // Use ModelDesignUtilities.parseColor for string parsing\r\n    const parsed = ModelDesignUtilities.parseColor(input);\r\n    return {\r\n      r: parsed.r,\r\n      g: parsed.g,\r\n      b: parsed.b,\r\n      a: parsed.a ?? 255,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * TextureEffects\r\n *\r\n * A reusable library of pixel-level texture effects for Minecraft-style textures.\r\n * These effects operate directly on RGBA pixel buffers for maximum performance.\r\n *\r\n * ARCHITECTURE:\r\n * - All effects operate on Uint8Array RGBA pixel buffers (width * height * 4 bytes)\r\n * - Effects are pure functions that modify the pixel buffer in-place\r\n * - Effects can be composed/chained for complex visual results\r\n * - All coordinates use standard image coordinates (0,0 = top-left)\r\n *\r\n * EFFECT CATEGORIES:\r\n * 1. Lighting Effects - Add depth/dimension via light simulation (inset, outset, pillow, ambient_occlusion)\r\n * 2. Border Effects - Add edges/outlines with CSS-like syntax (solid, dashed, worn, highlight)\r\n * 3. Overlay Effects - Add weathering/detail patterns (cracks, scratches, moss, rust, sparkle, veins)\r\n * 4. Color Variation - Modify color distribution (hue_shift, saturation_jitter, value_jitter, palette_snap)\r\n * 5. Tiling Effects - Make textures seamless/patterned (seamless, brick, herringbone, basketweave)\r\n */\r\n\r\nimport { ParsedColor, SeededRandom } from \"./NoiseGenerationUtilities\";\r\nimport NoiseGenerationUtilities from \"./NoiseGenerationUtilities\";\r\n\r\n// ============================================================================\r\n// INTERFACES\r\n// ============================================================================\r\n\r\n/**\r\n * Lighting effect preset types.\r\n * These simulate light hitting a surface to add depth.\r\n */\r\nexport type LightingPreset = \"inset\" | \"outset\" | \"pillow\" | \"ambient_occlusion\";\r\n\r\n/**\r\n * Configuration for lighting effects.\r\n * Adds pseudo-3D depth to flat textures by simulating light direction.\r\n */\r\nexport interface ILightingEffect {\r\n  /**\r\n   * The lighting preset to apply:\r\n   * - 'inset': Darken top/left, lighten bottom/right (recessed panels, buttons)\r\n   * - 'outset': Lighten top/left, darken bottom/right (raised blocks, bricks)\r\n   * - 'pillow': Darken all edges toward center (rounded/soft look)\r\n   * - 'ambient_occlusion': Darken only corners/edges (realistic depth)\r\n   */\r\n  preset: LightingPreset;\r\n\r\n  /**\r\n   * Intensity of the effect (0.0 to 1.0). Default: 0.3\r\n   * - 0.0: No effect\r\n   * - 0.5: Medium effect\r\n   * - 1.0: Maximum effect\r\n   */\r\n  intensity?: number;\r\n\r\n  /**\r\n   * Light source angle in degrees (0-360). Default: 315 (top-left)\r\n   * - 0: Right\r\n   * - 90: Bottom\r\n   * - 180: Left\r\n   * - 270: Top\r\n   * - 315: Top-left (most common for pseudo-3D)\r\n   */\r\n  angle?: number;\r\n}\r\n\r\n/**\r\n * Border style types.\r\n */\r\nexport type BorderStyle = \"solid\" | \"dashed\" | \"worn\" | \"highlight\";\r\n\r\n/**\r\n * Configuration for a single border side (CSS-like).\r\n */\r\nexport interface IBorderSide {\r\n  /**\r\n   * Style of the border:\r\n   * - 'solid': Continuous line\r\n   * - 'dashed': Alternating on/off segments\r\n   * - 'worn': Irregular/weathered edge\r\n   * - 'highlight': Bright line (auto-lightened from base)\r\n   */\r\n  style: BorderStyle;\r\n\r\n  /**\r\n   * Width in pixels (1-8). Default: 1\r\n   */\r\n  width?: number;\r\n\r\n  /**\r\n   * Border color (hex string). If not specified:\r\n   * - For 'solid'/'dashed': Auto-darkens from texture\r\n   * - For 'highlight': Auto-lightens from texture\r\n   * - For 'worn': Uses texture color with variations\r\n   */\r\n  color?: string;\r\n}\r\n\r\n/**\r\n * Configuration for border effects (CSS-like syntax).\r\n * Supports individual side configuration or shorthand for all sides.\r\n */\r\nexport interface IBorderEffect {\r\n  /**\r\n   * Shorthand: Apply to all sides. Individual side properties override this.\r\n   */\r\n  all?: IBorderSide;\r\n\r\n  /**\r\n   * Top border configuration.\r\n   */\r\n  top?: IBorderSide;\r\n\r\n  /**\r\n   * Right border configuration.\r\n   */\r\n  right?: IBorderSide;\r\n\r\n  /**\r\n   * Bottom border configuration.\r\n   */\r\n  bottom?: IBorderSide;\r\n\r\n  /**\r\n   * Left border configuration.\r\n   */\r\n  left?: IBorderSide;\r\n\r\n  /**\r\n   * Random seed for 'worn' style. Enables deterministic weathering.\r\n   */\r\n  seed?: number;\r\n}\r\n\r\n/**\r\n * Overlay pattern types for weathering and detail.\r\n */\r\nexport type OverlayPattern = \"cracks\" | \"scratches\" | \"moss\" | \"rust\" | \"sparkle\" | \"veins\";\r\n\r\n/**\r\n * Configuration for overlay effects.\r\n * Adds surface detail without modifying the base texture structure.\r\n */\r\nexport interface IOverlayEffect {\r\n  /**\r\n   * The overlay pattern to apply:\r\n   * - 'cracks': Dark lines suggesting cracks/fractures\r\n   * - 'scratches': Light linear marks\r\n   * - 'moss': Green/organic patches\r\n   * - 'rust': Orange/brown oxidation spots\r\n   * - 'sparkle': Bright highlight dots\r\n   * - 'veins': Dark branching lines (for stone/marble)\r\n   */\r\n  pattern: OverlayPattern;\r\n\r\n  /**\r\n   * Coverage density (0.0 to 1.0). Default: 0.3\r\n   * - 0.0: Almost no overlay\r\n   * - 0.5: Medium coverage\r\n   * - 1.0: Heavy coverage\r\n   */\r\n  density?: number;\r\n\r\n  /**\r\n   * Override color for the overlay pattern (hex string).\r\n   * If not specified, uses pattern-appropriate defaults.\r\n   */\r\n  color?: string;\r\n\r\n  /**\r\n   * Random seed for deterministic pattern placement.\r\n   */\r\n  seed?: number;\r\n}\r\n\r\n/**\r\n * Color variation mode types.\r\n */\r\nexport type ColorVariationMode = \"hue_shift\" | \"saturation_jitter\" | \"value_jitter\" | \"palette_snap\";\r\n\r\n/**\r\n * Configuration for color variation effects.\r\n * Modifies the color distribution to reduce flatness.\r\n */\r\nexport interface IColorVariationEffect {\r\n  /**\r\n   * The color variation mode:\r\n   * - 'hue_shift': Randomly shift hue within range\r\n   * - 'saturation_jitter': Randomly vary saturation\r\n   * - 'value_jitter': Randomly vary brightness/value\r\n   * - 'palette_snap': Snap colors to nearest palette entry\r\n   */\r\n  mode: ColorVariationMode;\r\n\r\n  /**\r\n   * Amount of variation (0.0 to 1.0). Default: 0.1\r\n   * - 0.0: No change\r\n   * - 0.5: Medium variation\r\n   * - 1.0: Maximum variation\r\n   */\r\n  amount?: number;\r\n\r\n  /**\r\n   * For 'palette_snap': Array of colors to snap to (hex strings).\r\n   */\r\n  palette?: string[];\r\n\r\n  /**\r\n   * Random seed for deterministic variation.\r\n   */\r\n  seed?: number;\r\n}\r\n\r\n/**\r\n * Tiling pattern types for seamless/patterned textures.\r\n */\r\nexport type TilingPattern = \"brick\" | \"herringbone\" | \"basketweave\" | \"random\";\r\n\r\n/**\r\n * Configuration for tiling effects.\r\n * Helps create seamless textures or specific tiling patterns.\r\n */\r\nexport interface ITilingEffect {\r\n  /**\r\n   * Make edges seamless for repeating textures.\r\n   */\r\n  seamless?: boolean;\r\n\r\n  /**\r\n   * Tiling pattern for block arrangement:\r\n   * - 'brick': Offset rows by half\r\n   * - 'herringbone': Diagonal zigzag pattern\r\n   * - 'basketweave': Alternating horizontal/vertical groups\r\n   * - 'random': Randomized positions\r\n   */\r\n  pattern?: TilingPattern;\r\n\r\n  /**\r\n   * Offset amount for brick pattern (0.0 to 1.0). Default: 0.5\r\n   */\r\n  offset?: number;\r\n}\r\n\r\n/**\r\n * Combined effects configuration for a texture.\r\n * Multiple effects can be applied in a defined order.\r\n */\r\nexport interface ITextureEffects {\r\n  /**\r\n   * Lighting effect for pseudo-3D depth.\r\n   */\r\n  lighting?: ILightingEffect;\r\n\r\n  /**\r\n   * Border effect for edges/outlines (CSS-like syntax).\r\n   */\r\n  border?: IBorderEffect;\r\n\r\n  /**\r\n   * Overlay effects for surface detail. Applied in array order.\r\n   */\r\n  overlay?: IOverlayEffect | IOverlayEffect[];\r\n\r\n  /**\r\n   * Color variation effect.\r\n   */\r\n  colorVariation?: IColorVariationEffect;\r\n\r\n  /**\r\n   * Tiling effect for seamless/patterned textures.\r\n   */\r\n  tiling?: ITilingEffect;\r\n}\r\n\r\n// ============================================================================\r\n// UTILITY FUNCTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Get pixel index in RGBA buffer.\r\n */\r\nfunction getPixelIndex(x: number, y: number, width: number): number {\r\n  return (y * width + x) * 4;\r\n}\r\n\r\n/**\r\n * Get pixel color from buffer.\r\n */\r\nfunction getPixel(pixels: Uint8Array, x: number, y: number, width: number): ParsedColor {\r\n  const idx = getPixelIndex(x, y, width);\r\n  return {\r\n    r: pixels[idx],\r\n    g: pixels[idx + 1],\r\n    b: pixels[idx + 2],\r\n    a: pixels[idx + 3],\r\n  };\r\n}\r\n\r\n/**\r\n * Set pixel color in buffer.\r\n */\r\nfunction setPixel(pixels: Uint8Array, x: number, y: number, width: number, color: ParsedColor): void {\r\n  const idx = getPixelIndex(x, y, width);\r\n  pixels[idx] = color.r;\r\n  pixels[idx + 1] = color.g;\r\n  pixels[idx + 2] = color.b;\r\n  pixels[idx + 3] = color.a;\r\n}\r\n\r\n/**\r\n * Blend source color over destination with alpha.\r\n */\r\nfunction blendOver(dst: ParsedColor, src: ParsedColor, opacity: number = 1): ParsedColor {\r\n  const srcAlpha = (src.a / 255) * opacity;\r\n  const dstAlpha = dst.a / 255;\r\n  const outAlpha = srcAlpha + dstAlpha * (1 - srcAlpha);\r\n\r\n  if (outAlpha === 0) {\r\n    return { r: 0, g: 0, b: 0, a: 0 };\r\n  }\r\n\r\n  return {\r\n    r: Math.round((src.r * srcAlpha + dst.r * dstAlpha * (1 - srcAlpha)) / outAlpha),\r\n    g: Math.round((src.g * srcAlpha + dst.g * dstAlpha * (1 - srcAlpha)) / outAlpha),\r\n    b: Math.round((src.b * srcAlpha + dst.b * dstAlpha * (1 - srcAlpha)) / outAlpha),\r\n    a: Math.round(outAlpha * 255),\r\n  };\r\n}\r\n\r\n/**\r\n * Lighten a color by a factor.\r\n */\r\nfunction lightenColor(color: ParsedColor, factor: number): ParsedColor {\r\n  return {\r\n    r: Math.min(255, Math.round(color.r + (255 - color.r) * factor)),\r\n    g: Math.min(255, Math.round(color.g + (255 - color.g) * factor)),\r\n    b: Math.min(255, Math.round(color.b + (255 - color.b) * factor)),\r\n    a: color.a,\r\n  };\r\n}\r\n\r\n/**\r\n * Darken a color by a factor.\r\n */\r\nfunction darkenColor(color: ParsedColor, factor: number): ParsedColor {\r\n  return {\r\n    r: Math.max(0, Math.round(color.r * (1 - factor))),\r\n    g: Math.max(0, Math.round(color.g * (1 - factor))),\r\n    b: Math.max(0, Math.round(color.b * (1 - factor))),\r\n    a: color.a,\r\n  };\r\n}\r\n\r\n/**\r\n * Convert RGB to HSV.\r\n */\r\nfunction rgbToHsv(color: ParsedColor): { h: number; s: number; v: number } {\r\n  const r = color.r / 255;\r\n  const g = color.g / 255;\r\n  const b = color.b / 255;\r\n\r\n  const max = Math.max(r, g, b);\r\n  const min = Math.min(r, g, b);\r\n  const d = max - min;\r\n\r\n  let h = 0;\r\n  const s = max === 0 ? 0 : d / max;\r\n  const v = max;\r\n\r\n  if (max !== min) {\r\n    switch (max) {\r\n      case r:\r\n        h = (g - b) / d + (g < b ? 6 : 0);\r\n        break;\r\n      case g:\r\n        h = (b - r) / d + 2;\r\n        break;\r\n      case b:\r\n        h = (r - g) / d + 4;\r\n        break;\r\n    }\r\n    h /= 6;\r\n  }\r\n\r\n  return { h, s, v };\r\n}\r\n\r\n/**\r\n * Convert HSV to RGB.\r\n */\r\nfunction hsvToRgb(h: number, s: number, v: number, a: number = 255): ParsedColor {\r\n  let r = 0,\r\n    g = 0,\r\n    b = 0;\r\n\r\n  const i = Math.floor(h * 6);\r\n  const f = h * 6 - i;\r\n  const p = v * (1 - s);\r\n  const q = v * (1 - f * s);\r\n  const t = v * (1 - (1 - f) * s);\r\n\r\n  switch (i % 6) {\r\n    case 0:\r\n      r = v;\r\n      g = t;\r\n      b = p;\r\n      break;\r\n    case 1:\r\n      r = q;\r\n      g = v;\r\n      b = p;\r\n      break;\r\n    case 2:\r\n      r = p;\r\n      g = v;\r\n      b = t;\r\n      break;\r\n    case 3:\r\n      r = p;\r\n      g = q;\r\n      b = v;\r\n      break;\r\n    case 4:\r\n      r = t;\r\n      g = p;\r\n      b = v;\r\n      break;\r\n    case 5:\r\n      r = v;\r\n      g = p;\r\n      b = q;\r\n      break;\r\n  }\r\n\r\n  return {\r\n    r: Math.round(r * 255),\r\n    g: Math.round(g * 255),\r\n    b: Math.round(b * 255),\r\n    a,\r\n  };\r\n}\r\n\r\n/**\r\n * Calculate color distance for palette snapping.\r\n */\r\nfunction colorDistance(c1: ParsedColor, c2: ParsedColor): number {\r\n  const dr = c1.r - c2.r;\r\n  const dg = c1.g - c2.g;\r\n  const db = c1.b - c2.b;\r\n  return dr * dr + dg * dg + db * db;\r\n}\r\n\r\n// ============================================================================\r\n// LIGHTING EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply lighting effect to pixel buffer.\r\n * Creates pseudo-3D depth by simulating light hitting a surface.\r\n */\r\nexport function applyLightingEffect(pixels: Uint8Array, width: number, height: number, effect: ILightingEffect): void {\r\n  const intensity = effect.intensity ?? 0.3;\r\n  const angle = effect.angle ?? 315; // Default: top-left\r\n\r\n  // Pre-calculate angle components\r\n  const angleRad = (angle * Math.PI) / 180;\r\n  const lightX = Math.cos(angleRad);\r\n  const lightY = -Math.sin(angleRad); // Negative because Y increases downward\r\n\r\n  for (let y = 0; y < height; y++) {\r\n    for (let x = 0; x < width; x++) {\r\n      const color = getPixel(pixels, x, y, width);\r\n      if (color.a === 0) continue; // Skip transparent pixels\r\n\r\n      let lightFactor = 0;\r\n\r\n      switch (effect.preset) {\r\n        case \"inset\":\r\n          // Inset: darken near light source, lighten away from it\r\n          {\r\n            const nx = (x / (width - 1)) * 2 - 1; // Normalize to -1 to 1\r\n            const ny = (y / (height - 1)) * 2 - 1;\r\n            lightFactor = -(nx * lightX + ny * lightY) * intensity;\r\n          }\r\n          break;\r\n\r\n        case \"outset\":\r\n          // Outset: lighten near light source, darken away from it\r\n          {\r\n            const nx = (x / (width - 1)) * 2 - 1;\r\n            const ny = (y / (height - 1)) * 2 - 1;\r\n            lightFactor = (nx * lightX + ny * lightY) * intensity;\r\n          }\r\n          break;\r\n\r\n        case \"pillow\":\r\n          // Pillow: darken edges, lighten center\r\n          {\r\n            const dx = Math.abs((x / (width - 1)) * 2 - 1);\r\n            const dy = Math.abs((y / (height - 1)) * 2 - 1);\r\n            const edgeDist = Math.max(dx, dy);\r\n            lightFactor = (1 - edgeDist * 2) * intensity;\r\n          }\r\n          break;\r\n\r\n        case \"ambient_occlusion\":\r\n          // Ambient occlusion: darken corners and edges\r\n          {\r\n            const dx = Math.min(x, width - 1 - x) / (width / 2);\r\n            const dy = Math.min(y, height - 1 - y) / (height / 2);\r\n            const cornerDist = Math.min(dx, dy);\r\n            lightFactor = (cornerDist - 0.5) * intensity * 2;\r\n          }\r\n          break;\r\n      }\r\n\r\n      // Apply lighting\r\n      let newColor: ParsedColor;\r\n      if (lightFactor > 0) {\r\n        newColor = lightenColor(color, lightFactor);\r\n      } else {\r\n        newColor = darkenColor(color, -lightFactor);\r\n      }\r\n\r\n      setPixel(pixels, x, y, width, newColor);\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// BORDER EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply border effect to pixel buffer.\r\n * Uses CSS-like syntax for specifying individual or all sides.\r\n */\r\nexport function applyBorderEffect(pixels: Uint8Array, width: number, height: number, effect: IBorderEffect): void {\r\n  const rng = new SeededRandom(effect.seed ?? 12345);\r\n\r\n  // Resolve each side's configuration\r\n  const sides = {\r\n    top: effect.top ?? effect.all,\r\n    right: effect.right ?? effect.all,\r\n    bottom: effect.bottom ?? effect.all,\r\n    left: effect.left ?? effect.all,\r\n  };\r\n\r\n  // Apply each side\r\n  if (sides.top) {\r\n    applyBorderSide(pixels, width, height, \"top\", sides.top, rng);\r\n  }\r\n  if (sides.right) {\r\n    applyBorderSide(pixels, width, height, \"right\", sides.right, rng);\r\n  }\r\n  if (sides.bottom) {\r\n    applyBorderSide(pixels, width, height, \"bottom\", sides.bottom, rng);\r\n  }\r\n  if (sides.left) {\r\n    applyBorderSide(pixels, width, height, \"left\", sides.left, rng);\r\n  }\r\n}\r\n\r\n/**\r\n * Apply a single border side.\r\n */\r\nfunction applyBorderSide(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  side: \"top\" | \"right\" | \"bottom\" | \"left\",\r\n  config: IBorderSide,\r\n  rng: SeededRandom\r\n): void {\r\n  const borderWidth = Math.min(config.width ?? 1, 8);\r\n  const style = config.style;\r\n\r\n  // Parse or auto-generate border color\r\n  let borderColor: ParsedColor;\r\n  if (config.color) {\r\n    borderColor = NoiseGenerationUtilities.parseColorInput(config.color);\r\n  } else {\r\n    // Sample center pixel and auto-adjust\r\n    const centerColor = getPixel(pixels, Math.floor(width / 2), Math.floor(height / 2), width);\r\n    if (style === \"highlight\") {\r\n      borderColor = lightenColor(centerColor, 0.4);\r\n    } else {\r\n      borderColor = darkenColor(centerColor, 0.3);\r\n    }\r\n  }\r\n\r\n  // Determine pixel ranges based on side\r\n  let xStart: number, xEnd: number, yStart: number, yEnd: number;\r\n\r\n  switch (side) {\r\n    case \"top\":\r\n      xStart = 0;\r\n      xEnd = width;\r\n      yStart = 0;\r\n      yEnd = borderWidth;\r\n      break;\r\n    case \"bottom\":\r\n      xStart = 0;\r\n      xEnd = width;\r\n      yStart = height - borderWidth;\r\n      yEnd = height;\r\n      break;\r\n    case \"left\":\r\n      xStart = 0;\r\n      xEnd = borderWidth;\r\n      yStart = 0;\r\n      yEnd = height;\r\n      break;\r\n    case \"right\":\r\n      xStart = width - borderWidth;\r\n      xEnd = width;\r\n      yStart = 0;\r\n      yEnd = height;\r\n      break;\r\n  }\r\n\r\n  // Apply border pixels\r\n  for (let y = yStart; y < yEnd; y++) {\r\n    for (let x = xStart; x < xEnd; x++) {\r\n      let shouldDraw = true;\r\n      let colorToUse = borderColor;\r\n\r\n      switch (style) {\r\n        case \"solid\":\r\n          // Always draw\r\n          break;\r\n\r\n        case \"dashed\":\r\n          // Draw every other 2-pixel segment\r\n          const pos = side === \"top\" || side === \"bottom\" ? x : y;\r\n          shouldDraw = Math.floor(pos / 2) % 2 === 0;\r\n          break;\r\n\r\n        case \"worn\":\r\n          // Irregular drawing with random gaps\r\n          shouldDraw = rng.next() > 0.2;\r\n          if (shouldDraw) {\r\n            // Add slight color variation\r\n            const variation = (rng.next() - 0.5) * 0.2;\r\n            if (variation > 0) {\r\n              colorToUse = lightenColor(borderColor, variation);\r\n            } else {\r\n              colorToUse = darkenColor(borderColor, -variation);\r\n            }\r\n          }\r\n          break;\r\n\r\n        case \"highlight\":\r\n          // Brighter border with slight gradient\r\n          {\r\n            const distFromEdge =\r\n              side === \"top\"\r\n                ? y - yStart\r\n                : side === \"bottom\"\r\n                ? yEnd - 1 - y\r\n                : side === \"left\"\r\n                ? x - xStart\r\n                : xEnd - 1 - x;\r\n            const gradient = 1 - distFromEdge / borderWidth;\r\n            colorToUse = lightenColor(borderColor, gradient * 0.2);\r\n          }\r\n          break;\r\n      }\r\n\r\n      if (shouldDraw) {\r\n        const existingColor = getPixel(pixels, x, y, width);\r\n        const blended = blendOver(existingColor, colorToUse, 0.8);\r\n        setPixel(pixels, x, y, width, blended);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// OVERLAY EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply overlay effect to pixel buffer.\r\n * Adds surface detail without modifying base structure.\r\n */\r\nexport function applyOverlayEffect(pixels: Uint8Array, width: number, height: number, effect: IOverlayEffect): void {\r\n  const density = effect.density ?? 0.3;\r\n  const rng = new SeededRandom(effect.seed ?? 54321);\r\n\r\n  // Get pattern-specific default color\r\n  let overlayColor: ParsedColor;\r\n  if (effect.color) {\r\n    overlayColor = NoiseGenerationUtilities.parseColorInput(effect.color);\r\n  } else {\r\n    switch (effect.pattern) {\r\n      case \"cracks\":\r\n        overlayColor = { r: 30, g: 30, b: 30, a: 180 };\r\n        break;\r\n      case \"scratches\":\r\n        overlayColor = { r: 200, g: 200, b: 200, a: 150 };\r\n        break;\r\n      case \"moss\":\r\n        overlayColor = { r: 60, g: 120, b: 40, a: 180 };\r\n        break;\r\n      case \"rust\":\r\n        overlayColor = { r: 180, g: 80, b: 30, a: 180 };\r\n        break;\r\n      case \"sparkle\":\r\n        overlayColor = { r: 255, g: 255, b: 255, a: 255 };\r\n        break;\r\n      case \"veins\":\r\n        overlayColor = { r: 50, g: 50, b: 60, a: 160 };\r\n        break;\r\n      default:\r\n        overlayColor = { r: 128, g: 128, b: 128, a: 128 };\r\n    }\r\n  }\r\n\r\n  switch (effect.pattern) {\r\n    case \"cracks\":\r\n      applyCracksOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"scratches\":\r\n      applyScratchesOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"moss\":\r\n      applyMossOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"rust\":\r\n      applyRustOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"sparkle\":\r\n      applySparkleOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n    case \"veins\":\r\n      applyVeinsOverlay(pixels, width, height, overlayColor, density, rng);\r\n      break;\r\n  }\r\n}\r\n\r\n/**\r\n * Apply cracks overlay - dark lines suggesting fractures.\r\n */\r\nfunction applyCracksOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numCracks = Math.floor(density * 5) + 1;\r\n\r\n  for (let i = 0; i < numCracks; i++) {\r\n    // Start point\r\n    let x = rng.nextInt(0, width - 1);\r\n    let y = rng.nextInt(0, height - 1);\r\n\r\n    // Crack length\r\n    const length = rng.nextInt(3, Math.max(width, height) / 2);\r\n\r\n    for (let j = 0; j < length; j++) {\r\n      if (x >= 0 && x < width && y >= 0 && y < height) {\r\n        const existingColor = getPixel(pixels, x, y, width);\r\n        const blended = blendOver(existingColor, color, 0.7);\r\n        setPixel(pixels, x, y, width, blended);\r\n      }\r\n\r\n      // Random walk with preference for downward/diagonal\r\n      const dir = rng.next();\r\n      if (dir < 0.4) {\r\n        y += 1;\r\n      } else if (dir < 0.6) {\r\n        x += rng.next() < 0.5 ? -1 : 1;\r\n      } else if (dir < 0.8) {\r\n        x += 1;\r\n        y += 1;\r\n      } else {\r\n        x -= 1;\r\n        y += 1;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply scratches overlay - light linear marks.\r\n */\r\nfunction applyScratchesOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numScratches = Math.floor(density * 8) + 1;\r\n\r\n  for (let i = 0; i < numScratches; i++) {\r\n    // Start point\r\n    const x1 = rng.nextInt(0, width - 1);\r\n    const y1 = rng.nextInt(0, height - 1);\r\n\r\n    // End point - mostly horizontal or diagonal scratches\r\n    const angle = (rng.next() - 0.5) * Math.PI * 0.5; // -45 to +45 degrees\r\n    const length = rng.nextInt(2, width / 3);\r\n    const x2 = Math.round(x1 + Math.cos(angle) * length);\r\n    const y2 = Math.round(y1 + Math.sin(angle) * length);\r\n\r\n    // Draw line using Bresenham's algorithm\r\n    drawLine(pixels, width, height, x1, y1, x2, y2, color, 0.5);\r\n  }\r\n}\r\n\r\n/**\r\n * Draw a line using Bresenham's algorithm.\r\n */\r\nfunction drawLine(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  x1: number,\r\n  y1: number,\r\n  x2: number,\r\n  y2: number,\r\n  color: ParsedColor,\r\n  opacity: number\r\n): void {\r\n  const dx = Math.abs(x2 - x1);\r\n  const dy = Math.abs(y2 - y1);\r\n  const sx = x1 < x2 ? 1 : -1;\r\n  const sy = y1 < y2 ? 1 : -1;\r\n  let err = dx - dy;\r\n\r\n  let x = x1;\r\n  let y = y1;\r\n\r\n  while (true) {\r\n    if (x >= 0 && x < width && y >= 0 && y < height) {\r\n      const existingColor = getPixel(pixels, x, y, width);\r\n      const blended = blendOver(existingColor, color, opacity);\r\n      setPixel(pixels, x, y, width, blended);\r\n    }\r\n\r\n    if (x === x2 && y === y2) break;\r\n\r\n    const e2 = 2 * err;\r\n    if (e2 > -dy) {\r\n      err -= dy;\r\n      x += sx;\r\n    }\r\n    if (e2 < dx) {\r\n      err += dx;\r\n      y += sy;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply moss overlay - green organic patches.\r\n */\r\nfunction applyMossOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numPatches = Math.floor(density * 6) + 1;\r\n\r\n  for (let i = 0; i < numPatches; i++) {\r\n    const cx = rng.nextInt(0, width - 1);\r\n    const cy = rng.nextInt(0, height - 1);\r\n    const radius = rng.nextInt(1, 3);\r\n\r\n    for (let dy = -radius; dy <= radius; dy++) {\r\n      for (let dx = -radius; dx <= radius; dx++) {\r\n        const x = cx + dx;\r\n        const y = cy + dy;\r\n\r\n        if (x >= 0 && x < width && y >= 0 && y < height) {\r\n          // Irregular shape with random fill\r\n          if (rng.next() < 0.6 && dx * dx + dy * dy <= radius * radius) {\r\n            // Vary the green color slightly\r\n            const variedColor: ParsedColor = {\r\n              r: color.r + rng.nextInt(-10, 10),\r\n              g: Math.min(255, color.g + rng.nextInt(-20, 20)),\r\n              b: color.b + rng.nextInt(-10, 10),\r\n              a: color.a,\r\n            };\r\n            const existingColor = getPixel(pixels, x, y, width);\r\n            const blended = blendOver(existingColor, variedColor, 0.6);\r\n            setPixel(pixels, x, y, width, blended);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply rust overlay - orange/brown oxidation spots.\r\n */\r\nfunction applyRustOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numSpots = Math.floor(density * 10) + 2;\r\n\r\n  for (let i = 0; i < numSpots; i++) {\r\n    const cx = rng.nextInt(0, width - 1);\r\n    const cy = rng.nextInt(0, height - 1);\r\n    const size = rng.nextInt(1, 2);\r\n\r\n    for (let dy = -size; dy <= size; dy++) {\r\n      for (let dx = -size; dx <= size; dx++) {\r\n        const x = cx + dx;\r\n        const y = cy + dy;\r\n\r\n        if (x >= 0 && x < width && y >= 0 && y < height && rng.next() < 0.7) {\r\n          // Vary the rust color\r\n          const variedColor: ParsedColor = {\r\n            r: Math.min(255, color.r + rng.nextInt(-20, 20)),\r\n            g: Math.max(0, color.g + rng.nextInt(-20, 10)),\r\n            b: Math.max(0, color.b + rng.nextInt(-10, 10)),\r\n            a: color.a,\r\n          };\r\n          const existingColor = getPixel(pixels, x, y, width);\r\n          const blended = blendOver(existingColor, variedColor, 0.5);\r\n          setPixel(pixels, x, y, width, blended);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Apply sparkle overlay - bright highlight dots.\r\n */\r\nfunction applySparkleOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numSparkles = Math.floor(density * width * height * 0.02) + 1;\r\n\r\n  for (let i = 0; i < numSparkles; i++) {\r\n    const x = rng.nextInt(0, width - 1);\r\n    const y = rng.nextInt(0, height - 1);\r\n\r\n    // Bright sparkle with slight color variation\r\n    const brightness = 200 + rng.nextInt(0, 55);\r\n    const sparkleColor: ParsedColor = {\r\n      r: brightness,\r\n      g: brightness,\r\n      b: Math.min(255, brightness + rng.nextInt(-20, 20)),\r\n      a: 255,\r\n    };\r\n\r\n    const existingColor = getPixel(pixels, x, y, width);\r\n    const blended = blendOver(existingColor, sparkleColor, 0.8);\r\n    setPixel(pixels, x, y, width, blended);\r\n  }\r\n}\r\n\r\n/**\r\n * Apply veins overlay - dark branching lines.\r\n */\r\nfunction applyVeinsOverlay(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  color: ParsedColor,\r\n  density: number,\r\n  rng: SeededRandom\r\n): void {\r\n  const numVeins = Math.floor(density * 3) + 1;\r\n\r\n  for (let i = 0; i < numVeins; i++) {\r\n    // Start from edge\r\n    let x = rng.next() < 0.5 ? 0 : width - 1;\r\n    let y = rng.nextInt(0, height - 1);\r\n\r\n    const direction = x === 0 ? 1 : -1;\r\n    const length = rng.nextInt(width / 3, width);\r\n\r\n    for (let j = 0; j < length; j++) {\r\n      if (x >= 0 && x < width && y >= 0 && y < height) {\r\n        const existingColor = getPixel(pixels, x, y, width);\r\n        const blended = blendOver(existingColor, color, 0.6);\r\n        setPixel(pixels, x, y, width, blended);\r\n      }\r\n\r\n      // Move with branching tendency\r\n      x += direction;\r\n      if (rng.next() < 0.3) {\r\n        y += rng.next() < 0.5 ? -1 : 1;\r\n      }\r\n\r\n      // Occasional branch\r\n      if (rng.next() < 0.1) {\r\n        const branchY = y;\r\n        let branchX = x;\r\n        const branchDir = rng.next() < 0.5 ? -1 : 1;\r\n        for (let k = 0; k < rng.nextInt(2, 5); k++) {\r\n          const by = branchY + k * branchDir;\r\n          if (branchX >= 0 && branchX < width && by >= 0 && by < height) {\r\n            const existingColor = getPixel(pixels, branchX, by, width);\r\n            const blended = blendOver(existingColor, color, 0.4);\r\n            setPixel(pixels, branchX, by, width, blended);\r\n          }\r\n          branchX += direction;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// COLOR VARIATION EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply color variation effect to pixel buffer.\r\n */\r\nexport function applyColorVariationEffect(\r\n  pixels: Uint8Array,\r\n  width: number,\r\n  height: number,\r\n  effect: IColorVariationEffect\r\n): void {\r\n  const amount = effect.amount ?? 0.1;\r\n  const rng = new SeededRandom(effect.seed ?? 98765);\r\n\r\n  // Parse palette colors if provided\r\n  let paletteColors: ParsedColor[] = [];\r\n  if (effect.palette) {\r\n    paletteColors = effect.palette.map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n  }\r\n\r\n  for (let y = 0; y < height; y++) {\r\n    for (let x = 0; x < width; x++) {\r\n      const color = getPixel(pixels, x, y, width);\r\n      if (color.a === 0) continue;\r\n\r\n      let newColor: ParsedColor;\r\n\r\n      switch (effect.mode) {\r\n        case \"hue_shift\":\r\n          {\r\n            const hsv = rgbToHsv(color);\r\n            hsv.h = (hsv.h + (rng.next() - 0.5) * amount) % 1;\r\n            if (hsv.h < 0) hsv.h += 1;\r\n            newColor = hsvToRgb(hsv.h, hsv.s, hsv.v, color.a);\r\n          }\r\n          break;\r\n\r\n        case \"saturation_jitter\":\r\n          {\r\n            const hsv = rgbToHsv(color);\r\n            hsv.s = Math.max(0, Math.min(1, hsv.s + (rng.next() - 0.5) * amount * 2));\r\n            newColor = hsvToRgb(hsv.h, hsv.s, hsv.v, color.a);\r\n          }\r\n          break;\r\n\r\n        case \"value_jitter\":\r\n          {\r\n            const hsv = rgbToHsv(color);\r\n            hsv.v = Math.max(0, Math.min(1, hsv.v + (rng.next() - 0.5) * amount * 2));\r\n            newColor = hsvToRgb(hsv.h, hsv.s, hsv.v, color.a);\r\n          }\r\n          break;\r\n\r\n        case \"palette_snap\":\r\n          if (paletteColors.length > 0) {\r\n            // Find nearest palette color\r\n            let nearest = paletteColors[0];\r\n            let nearestDist = colorDistance(color, nearest);\r\n\r\n            for (let i = 1; i < paletteColors.length; i++) {\r\n              const dist = colorDistance(color, paletteColors[i]);\r\n              if (dist < nearestDist) {\r\n                nearest = paletteColors[i];\r\n                nearestDist = dist;\r\n              }\r\n            }\r\n\r\n            newColor = { ...nearest, a: color.a };\r\n          } else {\r\n            newColor = color;\r\n          }\r\n          break;\r\n\r\n        default:\r\n          newColor = color;\r\n      }\r\n\r\n      setPixel(pixels, x, y, width, newColor);\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// TILING EFFECTS\r\n// ============================================================================\r\n\r\n/**\r\n * Apply tiling effect to pixel buffer.\r\n * Makes textures seamless or applies tiling patterns.\r\n */\r\nexport function applyTilingEffect(pixels: Uint8Array, width: number, height: number, effect: ITilingEffect): void {\r\n  // Apply seamless blending if requested\r\n  if (effect.seamless) {\r\n    makeSeamless(pixels, width, height);\r\n  }\r\n\r\n  // Note: Pattern tiling would typically be applied during texture generation\r\n  // rather than as a post-process. This could be expanded in the future.\r\n}\r\n\r\n/**\r\n * Make texture seamless by blending edges.\r\n */\r\nfunction makeSeamless(pixels: Uint8Array, width: number, height: number): void {\r\n  const blendWidth = Math.max(1, Math.floor(Math.min(width, height) / 4));\r\n\r\n  // Create a copy for reading while we write\r\n  const original = new Uint8Array(pixels);\r\n\r\n  // Blend horizontal seam (left-right)\r\n  for (let y = 0; y < height; y++) {\r\n    for (let i = 0; i < blendWidth; i++) {\r\n      const t = i / blendWidth;\r\n\r\n      // Left edge blends with right side\r\n      const leftIdx = getPixelIndex(i, y, width);\r\n      const rightMirrorIdx = getPixelIndex(width - 1 - i, y, width);\r\n\r\n      // Right edge blends with left side\r\n      const rightIdx = getPixelIndex(width - 1 - i, y, width);\r\n      const leftMirrorIdx = getPixelIndex(i, y, width);\r\n\r\n      // Blend colors\r\n      for (let c = 0; c < 4; c++) {\r\n        pixels[leftIdx + c] = Math.round(original[leftIdx + c] * t + original[rightMirrorIdx + c] * (1 - t));\r\n        pixels[rightIdx + c] = Math.round(original[rightIdx + c] * t + original[leftMirrorIdx + c] * (1 - t));\r\n      }\r\n    }\r\n  }\r\n\r\n  // Update original for vertical pass\r\n  original.set(pixels);\r\n\r\n  // Blend vertical seam (top-bottom)\r\n  for (let x = 0; x < width; x++) {\r\n    for (let i = 0; i < blendWidth; i++) {\r\n      const t = i / blendWidth;\r\n\r\n      // Top edge blends with bottom side\r\n      const topIdx = getPixelIndex(x, i, width);\r\n      const bottomMirrorIdx = getPixelIndex(x, height - 1 - i, width);\r\n\r\n      // Bottom edge blends with top side\r\n      const bottomIdx = getPixelIndex(x, height - 1 - i, width);\r\n      const topMirrorIdx = getPixelIndex(x, i, width);\r\n\r\n      // Blend colors\r\n      for (let c = 0; c < 4; c++) {\r\n        pixels[topIdx + c] = Math.round(original[topIdx + c] * t + original[bottomMirrorIdx + c] * (1 - t));\r\n        pixels[bottomIdx + c] = Math.round(original[bottomIdx + c] * t + original[topMirrorIdx + c] * (1 - t));\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// MAIN EFFECT APPLICATION\r\n// ============================================================================\r\n\r\n/**\r\n * Apply all texture effects to a pixel buffer in the correct order.\r\n *\r\n * Order of application:\r\n * 1. Color variation (modifies base colors)\r\n * 2. Lighting (adds depth based on position)\r\n * 3. Overlays (adds surface detail)\r\n * 4. Borders (adds edge definition)\r\n * 5. Tiling (makes seamless)\r\n *\r\n * @param pixels RGBA pixel buffer to modify in-place\r\n * @param width Buffer width\r\n * @param height Buffer height\r\n * @param effects Effects configuration\r\n */\r\nexport function applyTextureEffects(pixels: Uint8Array, width: number, height: number, effects: ITextureEffects): void {\r\n  // 1. Color variation first (affects base colors for other effects)\r\n  if (effects.colorVariation) {\r\n    applyColorVariationEffect(pixels, width, height, effects.colorVariation);\r\n  }\r\n\r\n  // 2. Lighting (position-based shading)\r\n  if (effects.lighting) {\r\n    applyLightingEffect(pixels, width, height, effects.lighting);\r\n  }\r\n\r\n  // 3. Overlays (surface detail)\r\n  if (effects.overlay) {\r\n    const overlays = Array.isArray(effects.overlay) ? effects.overlay : [effects.overlay];\r\n    for (const overlay of overlays) {\r\n      applyOverlayEffect(pixels, width, height, overlay);\r\n    }\r\n  }\r\n\r\n  // 4. Borders (edge definition) - after overlays so they're on top\r\n  if (effects.border) {\r\n    applyBorderEffect(pixels, width, height, effects.border);\r\n  }\r\n\r\n  // 5. Tiling (seamless edges) - last to blend everything\r\n  if (effects.tiling) {\r\n    applyTilingEffect(pixels, width, height, effects.tiling);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * TexturedRectangleGenerator\r\n *\r\n * Generates textured rectangles (filled areas) for Minecraft-style pixel art.\r\n * Produces SVG output with rect elements for blocky/pixelated aesthetics,\r\n * or direct RGBA pixel data for efficient texture generation.\r\n *\r\n * Uses NoiseGenerationUtilities for the core noise algorithms.\r\n *\r\n * Supports both the new IMcpTexturedRectangle format and legacy IMcpNoiseConfig for backwards compatibility.\r\n */\r\n\r\nimport {\r\n  IMcpNoiseConfig,\r\n  IMcpPixelArt,\r\n  IMcpPixelColor,\r\n  IMcpTexturedRectangle,\r\n  NoisePatternType,\r\n  TexturedRectangleType,\r\n} from \"./IMcpModelDesign\";\r\nimport NoiseGenerationUtilities, { SeededRandom } from \"./NoiseGenerationUtilities\";\r\nimport type { ParsedColor } from \"./NoiseGenerationUtilities\";\r\nimport { applyTextureEffects } from \"./TextureEffects\";\r\n\r\n/**\r\n * Textured rectangle generator for Minecraft-style procedural textures.\r\n */\r\nexport default class TexturedRectangleGenerator {\r\n  /**\r\n   * Maps new TexturedRectangleType to legacy NoisePatternType for internal processing.\r\n   */\r\n  private static texturedRectangleTypeToPattern(type: TexturedRectangleType): NoisePatternType | \"solid\" | \"none\" {\r\n    switch (type) {\r\n      case \"none\":\r\n        return \"none\";\r\n      case \"solid\":\r\n        return \"solid\";\r\n      case \"random_noise\":\r\n        return \"random\";\r\n      case \"dither_noise\":\r\n        return \"dither\";\r\n      case \"perlin_noise\":\r\n        return \"perlin\";\r\n      case \"stipple_noise\":\r\n        return \"stipple\";\r\n      case \"gradient\":\r\n        return \"gradient\";\r\n      default:\r\n        return \"random\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate an SVG string from a textured rectangle configuration.\r\n   * This is the primary API for the new unified texture format.\r\n   *\r\n   * @param config Textured rectangle configuration\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation\r\n   * @returns SVG string with the texture pattern\r\n   */\r\n  static generateTexturedRectangleSvg(\r\n    config: IMcpTexturedRectangle,\r\n    width: number,\r\n    height: number,\r\n    contextString?: string\r\n  ): string {\r\n    // Parse colors\r\n    const colors = (config.colors || []).map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided (ignored for \"none\")\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    const pattern = this.texturedRectangleTypeToPattern(config.type);\r\n\r\n    // Handle \"none\" - return an empty transparent SVG\r\n    if (pattern === \"none\") {\r\n      return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\"></svg>`;\r\n    }\r\n\r\n    // Handle solid color - just return a simple rect\r\n    if (pattern === \"solid\") {\r\n      const color = colors[0];\r\n      const colorStr =\r\n        color.a === 255\r\n          ? `rgb(${color.r},${color.g},${color.b})`\r\n          : `rgba(${color.r},${color.g},${color.b},${(color.a / 255).toFixed(3)})`;\r\n      return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\"><rect width=\"${width}\" height=\"${height}\" fill=\"${colorStr}\"/></svg>`;\r\n    }\r\n\r\n    // Determine seed\r\n    const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `texture-${Date.now()}`);\r\n    const rng = new SeededRandom(seed);\r\n\r\n    // Get parameters\r\n    const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n    const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n    const scale = config.scale ?? 4;\r\n\r\n    // Calculate grid dimensions\r\n    const gridWidth = Math.ceil(width / pixelSize);\r\n    const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n    // Generate the noise grid\r\n    const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n      pattern as NoisePatternType,\r\n      colors,\r\n      factor,\r\n      gridWidth,\r\n      gridHeight,\r\n      rng,\r\n      scale\r\n    );\r\n\r\n    // Convert to SVG rects\r\n    return this.gridToSvg(colorGrid, width, height, pixelSize);\r\n  }\r\n\r\n  /**\r\n   * Generate an SVG string containing the noise texture.\r\n   * @deprecated Use generateTexturedRectangleSvg with IMcpTexturedRectangle instead.\r\n   *\r\n   * @param config Noise configuration with colors, pattern, and parameters\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation (e.g., \"textureId:wood\")\r\n   * @returns SVG string with rect elements forming the noise pattern\r\n   */\r\n  static generateNoiseSvg(config: IMcpNoiseConfig, width: number, height: number, contextString?: string): string {\r\n    // Parse colors\r\n    const colors = config.colors.map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    // Determine seed\r\n    const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `noise-${Date.now()}`);\r\n    const rng = new SeededRandom(seed);\r\n\r\n    // Get parameters\r\n    const pattern = config.pattern || \"random\";\r\n    // Default factor of 0.2 provides subtle noise without being too grainy\r\n    const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n    const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n    const scale = config.scale ?? 4;\r\n\r\n    // Calculate grid dimensions\r\n    const gridWidth = Math.ceil(width / pixelSize);\r\n    const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n    // Generate the noise grid\r\n    const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n      pattern,\r\n      colors,\r\n      factor,\r\n      gridWidth,\r\n      gridHeight,\r\n      rng,\r\n      scale\r\n    );\r\n\r\n    // Convert to SVG rects\r\n    return this.gridToSvg(colorGrid, width, height, pixelSize);\r\n  }\r\n\r\n  /**\r\n   * Convert color grid to SVG with rect elements\r\n   */\r\n  private static gridToSvg(grid: ParsedColor[][], width: number, height: number, pixelSize: number): string {\r\n    const rects: string[] = [];\r\n\r\n    // Optimize by grouping adjacent same-color pixels horizontally\r\n    for (let y = 0; y < grid.length; y++) {\r\n      const row = grid[y];\r\n      let runStart = 0;\r\n      let runColor = row[0];\r\n\r\n      for (let x = 1; x <= row.length; x++) {\r\n        const currentColor = x < row.length ? row[x] : null;\r\n\r\n        // Check if run ends\r\n        if (!currentColor || !NoiseGenerationUtilities.colorsEqual(currentColor, runColor)) {\r\n          // Output the run\r\n          const rectX = runStart * pixelSize;\r\n          const rectY = y * pixelSize;\r\n          const rectWidth = (x - runStart) * pixelSize;\r\n          const rectHeight = pixelSize;\r\n\r\n          // Clamp to texture bounds\r\n          const clampedWidth = Math.min(rectWidth, width - rectX);\r\n          const clampedHeight = Math.min(rectHeight, height - rectY);\r\n\r\n          if (clampedWidth > 0 && clampedHeight > 0) {\r\n            const colorStr = NoiseGenerationUtilities.colorToHex(runColor);\r\n            rects.push(\r\n              `<rect x=\"${rectX}\" y=\"${rectY}\" width=\"${clampedWidth}\" height=\"${clampedHeight}\" fill=\"${colorStr}\"/>`\r\n            );\r\n          }\r\n\r\n          // Start new run\r\n          if (currentColor) {\r\n            runStart = x;\r\n            runColor = currentColor;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${rects.join(\"\")}</svg>`;\r\n  }\r\n\r\n  /**\r\n   * Combine noise SVG with optional overlay SVG.\r\n   * The noise forms the background, and the overlay is drawn on top.\r\n   *\r\n   * @param noiseSvg The noise pattern SVG\r\n   * @param overlaySvg Optional SVG to draw on top of the noise\r\n   * @param width Texture width\r\n   * @param height Texture height\r\n   * @returns Combined SVG string\r\n   */\r\n  static combineWithOverlay(noiseSvg: string, overlaySvg: string | undefined, width: number, height: number): string {\r\n    if (!overlaySvg) {\r\n      return noiseSvg;\r\n    }\r\n\r\n    // Extract inner content from both SVGs\r\n    const noiseInner = this.extractSvgInner(noiseSvg);\r\n    const overlayInner = this.extractSvgInner(overlaySvg);\r\n\r\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${noiseInner}${overlayInner}</svg>`;\r\n  }\r\n\r\n  /**\r\n   * Extract inner content from SVG string (removing outer svg tags)\r\n   */\r\n  private static extractSvgInner(svg: string): string {\r\n    const match = svg.match(/<svg[^>]*>([\\s\\S]*)<\\/svg>/i);\r\n    return match ? match[1] : svg;\r\n  }\r\n\r\n  /**\r\n   * Generate noise texture as RGBA pixel data (Uint8Array).\r\n   * This bypasses SVG generation entirely for better performance.\r\n   * @deprecated Use generateTexturedRectanglePixels with IMcpTexturedRectangle instead.\r\n   *\r\n   * @param config Noise configuration with colors, pattern, and parameters\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation\r\n   * @returns RGBA pixel data as Uint8Array (width * height * 4 bytes)\r\n   */\r\n  static generateNoisePixels(\r\n    config: IMcpNoiseConfig,\r\n    width: number,\r\n    height: number,\r\n    contextString?: string\r\n  ): Uint8Array {\r\n    // Parse colors\r\n    const colors = config.colors.map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    // Determine seed\r\n    const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `noise-${Date.now()}`);\r\n    const rng = new SeededRandom(seed);\r\n\r\n    // Get parameters\r\n    const pattern = config.pattern || \"random\";\r\n    const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n    const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n    const scale = config.scale ?? 4;\r\n\r\n    // Calculate grid dimensions\r\n    const gridWidth = Math.ceil(width / pixelSize);\r\n    const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n    // Generate the noise grid\r\n    const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n      pattern,\r\n      colors,\r\n      factor,\r\n      gridWidth,\r\n      gridHeight,\r\n      rng,\r\n      scale\r\n    );\r\n\r\n    // Convert grid to RGBA pixel data\r\n    return this.gridToPixels(colorGrid, width, height, pixelSize);\r\n  }\r\n\r\n  /**\r\n   * Generate RGBA pixel data from a textured rectangle configuration.\r\n   * This is the primary API for the new unified texture format.\r\n   *\r\n   * @param config Textured rectangle configuration\r\n   * @param width Width of the texture in pixels\r\n   * @param height Height of the texture in pixels\r\n   * @param contextString Optional context string for seed generation\r\n   * @returns RGBA pixel data as Uint8Array (width * height * 4 bytes)\r\n   */\r\n  static generatePixels(\r\n    config: IMcpTexturedRectangle,\r\n    width: number,\r\n    height: number,\r\n    contextString?: string\r\n  ): Uint8Array {\r\n    // Parse colors\r\n    const colors = (config.colors || []).map((c) => NoiseGenerationUtilities.parseColorInput(c));\r\n    if (colors.length === 0) {\r\n      // Default to white if no colors provided (ignored for \"none\")\r\n      colors.push({ r: 255, g: 255, b: 255, a: 255 });\r\n    }\r\n\r\n    const pattern = this.texturedRectangleTypeToPattern(config.type);\r\n    let pixels: Uint8Array;\r\n\r\n    if (pattern === \"none\") {\r\n      // Fully transparent background. Uint8Array defaults to zero, so every RGBA\r\n      // byte \u2014 including the alpha channel \u2014 is 0, producing a fully transparent image.\r\n      pixels = new Uint8Array(width * height * 4);\r\n    } else if (pattern === \"solid\") {\r\n      // Handle solid color - fill with first color\r\n      pixels = new Uint8Array(width * height * 4);\r\n      const color = colors[0];\r\n      for (let i = 0; i < width * height; i++) {\r\n        const idx = i * 4;\r\n        pixels[idx] = color.r;\r\n        pixels[idx + 1] = color.g;\r\n        pixels[idx + 2] = color.b;\r\n        pixels[idx + 3] = color.a;\r\n      }\r\n    } else {\r\n      // Determine seed\r\n      const seed = config.seed ?? NoiseGenerationUtilities.hashString(contextString || `texture-${Date.now()}`);\r\n      const rng = new SeededRandom(seed);\r\n\r\n      // Get parameters\r\n      const factor = Math.max(0, Math.min(1, config.factor ?? 0.2));\r\n      const pixelSize = Math.max(1, config.pixelSize ?? 1);\r\n      const scale = config.scale ?? 4;\r\n\r\n      // Calculate grid dimensions\r\n      const gridWidth = Math.ceil(width / pixelSize);\r\n      const gridHeight = Math.ceil(height / pixelSize);\r\n\r\n      // Generate the noise grid\r\n      const colorGrid = NoiseGenerationUtilities.generateNoiseGrid(\r\n        pattern as NoisePatternType,\r\n        colors,\r\n        factor,\r\n        gridWidth,\r\n        gridHeight,\r\n        rng,\r\n        scale\r\n      );\r\n\r\n      // Convert grid to RGBA pixel data\r\n      pixels = this.gridToPixels(colorGrid, width, height, pixelSize);\r\n    }\r\n\r\n    // Apply post-processing effects if specified\r\n    if (config.effects) {\r\n      applyTextureEffects(pixels, width, height, config.effects);\r\n    }\r\n\r\n    return pixels;\r\n  }\r\n\r\n  /**\r\n   * Convert color grid to RGBA pixel data\r\n   */\r\n  private static gridToPixels(grid: ParsedColor[][], width: number, height: number, pixelSize: number): Uint8Array {\r\n    const gridWidth = grid[0]?.length || 0;\r\n    const gridHeight = grid.length;\r\n    const pixels = new Uint8Array(width * height * 4);\r\n\r\n    for (let y = 0; y < height; y++) {\r\n      for (let x = 0; x < width; x++) {\r\n        // Map pixel to grid cell\r\n        const gridX = Math.min(Math.floor(x / pixelSize), gridWidth - 1);\r\n        const gridY = Math.min(Math.floor(y / pixelSize), gridHeight - 1);\r\n        const color = grid[gridY][gridX];\r\n\r\n        // Write RGBA values\r\n        const idx = (y * width + x) * 4;\r\n        pixels[idx] = color.r;\r\n        pixels[idx + 1] = color.g;\r\n        pixels[idx + 2] = color.b;\r\n        pixels[idx + 3] = color.a;\r\n      }\r\n    }\r\n\r\n    return pixels;\r\n  }\r\n\r\n  /**\r\n   * Parse an IMcpPixelColor to a ParsedColor (RGBA 0-255).\r\n   */\r\n  static parsePixelColor(color: IMcpPixelColor): ParsedColor {\r\n    // If hex is provided, parse it\r\n    if (color.hex) {\r\n      return NoiseGenerationUtilities.parseColorInput(color.hex);\r\n    }\r\n    // Otherwise use RGBA values\r\n    return {\r\n      r: Math.max(0, Math.min(255, color.r || 0)),\r\n      g: Math.max(0, Math.min(255, color.g || 0)),\r\n      b: Math.max(0, Math.min(255, color.b || 0)),\r\n      a: color.a !== undefined ? Math.max(0, Math.min(255, color.a)) : 255,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Apply pixel art overlay to an existing RGBA pixel buffer.\r\n   * This is the core pixel art rendering method - operates directly on pixel data\r\n   * for maximum performance (no SVG generation).\r\n   *\r\n   * @param pixels Existing RGBA pixel buffer to modify in-place\r\n   * @param width Width of the pixel buffer (face texture width in pixels)\r\n   * @param height Height of the pixel buffer (face texture height in pixels)\r\n   * @param pixelArt Pixel art configuration to apply\r\n   * @param pixelsPerUnit Pixels per Minecraft unit (for \"unit\" scaleMode). Default: 2\r\n   */\r\n  static applyPixelArt(\r\n    pixels: Uint8Array,\r\n    width: number,\r\n    height: number,\r\n    pixelArt: IMcpPixelArt,\r\n    pixelsPerUnit: number = 2\r\n  ): void {\r\n    const scaleMode = pixelArt.scaleMode || \"unit\";\r\n    const lines = pixelArt.lines;\r\n    const palette = pixelArt.palette;\r\n\r\n    // Calculate pixel art dimensions\r\n    const artHeight = lines.length;\r\n    let artWidth = 0;\r\n    for (const line of lines) {\r\n      artWidth = Math.max(artWidth, line.length);\r\n    }\r\n\r\n    if (artWidth === 0 || artHeight === 0) {\r\n      return; // Empty pixel art\r\n    }\r\n\r\n    // Pre-parse palette colors for performance\r\n    const parsedPalette: { [char: string]: ParsedColor } = {};\r\n    for (const char in palette) {\r\n      parsedPalette[char] = this.parsePixelColor(palette[char]);\r\n    }\r\n\r\n    // Calculate scale factor and offset based on scaleMode\r\n    let scale: number;\r\n    let offsetX: number;\r\n    let offsetY: number;\r\n\r\n    switch (scaleMode) {\r\n      case \"exact\":\r\n        // Each character = 1 pixel, x/y in pixels\r\n        scale = 1;\r\n        offsetX = pixelArt.x || 0;\r\n        offsetY = pixelArt.y || 0;\r\n        break;\r\n\r\n      case \"cover\":\r\n        // Scale to fill the entire texture, ignoring x/y\r\n        const scaleX = width / artWidth;\r\n        const scaleY = height / artHeight;\r\n        scale = Math.min(scaleX, scaleY); // Use min to maintain aspect ratio and cover\r\n        // For true cover, we'd use max, but min prevents overflow\r\n        // Center the art if it doesn't fill completely\r\n        offsetX = Math.floor((width - artWidth * scale) / 2);\r\n        offsetY = Math.floor((height - artHeight * scale) / 2);\r\n        break;\r\n\r\n      case \"unit\":\r\n      default:\r\n        // Each character = 1 Minecraft unit = pixelsPerUnit pixels\r\n        // x/y in Minecraft units\r\n        scale = pixelsPerUnit;\r\n        offsetX = (pixelArt.x || 0) * pixelsPerUnit;\r\n        offsetY = (pixelArt.y || 0) * pixelsPerUnit;\r\n        break;\r\n    }\r\n\r\n    // Process each character in the pixel art\r\n    for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\r\n      const line = lines[lineIdx];\r\n\r\n      for (let charIdx = 0; charIdx < line.length; charIdx++) {\r\n        const char = line[charIdx];\r\n\r\n        // Space is always transparent (skip drawing)\r\n        if (char === \" \") continue;\r\n\r\n        // Look up color in palette\r\n        const color = parsedPalette[char];\r\n        if (!color) {\r\n          // Character not in palette - skip silently\r\n          continue;\r\n        }\r\n\r\n        // Calculate the pixel region for this character\r\n        const startX = Math.floor(offsetX + charIdx * scale);\r\n        const startY = Math.floor(offsetY + lineIdx * scale);\r\n        const endX = Math.floor(offsetX + (charIdx + 1) * scale);\r\n        const endY = Math.floor(offsetY + (lineIdx + 1) * scale);\r\n\r\n        // Fill the scaled pixel region\r\n        for (let pixelY = startY; pixelY < endY; pixelY++) {\r\n          // Skip if outside texture bounds\r\n          if (pixelY < 0 || pixelY >= height) continue;\r\n\r\n          for (let pixelX = startX; pixelX < endX; pixelX++) {\r\n            // Skip if outside texture bounds\r\n            if (pixelX < 0 || pixelX >= width) continue;\r\n\r\n            // Calculate pixel index in buffer\r\n            const idx = (pixelY * width + pixelX) * 4;\r\n\r\n            // Alpha blend the pixel\r\n            if (color.a === 255) {\r\n              // Fully opaque - direct write\r\n              pixels[idx] = color.r;\r\n              pixels[idx + 1] = color.g;\r\n              pixels[idx + 2] = color.b;\r\n              pixels[idx + 3] = 255;\r\n            } else if (color.a > 0) {\r\n              // Partial transparency - alpha blend\r\n              const srcAlpha = color.a / 255;\r\n              const dstAlpha = pixels[idx + 3] / 255;\r\n              const outAlpha = srcAlpha + dstAlpha * (1 - srcAlpha);\r\n\r\n              if (outAlpha > 0) {\r\n                pixels[idx] = Math.round((color.r * srcAlpha + pixels[idx] * dstAlpha * (1 - srcAlpha)) / outAlpha);\r\n                pixels[idx + 1] = Math.round(\r\n                  (color.g * srcAlpha + pixels[idx + 1] * dstAlpha * (1 - srcAlpha)) / outAlpha\r\n                );\r\n                pixels[idx + 2] = Math.round(\r\n                  (color.b * srcAlpha + pixels[idx + 2] * dstAlpha * (1 - srcAlpha)) / outAlpha\r\n                );\r\n                pixels[idx + 3] = Math.round(outAlpha * 255);\r\n              }\r\n            }\r\n            // If alpha is 0, don't draw anything\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Apply multiple pixel art overlays in order.\r\n   * Each layer is rendered on top of the previous.\r\n   *\r\n   * @param pixels Existing RGBA pixel buffer to modify in-place\r\n   * @param width Width of the pixel buffer\r\n   * @param height Height of the pixel buffer\r\n   * @param pixelArtLayers Array of pixel art configurations to apply\r\n   * @param pixelsPerUnit Pixels per Minecraft unit (for \"unit\" scaleMode). Default: 2\r\n   */\r\n  static applyPixelArtLayers(\r\n    pixels: Uint8Array,\r\n    width: number,\r\n    height: number,\r\n    pixelArtLayers: IMcpPixelArt[],\r\n    pixelsPerUnit: number = 2\r\n  ): void {\r\n    for (const layer of pixelArtLayers) {\r\n      this.applyPixelArt(pixels, width, height, layer, pixelsPerUnit);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate pixel art as standalone RGBA pixel data.\r\n   * Creates a transparent buffer and applies the pixel art to it.\r\n   *\r\n   * @param pixelArt Pixel art configuration\r\n   * @returns Object with pixels (RGBA Uint8Array), width, and height\r\n   */\r\n  static generatePixelArtPixels(pixelArt: IMcpPixelArt): { pixels: Uint8Array; width: number; height: number } {\r\n    // Calculate dimensions from lines\r\n    const height = pixelArt.lines.length;\r\n    let width = 0;\r\n    for (const line of pixelArt.lines) {\r\n      width = Math.max(width, line.length);\r\n    }\r\n\r\n    // Handle empty pixel art\r\n    if (width === 0 || height === 0) {\r\n      return { pixels: new Uint8Array(0), width: 0, height: 0 };\r\n    }\r\n\r\n    // Create transparent buffer\r\n    const pixels = new Uint8Array(width * height * 4);\r\n    // Buffer is already zeroed (fully transparent)\r\n\r\n    // Apply the pixel art\r\n    this.applyPixelArt(pixels, width, height, pixelArt);\r\n\r\n    return { pixels, width, height };\r\n  }\r\n}\r\n\r\n// Re-export for backwards compatibility\r\nexport { NoiseGenerationUtilities, SeededRandom, ParsedColor };\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ModelDesignUtilities\r\n *\r\n * Converts MCP model design format to Minecraft .geo.json format\r\n * and generates texture atlases from per-face SVG/color specifications.\r\n */\r\n\r\nimport {\r\n  IMcpModelDesign,\r\n  IMcpFaceContent,\r\n  IMcpColorRGBA,\r\n  IMcpTextureDefinition,\r\n  IMcpNoiseConfig,\r\n  IMcpTexturedRectangle,\r\n  IMcpPixelArt,\r\n  convertNoiseConfigToTexturedRectangle,\r\n  colorToTexturedRectangle,\r\n} from \"./IMcpModelDesign\";\r\nimport IModelGeometry, { IGeometry, IGeometryBone, IGeometryBoneCube, IGeometryUVFaces } from \"./IModelGeometry\";\r\nimport TexturedRectangleGenerator from \"./TexturedRectangleGenerator\";\r\n\r\n/**\r\n * Represents a region in the texture atlas for a cube face\r\n */\r\nexport interface IAtlasRegion {\r\n  x: number;\r\n  y: number;\r\n  width: number;\r\n  height: number;\r\n  content: IMcpFaceContent;\r\n  faceName: string;\r\n  cubeIndex: number;\r\n  boneIndex: number;\r\n  /** Context string for deterministic noise seeding (e.g., \"bone0:cube1:north\") */\r\n  contextString?: string;\r\n  /** If true, this region shares atlas space with another region and should not be rendered */\r\n  isDuplicate?: boolean;\r\n}\r\n\r\n/**\r\n * Result from converting an MCP design to geometry\r\n */\r\nexport interface IModelDesignConversionResult {\r\n  /**\r\n   * The converted Minecraft geometry JSON\r\n   */\r\n  geometry: IModelGeometry;\r\n\r\n  /**\r\n   * Atlas regions for generating the texture\r\n   */\r\n  atlasRegions: IAtlasRegion[];\r\n\r\n  /**\r\n   * Total texture size [width, height]\r\n   */\r\n  textureSize: [number, number];\r\n\r\n  /**\r\n   * Pixels per Minecraft unit used for texture generation.\r\n   * Needed by pixel art renderer to scale properly.\r\n   */\r\n  pixelsPerUnit: number;\r\n\r\n  /**\r\n   * Any warnings during conversion\r\n   */\r\n  warnings: string[];\r\n\r\n  /**\r\n   * Map from content hash to atlas region index, for texture deduplication\r\n   */\r\n  textureDeduplicationMap?: Map<string, number>;\r\n}\r\n\r\n/**\r\n * Resolved face content after texture ID lookup.\r\n * Contains the actual svg/color/background to render (textureId is resolved away).\r\n */\r\nexport interface IResolvedFaceContent {\r\n  /** @deprecated Use background with type:'solid' instead */\r\n  color?: string | IMcpColorRGBA;\r\n  svg?: string;\r\n  /** @deprecated Use background instead */\r\n  noise?: IMcpNoiseConfig;\r\n  /** Background fill using a textured rectangle (unified color/noise format) */\r\n  background?: IMcpTexturedRectangle;\r\n  /** Pixel art overlays to render on top of background and svg */\r\n  pixelArt?: IMcpPixelArt[];\r\n  /** Post-processing effects to apply to the face texture */\r\n  effects?: import(\"./TextureEffects\").ITextureEffects;\r\n  rotation?: number;\r\n  /** The original textureId if this was resolved from a reference */\r\n  sourceTextureId?: string;\r\n}\r\n\r\n/**\r\n * Default pixels per Minecraft unit.\r\n * Standard Minecraft textures use 1 pixel per unit (16x16 texture for a 16-unit cube).\r\n * We default to 2 pixels per unit (32x32 texture per block) for HD quality.\r\n */\r\nconst DEFAULT_PIXELS_PER_UNIT = 2;\r\n\r\n/**\r\n * Bounding box for a model design\r\n */\r\nexport interface IModelBounds {\r\n  minX: number;\r\n  minY: number;\r\n  minZ: number;\r\n  maxX: number;\r\n  maxY: number;\r\n  maxZ: number;\r\n  /** Maximum dimension (width, height, or depth) */\r\n  maxDimension: number;\r\n  /** Center point of the bounding box */\r\n  center: { x: number; y: number; z: number };\r\n}\r\n\r\n/**\r\n * Utility class for working with MCP model designs\r\n */\r\nexport default class ModelDesignUtilities {\r\n  /**\r\n   * Calculate the bounding box of a model design.\r\n   * Iterates through all bones and cubes to find the min/max extents.\r\n   */\r\n  static calculateModelBounds(design: IMcpModelDesign): IModelBounds {\r\n    let minX = Infinity;\r\n    let minY = Infinity;\r\n    let minZ = Infinity;\r\n    let maxX = -Infinity;\r\n    let maxY = -Infinity;\r\n    let maxZ = -Infinity;\r\n\r\n    for (const bone of design.bones) {\r\n      for (const cube of bone.cubes) {\r\n        const [ox, oy, oz] = cube.origin;\r\n        const [sx, sy, sz] = cube.size;\r\n\r\n        // Cube extends from origin to origin + size\r\n        minX = Math.min(minX, ox);\r\n        minY = Math.min(minY, oy);\r\n        minZ = Math.min(minZ, oz);\r\n        maxX = Math.max(maxX, ox + sx);\r\n        maxY = Math.max(maxY, oy + sy);\r\n        maxZ = Math.max(maxZ, oz + sz);\r\n      }\r\n    }\r\n\r\n    // Handle empty models\r\n    if (minX === Infinity) {\r\n      minX = minY = minZ = 0;\r\n      maxX = maxY = maxZ = 1;\r\n    }\r\n\r\n    const width = maxX - minX;\r\n    const height = maxY - minY;\r\n    const depth = maxZ - minZ;\r\n    const maxDimension = Math.max(width, height, depth);\r\n\r\n    return {\r\n      minX,\r\n      minY,\r\n      minZ,\r\n      maxX,\r\n      maxY,\r\n      maxZ,\r\n      maxDimension,\r\n      center: {\r\n        x: (minX + maxX) / 2,\r\n        y: (minY + maxY) / 2,\r\n        z: (minZ + maxZ) / 2,\r\n      },\r\n    };\r\n  }\r\n  /**\r\n   * Parse a color string or object to RGBA values (0-255)\r\n   */\r\n  static parseColor(color: string | IMcpColorRGBA | undefined): IMcpColorRGBA {\r\n    if (!color) {\r\n      return { r: 255, g: 255, b: 255, a: 255 };\r\n    }\r\n\r\n    if (typeof color === \"object\") {\r\n      return {\r\n        r: Math.max(0, Math.min(255, Math.round(color.r))),\r\n        g: Math.max(0, Math.min(255, Math.round(color.g))),\r\n        b: Math.max(0, Math.min(255, Math.round(color.b))),\r\n        a: color.a !== undefined ? Math.max(0, Math.min(255, Math.round(color.a))) : 255,\r\n      };\r\n    }\r\n\r\n    // Parse hex color\r\n    if (color.startsWith(\"#\")) {\r\n      const hex = color.slice(1);\r\n      if (hex.length === 3) {\r\n        // Short form #RGB\r\n        return {\r\n          r: parseInt(hex[0] + hex[0], 16),\r\n          g: parseInt(hex[1] + hex[1], 16),\r\n          b: parseInt(hex[2] + hex[2], 16),\r\n          a: 255,\r\n        };\r\n      } else if (hex.length === 6) {\r\n        // Full form #RRGGBB\r\n        return {\r\n          r: parseInt(hex.slice(0, 2), 16),\r\n          g: parseInt(hex.slice(2, 4), 16),\r\n          b: parseInt(hex.slice(4, 6), 16),\r\n          a: 255,\r\n        };\r\n      } else if (hex.length === 8) {\r\n        // With alpha #RRGGBBAA\r\n        return {\r\n          r: parseInt(hex.slice(0, 2), 16),\r\n          g: parseInt(hex.slice(2, 4), 16),\r\n          b: parseInt(hex.slice(4, 6), 16),\r\n          a: parseInt(hex.slice(6, 8), 16),\r\n        };\r\n      }\r\n    }\r\n\r\n    // Parse rgb/rgba format\r\n    const rgbaMatch = color.match(/rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/i);\r\n    if (rgbaMatch) {\r\n      return {\r\n        r: parseInt(rgbaMatch[1], 10),\r\n        g: parseInt(rgbaMatch[2], 10),\r\n        b: parseInt(rgbaMatch[3], 10),\r\n        a: rgbaMatch[4] ? Math.round(parseFloat(rgbaMatch[4]) * 255) : 255,\r\n      };\r\n    }\r\n\r\n    // Default to white if parsing fails\r\n    return { r: 255, g: 255, b: 255, a: 255 };\r\n  }\r\n\r\n  /**\r\n   * Convert color to hex string\r\n   */\r\n  static colorToHex(color: IMcpColorRGBA): string {\r\n    const r = color.r.toString(16).padStart(2, \"0\");\r\n    const g = color.g.toString(16).padStart(2, \"0\");\r\n    const b = color.b.toString(16).padStart(2, \"0\");\r\n    return `#${r}${g}${b}`;\r\n  }\r\n\r\n  /**\r\n   * Resolve face content by looking up textureId references.\r\n   * Returns the actual svg/color content to render.\r\n   * Priority: textureId > svg > color\r\n   *\r\n   * @param faceContent The face content which may contain a textureId reference\r\n   * @param textures The texture dictionary from the model design\r\n   * @param warnings Array to collect any warnings (e.g., missing texture references)\r\n   * @returns Resolved content with svg/color, or undefined if face should be transparent\r\n   */\r\n  static resolveFaceContent(\r\n    faceContent: IMcpFaceContent | undefined,\r\n    textures: { [textureId: string]: IMcpTextureDefinition } | undefined,\r\n    warnings: string[]\r\n  ): IResolvedFaceContent | undefined {\r\n    if (!faceContent) {\r\n      return undefined;\r\n    }\r\n\r\n    // If textureId is specified, look it up\r\n    if (faceContent.textureId) {\r\n      if (!textures) {\r\n        warnings.push(\r\n          `Face references textureId \"${faceContent.textureId}\" but no textures dictionary is defined in the model.`\r\n        );\r\n        // Fall through to check for inline content\r\n      } else {\r\n        const texture = textures[faceContent.textureId];\r\n        if (!texture) {\r\n          warnings.push(\r\n            `Face references textureId \"${faceContent.textureId}\" which is not defined in the textures dictionary.`\r\n          );\r\n          // Fall through to check for inline content\r\n        } else {\r\n          // Successfully resolved texture reference\r\n          // Priority: background > noise > color (face overrides texture)\r\n          const resolvedBackground = faceContent.background || texture.background;\r\n          const resolvedNoise = faceContent.noise || texture.noise;\r\n          const resolvedColor = texture.color;\r\n          // Merge pixelArt: face pixelArt comes after texture pixelArt (renders on top)\r\n          const resolvedPixelArt = [...(texture.pixelArt || []), ...(faceContent.pixelArt || [])];\r\n          // Merge effects: face effects override texture effects per-property\r\n          const resolvedEffects =\r\n            texture.effects || faceContent.effects\r\n              ? {\r\n                  ...texture.effects,\r\n                  ...faceContent.effects,\r\n                }\r\n              : undefined;\r\n\r\n          // Normalize to background if possible (for consistent handling downstream)\r\n          let normalizedBackground = resolvedBackground;\r\n          if (!normalizedBackground && resolvedNoise) {\r\n            normalizedBackground = convertNoiseConfigToTexturedRectangle(resolvedNoise);\r\n          } else if (!normalizedBackground && resolvedColor) {\r\n            normalizedBackground = colorToTexturedRectangle(resolvedColor);\r\n          }\r\n\r\n          return {\r\n            color: resolvedColor,\r\n            svg: texture.svg,\r\n            noise: resolvedNoise,\r\n            background: normalizedBackground,\r\n            pixelArt: resolvedPixelArt.length > 0 ? resolvedPixelArt : undefined,\r\n            effects: resolvedEffects,\r\n            rotation: faceContent.rotation,\r\n            sourceTextureId: faceContent.textureId,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    // No textureId or failed lookup - use inline content\r\n    // Priority: background > noise > color\r\n    if (\r\n      faceContent.svg ||\r\n      faceContent.color ||\r\n      faceContent.noise ||\r\n      faceContent.background ||\r\n      faceContent.pixelArt ||\r\n      faceContent.effects\r\n    ) {\r\n      // Normalize to background if possible\r\n      let normalizedBackground = faceContent.background;\r\n      if (!normalizedBackground && faceContent.noise) {\r\n        normalizedBackground = convertNoiseConfigToTexturedRectangle(faceContent.noise);\r\n      } else if (!normalizedBackground && faceContent.color) {\r\n        normalizedBackground = colorToTexturedRectangle(faceContent.color);\r\n      }\r\n\r\n      return {\r\n        color: faceContent.color,\r\n        svg: faceContent.svg,\r\n        noise: faceContent.noise,\r\n        background: normalizedBackground,\r\n        pixelArt: faceContent.pixelArt,\r\n        effects: faceContent.effects,\r\n        rotation: faceContent.rotation,\r\n      };\r\n    }\r\n\r\n    // No content at all\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Generate a content hash for a resolved face content.\r\n   * Used for texture deduplication - faces with identical content can share atlas regions.\r\n   * Note: rotation is NOT included in hash since it's applied at UV time, not texture time.\r\n   * Note: backgrounds with undefined/random seed create unique textures per face (not deduplicated).\r\n   */\r\n  static getContentHash(content: IResolvedFaceContent): string {\r\n    // If there's a sourceTextureId and no face-specific overrides, use that as a quick hash\r\n    if (content.sourceTextureId && !content.noise && !content.background) {\r\n      return `texref:${content.sourceTextureId}`;\r\n    }\r\n\r\n    // Build hash from all content components\r\n    const parts: string[] = [];\r\n\r\n    // Prefer background over legacy noise/color for hashing\r\n    if (content.background) {\r\n      // Solid fills are deterministic - they don't need seed for deduplication\r\n      // Noise-based fills need a seed - if not provided, use random to ensure unique textures per face\r\n      const isSolid = content.background.type === \"solid\";\r\n      const bgHashParts = [`type:${content.background.type}`, `colors:${JSON.stringify(content.background.colors)}`];\r\n      // Only include noise-related params for non-solid types\r\n      if (!isSolid) {\r\n        bgHashParts.push(`factor:${content.background.factor ?? 0.2}`);\r\n        bgHashParts.push(`pixelSize:${content.background.pixelSize ?? 1}`);\r\n        bgHashParts.push(`scale:${content.background.scale ?? 4}`);\r\n        // For noise types: explicit seed means deterministic (can deduplicate), no seed means unique per face\r\n        bgHashParts.push(\r\n          content.background.seed !== undefined ? `seed:${content.background.seed}` : `seed:${Math.random()}`\r\n        );\r\n      }\r\n      parts.push(`bg:{${bgHashParts.join(\",\")}}`);\r\n    } else if (content.noise) {\r\n      // Legacy noise support\r\n      const noiseHash = [\r\n        `pattern:${content.noise.pattern || \"random\"}`,\r\n        `colors:${JSON.stringify(content.noise.colors)}`,\r\n        `factor:${content.noise.factor ?? 0.5}`,\r\n        `pixelSize:${content.noise.pixelSize ?? 1}`,\r\n        `scale:${content.noise.scale ?? 4}`,\r\n        content.noise.seed !== undefined ? `seed:${content.noise.seed}` : `seed:${Math.random()}`,\r\n      ].join(\",\");\r\n      parts.push(`noise:{${noiseHash}}`);\r\n    }\r\n\r\n    if (content.svg) {\r\n      parts.push(`svg:${content.svg}`);\r\n    }\r\n\r\n    if (content.color && !content.background) {\r\n      // Only include color if no background (for legacy support)\r\n      if (typeof content.color === \"string\") {\r\n        parts.push(`color:${content.color}`);\r\n      } else {\r\n        parts.push(`color:rgba(${content.color.r},${content.color.g},${content.color.b},${content.color.a ?? 255})`);\r\n      }\r\n    }\r\n\r\n    // Pixel art is deterministic - include in hash for deduplication\r\n    if (content.pixelArt && content.pixelArt.length > 0) {\r\n      // Create a stable hash of the pixel art configuration\r\n      const pixelArtHash = content.pixelArt\r\n        .map((pa, i) => {\r\n          const lines = pa.lines.join(\"|\");\r\n          const palette = Object.entries(pa.palette || {})\r\n            .sort(([a], [b]) => a.localeCompare(b))\r\n            .map(([k, v]) => `${k}:${v.hex || `${v.r},${v.g},${v.b},${v.a ?? 255}`}`)\r\n            .join(\";\");\r\n          return `[${i}:x${pa.x || 0}y${pa.y || 0}:${lines}:${palette}]`;\r\n        })\r\n        .join(\"\");\r\n      parts.push(`pixelArt:${pixelArtHash}`);\r\n    }\r\n\r\n    if (content.sourceTextureId) {\r\n      parts.push(`texref:${content.sourceTextureId}`);\r\n    }\r\n\r\n    return parts.length > 0 ? parts.join(\"|\") : \"empty\";\r\n  }\r\n\r\n  /**\r\n   * Get the effective pixels per unit for a design.\r\n   * Returns the design's pixelsPerUnit if specified, otherwise DEFAULT_PIXELS_PER_UNIT.\r\n   */\r\n  static getPixelsPerUnit(design: IMcpModelDesign): number {\r\n    return design.pixelsPerUnit ?? DEFAULT_PIXELS_PER_UNIT;\r\n  }\r\n\r\n  /**\r\n   * Calculate the texture size needed for a face based on cube dimensions.\r\n   * @param cubeSize The cube dimensions [width, height, depth] in Minecraft units\r\n   * @param faceName The face to calculate texture size for\r\n   * @param pixelsPerUnit Pixels per Minecraft unit (default: DEFAULT_PIXELS_PER_UNIT)\r\n   */\r\n  static getFaceTextureSize(\r\n    cubeSize: [number, number, number],\r\n    faceName: string,\r\n    pixelsPerUnit: number = DEFAULT_PIXELS_PER_UNIT\r\n  ): { width: number; height: number } {\r\n    // Face dimensions based on cube size\r\n    // Pixels = units \u00D7 pixelsPerUnit\r\n    // north/south: width x height\r\n    // east/west: depth x height\r\n    // up/down: width x depth\r\n    const [width, height, depth] = cubeSize;\r\n\r\n    switch (faceName) {\r\n      case \"north\":\r\n      case \"south\":\r\n        return {\r\n          width: Math.max(1, Math.round(width * pixelsPerUnit)),\r\n          height: Math.max(1, Math.round(height * pixelsPerUnit)),\r\n        };\r\n      case \"east\":\r\n      case \"west\":\r\n        return {\r\n          width: Math.max(1, Math.round(depth * pixelsPerUnit)),\r\n          height: Math.max(1, Math.round(height * pixelsPerUnit)),\r\n        };\r\n      case \"up\":\r\n      case \"down\":\r\n        return {\r\n          width: Math.max(1, Math.round(width * pixelsPerUnit)),\r\n          height: Math.max(1, Math.round(depth * pixelsPerUnit)),\r\n        };\r\n      default:\r\n        return { width: 1, height: 1 };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a texture size is sufficient for a design by doing a dry-run pack.\r\n   * Returns true if the texture needs to be larger.\r\n   * Takes into account texture deduplication - identical textures at same size share atlas space.\r\n   */\r\n  private static _checkNeedsLargerTexture(design: IMcpModelDesign, textureSize: [number, number]): boolean {\r\n    let currentX = 0;\r\n    let currentY = 0;\r\n    let rowHeight = 0;\r\n    const dummyWarnings: string[] = [];\r\n    const pixelsPerUnit = this.getPixelsPerUnit(design);\r\n\r\n    // Track already-packed textures for deduplication\r\n    const packedTextures = new Set<string>();\r\n\r\n    for (const bone of design.bones) {\r\n      for (const cube of bone.cubes) {\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const faceContent = cube.faces[faceName];\r\n          if (!faceContent) {\r\n            continue;\r\n          }\r\n\r\n          // Resolve texture references\r\n          const resolvedContent = this.resolveFaceContent(faceContent, design.textures, dummyWarnings);\r\n          if (!resolvedContent) {\r\n            continue;\r\n          }\r\n\r\n          const faceSize = this.getFaceTextureSize(cube.size, faceName, pixelsPerUnit);\r\n\r\n          // Check for deduplication - if we've already packed this exact content at this size, skip\r\n          const contentHash = this.getContentHash(resolvedContent);\r\n          const dedupeKey = `${contentHash}|${faceSize.width}x${faceSize.height}`;\r\n          if (packedTextures.has(dedupeKey)) {\r\n            continue; // This texture will be reused, no new space needed\r\n          }\r\n          packedTextures.add(dedupeKey);\r\n\r\n          // Check if we need to wrap to next row\r\n          if (currentX + faceSize.width > textureSize[0]) {\r\n            currentX = 0;\r\n            currentY += rowHeight;\r\n            rowHeight = 0;\r\n          }\r\n\r\n          // Check if we're out of vertical space\r\n          if (currentY + faceSize.height > textureSize[1]) {\r\n            return true; // Texture is too small\r\n          }\r\n\r\n          currentX += faceSize.width;\r\n          rowHeight = Math.max(rowHeight, faceSize.height);\r\n        }\r\n      }\r\n    }\r\n\r\n    return false; // Texture size is sufficient\r\n  }\r\n\r\n  /**\r\n   * Convert an MCP model design to Minecraft geometry JSON format\r\n   */\r\n  static convertToGeometry(design: IMcpModelDesign): IModelDesignConversionResult {\r\n    const warnings: string[] = [];\r\n    const atlasRegions: IAtlasRegion[] = [];\r\n\r\n    // Ensure identifier has geometry. prefix\r\n    let identifier = design.identifier;\r\n    if (!identifier.startsWith(\"geometry.\")) {\r\n      identifier = `geometry.${identifier}`;\r\n    }\r\n\r\n    // First pass: calculate the required texture size by measuring unique faces\r\n    // (accounting for deduplication - identical content at same size only counts once)\r\n    let maxFaceWidth = 0;\r\n    let maxFaceHeight = 0;\r\n    const uniqueFaces = new Set<string>();\r\n    const pixelsPerUnit = this.getPixelsPerUnit(design);\r\n\r\n    for (const bone of design.bones) {\r\n      for (const cube of bone.cubes) {\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const faceContent = cube.faces[faceName];\r\n          if (faceContent) {\r\n            const resolvedContent = this.resolveFaceContent(faceContent, design.textures, warnings);\r\n            if (!resolvedContent) {\r\n              continue;\r\n            }\r\n\r\n            const faceSize = this.getFaceTextureSize(cube.size, faceName, pixelsPerUnit);\r\n\r\n            // Check for deduplication\r\n            const contentHash = this.getContentHash(resolvedContent);\r\n            const dedupeKey = `${contentHash}|${faceSize.width}x${faceSize.height}`;\r\n\r\n            if (!uniqueFaces.has(dedupeKey)) {\r\n              uniqueFaces.add(dedupeKey);\r\n              maxFaceWidth = Math.max(maxFaceWidth, faceSize.width);\r\n              maxFaceHeight = Math.max(maxFaceHeight, faceSize.height);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Calculate optimal texture size based on actual content\r\n    // Start with the minimum power of 2 that can fit the largest single face\r\n    const minDimension = Math.max(maxFaceWidth, maxFaceHeight);\r\n    let optimalSize = Math.pow(2, Math.ceil(Math.log2(Math.max(16, minDimension))));\r\n\r\n    // Verify optimal size fits all faces, expand if needed\r\n    while (this._checkNeedsLargerTexture(design, [optimalSize, optimalSize]) && optimalSize < 4096) {\r\n      optimalSize = optimalSize * 2;\r\n    }\r\n\r\n    // Use optimal size if no textureSize specified, or if specified size is larger than optimal\r\n    // Only expand beyond optimal if the specified size is too small\r\n    let textureSize: [number, number];\r\n    if (design.textureSize) {\r\n      // If specified size is too small, expand to fit\r\n      if (this._checkNeedsLargerTexture(design, design.textureSize)) {\r\n        textureSize = [optimalSize, optimalSize];\r\n        warnings.push(\r\n          `Specified texture size ${design.textureSize[0]}x${design.textureSize[1]} was too small. ` +\r\n            `Auto-expanded to ${textureSize[0]}x${textureSize[1]}.`\r\n        );\r\n      } else {\r\n        // Use optimal size (smaller is better for efficiency, but respect user minimum)\r\n        textureSize = [\r\n          Math.min(design.textureSize[0], optimalSize) as number,\r\n          Math.min(design.textureSize[1], optimalSize) as number,\r\n        ] as [number, number];\r\n        // Re-verify the shrunk size works\r\n        while (this._checkNeedsLargerTexture(design, textureSize) && textureSize[0] < 4096) {\r\n          textureSize = [textureSize[0] * 2, textureSize[1] * 2];\r\n        }\r\n      }\r\n    } else {\r\n      textureSize = [optimalSize, optimalSize];\r\n    }\r\n\r\n    // Collect all face regions and calculate atlas layout\r\n    let currentX = 0;\r\n    let currentY = 0;\r\n    let rowHeight = 0;\r\n    const padding = 0; // No padding between faces for clean tiling\r\n\r\n    // Map for texture deduplication: contentHash+size -> atlas region index\r\n    // Only faces with identical content AND identical size can share a region\r\n    const textureDeduplicationMap = new Map<string, number>();\r\n\r\n    for (let boneIndex = 0; boneIndex < design.bones.length; boneIndex++) {\r\n      const bone = design.bones[boneIndex];\r\n      for (let cubeIndex = 0; cubeIndex < bone.cubes.length; cubeIndex++) {\r\n        const cube = bone.cubes[cubeIndex];\r\n        const faces = cube.faces;\r\n\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const faceContent = faces[faceName];\r\n          if (!faceContent) {\r\n            continue; // Skip undefined faces\r\n          }\r\n\r\n          // Resolve texture references\r\n          const resolvedContent = this.resolveFaceContent(faceContent, design.textures, warnings);\r\n          if (!resolvedContent) {\r\n            continue; // No content to render\r\n          }\r\n\r\n          const faceSize = this.getFaceTextureSize(cube.size, faceName, pixelsPerUnit);\r\n\r\n          // Check for deduplication opportunity:\r\n          // Faces with identical content AND identical size can share a texture region\r\n          const contentHash = this.getContentHash(resolvedContent);\r\n          const dedupeKey = `${contentHash}|${faceSize.width}x${faceSize.height}`;\r\n          const existingRegionIndex = textureDeduplicationMap.get(dedupeKey);\r\n\r\n          // Generate context string for deterministic noise seeding\r\n          const contextString = `${bone.name}:cube${cubeIndex}:${faceName}`;\r\n\r\n          if (existingRegionIndex !== undefined) {\r\n            // Reuse existing atlas region - create a new region entry that points to same UV coordinates\r\n            const existingRegion = atlasRegions[existingRegionIndex];\r\n            atlasRegions.push({\r\n              x: existingRegion.x,\r\n              y: existingRegion.y,\r\n              width: faceSize.width,\r\n              height: faceSize.height,\r\n              content: {\r\n                // Store resolved content\r\n                color: resolvedContent.color,\r\n                svg: resolvedContent.svg,\r\n                noise: resolvedContent.noise,\r\n                background: resolvedContent.background,\r\n                pixelArt: resolvedContent.pixelArt,\r\n                effects: resolvedContent.effects,\r\n                rotation: resolvedContent.rotation,\r\n              },\r\n              faceName,\r\n              cubeIndex,\r\n              boneIndex,\r\n              contextString: existingRegion.contextString, // Reuse original context for consistent noise\r\n              isDuplicate: true, // Mark as duplicate to skip rendering in atlas SVG\r\n            });\r\n            continue;\r\n          }\r\n\r\n          // Check if we need to wrap to next row\r\n          if (currentX + faceSize.width > textureSize[0]) {\r\n            currentX = 0;\r\n            currentY += rowHeight + padding;\r\n            rowHeight = 0;\r\n          }\r\n\r\n          // Check if we're out of vertical space\r\n          if (currentY + faceSize.height > textureSize[1]) {\r\n            warnings.push(\r\n              `Texture atlas overflow: face ${faceName} of cube ${cubeIndex} in bone ${bone.name} ` +\r\n                `doesn't fit in ${textureSize[0]}x${textureSize[1]} texture. Consider increasing textureSize.`\r\n            );\r\n            continue;\r\n          }\r\n\r\n          // Store the region index for potential reuse\r\n          const regionIndex = atlasRegions.length;\r\n          textureDeduplicationMap.set(dedupeKey, regionIndex);\r\n\r\n          atlasRegions.push({\r\n            x: currentX,\r\n            y: currentY,\r\n            width: faceSize.width,\r\n            height: faceSize.height,\r\n            content: {\r\n              // Store resolved content (textureId has been looked up)\r\n              color: resolvedContent.color,\r\n              svg: resolvedContent.svg,\r\n              noise: resolvedContent.noise,\r\n              background: resolvedContent.background,\r\n              pixelArt: resolvedContent.pixelArt,\r\n              effects: resolvedContent.effects,\r\n              rotation: resolvedContent.rotation,\r\n            },\r\n            faceName,\r\n            cubeIndex,\r\n            boneIndex,\r\n            contextString,\r\n          });\r\n\r\n          currentX += faceSize.width + padding;\r\n          rowHeight = Math.max(rowHeight, faceSize.height);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Crop texture height to actual used content\r\n    // Width stays power-of-2 for compatibility, but height is cropped to save space\r\n    const actualUsedHeight = currentY + rowHeight;\r\n    if (actualUsedHeight > 0 && actualUsedHeight < textureSize[1]) {\r\n      textureSize = [textureSize[0], actualUsedHeight];\r\n    }\r\n\r\n    // Convert bones to geometry format\r\n    const geoBones: IGeometryBone[] = design.bones.map((bone, boneIndex) => {\r\n      const cubes: IGeometryBoneCube[] = bone.cubes.map((cube, cubeIndex) => {\r\n        // Build per-face UV from atlas regions\r\n        const uvFaces: IGeometryUVFaces = {};\r\n\r\n        for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n          const region = atlasRegions.find(\r\n            (r) => r.boneIndex === boneIndex && r.cubeIndex === cubeIndex && r.faceName === faceName\r\n          );\r\n\r\n          if (region) {\r\n            uvFaces[faceName] = {\r\n              uv: [region.x, region.y],\r\n              uv_size: [region.width, region.height],\r\n            };\r\n          }\r\n        }\r\n\r\n        const geoCube: IGeometryBoneCube = {\r\n          origin: cube.origin,\r\n          size: cube.size,\r\n          uv: uvFaces,\r\n        };\r\n\r\n        // Note: Cube-level pivot/rotation is NOT supported in the MCP schema.\r\n        // All rotation is done at the bone level for simplicity.\r\n        if (cube.inflate !== undefined) {\r\n          geoCube.inflate = cube.inflate;\r\n        }\r\n        if (cube.mirror !== undefined) {\r\n          geoCube.mirror = cube.mirror;\r\n        }\r\n\r\n        return geoCube;\r\n      });\r\n\r\n      const geoBone: IGeometryBone = {\r\n        name: bone.name,\r\n        pivot: bone.pivot || [0, 0, 0],\r\n        cubes,\r\n      };\r\n\r\n      if (bone.parent) {\r\n        geoBone.parent = bone.parent;\r\n      }\r\n      if (bone.rotation) {\r\n        geoBone.rotation = bone.rotation;\r\n      }\r\n\r\n      return geoBone;\r\n    });\r\n\r\n    // Auto-compute visible bounds from cube extents when not explicitly provided.\r\n    // The renderer uses visible_bounds_* to decide whether to draw the entity;\r\n    // a default of 1\u00D71 culls any model larger than ~1 block, making it invisible.\r\n    // Bedrock units are 16 per block, so we convert max(|extent|)/16 \u2192 blocks\r\n    // and add a small margin. This was a recurring \"invisible entity\" cause.\r\n    let computedBoundsWidth: number | undefined;\r\n    let computedBoundsHeight: number | undefined;\r\n    let computedBoundsOffsetY: number | undefined;\r\n    if (!design.visibleBoundsSize) {\r\n      let minX = Infinity,\r\n        maxX = -Infinity,\r\n        minY = Infinity,\r\n        maxY = -Infinity,\r\n        minZ = Infinity,\r\n        maxZ = -Infinity;\r\n      for (const bone of design.bones) {\r\n        for (const cube of bone.cubes) {\r\n          const [ox, oy, oz] = cube.origin;\r\n          const [sx, sy, sz] = cube.size;\r\n          minX = Math.min(minX, ox);\r\n          maxX = Math.max(maxX, ox + sx);\r\n          minY = Math.min(minY, oy);\r\n          maxY = Math.max(maxY, oy + sy);\r\n          minZ = Math.min(minZ, oz);\r\n          maxZ = Math.max(maxZ, oz + sz);\r\n        }\r\n      }\r\n      if (Number.isFinite(minX) && Number.isFinite(maxX)) {\r\n        const widthUnits = Math.max(maxX - minX, maxZ - minZ);\r\n        const heightUnits = maxY - minY;\r\n        // Convert from units (16 per block) to blocks; add 25% margin; round up to >=1.\r\n        computedBoundsWidth = Math.max(1, Math.ceil((widthUnits / 16) * 1.25));\r\n        computedBoundsHeight = Math.max(1, Math.ceil((heightUnits / 16) * 1.25));\r\n        computedBoundsOffsetY = (minY + maxY) / 2 / 16;\r\n      }\r\n    }\r\n\r\n    // Build the geometry object\r\n    const geometry: IGeometry = {\r\n      description: {\r\n        identifier,\r\n        texture_width: textureSize[0],\r\n        texture_height: textureSize[1],\r\n        visible_bounds_width: design.visibleBoundsSize ? design.visibleBoundsSize[0] : (computedBoundsWidth ?? 1),\r\n        visible_bounds_height: design.visibleBoundsSize ? design.visibleBoundsSize[1] : (computedBoundsHeight ?? 1),\r\n        visible_bounds_offset:\r\n          design.visibleBoundsOffset ||\r\n          (computedBoundsOffsetY !== undefined ? [0, computedBoundsOffsetY, 0] : [0, 0.5, 0]),\r\n      },\r\n      bones: geoBones,\r\n    };\r\n\r\n    const modelGeometry: IModelGeometry = {\r\n      format_version: \"1.12.0\",\r\n      \"minecraft:geometry\": [geometry],\r\n    };\r\n\r\n    return {\r\n      geometry: modelGeometry,\r\n      atlasRegions,\r\n      textureSize,\r\n      pixelsPerUnit,\r\n      warnings,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate SVG for a solid color face\r\n   */\r\n  static generateColorSvg(color: IMcpColorRGBA, width: number, height: number): string {\r\n    const hex = this.colorToHex(color);\r\n    const opacity = color.a !== undefined ? (color.a / 255).toFixed(2) : \"1\";\r\n\r\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">\r\n      <rect x=\"0\" y=\"0\" width=\"${width}\" height=\"${height}\" fill=\"${hex}\" fill-opacity=\"${opacity}\"/>\r\n    </svg>`;\r\n  }\r\n\r\n  /**\r\n   * Get the SVG content for a face, either from explicit SVG, noise, or generating from color.\r\n   *\r\n   * Priority order:\r\n   * 1. If noise is specified, generate noise background\r\n   * 2. If svg is specified, overlay it on top of noise (or use as primary if no noise)\r\n   * 3. If only color is specified, generate solid color\r\n   *\r\n   * @param content Face content configuration\r\n   * @param width Texture width in pixels\r\n   * @param height Texture height in pixels\r\n   * @param contextString Optional context for deterministic noise seeding\r\n   */\r\n  static getFaceSvg(content: IMcpFaceContent, width: number, height: number, contextString?: string): string {\r\n    // Handle modern background property first (takes priority)\r\n    if (content.background) {\r\n      const bgSvg = TexturedRectangleGenerator.generateTexturedRectangleSvg(\r\n        content.background,\r\n        width,\r\n        height,\r\n        contextString\r\n      );\r\n\r\n      // If there's also an SVG overlay, combine them\r\n      if (content.svg) {\r\n        let overlaySvg = content.svg;\r\n        if (!overlaySvg.includes(\"viewBox\")) {\r\n          overlaySvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${overlaySvg}</svg>`;\r\n        }\r\n        return TexturedRectangleGenerator.combineWithOverlay(bgSvg, overlaySvg, width, height);\r\n      }\r\n\r\n      return bgSvg;\r\n    }\r\n\r\n    // Handle legacy noise texture\r\n    if (content.noise) {\r\n      const noiseSvg = TexturedRectangleGenerator.generateNoiseSvg(content.noise, width, height, contextString);\r\n\r\n      // If there's also an SVG overlay, combine them\r\n      if (content.svg) {\r\n        let overlaySvg = content.svg;\r\n        if (!overlaySvg.includes(\"viewBox\")) {\r\n          overlaySvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">${overlaySvg}</svg>`;\r\n        }\r\n        return TexturedRectangleGenerator.combineWithOverlay(noiseSvg, overlaySvg, width, height);\r\n      }\r\n\r\n      return noiseSvg;\r\n    }\r\n\r\n    // Handle explicit SVG\r\n    if (content.svg) {\r\n      // Return SVG as-is - generateAtlasSvg will handle scaling\r\n      return content.svg;\r\n    }\r\n\r\n    // Generate from color (legacy fallback)\r\n    const color = this.parseColor(content.color);\r\n    return this.generateColorSvg(color, width, height);\r\n  }\r\n\r\n  /**\r\n   * Generate a complete SVG document representing the texture atlas\r\n   * This can be rasterized to PNG using a rendering engine\r\n   */\r\n  static generateAtlasSvg(atlasRegions: IAtlasRegion[], textureSize: [number, number]): string {\r\n    const [width, height] = textureSize;\r\n\r\n    let svgContent = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">\r\n`;\r\n\r\n    for (const region of atlasRegions) {\r\n      // Skip duplicate regions - they share atlas space with another region\r\n      if (region.isDuplicate) {\r\n        continue;\r\n      }\r\n\r\n      // Pass context string for deterministic noise seeding\r\n      const faceSvg = this.getFaceSvg(region.content, region.width, region.height, region.contextString);\r\n\r\n      // Extract the original SVG's dimensions and content\r\n      const viewBoxMatch = faceSvg.match(/viewBox\\s*=\\s*[\"']([^\"']+)[\"']/i);\r\n      const widthMatch = faceSvg.match(/<svg[^>]*width\\s*=\\s*[\"']?(\\d+)/i);\r\n      const heightMatch = faceSvg.match(/<svg[^>]*height\\s*=\\s*[\"']?(\\d+)/i);\r\n\r\n      let originalWidth = region.width;\r\n      let originalHeight = region.height;\r\n\r\n      if (viewBoxMatch) {\r\n        const parts = viewBoxMatch[1].trim().split(/\\s+/);\r\n        if (parts.length >= 4) {\r\n          originalWidth = parseFloat(parts[2]) || region.width;\r\n          originalHeight = parseFloat(parts[3]) || region.height;\r\n        }\r\n      } else if (widthMatch && heightMatch) {\r\n        originalWidth = parseInt(widthMatch[1], 10) || region.width;\r\n        originalHeight = parseInt(heightMatch[1], 10) || region.height;\r\n      }\r\n\r\n      // Extract the inner content of the SVG (skip the outer svg tags)\r\n      let innerContent = faceSvg;\r\n      const svgMatch = faceSvg.match(/<svg[^>]*>([\\s\\S]*)<\\/svg>/i);\r\n      if (svgMatch) {\r\n        innerContent = svgMatch[1];\r\n      }\r\n\r\n      // Calculate scale factors to fit content into region\r\n      const scaleX = region.width / originalWidth;\r\n      const scaleY = region.height / originalHeight;\r\n\r\n      // Build transform: translate to position, then scale content to fit\r\n      let transform = `translate(${region.x}, ${region.y})`;\r\n      if (scaleX !== 1 || scaleY !== 1) {\r\n        transform += ` scale(${scaleX}, ${scaleY})`;\r\n      }\r\n\r\n      // Apply rotation if specified - rotation happens around the center of the original content\r\n      if (region.content.rotation) {\r\n        const cx = originalWidth / 2;\r\n        const cy = originalHeight / 2;\r\n        transform += ` rotate(${region.content.rotation}, ${cx}, ${cy})`;\r\n      }\r\n\r\n      // Use <g> with transform to position and scale the content directly\r\n      // This avoids nested <svg> elements which can have viewport issues\r\n      svgContent += `  <g transform=\"${transform}\">${innerContent}</g>\r\n`;\r\n    }\r\n\r\n    svgContent += `</svg>`;\r\n    return svgContent;\r\n  }\r\n\r\n  /**\r\n   * Check if an SVG string contains non-rect elements that are not Minecraft-style\r\n   * Returns array of warning messages about non-Minecraft-style SVG elements\r\n   */\r\n  private static validateSvgStyle(svg: string, context: string): string[] {\r\n    const warnings: string[] = [];\r\n\r\n    // Non-blocky elements that don't fit Minecraft's pixel art style\r\n    const nonBlockyPatterns = [\r\n      { pattern: /<circle/gi, name: \"circle\" },\r\n      { pattern: /<ellipse/gi, name: \"ellipse\" },\r\n      { pattern: /<path/gi, name: \"path\" },\r\n      { pattern: /<polygon/gi, name: \"polygon\" },\r\n      { pattern: /<polyline/gi, name: \"polyline\" },\r\n      { pattern: /<line[^a-z]/gi, name: \"line\" },\r\n      { pattern: /linearGradient/gi, name: \"linearGradient\" },\r\n      { pattern: /radialGradient/gi, name: \"radialGradient\" },\r\n      { pattern: /border-radius/gi, name: \"border-radius style\" },\r\n      { pattern: /rx\\s*=/gi, name: \"rounded corners (rx attribute)\" },\r\n      { pattern: /ry\\s*=/gi, name: \"rounded corners (ry attribute)\" },\r\n    ];\r\n\r\n    for (const { pattern, name } of nonBlockyPatterns) {\r\n      if (pattern.test(svg)) {\r\n        warnings.push(\r\n          `WARNING: ${context} uses <${name}> which creates non-blocky shapes. ` +\r\n            `For authentic Minecraft style, use only <rect> elements to create pixel-art textures.`\r\n        );\r\n      }\r\n    }\r\n\r\n    return warnings;\r\n  }\r\n\r\n  /**\r\n   * Validate pixel art configuration and return any errors or warnings.\r\n   * Returns array of error/warning messages about invalid pixel art\r\n   */\r\n  private static validatePixelArt(pixelArtLayers: IMcpPixelArt[], context: string): string[] {\r\n    const errors: string[] = [];\r\n\r\n    for (let i = 0; i < pixelArtLayers.length; i++) {\r\n      const layer = pixelArtLayers[i];\r\n      const layerContext = pixelArtLayers.length > 1 ? `${context} pixelArt[${i}]` : `${context} pixelArt`;\r\n\r\n      // Validate lines\r\n      if (!layer.lines || !Array.isArray(layer.lines)) {\r\n        errors.push(`${layerContext} must have a 'lines' array`);\r\n        continue;\r\n      }\r\n\r\n      if (layer.lines.length === 0) {\r\n        errors.push(`${layerContext} has empty 'lines' array`);\r\n        continue;\r\n      }\r\n\r\n      // Validate palette\r\n      if (!layer.palette || typeof layer.palette !== \"object\") {\r\n        errors.push(`${layerContext} must have a 'palette' object`);\r\n        continue;\r\n      }\r\n\r\n      // Check for space in palette (reserved for transparent)\r\n      if (\" \" in layer.palette) {\r\n        errors.push(`${layerContext} palette should not define ' ' (space) - it is reserved for transparency`);\r\n      }\r\n\r\n      // Collect all characters used in lines\r\n      const usedChars = new Set<string>();\r\n      for (const line of layer.lines) {\r\n        if (typeof line !== \"string\") {\r\n          errors.push(`${layerContext} has non-string line: ${JSON.stringify(line)}`);\r\n          continue;\r\n        }\r\n        for (const char of line) {\r\n          if (char !== \" \") {\r\n            usedChars.add(char);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Check for missing palette entries\r\n      const missingChars: string[] = [];\r\n      for (const char of usedChars) {\r\n        if (!(char in layer.palette)) {\r\n          missingChars.push(char);\r\n        }\r\n      }\r\n      if (missingChars.length > 0) {\r\n        errors.push(`${layerContext} uses characters not in palette: \"${missingChars.join('\", \"')}\"`);\r\n      }\r\n\r\n      // Warn about unused palette entries\r\n      const paletteKeys = Object.keys(layer.palette).filter((k) => k !== \" \");\r\n      const unusedChars = paletteKeys.filter((k) => !usedChars.has(k));\r\n      if (unusedChars.length > 0) {\r\n        errors.push(`WARNING: ${layerContext} palette has unused colors: \"${unusedChars.join('\", \"')}\"`);\r\n      }\r\n\r\n      // Validate color values\r\n      for (const [char, color] of Object.entries(layer.palette)) {\r\n        if (char === \" \") continue;\r\n\r\n        if (!color || typeof color !== \"object\") {\r\n          errors.push(`${layerContext} palette entry \"${char}\" must be a color object`);\r\n          continue;\r\n        }\r\n\r\n        // Check hex or rgb values\r\n        if (!color.hex && (color.r === undefined || color.g === undefined || color.b === undefined)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" must have either 'hex' or 'r', 'g', 'b' values`);\r\n        }\r\n\r\n        // Validate RGB ranges\r\n        if (color.r !== undefined && (color.r < 0 || color.r > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'r' value (must be 0-255)`);\r\n        }\r\n        if (color.g !== undefined && (color.g < 0 || color.g > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'g' value (must be 0-255)`);\r\n        }\r\n        if (color.b !== undefined && (color.b < 0 || color.b > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'b' value (must be 0-255)`);\r\n        }\r\n        if (color.a !== undefined && (color.a < 0 || color.a > 255)) {\r\n          errors.push(`${layerContext} palette entry \"${char}\" has invalid 'a' value (must be 0-255)`);\r\n        }\r\n      }\r\n    }\r\n\r\n    return errors;\r\n  }\r\n\r\n  /**\r\n   * Validate an MCP model design and return any errors or warnings.\r\n   * Errors are blocking issues that prevent model generation.\r\n   * Warnings (prefixed with \"WARNING:\") are style suggestions for better Minecraft compatibility.\r\n   */\r\n  static validateDesign(design: IMcpModelDesign): string[] {\r\n    const errors: string[] = [];\r\n\r\n    if (!design.identifier) {\r\n      errors.push(\"Model design must have an identifier\");\r\n    }\r\n\r\n    if (!design.bones || design.bones.length === 0) {\r\n      errors.push(\"Model design must have at least one bone\");\r\n    }\r\n\r\n    for (let i = 0; i < (design.bones || []).length; i++) {\r\n      const bone = design.bones[i];\r\n      if (!bone.name) {\r\n        errors.push(`Bone at index ${i} must have a name`);\r\n      }\r\n      // Note: Empty cubes arrays are allowed - bones can serve as parent/pivot bones\r\n      // for hierarchy organization without having geometry themselves\r\n\r\n      for (let j = 0; j < (bone.cubes || []).length; j++) {\r\n        const cube = bone.cubes[j];\r\n        if (!cube.origin || cube.origin.length !== 3) {\r\n          errors.push(`Cube ${j} in bone \"${bone.name}\" must have a valid origin [x, y, z]`);\r\n        }\r\n        if (!cube.size || cube.size.length !== 3) {\r\n          errors.push(`Cube ${j} in bone \"${bone.name}\" must have a valid size [w, h, d]`);\r\n        }\r\n        if (!cube.faces) {\r\n          errors.push(`Cube ${j} in bone \"${bone.name}\" must have a faces object`);\r\n        }\r\n\r\n        // Validate texture references and check SVG style\r\n        if (cube.faces) {\r\n          for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n            const face = cube.faces[faceName];\r\n            if (face?.textureId) {\r\n              if (!design.textures) {\r\n                errors.push(\r\n                  `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\" references textureId \"${face.textureId}\" ` +\r\n                    `but no textures dictionary is defined in the model.`\r\n                );\r\n              } else if (!design.textures[face.textureId]) {\r\n                errors.push(\r\n                  `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\" references textureId \"${face.textureId}\" ` +\r\n                    `which is not defined in the textures dictionary.`\r\n                );\r\n              }\r\n            }\r\n            // Check inline SVG for non-Minecraft style elements\r\n            if (face?.svg) {\r\n              const svgWarnings = this.validateSvgStyle(\r\n                face.svg,\r\n                `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\"`\r\n              );\r\n              errors.push(...svgWarnings);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate texture definitions and check SVG style\r\n    if (design.textures) {\r\n      for (const [textureId, textureDef] of Object.entries(design.textures)) {\r\n        if (\r\n          !textureDef.svg &&\r\n          !textureDef.color &&\r\n          !textureDef.noise &&\r\n          !textureDef.background &&\r\n          !textureDef.pixelArt\r\n        ) {\r\n          errors.push(`Texture \"${textureId}\" must have either a background, noise, svg, color, or pixelArt property.`);\r\n        }\r\n        // Check texture SVG for non-Minecraft style elements\r\n        if (textureDef.svg) {\r\n          const svgWarnings = this.validateSvgStyle(textureDef.svg, `Texture \"${textureId}\"`);\r\n          errors.push(...svgWarnings);\r\n        }\r\n        // Validate pixel art\r\n        if (textureDef.pixelArt) {\r\n          const pixelArtErrors = this.validatePixelArt(textureDef.pixelArt, `Texture \"${textureId}\"`);\r\n          errors.push(...pixelArtErrors);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate inline pixelArt on faces\r\n    for (let i = 0; i < (design.bones || []).length; i++) {\r\n      const bone = design.bones[i];\r\n      for (let j = 0; j < (bone.cubes || []).length; j++) {\r\n        const cube = bone.cubes[j];\r\n        if (cube.faces) {\r\n          for (const faceName of [\"north\", \"south\", \"east\", \"west\", \"up\", \"down\"] as const) {\r\n            const face = cube.faces[faceName];\r\n            if (face?.pixelArt) {\r\n              const pixelArtErrors = this.validatePixelArt(\r\n                face.pixelArt,\r\n                `Face \"${faceName}\" on cube ${j} in bone \"${bone.name}\"`\r\n              );\r\n              errors.push(...pixelArtErrors);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate model size - warn if too small or too large for Minecraft\r\n    if (design.bones && design.bones.length > 0) {\r\n      const bounds = this.calculateModelBounds(design);\r\n      const height = bounds.maxY - bounds.minY;\r\n      const width = bounds.maxX - bounds.minX;\r\n      const depth = bounds.maxZ - bounds.minZ;\r\n\r\n      if (bounds.maxDimension < 0.5) {\r\n        errors.push(\r\n          `WARNING: Model is very small (max dimension: ${bounds.maxDimension.toFixed(2)} units). ` +\r\n            `Most Minecraft entities are 16-48 units tall (1-3 blocks). Consider scaling up for visibility.`\r\n        );\r\n      } else if (bounds.maxDimension > 800) {\r\n        errors.push(\r\n          `WARNING: Model is very large (max dimension: ${bounds.maxDimension.toFixed(2)} units, ~${(bounds.maxDimension / 16).toFixed(1)} blocks). ` +\r\n            `This exceeds Minecraft's typical entity rendering limits. Consider scaling down unless creating a mega-structure.`\r\n        );\r\n      }\r\n\r\n      // Warn about flat models that might not render well\r\n      if (height < 0.1 && (width > 1 || depth > 1)) {\r\n        errors.push(\r\n          `WARNING: Model appears very flat (height: ${height.toFixed(2)} units). ` +\r\n            `Minecraft mobs typically have 3D volume. Consider adding height.`\r\n        );\r\n      }\r\n    }\r\n\r\n    return errors;\r\n  }\r\n\r\n  /**\r\n   * Create a simple unit cube model design (for testing)\r\n   */\r\n  static createUnitCubeDesign(\r\n    identifier: string,\r\n    faceColors: {\r\n      north?: string;\r\n      south?: string;\r\n      east?: string;\r\n      west?: string;\r\n      up?: string;\r\n      down?: string;\r\n    }\r\n  ): IMcpModelDesign {\r\n    return {\r\n      formatVersion: \"1.0.0\",\r\n      identifier,\r\n      textureSize: [64, 64],\r\n      bones: [\r\n        {\r\n          name: \"body\",\r\n          pivot: [0, 0, 0],\r\n          cubes: [\r\n            {\r\n              origin: [-8, 0, -8],\r\n              size: [16, 16, 16],\r\n              faces: {\r\n                north: faceColors.north ? { color: faceColors.north } : undefined,\r\n                south: faceColors.south ? { color: faceColors.south } : undefined,\r\n                east: faceColors.east ? { color: faceColors.east } : undefined,\r\n                west: faceColors.west ? { color: faceColors.west } : undefined,\r\n                up: faceColors.up ? { color: faceColors.up } : undefined,\r\n                down: faceColors.down ? { color: faceColors.down } : undefined,\r\n              },\r\n            },\r\n          ],\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ModelDesignTemplates\r\n *\r\n * Provides starter model templates for common Minecraft entity types.\r\n * These templates use Minecraft's native coordinate system: 16 units = 1 block.\r\n * All origin, size, and pivot values are in Minecraft pixel units.\r\n *\r\n * ARCHITECTURE:\r\n * - Templates are stored as JSON files in `public/data/model_templates/`\r\n * - Use `getModelTemplateAsync()` to load templates dynamically (required)\r\n * - Templates are cached after first load for performance\r\n *\r\n * REFACTORING NOTE (2024):\r\n * Templates were moved from bundled TypeScript to external JSON files to reduce\r\n * bundle size (~4000 lines / 170KB removed). All consumers should use async loading.\r\n * The JSON files are located in `public/data/model_templates/{type}.model.json`.\r\n */\r\n\r\nimport { IMcpModelDesign } from \"./IMcpModelDesign\";\r\nimport Database from \"./Database\";\r\n\r\n/**\r\n * Available model template types. These correspond to JSON files in\r\n * `public/data/model_templates/{type}.model.json`\r\n */\r\nexport type ModelTemplateType =\r\n  | \"humanoid\"\r\n  | \"small_animal\"\r\n  | \"large_animal\"\r\n  | \"vehicle\"\r\n  | \"block\"\r\n  | \"item\"\r\n  | \"bird\"\r\n  | \"insect\"\r\n  | \"flying\"\r\n  | \"fish\"\r\n  | \"slime\"\r\n  | \"wizard\"\r\n  | \"golem\"\r\n  | \"fox\"\r\n  | \"crystal\"\r\n  | \"enchanted_sword\"\r\n  | \"tropical_fish\"\r\n  | \"ghost\"\r\n  | \"robot\"\r\n  | \"mushroom_creature\"\r\n  | \"treasure_chest\"\r\n  // Block templates\r\n  | \"stone_brick\"\r\n  | \"wooden_crate\"\r\n  | \"glowing_ore\"\r\n  | \"mossy_stone\"\r\n  | \"crystal_block\"\r\n  | \"tech_block\"\r\n  // Item templates\r\n  | \"potion_bottle\"\r\n  | \"magic_wand\"\r\n  | \"ornate_key\"\r\n  | \"gemstone\"\r\n  | \"apple\"\r\n  | \"pickaxe\";\r\n\r\n/**\r\n * List of all available template types for iteration and validation.\r\n */\r\nconst ALL_TEMPLATE_TYPES: ModelTemplateType[] = [\r\n  \"humanoid\",\r\n  \"small_animal\",\r\n  \"large_animal\",\r\n  \"vehicle\",\r\n  \"block\",\r\n  \"item\",\r\n  \"bird\",\r\n  \"insect\",\r\n  \"flying\",\r\n  \"fish\",\r\n  \"slime\",\r\n  \"wizard\",\r\n  \"golem\",\r\n  \"fox\",\r\n  \"crystal\",\r\n  \"enchanted_sword\",\r\n  \"tropical_fish\",\r\n  \"ghost\",\r\n  \"robot\",\r\n  \"mushroom_creature\",\r\n  \"treasure_chest\",\r\n  \"stone_brick\",\r\n  \"wooden_crate\",\r\n  \"glowing_ore\",\r\n  \"mossy_stone\",\r\n  \"crystal_block\",\r\n  \"tech_block\",\r\n  \"potion_bottle\",\r\n  \"magic_wand\",\r\n  \"ornate_key\",\r\n  \"gemstone\",\r\n  \"apple\",\r\n  \"pickaxe\",\r\n];\r\n\r\n/**\r\n * Runtime cache for templates loaded from JSON files.\r\n * Populated lazily as templates are requested via getModelTemplateAsync().\r\n * @internal\r\n */\r\nconst templateCache: Record<string, IMcpModelDesign> = {};\r\n\r\n/**\r\n * Get a model template by type (async, loads from JSON file)\r\n * This is the preferred method for loading templates.\r\n * Templates are cached after first load.\r\n *\r\n * @param templateType The type of template to retrieve\r\n * @returns Promise resolving to the template design, or undefined if not found\r\n */\r\nexport async function getModelTemplateAsync(templateType: ModelTemplateType): Promise<IMcpModelDesign | undefined> {\r\n  // Check cache first\r\n  if (templateCache[templateType]) {\r\n    return templateCache[templateType];\r\n  }\r\n\r\n  // Load from JSON file\r\n  const loaded = await Database.ensureModelTemplateLoaded(templateType);\r\n  if (loaded) {\r\n    // Cache for future access\r\n    templateCache[templateType] = loaded as IMcpModelDesign;\r\n    return loaded as IMcpModelDesign;\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * Get a model template by type (synchronous, uses cached templates only)\r\n * NOTE: This only returns templates that have already been loaded via getModelTemplateAsync().\r\n * For reliable access, use getModelTemplateAsync() instead.\r\n *\r\n * @deprecated Prefer getModelTemplateAsync() for reliable template access\r\n * @param templateType The type of template to retrieve\r\n * @returns The template design if cached, or undefined if not loaded yet\r\n */\r\nexport function getModelTemplate(templateType: ModelTemplateType): IMcpModelDesign | undefined {\r\n  return templateCache[templateType];\r\n}\r\n\r\n/**\r\n * Get all available template types (synchronous)\r\n * @returns Array of available template type names\r\n */\r\nexport function getAvailableTemplateTypes(): ModelTemplateType[] {\r\n  return [...ALL_TEMPLATE_TYPES];\r\n}\r\n\r\n/**\r\n * Get all available template types from JSON files (async)\r\n * This queries the actual JSON files available in the data folder.\r\n * @returns Promise resolving to array of available template type names\r\n */\r\nexport async function getAvailableTemplateTypesAsync(): Promise<string[]> {\r\n  return await Database.getModelTemplateNames();\r\n}\r\n\r\n/**\r\n * Check if a template type is valid\r\n * @param templateType The template type to check\r\n * @returns True if the template type is valid\r\n */\r\nexport function isValidTemplateType(templateType: string): templateType is ModelTemplateType {\r\n  return ALL_TEMPLATE_TYPES.includes(templateType as ModelTemplateType);\r\n}\r\n\r\n/**\r\n * Preload all templates into cache (async)\r\n * Call this once at startup if you need synchronous access to all templates later.\r\n * @returns Promise resolving when all templates are loaded\r\n */\r\nexport async function preloadAllTemplates(): Promise<void> {\r\n  const loadPromises = ALL_TEMPLATE_TYPES.map((type) => getModelTemplateAsync(type));\r\n  await Promise.all(loadPromises);\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentGenerator - Generates native Minecraft Bedrock content from meta-schema definitions.\r\n *\r\n * This module converts simplified IMinecraftContentDefinition objects into the full\r\n * set of Minecraft files (behavior pack JSONs, resource pack JSONs, textures, etc.).\r\n *\r\n * Key responsibilities:\r\n * 1. Expand traits into native components\r\n * 2. Generate placeholder textures using IMcpTexturedRectangle\r\n * 3. Create proper file structure with format_version\r\n * 4. Handle cross-references between files\r\n * 5. Generate loot tables from drops definitions\r\n *\r\n * @see IContentMetaSchema.ts for type definitions\r\n * @see ContentMetaSchemaZod.ts for validation schemas\r\n */\r\n\r\nimport {\r\n  IMinecraftContentDefinition,\r\n  IEntityTypeDefinition,\r\n  IBlockTypeDefinition,\r\n  IItemTypeDefinition,\r\n  IStructureDefinition,\r\n  IFeatureDefinition,\r\n  ILootTableDefinition,\r\n  IRecipeDefinition,\r\n  ISpawnRuleDefinition,\r\n  EntityTraitId,\r\n  BlockTraitId,\r\n  ItemTraitId,\r\n  IDropDefinition,\r\n  ISpawnConfig,\r\n  EntityBehaviorPreset,\r\n  IGenerationOptions,\r\n  ITextureSpec,\r\n  IBlockTexture,\r\n} from \"./IContentMetaSchema\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport ImageCodec from \"../core/ImageCodec\";\r\nimport PngEncoder from \"./PngEncoder\";\r\nimport { generateItemTextureFromTemplate } from \"./ItemTextureTemplates\";\r\nimport { TraitRegistry, registerAllEntityTraits, registerAllBlockTraits, registerAllItemTraits } from \"./traits\";\r\nimport ModelDesignUtilities from \"./ModelDesignUtilities\";\r\nimport TexturedRectangleGenerator from \"./TexturedRectangleGenerator\";\r\nimport { applyTextureEffects } from \"./TextureEffects\";\r\nimport { getModelTemplateAsync, ModelTemplateType } from \"./ModelDesignTemplates\";\r\nimport { IMcpModelDesign, IMcpTextureDefinition } from \"./IMcpModelDesign\";\r\n\r\n// Initialize trait registry on module load\r\nlet traitsInitialized = false;\r\nfunction ensureTraitsInitialized(): void {\r\n  if (!traitsInitialized) {\r\n    registerAllEntityTraits();\r\n    registerAllBlockTraits();\r\n    registerAllItemTraits();\r\n    traitsInitialized = true;\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// GENERATED FILE TYPES\r\n// ============================================================================\r\n\r\ninterface ILootFunction {\r\n  function: string;\r\n  count: number | { min: number; max: number };\r\n}\r\n\r\ninterface ILootCondition {\r\n  condition: string;\r\n  chance?: number;\r\n}\r\n\r\n/**\r\n * Result of content generation - all files to be created.\r\n */\r\nexport interface IGeneratedContent {\r\n  /** Manifest for behavior pack */\r\n  behaviorPackManifest?: IGeneratedFile;\r\n\r\n  /** Manifest for resource pack */\r\n  resourcePackManifest?: IGeneratedFile;\r\n\r\n  /** Entity behavior files (behavior_packs/entities/) */\r\n  entityBehaviors: IGeneratedFile[];\r\n\r\n  /** Entity resource files (resource_packs/entity/) */\r\n  entityResources: IGeneratedFile[];\r\n\r\n  /** Block behavior files */\r\n  blockBehaviors: IGeneratedFile[];\r\n\r\n  /** Block resource files */\r\n  blockResources: IGeneratedFile[];\r\n\r\n  /** Item behavior files */\r\n  itemBehaviors: IGeneratedFile[];\r\n\r\n  /** Item resource files */\r\n  itemResources: IGeneratedFile[];\r\n\r\n  /** Structure files (.mcstructure) */\r\n  structures: IGeneratedFile[];\r\n\r\n  /** Feature files */\r\n  features: IGeneratedFile[];\r\n\r\n  /** Feature rule files */\r\n  featureRules: IGeneratedFile[];\r\n\r\n  /** Loot table files */\r\n  lootTables: IGeneratedFile[];\r\n\r\n  /** Recipe files */\r\n  recipes: IGeneratedFile[];\r\n\r\n  /** Spawn rule files */\r\n  spawnRules: IGeneratedFile[];\r\n\r\n  /** Texture files (as base64 PNG) */\r\n  textures: IGeneratedFile[];\r\n\r\n  /** Geometry files */\r\n  geometries: IGeneratedFile[];\r\n\r\n  /** Render controller files */\r\n  renderControllers: IGeneratedFile[];\r\n\r\n  /** Sound definition files */\r\n  sounds: IGeneratedFile[];\r\n\r\n  /** terrain_texture.json entries */\r\n  terrainTextures?: IGeneratedFile;\r\n\r\n  /** item_texture.json entries */\r\n  itemTextures?: IGeneratedFile;\r\n\r\n  /** blocks.json resource pack catalog (singleton, should be merged across calls) */\r\n  blocksCatalog?: IGeneratedFile;\r\n\r\n  /** sound_definitions.json (singleton, should be merged across calls) */\r\n  soundDefinitions?: IGeneratedFile;\r\n\r\n  /** music_definitions.json (singleton, should be merged across calls) */\r\n  musicDefinitions?: IGeneratedFile;\r\n\r\n  /** Summary of what was generated */\r\n  summary: IGenerationSummary;\r\n}\r\n\r\n/**\r\n * A single generated file.\r\n */\r\nexport interface IGeneratedFile {\r\n  /** Relative path within the pack (e.g., \"entities/orc.json\") */\r\n  path: string;\r\n\r\n  /** Content - JSON object, string for text, or Uint8Array for binary */\r\n  content: object | string | Uint8Array;\r\n\r\n  /** Content type */\r\n  type: \"json\" | \"png\" | \"mcstructure\" | \"text\";\r\n\r\n  /** Which pack this belongs to */\r\n  pack: \"behavior\" | \"resource\" | \"world\" | \"none\";\r\n}\r\n\r\n/**\r\n * Summary of generation results.\r\n */\r\nexport interface IGenerationSummary {\r\n  namespace: string;\r\n  entityCount: number;\r\n  blockCount: number;\r\n  itemCount: number;\r\n  structureCount: number;\r\n  featureCount: number;\r\n  lootTableCount: number;\r\n  recipeCount: number;\r\n  spawnRuleCount: number;\r\n  textureCount: number;\r\n  warnings: string[];\r\n  errors: string[];\r\n}\r\n\r\n// ============================================================================\r\n// TRAIT EXPANSION\r\n// ============================================================================\r\n\r\n/**\r\n * Trait definitions - maps trait IDs to native Minecraft components.\r\n */\r\nconst ENTITY_TRAIT_COMPONENTS: Record<EntityTraitId, Record<string, any>> = {\r\n  // Body types (primarily affect geometry/animation, but also some components)\r\n  humanoid: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:jump.static\": {},\r\n  },\r\n  quadruped: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:jump.static\": {},\r\n  },\r\n  quadruped_small: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:jump.static\": {},\r\n  },\r\n  flying: {\r\n    \"minecraft:navigation.fly\": {\r\n      can_path_over_water: true,\r\n      can_path_over_lava: false,\r\n    },\r\n    \"minecraft:can_fly\": {},\r\n  },\r\n  aquatic: {\r\n    \"minecraft:navigation.swim\": {\r\n      can_path_over_water: false,\r\n      can_swim: true,\r\n    },\r\n    \"minecraft:underwater_movement\": { value: 0.3 },\r\n    \"minecraft:breathable\": {\r\n      total_supply: 15,\r\n      suffocate_time: 0,\r\n      breathes_water: true,\r\n      breathes_air: false,\r\n    },\r\n  },\r\n  arthropod: {\r\n    \"minecraft:can_climb\": {},\r\n    \"minecraft:mark_variant\": { value: 0 },\r\n  },\r\n  slime: {\r\n    \"minecraft:movement.sway\": { sway_amplitude: 0.0 },\r\n  },\r\n\r\n  // Behavior archetypes\r\n  hostile: {\r\n    \"minecraft:behavior.hurt_by_target\": { priority: 1 },\r\n    \"minecraft:behavior.nearest_attackable_target\": {\r\n      priority: 2,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"player\" } }],\r\n    },\r\n    \"minecraft:attack\": { damage: 3 },\r\n  },\r\n  passive: {\r\n    \"minecraft:behavior.panic\": {\r\n      priority: 1,\r\n      speed_multiplier: 1.25,\r\n    },\r\n  },\r\n  neutral: {\r\n    \"minecraft:behavior.hurt_by_target\": {\r\n      priority: 1,\r\n      alert_same_type: true,\r\n    },\r\n  },\r\n  boss: {\r\n    \"minecraft:boss\": {\r\n      should_darken_sky: true,\r\n      hud_range: 55,\r\n    },\r\n  },\r\n\r\n  // Combat styles\r\n  melee_attacker: {\r\n    \"minecraft:behavior.melee_attack\": {\r\n      priority: 3,\r\n      speed_multiplier: 1.2,\r\n      track_target: true,\r\n    },\r\n    \"minecraft:attack\": { damage: 3 },\r\n  },\r\n  ranged_attacker: {\r\n    \"minecraft:behavior.ranged_attack\": {\r\n      priority: 3,\r\n      attack_interval_min: 1.0,\r\n      attack_interval_max: 3.0,\r\n      attack_radius: 15.0,\r\n    },\r\n    \"minecraft:shooter\": {\r\n      def: \"minecraft:arrow\",\r\n    },\r\n  },\r\n  exploder: {\r\n    \"minecraft:explode\": {\r\n      fuse_length: 1.5,\r\n      fuse_lit: false,\r\n      power: 3,\r\n      causes_fire: false,\r\n    },\r\n  },\r\n\r\n  // Interaction\r\n  trader: {\r\n    \"minecraft:trade_table\": {},\r\n    \"minecraft:behavior.trade_with_player\": { priority: 1 },\r\n  },\r\n  tameable: {\r\n    \"minecraft:tameable\": {\r\n      probability: 0.33,\r\n      tame_items: [\"bone\"],\r\n    },\r\n    \"minecraft:is_tamed\": {},\r\n  },\r\n  rideable: {\r\n    \"minecraft:rideable\": {\r\n      seat_count: 1,\r\n      family_types: [\"player\"],\r\n      interact_text: \"action.interact.ride.horse\",\r\n      seats: [{ position: [0.0, 1.1, -0.2] }],\r\n    },\r\n    \"minecraft:input_ground_controlled\": {},\r\n  },\r\n  breedable: {\r\n    \"minecraft:breedable\": {\r\n      require_tame: false,\r\n      breed_items: [\"wheat\"],\r\n      breeds_with: { mate_type: \"self\", baby_type: \"self\" },\r\n    },\r\n    \"minecraft:behavior.breed\": { priority: 3, speed_multiplier: 1.0 },\r\n  },\r\n  leasable: {\r\n    \"minecraft:leashable\": {\r\n      soft_distance: 4.0,\r\n      hard_distance: 6.0,\r\n      max_distance: 10.0,\r\n    },\r\n  },\r\n\r\n  // Special traits\r\n  undead: {\r\n    \"minecraft:burns_in_daylight\": {},\r\n    \"minecraft:type_family\": { family: [\"undead\", \"monster\"] },\r\n  },\r\n  illager: {\r\n    \"minecraft:type_family\": { family: [\"illager\", \"monster\"] },\r\n    \"minecraft:behavior.raid_garden\": { priority: 5 },\r\n  },\r\n  aquatic_only: {\r\n    \"minecraft:breathable\": {\r\n      total_supply: 15,\r\n      suffocate_time: -1,\r\n      breathes_water: true,\r\n      breathes_air: false,\r\n      generates_bubbles: false,\r\n    },\r\n  },\r\n  baby_variant: {\r\n    \"minecraft:is_baby\": {},\r\n    \"minecraft:scale\": { value: 0.5 },\r\n    \"minecraft:ageable\": {\r\n      duration: 1200,\r\n      grow_up: { event: \"minecraft:ageable_grow_up\" },\r\n    },\r\n  },\r\n  wanders: {\r\n    \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n    \"minecraft:behavior.random_look_around\": { priority: 7 },\r\n  },\r\n  patrols: {\r\n    \"minecraft:behavior.move_to_poi\": { priority: 3, speed_multiplier: 0.6 },\r\n  },\r\n  guards: {\r\n    \"minecraft:behavior.defend_village_target\": { priority: 1 },\r\n  },\r\n  flees_daylight: {\r\n    \"minecraft:behavior.flee_sun\": { priority: 2, speed_multiplier: 1.0 },\r\n  },\r\n  teleporter: {\r\n    \"minecraft:teleport\": {\r\n      random_teleports: true,\r\n      max_random_teleport_time: 30,\r\n      random_teleport_cube: [32, 16, 32],\r\n      target_distance: 16,\r\n      target_teleport_chance: 0.05,\r\n    },\r\n  },\r\n};\r\n\r\n/**\r\n * Block trait components.\r\n */\r\nconst BLOCK_TRAIT_COMPONENTS: Record<BlockTraitId, Record<string, any>> = {\r\n  solid: {},\r\n  transparent: {\r\n    \"minecraft:material_instances\": {\r\n      \"*\": { render_method: \"blend\" },\r\n    },\r\n  },\r\n  leaves: {\r\n    \"minecraft:material_instances\": {\r\n      \"*\": { render_method: \"alpha_test\" },\r\n    },\r\n    \"minecraft:destructible_by_mining\": { seconds_to_destroy: 0.2 },\r\n  },\r\n  log: {\r\n    \"minecraft:destructible_by_mining\": { seconds_to_destroy: 2.0 },\r\n    \"minecraft:flammable\": { catch_chance_modifier: 5, destroy_chance_modifier: 5 },\r\n  },\r\n  slab: {\r\n    \"minecraft:geometry\": \"minecraft:geometry.slab\",\r\n  },\r\n  stairs: {\r\n    \"minecraft:geometry\": \"minecraft:geometry.stairs\",\r\n  },\r\n  fence: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.fence\" },\r\n  },\r\n  wall: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.wall\" },\r\n  },\r\n  door: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.door\" },\r\n    \"minecraft:on_interact\": {\r\n      event: \"toggle_open\",\r\n    },\r\n  },\r\n  trapdoor: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.trapdoor\" },\r\n    \"minecraft:on_interact\": {\r\n      event: \"toggle_open\",\r\n    },\r\n  },\r\n  workstation: {},\r\n  light_source: {\r\n    \"minecraft:light_emission\": 15,\r\n  },\r\n  gravity: {\r\n    \"minecraft:gravity\": {},\r\n  },\r\n  liquid: {\r\n    \"minecraft:material_instances\": {\r\n      \"*\": { render_method: \"blend\" },\r\n    },\r\n  },\r\n  redstone_signal: {\r\n    \"minecraft:redstone_conductivity\": {\r\n      redstone_conductor: true,\r\n      allows_wire_to_step_down: true,\r\n    },\r\n  },\r\n  redstone_receiver: {\r\n    \"minecraft:redstone_conductivity\": {\r\n      redstone_conductor: true,\r\n    },\r\n  },\r\n  button: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.button\" },\r\n  },\r\n  lever: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.lever\" },\r\n  },\r\n  pressure_plate: {\r\n    \"minecraft:geometry\": { identifier: \"minecraft:geometry.pressure_plate\" },\r\n  },\r\n  flammable: {\r\n    \"minecraft:flammable\": { catch_chance_modifier: 5, destroy_chance_modifier: 20 },\r\n  },\r\n  explosion_resistant: {\r\n    \"minecraft:destructible_by_explosion\": { explosion_resistance: 1200 },\r\n  },\r\n  slippery: {\r\n    \"minecraft:friction\": 0.1,\r\n  },\r\n};\r\n\r\n/**\r\n * Item trait components.\r\n */\r\nconst ITEM_TRAIT_COMPONENTS: Record<ItemTraitId, Record<string, any>> = {\r\n  sword: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:damage\": 4,\r\n    \"minecraft:enchantable\": { slot: \"sword\", value: 10 },\r\n  },\r\n  pickaxe: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:digger\": {\r\n      use_efficiency: true,\r\n      destroy_speeds: [{ block: { tags: \"q.any_tag('stone', 'metal')\" }, speed: 4 }],\r\n    },\r\n    \"minecraft:enchantable\": { slot: \"pickaxe\", value: 10 },\r\n  },\r\n  axe: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:digger\": {\r\n      use_efficiency: true,\r\n      destroy_speeds: [{ block: { tags: \"q.any_tag('wood', 'pumpkin')\" }, speed: 4 }],\r\n    },\r\n    \"minecraft:enchantable\": { slot: \"axe\", value: 10 },\r\n  },\r\n  shovel: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:digger\": {\r\n      use_efficiency: true,\r\n      destroy_speeds: [{ block: { tags: \"q.any_tag('dirt', 'sand', 'gravel')\" }, speed: 4 }],\r\n    },\r\n    \"minecraft:enchantable\": { slot: \"shovel\", value: 10 },\r\n  },\r\n  hoe: {\r\n    \"minecraft:hand_equipped\": true,\r\n    \"minecraft:enchantable\": { slot: \"hoe\", value: 10 },\r\n  },\r\n  bow: {\r\n    \"minecraft:use_duration\": 72000,\r\n    \"minecraft:enchantable\": { slot: \"bow\", value: 1 },\r\n  },\r\n  crossbow: {\r\n    \"minecraft:use_duration\": 72000,\r\n    \"minecraft:enchantable\": { slot: \"crossbow\", value: 1 },\r\n  },\r\n  food: {\r\n    \"minecraft:food\": {\r\n      nutrition: 4,\r\n      saturation_modifier: \"normal\",\r\n      can_always_eat: false,\r\n    },\r\n    \"minecraft:use_duration\": 32,\r\n  },\r\n  armor_helmet: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.head\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_head\", value: 10 },\r\n  },\r\n  armor_chestplate: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.chest\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_torso\", value: 10 },\r\n  },\r\n  armor_leggings: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.legs\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_legs\", value: 10 },\r\n  },\r\n  armor_boots: {\r\n    \"minecraft:wearable\": { slot: \"slot.armor.feet\" },\r\n    \"minecraft:enchantable\": { slot: \"armor_feet\", value: 10 },\r\n  },\r\n  throwable: {\r\n    \"minecraft:throwable\": {\r\n      do_swing_animation: true,\r\n      launch_power_scale: 1.0,\r\n      max_launch_power: 1.0,\r\n    },\r\n    \"minecraft:projectile\": {\r\n      projectile_entity: \"minecraft:snowball\",\r\n    },\r\n  },\r\n  placeable: {\r\n    \"minecraft:block_placer\": {\r\n      block: \"minecraft:stone\",\r\n    },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// BEHAVIOR PRESET EXPANSION\r\n// ============================================================================\r\n\r\n/**\r\n * Maps behavior presets to AI goal components.\r\n */\r\nconst BEHAVIOR_PRESET_COMPONENTS: Record<EntityBehaviorPreset, Record<string, any>> = {\r\n  // Movement\r\n  wander: {\r\n    \"minecraft:behavior.random_stroll\": { priority: 6, speed_multiplier: 1.0 },\r\n  },\r\n  swim: {\r\n    \"minecraft:behavior.random_swim\": { priority: 4, speed_multiplier: 1.0 },\r\n  },\r\n  fly_around: {\r\n    \"minecraft:behavior.random_fly\": { priority: 6, xz_dist: 4, y_dist: 2 },\r\n  },\r\n  float: {\r\n    \"minecraft:behavior.float\": { priority: 0 },\r\n  },\r\n  climb: {\r\n    \"minecraft:can_climb\": {},\r\n  },\r\n\r\n  // Combat\r\n  melee_attack: {\r\n    \"minecraft:behavior.melee_attack\": { priority: 3, speed_multiplier: 1.0 },\r\n    \"minecraft:attack\": { damage: 3 },\r\n  },\r\n  ranged_attack: {\r\n    \"minecraft:behavior.ranged_attack\": { priority: 3, attack_radius: 15.0 },\r\n  },\r\n  target_players: {\r\n    \"minecraft:behavior.nearest_attackable_target\": {\r\n      priority: 2,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"player\" } }],\r\n    },\r\n  },\r\n  target_monsters: {\r\n    \"minecraft:behavior.nearest_attackable_target\": {\r\n      priority: 2,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"monster\" } }],\r\n    },\r\n  },\r\n  flee_when_hurt: {\r\n    \"minecraft:behavior.panic\": { priority: 1, speed_multiplier: 1.25 },\r\n  },\r\n  retaliate: {\r\n    \"minecraft:behavior.hurt_by_target\": { priority: 1 },\r\n  },\r\n\r\n  // Social\r\n  follow_owner: {\r\n    \"minecraft:behavior.follow_owner\": {\r\n      priority: 4,\r\n      speed_multiplier: 1.0,\r\n      start_distance: 10,\r\n      stop_distance: 2,\r\n    },\r\n  },\r\n  follow_parent: {\r\n    \"minecraft:behavior.follow_parent\": { priority: 5, speed_multiplier: 1.0 },\r\n  },\r\n  herd: {\r\n    \"minecraft:behavior.move_towards_dwelling_restriction\": { priority: 4 },\r\n  },\r\n  avoid_players: {\r\n    \"minecraft:behavior.avoid_mob_type\": {\r\n      priority: 1,\r\n      entity_types: [{ filters: { test: \"is_family\", subject: \"other\", value: \"player\" } }],\r\n      max_dist: 10,\r\n      walk_speed_multiplier: 0.8,\r\n      sprint_speed_multiplier: 1.2,\r\n    },\r\n  },\r\n\r\n  // Interaction\r\n  look_at_player: {\r\n    \"minecraft:behavior.look_at_player\": {\r\n      priority: 7,\r\n      look_distance: 6.0,\r\n      probability: 0.02,\r\n    },\r\n  },\r\n  beg: {\r\n    \"minecraft:behavior.beg\": {\r\n      priority: 8,\r\n      look_distance: 8.0,\r\n      items: [\"bone\"],\r\n    },\r\n  },\r\n  tempt: {\r\n    \"minecraft:behavior.tempt\": {\r\n      priority: 4,\r\n      speed_multiplier: 1.0,\r\n      items: [\"wheat\"],\r\n    },\r\n  },\r\n  sit_command: {\r\n    \"minecraft:behavior.sit\": { priority: 2 },\r\n    \"minecraft:sittable\": {},\r\n  },\r\n\r\n  // Actions\r\n  eat_grass: {\r\n    \"minecraft:behavior.eat_block\": {\r\n      priority: 6,\r\n      time_until_eat: 1.8,\r\n      eat_and_replace_block_pairs: [{ eat_block: \"grass\", replace_block: \"dirt\" }],\r\n    },\r\n  },\r\n  break_doors: {\r\n    \"minecraft:behavior.break_door\": { priority: 1 },\r\n  },\r\n  open_doors: {\r\n    \"minecraft:behavior.open_door\": { priority: 6, close_door_after: true },\r\n  },\r\n  pick_up_items: {\r\n    \"minecraft:behavior.pickup_items\": { priority: 7, max_dist: 3 },\r\n  },\r\n  sleep_in_bed: {\r\n    \"minecraft:behavior.sleep\": { priority: 3, speed_multiplier: 1.2 },\r\n  },\r\n\r\n  // Environment\r\n  hide_from_sun: {\r\n    \"minecraft:behavior.flee_sun\": { priority: 2, speed_multiplier: 1.0 },\r\n  },\r\n  go_home_at_night: {\r\n    \"minecraft:behavior.go_home\": { priority: 4, speed_multiplier: 1.0, goal_radius: 1.5 },\r\n  },\r\n  seek_water: {\r\n    \"minecraft:behavior.go_and_give_items_to_noteblock\": { priority: 5 },\r\n  },\r\n  seek_land: {\r\n    \"minecraft:behavior.move_to_land\": { priority: 1, search_range: 16 },\r\n  },\r\n};\r\n\r\n// ============================================================================\r\n// MAIN GENERATOR CLASS\r\n// ============================================================================\r\n\r\n/**\r\n * Generates native Minecraft content from meta-schema definitions.\r\n */\r\nexport class ContentGenerator {\r\n  private _definition: IMinecraftContentDefinition;\r\n  private _options: IGenerationOptions;\r\n  private _namespace: string;\r\n  private _warnings: string[] = [];\r\n  private _errors: string[] = [];\r\n\r\n  /**\r\n   * Sanitizes an ID for safe use in file paths.\r\n   * Strips path separators and traversal sequences to prevent directory escape.\r\n   */\r\n  private static _sanitizeIdForPath(id: string): string {\r\n    // Remove null bytes, path separators, and traversal sequences\r\n    return id.replace(/\\0/g, \"\").replace(/\\.\\./g, \"\").replace(/[/\\\\]/g, \"_\").replace(/:/g, \"_\");\r\n  }\r\n\r\n  constructor(definition: IMinecraftContentDefinition) {\r\n    this._definition = definition;\r\n    this._options = definition.options || {};\r\n    this._namespace = definition.namespace || \"custom\";\r\n  }\r\n\r\n  // ============================================================================\r\n  // TRAIT VALIDATION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Validates trait combinations for entities, blocks, and items.\r\n   * Checks for conflicting traits and adds warnings to the result.\r\n   *\r\n   * @param result - The generation result to add warnings to\r\n   */\r\n  private _validateTraitCombinations(): void {\r\n    // Validate entity traits\r\n    if (this._definition.entityTypes) {\r\n      for (const entity of this._definition.entityTypes) {\r\n        if (entity.traits && entity.traits.length > 1) {\r\n          this._validateEntityTraits(entity.id, entity.traits);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate block traits\r\n    if (this._definition.blockTypes) {\r\n      for (const block of this._definition.blockTypes) {\r\n        if (block.traits && block.traits.length > 1) {\r\n          this._validateBlockTraits(block.id, block.traits);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Validate item traits\r\n    if (this._definition.itemTypes) {\r\n      for (const item of this._definition.itemTypes) {\r\n        if (item.traits && item.traits.length > 1) {\r\n          this._validateItemTraits(item.id, item.traits);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Validates entity trait combinations for conflicts.\r\n   */\r\n  private _validateEntityTraits(entityId: string, traits: EntityTraitId[]): void {\r\n    const traitSet = new Set(traits);\r\n\r\n    for (const traitId of traits) {\r\n      const trait = TraitRegistry.getEntityTrait(traitId);\r\n      if (trait) {\r\n        const traitData = trait.getData();\r\n\r\n        // Check for conflicts\r\n        if (traitData.conflicts) {\r\n          for (const conflictId of traitData.conflicts) {\r\n            if (traitSet.has(conflictId as EntityTraitId)) {\r\n              this._warnings.push(\r\n                `Entity '${entityId}': Trait '${traitId}' conflicts with '${conflictId}'. ` +\r\n                  `These traits may produce unexpected behavior when combined.`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check common known conflicts not defined in trait data\r\n    this._checkKnownEntityConflicts(entityId, traitSet);\r\n  }\r\n\r\n  /**\r\n   * Validates block trait combinations for conflicts.\r\n   */\r\n  private _validateBlockTraits(blockId: string, traits: BlockTraitId[]): void {\r\n    const traitSet = new Set(traits);\r\n\r\n    for (const traitId of traits) {\r\n      const trait = TraitRegistry.getBlockTrait(traitId);\r\n      if (trait) {\r\n        const traitData = trait.getData();\r\n\r\n        // Check for conflicts\r\n        if (traitData.conflicts) {\r\n          for (const conflictId of traitData.conflicts) {\r\n            if (traitSet.has(conflictId as BlockTraitId)) {\r\n              this._warnings.push(\r\n                `Block '${blockId}': Trait '${traitId}' conflicts with '${conflictId}'. ` +\r\n                  `These traits may produce unexpected behavior when combined.`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check common known conflicts\r\n    this._checkKnownBlockConflicts(blockId, traitSet);\r\n  }\r\n\r\n  /**\r\n   * Validates item trait combinations for conflicts.\r\n   */\r\n  private _validateItemTraits(itemId: string, traits: ItemTraitId[]): void {\r\n    const traitSet = new Set(traits);\r\n\r\n    for (const traitId of traits) {\r\n      const trait = TraitRegistry.getItemTrait(traitId);\r\n      if (trait) {\r\n        const traitData = trait.getData();\r\n\r\n        // Check for conflicts\r\n        if (traitData.conflicts) {\r\n          for (const conflictId of traitData.conflicts) {\r\n            if (traitSet.has(conflictId as ItemTraitId)) {\r\n              this._warnings.push(\r\n                `Item '${itemId}': Trait '${traitId}' conflicts with '${conflictId}'. ` +\r\n                  `These traits may produce unexpected behavior when combined.`\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Check common known conflicts\r\n    this._checkKnownItemConflicts(itemId, traitSet);\r\n  }\r\n\r\n  /**\r\n   * Checks for common entity trait conflicts that may not be defined in trait data.\r\n   */\r\n  private _checkKnownEntityConflicts(entityId: string, traits: Set<EntityTraitId>): void {\r\n    // Behavior conflicts: hostile, passive, neutral are mutually exclusive\r\n    const behaviorTraits = [\"hostile\", \"passive\", \"neutral\"].filter((t) => traits.has(t as EntityTraitId));\r\n    if (behaviorTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': Multiple behavior traits (${behaviorTraits.join(\", \")}) are mutually exclusive. ` +\r\n          `Only one behavior archetype should be used.`\r\n      );\r\n    }\r\n\r\n    // Body type conflicts: only one body type should be selected\r\n    const bodyTypeTraits = [\r\n      \"humanoid\",\r\n      \"quadruped\",\r\n      \"quadruped_small\",\r\n      \"flying\",\r\n      \"aquatic\",\r\n      \"arthropod\",\r\n      \"slime\",\r\n    ].filter((t) => traits.has(t as EntityTraitId));\r\n    if (bodyTypeTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': Multiple body types (${bodyTypeTraits.join(\", \")}) specified. ` +\r\n          `Only one body type should be selected.`\r\n      );\r\n    }\r\n\r\n    // aquatic and flying don't mix well\r\n    if (traits.has(\"aquatic\" as EntityTraitId) && traits.has(\"flying\" as EntityTraitId)) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': 'aquatic' and 'flying' traits may conflict. ` +\r\n          `Consider using one or the other for cleaner behavior.`\r\n      );\r\n    }\r\n\r\n    // undead with passive is unusual\r\n    if (traits.has(\"undead\" as EntityTraitId) && traits.has(\"passive\" as EntityTraitId)) {\r\n      this._warnings.push(\r\n        `Entity '${entityId}': 'undead' trait is typically used with hostile entities, not passive ones.`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks for common block trait conflicts.\r\n   */\r\n  private _checkKnownBlockConflicts(blockId: string, traits: Set<BlockTraitId>): void {\r\n    // Shape conflicts: only one shape should be selected\r\n    const shapeTraits = [\"slab\", \"stairs\", \"fence\", \"wall\", \"door\", \"trapdoor\", \"button\", \"lever\"].filter((t) =>\r\n      traits.has(t as BlockTraitId)\r\n    );\r\n    if (shapeTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Block '${blockId}': Multiple shape traits (${shapeTraits.join(\", \")}) specified. ` +\r\n          `Only one shape type should be selected.`\r\n      );\r\n    }\r\n\r\n    // transparent and solid are typically mutually exclusive\r\n    if (traits.has(\"transparent\" as BlockTraitId) && traits.has(\"solid\" as BlockTraitId)) {\r\n      this._warnings.push(\r\n        `Block '${blockId}': 'transparent' and 'solid' traits may be redundant. ` +\r\n          `Consider which visual style you want.`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Checks for common item trait conflicts.\r\n   */\r\n  private _checkKnownItemConflicts(itemId: string, traits: Set<ItemTraitId>): void {\r\n    // Tool conflicts: items should typically be one tool type\r\n    const toolTraits = [\"sword\", \"pickaxe\", \"axe\", \"shovel\", \"hoe\"].filter((t) => traits.has(t as ItemTraitId));\r\n    if (toolTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Item '${itemId}': Multiple tool traits (${toolTraits.join(\", \")}) specified. ` +\r\n          `Items are typically one tool type.`\r\n      );\r\n    }\r\n\r\n    // Armor conflicts: items should be one armor slot\r\n    const armorTraits = [\"armor_helmet\", \"armor_chestplate\", \"armor_leggings\", \"armor_boots\"].filter((t) =>\r\n      traits.has(t as ItemTraitId)\r\n    );\r\n    if (armorTraits.length > 1) {\r\n      this._warnings.push(\r\n        `Item '${itemId}': Multiple armor slot traits (${armorTraits.join(\", \")}) specified. ` +\r\n          `Items can only occupy one armor slot.`\r\n      );\r\n    }\r\n\r\n    // Food with weapon is unusual\r\n    if (traits.has(\"food\" as ItemTraitId) && toolTraits.length > 0) {\r\n      this._warnings.push(\r\n        `Item '${itemId}': 'food' trait combined with tool trait (${toolTraits.join(\", \")}). ` +\r\n          `This is unusual - consider if this is intentional.`\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate all content from the definition.\r\n   */\r\n  async generate(): Promise<IGeneratedContent> {\r\n    // Ensure trait registry is initialized\r\n    ensureTraitsInitialized();\r\n\r\n    // Validate trait combinations before generation\r\n    this._validateTraitCombinations();\r\n\r\n    const result: IGeneratedContent = {\r\n      entityBehaviors: [],\r\n      entityResources: [],\r\n      blockBehaviors: [],\r\n      blockResources: [],\r\n      itemBehaviors: [],\r\n      itemResources: [],\r\n      structures: [],\r\n      features: [],\r\n      featureRules: [],\r\n      lootTables: [],\r\n      recipes: [],\r\n      spawnRules: [],\r\n      textures: [],\r\n      geometries: [],\r\n      renderControllers: [],\r\n      sounds: [],\r\n      summary: {\r\n        namespace: this._namespace,\r\n        entityCount: 0,\r\n        blockCount: 0,\r\n        itemCount: 0,\r\n        structureCount: 0,\r\n        featureCount: 0,\r\n        lootTableCount: 0,\r\n        recipeCount: 0,\r\n        spawnRuleCount: 0,\r\n        textureCount: 0,\r\n        warnings: [],\r\n        errors: [],\r\n      },\r\n    };\r\n\r\n    // Generate manifests. Resource pack first so the behavior pack can declare\r\n    // a dependency on it \u2014 without this link, Bedrock will not load the RP at\r\n    // runtime and entities/blocks/items render invisible.\r\n    result.resourcePackManifest = this._generateResourceManifest();\r\n    const rpHeaderUuid = (result.resourcePackManifest.content as any)?.header?.uuid;\r\n    result.behaviorPackManifest = this._generateBehaviorManifest(rpHeaderUuid);\r\n\r\n    // Generate entities\r\n    if (this._definition.entityTypes) {\r\n      for (const entity of this._definition.entityTypes) {\r\n        await this._generateEntity(entity, result);\r\n      }\r\n      result.summary.entityCount = this._definition.entityTypes.length;\r\n    }\r\n\r\n    // Generate blocks\r\n    if (this._definition.blockTypes) {\r\n      for (const block of this._definition.blockTypes) {\r\n        await this._generateBlock(block, result);\r\n      }\r\n      result.summary.blockCount = this._definition.blockTypes.length;\r\n    }\r\n\r\n    // Generate items\r\n    if (this._definition.itemTypes) {\r\n      for (const item of this._definition.itemTypes) {\r\n        await this._generateItem(item, result);\r\n      }\r\n      result.summary.itemCount = this._definition.itemTypes.length;\r\n    }\r\n\r\n    // Generate loot tables\r\n    if (this._definition.lootTables) {\r\n      for (const lootTable of this._definition.lootTables) {\r\n        this._generateLootTable(lootTable, result);\r\n      }\r\n      result.summary.lootTableCount = this._definition.lootTables.length;\r\n    }\r\n\r\n    // Generate recipes\r\n    if (this._definition.recipes) {\r\n      for (const recipe of this._definition.recipes) {\r\n        this._generateRecipe(recipe, result);\r\n      }\r\n      result.summary.recipeCount = this._definition.recipes.length;\r\n    }\r\n\r\n    // Generate spawn rules\r\n    if (this._definition.spawnRules) {\r\n      for (const spawnRule of this._definition.spawnRules) {\r\n        this._generateSpawnRule(spawnRule, result);\r\n      }\r\n      result.summary.spawnRuleCount = this._definition.spawnRules.length;\r\n    }\r\n\r\n    // Generate features\r\n    if (this._definition.features) {\r\n      for (const feature of this._definition.features) {\r\n        this._generateFeature(feature, result);\r\n      }\r\n      result.summary.featureCount = this._definition.features.length;\r\n    }\r\n\r\n    // Generate structures\r\n    if (this._definition.structures) {\r\n      for (const structure of this._definition.structures) {\r\n        await this._generateStructure(structure, result);\r\n      }\r\n      result.summary.structureCount = this._definition.structures.length;\r\n    }\r\n\r\n    // Generate terrain_texture.json for blocks\r\n    if (this._definition.blockTypes && this._definition.blockTypes.length > 0) {\r\n      result.terrainTextures = this._generateTerrainTextures(this._definition.blockTypes);\r\n      result.blocksCatalog = this._generateBlocksCatalog(this._definition.blockTypes);\r\n    }\r\n\r\n    // Generate item_texture.json for items\r\n    if (this._definition.itemTypes && this._definition.itemTypes.length > 0) {\r\n      result.itemTextures = this._generateItemTextures(this._definition.itemTypes);\r\n    }\r\n\r\n    result.summary.textureCount = result.textures.length;\r\n    result.summary.warnings = this._warnings;\r\n    result.summary.errors = this._errors;\r\n\r\n    return result;\r\n  }\r\n\r\n  // ============================================================================\r\n  // MANIFEST GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateBehaviorManifest(resourcePackHeaderUuid?: string): IGeneratedFile {\r\n    const uuid1 = this._generateUuid();\r\n    const uuid2 = this._generateUuid();\r\n\r\n    const content: any = {\r\n      format_version: 2,\r\n      header: {\r\n        name: this._definition.displayName || `${this._namespace} Behavior Pack`,\r\n        description: this._definition.description || `Generated content for ${this._namespace}`,\r\n        uuid: uuid1,\r\n        version: [1, 0, 0],\r\n        min_engine_version: [1, 21, 0],\r\n      },\r\n      modules: [\r\n        {\r\n          type: \"data\",\r\n          uuid: uuid2,\r\n          version: [1, 0, 0],\r\n        },\r\n      ],\r\n    };\r\n\r\n    // BP must declare a dependency on its sibling RP, otherwise Bedrock won't\r\n    // load the RP and all entities/blocks render invisible. This was a recurring\r\n    // root-cause bug that historically required many server restarts to identify.\r\n    if (resourcePackHeaderUuid) {\r\n      content.dependencies = [\r\n        {\r\n          uuid: resourcePackHeaderUuid,\r\n          version: [1, 0, 0],\r\n        },\r\n      ];\r\n    }\r\n\r\n    return {\r\n      path: \"manifest.json\",\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content,\r\n    };\r\n  }\r\n\r\n  private _generateResourceManifest(): IGeneratedFile {\r\n    const uuid1 = this._generateUuid();\r\n    const uuid2 = this._generateUuid();\r\n\r\n    return {\r\n      path: \"manifest.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: {\r\n        format_version: 2,\r\n        header: {\r\n          name: this._definition.displayName || `${this._namespace} Resource Pack`,\r\n          description: this._definition.description || `Resources for ${this._namespace}`,\r\n          uuid: uuid1,\r\n          version: [1, 0, 0],\r\n          min_engine_version: [1, 21, 0],\r\n        },\r\n        modules: [\r\n          {\r\n            type: \"resources\",\r\n            uuid: uuid2,\r\n            version: [1, 0, 0],\r\n          },\r\n        ],\r\n      },\r\n    };\r\n  }\r\n\r\n  // ============================================================================\r\n  // ENTITY GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateEntity(entity: IEntityTypeDefinition, result: IGeneratedContent): Promise<void> {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(entity.id);\r\n    const fullId = `${this._namespace}:${entity.id}`;\r\n\r\n    // Build components from traits first\r\n    let components: Record<string, any> = {\r\n      \"minecraft:type_family\": { family: entity.families || [entity.id] },\r\n      \"minecraft:collision_box\": {\r\n        width: entity.collisionWidth || 0.6,\r\n        height: entity.collisionHeight || 1.8,\r\n      },\r\n      \"minecraft:physics\": {},\r\n      \"minecraft:pushable\": { is_pushable: true, is_pushable_by_piston: true },\r\n      \"minecraft:movement\": { value: entity.movementSpeed || 0.25 },\r\n      \"minecraft:movement.basic\": {},\r\n      \"minecraft:navigation.walk\": {\r\n        can_path_over_water: true,\r\n        avoid_damage_blocks: true,\r\n      },\r\n    };\r\n\r\n    // Collect component groups and events from traits\r\n    let componentGroups: Record<string, Record<string, any>> = {};\r\n    let events: Record<string, any> = {};\r\n    let spawnEvent: any = undefined;\r\n\r\n    // Apply traits using the new trait system\r\n    if (entity.traits) {\r\n      for (const traitId of entity.traits) {\r\n        // First try the new registry-based traits\r\n        const trait = TraitRegistry.getEntityTrait(traitId);\r\n        if (trait) {\r\n          const traitData = trait.getData({\r\n            attackDamage: entity.attackDamage,\r\n            tameItems: (entity as any).tameItems,\r\n            tameChance: (entity as any).tameChance,\r\n          });\r\n\r\n          // Merge components\r\n          if (traitData.components) {\r\n            components = { ...components, ...traitData.components };\r\n          }\r\n\r\n          // Merge component groups\r\n          if (traitData.componentGroups) {\r\n            componentGroups = { ...componentGroups, ...traitData.componentGroups };\r\n          }\r\n\r\n          // Merge events\r\n          if (traitData.events) {\r\n            events = { ...events, ...traitData.events };\r\n          }\r\n\r\n          // Collect spawn events (last one wins if multiple)\r\n          if (traitData.spawnEvent) {\r\n            if (!spawnEvent) {\r\n              spawnEvent = traitData.spawnEvent;\r\n            } else {\r\n              // Merge spawn events - combine component groups to add\r\n              if (spawnEvent.add?.component_groups && traitData.spawnEvent.add?.component_groups) {\r\n                spawnEvent.add.component_groups = [\r\n                  ...spawnEvent.add.component_groups,\r\n                  ...traitData.spawnEvent.add.component_groups,\r\n                ];\r\n              }\r\n            }\r\n          }\r\n        } else {\r\n          // Fall back to legacy ENTITY_TRAIT_COMPONENTS lookup\r\n          const traitComponents = ENTITY_TRAIT_COMPONENTS[traitId];\r\n          if (traitComponents) {\r\n            components = { ...components, ...traitComponents };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Apply behavior presets\r\n    if (entity.behaviors) {\r\n      for (const behavior of entity.behaviors) {\r\n        const behaviorComponents = BEHAVIOR_PRESET_COMPONENTS[behavior];\r\n        if (behaviorComponents) {\r\n          components = { ...components, ...behaviorComponents };\r\n        }\r\n      }\r\n    }\r\n\r\n    // Deduplicate movement controllers. Bedrock allows only ONE\r\n    // `minecraft:movement.*` component per entity; having both `movement.basic`\r\n    // (added as default above) and a trait-provided controller like\r\n    // `movement.sway` triggers a \"Mobs can only have 1 Move Control Component\"\r\n    // error at runtime. If a trait supplied a more specific movement.* the\r\n    // default basic controller must be dropped.\r\n    const movementKeys = Object.keys(components).filter((k) => k.startsWith(\"minecraft:movement.\"));\r\n    if (movementKeys.length > 1 && components[\"minecraft:movement.basic\"] !== undefined) {\r\n      delete components[\"minecraft:movement.basic\"];\r\n    }\r\n\r\n    // Apply simplified properties\r\n    if (entity.health !== undefined) {\r\n      components[\"minecraft:health\"] = { value: entity.health, max: entity.health };\r\n    }\r\n    if (entity.attackDamage !== undefined) {\r\n      components[\"minecraft:attack\"] = { damage: entity.attackDamage };\r\n    }\r\n    if (entity.followRange !== undefined) {\r\n      components[\"minecraft:follow_range\"] = { value: entity.followRange };\r\n    }\r\n    if (entity.knockbackResistance !== undefined) {\r\n      components[\"minecraft:knockback_resistance\"] = { value: entity.knockbackResistance };\r\n    }\r\n    if (entity.scale !== undefined) {\r\n      components[\"minecraft:scale\"] = { value: entity.scale };\r\n    }\r\n    // appearance.scale overrides entity.scale if both are set (documented in schema).\r\n    if (entity.appearance?.scale !== undefined) {\r\n      components[\"minecraft:scale\"] = { value: entity.appearance.scale };\r\n    }\r\n\r\n    // Apply native components (override everything)\r\n    if (entity.components) {\r\n      components = { ...components, ...entity.components };\r\n    }\r\n\r\n    // Generate behavior pack entity\r\n    const behaviorEntity: any = {\r\n      format_version: \"1.21.0\",\r\n      \"minecraft:entity\": {\r\n        description: {\r\n          identifier: fullId,\r\n          is_spawnable: true,\r\n          is_summonable: true,\r\n          is_experimental: false,\r\n        },\r\n        components,\r\n      },\r\n    };\r\n\r\n    // Merge component groups from traits with those specified directly\r\n    const mergedComponentGroups = { ...componentGroups };\r\n    if (entity.componentGroups) {\r\n      for (const [key, value] of Object.entries(entity.componentGroups)) {\r\n        mergedComponentGroups[key] = value;\r\n      }\r\n    }\r\n    if (Object.keys(mergedComponentGroups).length > 0) {\r\n      behaviorEntity[\"minecraft:entity\"].component_groups = mergedComponentGroups;\r\n    }\r\n\r\n    // Merge events from traits with those specified directly\r\n    const mergedEvents = { ...events };\r\n    if (entity.events) {\r\n      for (const [key, value] of Object.entries(entity.events)) {\r\n        mergedEvents[key] = value;\r\n      }\r\n    }\r\n    // Add spawn event if we have one\r\n    if (spawnEvent) {\r\n      mergedEvents[\"minecraft:entity_spawned\"] = spawnEvent;\r\n    }\r\n    if (Object.keys(mergedEvents).length > 0) {\r\n      behaviorEntity[\"minecraft:entity\"].events = mergedEvents;\r\n    }\r\n\r\n    result.entityBehaviors.push({\r\n      path: `entities/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: behaviorEntity,\r\n    });\r\n\r\n    // Generate resource pack entity\r\n    const resourceEntity = this._generateEntityResource(entity, fullId);\r\n    result.entityResources.push({\r\n      path: `entity/${safeId}.entity.json`,\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: resourceEntity,\r\n    });\r\n\r\n    // Try model-design-based generation for geometry + texture\r\n    const designResult = await this._generateEntityFromModelDesign(entity);\r\n    if (designResult) {\r\n      result.geometries.push({\r\n        path: `models/entity/${safeId}.geo.json`,\r\n        pack: \"resource\",\r\n        type: \"json\",\r\n        content: designResult.geometry,\r\n      });\r\n      if (designResult.texture) {\r\n        result.textures.push({\r\n          path: `textures/entity/${safeId}.png`,\r\n          pack: \"resource\",\r\n          type: \"png\",\r\n          content: designResult.texture,\r\n        });\r\n      }\r\n    } else {\r\n      // Fallback: use legacy geometry + placeholder texture\r\n      const geometry = this._generateEntityGeometry(entity);\r\n      result.geometries.push({\r\n        path: `models/entity/${safeId}.geo.json`,\r\n        pack: \"resource\",\r\n        type: \"json\",\r\n        content: geometry,\r\n      });\r\n      const texture = await this._generateEntityTexturePlaceholder(entity);\r\n      if (texture) {\r\n        result.textures.push({\r\n          path: `textures/entity/${safeId}.png`,\r\n          pack: \"resource\",\r\n          type: \"png\",\r\n          content: texture,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Generate render controller for the entity\r\n    const renderController = this._generateEntityRenderController(entity);\r\n    result.renderControllers.push({\r\n      path: `render_controllers/${safeId}.render_controllers.json`,\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: renderController,\r\n    });\r\n\r\n    // Generate loot table from drops if specified\r\n    if (entity.drops && entity.drops.length > 0) {\r\n      const lootTable = this._generateLootTableFromDrops(entity.id, entity.drops);\r\n      result.lootTables.push(lootTable);\r\n\r\n      // Update entity to reference loot table\r\n      behaviorEntity[\"minecraft:entity\"].components[\"minecraft:loot\"] = {\r\n        table: `loot_tables/entities/${entity.id}.json`,\r\n      };\r\n    }\r\n\r\n    // Generate spawn rule if specified\r\n    if (entity.spawning) {\r\n      const spawnRule = this._generateSpawnRuleFromConfig(entity.id, fullId, entity.spawning);\r\n      result.spawnRules.push(spawnRule);\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // MODEL-DESIGN-BASED ENTITY GENERATION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Maps a content meta-schema bodyType to a model template type.\r\n   */\r\n  private _bodyTypeToTemplateType(bodyType: string): ModelTemplateType {\r\n    switch (bodyType) {\r\n      case \"quadruped\":\r\n        return \"large_animal\";\r\n      case \"quadruped_small\":\r\n        return \"small_animal\";\r\n      default:\r\n        return bodyType as ModelTemplateType;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Maps an appearance.textureStyle value to the corresponding TexturedRectangleType\r\n   * used in model-design textures. Falls back to the template's existing background type\r\n   * (or 'stipple_noise') when no textureStyle is specified.\r\n   */\r\n  private _textureStyleToType(\r\n    textureStyle: \"solid\" | \"spotted\" | \"striped\" | \"gradient\" | \"organic\" | \"armored\" | undefined,\r\n    fallback: string | undefined\r\n  ): any {\r\n    if (!textureStyle) {\r\n      return fallback || \"stipple_noise\";\r\n    }\r\n    switch (textureStyle) {\r\n      case \"solid\":\r\n        return \"solid\";\r\n      case \"spotted\":\r\n        return \"stipple_noise\";\r\n      case \"striped\":\r\n        return \"dither_noise\";\r\n      case \"gradient\":\r\n        return \"gradient\";\r\n      case \"organic\":\r\n        return \"perlin_noise\";\r\n      case \"armored\":\r\n        // Stippled base + an outset lighting effect is applied by the caller.\r\n        return \"stipple_noise\";\r\n      default:\r\n        return fallback || \"stipple_noise\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Creates a recolored copy of a model design template using the user's primary/secondary colors.\r\n   * Each named texture in the template gets a distinct color derived from the user's choices,\r\n   * producing visually distinct faces that make it obvious how to customize the mob.\r\n   */\r\n  private _recolorModelDesign(\r\n    template: IMcpModelDesign,\r\n    primaryColor: string,\r\n    secondaryColor: string,\r\n    entityId: string,\r\n    textureStyle?: \"solid\" | \"spotted\" | \"striped\" | \"gradient\" | \"organic\" | \"armored\"\r\n  ): IMcpModelDesign {\r\n    const parseHex = (hex: string): { r: number; g: number; b: number } => {\r\n      const h = hex.startsWith(\"#\") ? hex.slice(1) : hex;\r\n      return {\r\n        r: parseInt(h.slice(0, 2), 16) || 128,\r\n        g: parseInt(h.slice(2, 4), 16) || 128,\r\n        b: parseInt(h.slice(4, 6), 16) || 128,\r\n      };\r\n    };\r\n\r\n    const toHex = (c: { r: number; g: number; b: number }): string => {\r\n      const cl = (v: number) => Math.max(0, Math.min(255, Math.round(v)));\r\n      return `#${cl(c.r).toString(16).padStart(2, \"0\")}${cl(c.g).toString(16).padStart(2, \"0\")}${cl(c.b).toString(16).padStart(2, \"0\")}`;\r\n    };\r\n\r\n    const primary = parseHex(primaryColor);\r\n    const secondary = parseHex(secondaryColor);\r\n\r\n    // Generate a palette of distinct colors derived from primary/secondary\r\n    const colorVariants: { r: number; g: number; b: number }[] = [\r\n      primary, // variant 0: primary as-is\r\n      secondary, // variant 1: secondary as-is\r\n      { r: Math.min(255, primary.r + 40), g: Math.max(0, primary.g - 15), b: Math.max(0, primary.b - 25) }, // variant 2: warmer/brighter\r\n      { r: Math.max(0, secondary.r - 20), g: Math.max(0, secondary.g - 20), b: Math.min(255, secondary.b + 30) }, // variant 3: cooler/darker\r\n      {\r\n        r: Math.min(255, Math.round((primary.r + secondary.r) / 2 + 30)), // variant 4: midtone lighter\r\n        g: Math.min(255, Math.round((primary.g + secondary.g) / 2 + 30)),\r\n        b: Math.min(255, Math.round((primary.b + secondary.b) / 2 + 30)),\r\n      },\r\n      {\r\n        r: Math.max(0, Math.round(primary.r * 0.6)), // variant 5: darkened primary\r\n        g: Math.max(0, Math.round(primary.g * 0.6)),\r\n        b: Math.max(0, Math.round(primary.b * 0.6)),\r\n      },\r\n    ];\r\n\r\n    // Build new textures dict with recolored versions\r\n    const newTextures: { [id: string]: IMcpTextureDefinition } = {};\r\n    const textureNames = template.textures ? Object.keys(template.textures) : [];\r\n\r\n    for (let i = 0; i < textureNames.length; i++) {\r\n      const name = textureNames[i];\r\n      const original = template.textures![name];\r\n      const variant = colorVariants[i % colorVariants.length];\r\n\r\n      // Create three color variants for noise textures (base, slightly lighter, slightly darker)\r\n      const c1 = toHex(variant);\r\n      const c2 = toHex({\r\n        r: Math.min(255, variant.r + 15),\r\n        g: Math.min(255, variant.g + 15),\r\n        b: Math.min(255, variant.b + 15),\r\n      });\r\n      const c3 = toHex({\r\n        r: Math.max(0, variant.r - 15),\r\n        g: Math.max(0, variant.g - 15),\r\n        b: Math.max(0, variant.b - 15),\r\n      });\r\n\r\n      newTextures[name] = {\r\n        background: {\r\n          type: this._textureStyleToType(textureStyle, original.background?.type),\r\n          colors: [c1, c2, c3],\r\n          seed: (original.background?.seed || 1000) + i,\r\n        },\r\n        effects:\r\n          textureStyle === \"armored\"\r\n            ? { ...(original.effects || {}), lighting: { preset: \"outset\", intensity: 0.4 } }\r\n            : original.effects,\r\n        pixelArt: original.pixelArt,\r\n      };\r\n    }\r\n\r\n    // Deep clone the design and replace textures\r\n    const cloned: IMcpModelDesign = JSON.parse(JSON.stringify(template));\r\n    cloned.textures = newTextures;\r\n    cloned.identifier = `${this._namespace}_${entityId}`;\r\n\r\n    return cloned;\r\n  }\r\n\r\n  /**\r\n   * Generates entity geometry and texture using the model design pipeline.\r\n   * Uses model templates with per-face textured rectangles for high-quality output.\r\n   * Returns null if template loading fails, in which case the caller should use legacy generation.\r\n   */\r\n  private async _generateEntityFromModelDesign(\r\n    entity: IEntityTypeDefinition\r\n  ): Promise<{ geometry: object; texture: Uint8Array | null } | null> {\r\n    const appearance = entity.appearance || {};\r\n    const bodyType = appearance.bodyType || \"humanoid\";\r\n    const primaryColor = appearance.primaryColor || \"#5B8C3E\";\r\n    const secondaryColor = appearance.secondaryColor || \"#3D6B2E\";\r\n\r\n    // Map bodyType to template type and load template\r\n    const templateType = this._bodyTypeToTemplateType(bodyType);\r\n    let template: IMcpModelDesign | undefined;\r\n\r\n    try {\r\n      template = await getModelTemplateAsync(templateType);\r\n    } catch {\r\n      // Template not available - fall back to legacy\r\n      return null;\r\n    }\r\n\r\n    if (!template) {\r\n      return null;\r\n    }\r\n\r\n    // Recolor the template with the user's colors\r\n    const design = this._recolorModelDesign(template, primaryColor, secondaryColor, entity.id, appearance.textureStyle);\r\n\r\n    // Convert model design to geometry + atlas regions\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(design);\r\n\r\n    // Override the geometry identifier to use our namespace\r\n    const geometryId = `geometry.${this._namespace}.${entity.id}`;\r\n    const geoData = conversionResult.geometry as {\r\n      \"minecraft:geometry\": { description: { identifier: string } }[];\r\n    };\r\n    if (geoData[\"minecraft:geometry\"] && geoData[\"minecraft:geometry\"][0]) {\r\n      geoData[\"minecraft:geometry\"][0].description.identifier = geometryId;\r\n    }\r\n\r\n    // Render atlas regions into a pixel buffer (same approach as ImageGenerationUtilities)\r\n    const [texWidth, texHeight] = conversionResult.textureSize;\r\n    const pixels = new Uint8Array(texWidth * texHeight * 4);\r\n\r\n    // Initialize with transparent\r\n    for (let i = 0; i < pixels.length; i += 4) {\r\n      pixels[i + 3] = 0;\r\n    }\r\n\r\n    // Render each atlas region\r\n    for (const region of conversionResult.atlasRegions) {\r\n      if (region.isDuplicate) {\r\n        continue; // Duplicate regions share UV space, already rendered\r\n      }\r\n\r\n      if (region.content.background) {\r\n        const bgPixels = TexturedRectangleGenerator.generatePixels(\r\n          region.content.background,\r\n          region.width,\r\n          region.height,\r\n          region.contextString || `region-${region.x}-${region.y}`\r\n        );\r\n\r\n        // Copy pixels to atlas\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = bgPixels[srcIdx];\r\n            pixels[dstIdx + 1] = bgPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = bgPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = bgPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      } else if (region.content.color) {\r\n        // Solid color fill\r\n        const parsed = ModelDesignUtilities.parseColor(region.content.color);\r\n        for (let y = region.y; y < region.y + region.height && y < texHeight; y++) {\r\n          for (let x = region.x; x < region.x + region.width && x < texWidth; x++) {\r\n            const idx = (y * texWidth + x) * 4;\r\n            pixels[idx] = parsed.r;\r\n            pixels[idx + 1] = parsed.g;\r\n            pixels[idx + 2] = parsed.b;\r\n            pixels[idx + 3] = parsed.a ?? 255;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Apply pixel art overlays\r\n      if (region.content.pixelArt && region.content.pixelArt.length > 0) {\r\n        const regionPixels = new Uint8Array(region.width * region.height * 4);\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            const dstIdx = (dy * region.width + dx) * 4;\r\n            regionPixels[dstIdx] = pixels[srcIdx];\r\n            regionPixels[dstIdx + 1] = pixels[srcIdx + 1];\r\n            regionPixels[dstIdx + 2] = pixels[srcIdx + 2];\r\n            regionPixels[dstIdx + 3] = pixels[srcIdx + 3];\r\n          }\r\n        }\r\n\r\n        TexturedRectangleGenerator.applyPixelArtLayers(\r\n          regionPixels,\r\n          region.width,\r\n          region.height,\r\n          region.content.pixelArt,\r\n          conversionResult.pixelsPerUnit\r\n        );\r\n\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = regionPixels[srcIdx];\r\n            pixels[dstIdx + 1] = regionPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = regionPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = regionPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      }\r\n\r\n      // Apply post-processing effects\r\n      if (region.content.effects) {\r\n        const regionPixels = new Uint8Array(region.width * region.height * 4);\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            const dstIdx = (dy * region.width + dx) * 4;\r\n            regionPixels[dstIdx] = pixels[srcIdx];\r\n            regionPixels[dstIdx + 1] = pixels[srcIdx + 1];\r\n            regionPixels[dstIdx + 2] = pixels[srcIdx + 2];\r\n            regionPixels[dstIdx + 3] = pixels[srcIdx + 3];\r\n          }\r\n        }\r\n\r\n        applyTextureEffects(regionPixels, region.width, region.height, region.content.effects);\r\n\r\n        for (let dy = 0; dy < region.height && region.y + dy < texHeight; dy++) {\r\n          for (let dx = 0; dx < region.width && region.x + dx < texWidth; dx++) {\r\n            const srcIdx = (dy * region.width + dx) * 4;\r\n            const dstIdx = ((region.y + dy) * texWidth + (region.x + dx)) * 4;\r\n            pixels[dstIdx] = regionPixels[srcIdx];\r\n            pixels[dstIdx + 1] = regionPixels[srcIdx + 1];\r\n            pixels[dstIdx + 2] = regionPixels[srcIdx + 2];\r\n            pixels[dstIdx + 3] = regionPixels[srcIdx + 3];\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Encode to PNG \u2013 try sync (Node.js), then async browser Canvas, then placeholder\r\n    let pngData = ImageCodec.encodeToPngSync(pixels, texWidth, texHeight);\r\n    if (!pngData) {\r\n      pngData = await ImageCodec.encodeToPngBrowser(pixels, texWidth, texHeight);\r\n    }\r\n    return {\r\n      geometry: conversionResult.geometry,\r\n      texture: pngData || PngEncoder.getPlaceholderTexture(\"entity\"),\r\n    };\r\n  }\r\n\r\n  private _generateEntityResource(entity: IEntityTypeDefinition, fullId: string): object {\r\n    const appearance = entity.appearance || {};\r\n    const geometryId = `geometry.${this._namespace}.${entity.id}`;\r\n    const textureId = `textures/entity/${entity.id}`;\r\n    const renderControllerId = `controller.render.${this._namespace}.${entity.id}`;\r\n\r\n    // Eye style controls the material selection. 'glowing' and 'red' use an emissive\r\n    // material so the entity glows in low light; 'normal'/'none' use the default alphatest.\r\n    const eyes = appearance.eyes;\r\n    const material = eyes === \"glowing\" || eyes === \"red\" ? \"entity_emissive\" : \"entity_alphatest\";\r\n\r\n    const description: any = {\r\n      identifier: fullId,\r\n      materials: {\r\n        default: material,\r\n      },\r\n      textures: {\r\n        default: textureId,\r\n      },\r\n      geometry: {\r\n        default: geometryId,\r\n      },\r\n      render_controllers: [renderControllerId],\r\n      spawn_egg: {\r\n        base_color: appearance.primaryColor || \"#5B8C3E\",\r\n        overlay_color: appearance.secondaryColor || \"#3D6B2E\",\r\n      },\r\n    };\r\n\r\n    // Ambient particle effects (flames, smoke, etc.). These are referenced by an\r\n    // animation/emitter controller. We emit the particle_effects map so the agent's\r\n    // chosen effects are at least declared and addressable; a full emitter controller\r\n    // can be layered on top by raw components if needed.\r\n    if (appearance.particles && appearance.particles.length > 0) {\r\n      const particleMap: { [key: string]: string } = {\r\n        flames: \"minecraft:mobflame_emitter\",\r\n        smoke: \"minecraft:mobspell_emitter\",\r\n        drip: \"minecraft:water_drip_particle\",\r\n        sparkle: \"minecraft:villager_happy\",\r\n        hearts: \"minecraft:heart_particle\",\r\n      };\r\n      const particle_effects: { [key: string]: string } = {};\r\n      for (const p of appearance.particles) {\r\n        const mapped = particleMap[p];\r\n        if (mapped) {\r\n          particle_effects[p] = mapped;\r\n        }\r\n      }\r\n      if (Object.keys(particle_effects).length > 0) {\r\n        description.particle_effects = particle_effects;\r\n      }\r\n    }\r\n\r\n    return {\r\n      format_version: \"1.10.0\",\r\n      \"minecraft:client_entity\": {\r\n        description,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate a render controller for an entity.\r\n   * This creates a simple render controller that references the entity's geometry and texture.\r\n   */\r\n  private _generateEntityRenderController(entity: IEntityTypeDefinition): object {\r\n    const renderControllerId = `controller.render.${this._namespace}.${entity.id}`;\r\n\r\n    return {\r\n      format_version: \"1.8.0\",\r\n      render_controllers: {\r\n        [renderControllerId]: {\r\n          geometry: \"Geometry.default\",\r\n          materials: [{ \"*\": \"Material.default\" }],\r\n          textures: [\"Texture.default\"],\r\n        },\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate a simple geometry for an entity based on its bodyType.\r\n   * Returns a Minecraft geometry JSON structure.\r\n   */\r\n  private _generateEntityGeometry(entity: IEntityTypeDefinition): object {\r\n    const appearance = entity.appearance || {};\r\n    const bodyType = appearance.bodyType || \"humanoid\";\r\n    const geometryId = `geometry.${this._namespace}.${entity.id}`;\r\n\r\n    // Get template geometry based on bodyType\r\n    const bones = this._getGeometryBonesForBodyType(bodyType);\r\n\r\n    return {\r\n      format_version: \"1.12.0\",\r\n      \"minecraft:geometry\": [\r\n        {\r\n          description: {\r\n            identifier: geometryId,\r\n            texture_width: 64,\r\n            texture_height: 64,\r\n            visible_bounds_width: 2,\r\n            visible_bounds_height: 2.5,\r\n            visible_bounds_offset: [0, 0.75, 0],\r\n          },\r\n          bones,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Get bone structure for different body types.\r\n   */\r\n  private _getGeometryBonesForBodyType(bodyType: string): object[] {\r\n    switch (bodyType) {\r\n      case \"humanoid\":\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 24, 0],\r\n            cubes: [{ origin: [-4, 12, -2], size: [8, 12, 4], uv: [16, 16] }],\r\n          },\r\n          {\r\n            name: \"head\",\r\n            parent: \"body\",\r\n            pivot: [0, 24, 0],\r\n            cubes: [{ origin: [-4, 24, -4], size: [8, 8, 8], uv: [0, 0] }],\r\n          },\r\n          {\r\n            name: \"left_arm\",\r\n            parent: \"body\",\r\n            pivot: [5, 22, 0],\r\n            cubes: [{ origin: [4, 12, -2], size: [4, 12, 4], uv: [40, 16] }],\r\n          },\r\n          {\r\n            name: \"right_arm\",\r\n            parent: \"body\",\r\n            pivot: [-5, 22, 0],\r\n            cubes: [{ origin: [-8, 12, -2], size: [4, 12, 4], uv: [32, 48] }],\r\n          },\r\n          {\r\n            name: \"left_leg\",\r\n            parent: \"root\",\r\n            pivot: [2, 12, 0],\r\n            cubes: [{ origin: [0, 0, -2], size: [4, 12, 4], uv: [0, 16] }],\r\n          },\r\n          {\r\n            name: \"right_leg\",\r\n            parent: \"root\",\r\n            pivot: [-2, 12, 0],\r\n            cubes: [{ origin: [-4, 0, -2], size: [4, 12, 4], uv: [16, 48] }],\r\n          },\r\n        ];\r\n\r\n      case \"quadruped\":\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 13, 0],\r\n            cubes: [{ origin: [-5, 8, -8], size: [10, 10, 16], uv: [0, 0] }],\r\n          },\r\n          {\r\n            name: \"head\",\r\n            parent: \"body\",\r\n            pivot: [0, 14, -8],\r\n            cubes: [{ origin: [-4, 10, -14], size: [8, 8, 6], uv: [0, 26] }],\r\n          },\r\n          {\r\n            name: \"leg0\",\r\n            parent: \"root\",\r\n            pivot: [-3, 8, 6],\r\n            cubes: [{ origin: [-5, 0, 4], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n          {\r\n            name: \"leg1\",\r\n            parent: \"root\",\r\n            pivot: [3, 8, 6],\r\n            cubes: [{ origin: [1, 0, 4], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n          {\r\n            name: \"leg2\",\r\n            parent: \"root\",\r\n            pivot: [-3, 8, -6],\r\n            cubes: [{ origin: [-5, 0, -8], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n          {\r\n            name: \"leg3\",\r\n            parent: \"root\",\r\n            pivot: [3, 8, -6],\r\n            cubes: [{ origin: [1, 0, -8], size: [4, 8, 4], uv: [0, 40] }],\r\n          },\r\n        ];\r\n\r\n      case \"slime\":\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 8, 0],\r\n            cubes: [{ origin: [-4, 0, -4], size: [8, 8, 8], uv: [0, 0] }],\r\n          },\r\n        ];\r\n\r\n      default:\r\n        // Simple cube for unknown types\r\n        return [\r\n          {\r\n            name: \"root\",\r\n            pivot: [0, 0, 0],\r\n          },\r\n          {\r\n            name: \"body\",\r\n            parent: \"root\",\r\n            pivot: [0, 8, 0],\r\n            cubes: [{ origin: [-4, 0, -4], size: [8, 16, 8], uv: [0, 0] }],\r\n          },\r\n        ];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate an entity placeholder texture PNG with distinct colors per body part.\r\n   * Creates a 64x64 texture where each UV region (head, body, arms, legs) gets a\r\n   * unique color derived from the entity's primary/secondary colors, with subtle\r\n   * noise for visual interest.\r\n   * Returns Uint8Array PNG data.\r\n   */\r\n  private async _generateEntityTexturePlaceholder(entity: IEntityTypeDefinition): Promise<Uint8Array> {\r\n    const appearance = entity.appearance || {};\r\n    const bodyType = appearance.bodyType || \"humanoid\";\r\n    const primaryColor = appearance.primaryColor || \"#5B8C3E\";\r\n    const secondaryColor = appearance.secondaryColor || \"#3D6B2E\";\r\n\r\n    const width = 64;\r\n    const height = 64;\r\n    const pixels = new Uint8Array(width * height * 4);\r\n\r\n    const parseHex = (hex: string): { r: number; g: number; b: number } => {\r\n      const h = hex.startsWith(\"#\") ? hex.slice(1) : hex;\r\n      return {\r\n        r: parseInt(h.slice(0, 2), 16) || 128,\r\n        g: parseInt(h.slice(2, 4), 16) || 128,\r\n        b: parseInt(h.slice(4, 6), 16) || 128,\r\n      };\r\n    };\r\n\r\n    const primary = parseHex(primaryColor);\r\n    const secondary = parseHex(secondaryColor);\r\n\r\n    // Derive a palette of distinct body-part colors from primary/secondary\r\n    const shiftColor = (\r\n      base: { r: number; g: number; b: number },\r\n      hShift: number,\r\n      brightnessShift: number\r\n    ): { r: number; g: number; b: number } => {\r\n      // Simple hue rotation and brightness adjustment\r\n      const r = Math.max(0, Math.min(255, Math.round(base.r * (1 + brightnessShift) + hShift)));\r\n      const g = Math.max(0, Math.min(255, Math.round(base.g * (1 + brightnessShift) - hShift * 0.5)));\r\n      const b = Math.max(0, Math.min(255, Math.round(base.b * (1 + brightnessShift) + hShift * 0.3)));\r\n      return { r, g, b };\r\n    };\r\n\r\n    // Body part color palette\r\n    const headColor = shiftColor(primary, 10, 0.15); // Slightly brighter\r\n    const bodyColor = primary;\r\n    const armColor = shiftColor(secondary, -5, 0.05);\r\n    const legColor = secondary;\r\n    const bellyColor = shiftColor(primary, 5, 0.25); // Lighter for undersides\r\n\r\n    // Simple seeded noise for texture variation\r\n    const noise = (x: number, y: number, seed: number): number => {\r\n      const n = Math.sin(x * 127.1 + y * 311.7 + seed * 113.5) * 43758.5453;\r\n      return n - Math.floor(n);\r\n    };\r\n\r\n    // Fill a rectangular region with a color + subtle noise\r\n    const fillRegion = (\r\n      rx: number,\r\n      ry: number,\r\n      rw: number,\r\n      rh: number,\r\n      color: { r: number; g: number; b: number },\r\n      noiseAmount: number = 12,\r\n      seed: number = 0\r\n    ) => {\r\n      for (let y = ry; y < ry + rh && y < height; y++) {\r\n        for (let x = rx; x < rx + rw && x < width; x++) {\r\n          const idx = (y * width + x) * 4;\r\n          const n = (noise(x, y, seed) - 0.5) * noiseAmount;\r\n          pixels[idx] = Math.max(0, Math.min(255, Math.round(color.r + n)));\r\n          pixels[idx + 1] = Math.max(0, Math.min(255, Math.round(color.g + n)));\r\n          pixels[idx + 2] = Math.max(0, Math.min(255, Math.round(color.b + n)));\r\n          pixels[idx + 3] = 255;\r\n        }\r\n      }\r\n    };\r\n\r\n    // Fill the entire texture with a transparent/dark base first\r\n    const bgColor = shiftColor(secondary, 0, -0.3);\r\n    fillRegion(0, 0, width, height, bgColor, 6, 99);\r\n\r\n    // Paint UV regions based on body type\r\n    if (bodyType === \"humanoid\") {\r\n      // Classic Minecraft skin UV layout (64x64)\r\n      // Head (uv 0,0): top/bottom at (8,0)-(15,7), front at (8,8)-(15,15), sides around\r\n      fillRegion(0, 0, 32, 16, headColor, 10, 1); // Head area\r\n      // Eyes region - slightly darker strip across front face of head\r\n      const eyeColor = shiftColor({ r: 20, g: 20, b: 20 }, 0, 0);\r\n      fillRegion(10, 12, 4, 2, eyeColor, 3, 50); // Simple eye dots on front face\r\n\r\n      // Body (uv 16,16): torso\r\n      fillRegion(16, 16, 24, 16, bodyColor, 10, 2);\r\n      // Lighter belly area on front face of body\r\n      fillRegion(20, 20, 8, 12, bellyColor, 8, 3);\r\n\r\n      // Left leg (uv 0,16)\r\n      fillRegion(0, 16, 16, 16, legColor, 10, 4);\r\n      // Right leg (uv 16,48)\r\n      fillRegion(16, 48, 16, 16, legColor, 10, 5);\r\n\r\n      // Left arm (uv 40,16)\r\n      fillRegion(40, 16, 16, 16, armColor, 10, 6);\r\n      // Right arm (uv 32,48)\r\n      fillRegion(32, 48, 16, 16, armColor, 10, 7);\r\n    } else if (bodyType === \"quadruped\" || bodyType === \"quadruped_small\") {\r\n      // Quadruped UV layout\r\n      // Body (uv 0,0): large body\r\n      fillRegion(0, 0, 36, 26, bodyColor, 10, 1);\r\n      // Lighter belly\r\n      fillRegion(10, 10, 10, 10, bellyColor, 8, 2);\r\n\r\n      // Head (uv 0,26)\r\n      fillRegion(0, 26, 22, 14, headColor, 10, 3);\r\n      // Snout/nose darker area\r\n      const noseColor = shiftColor(secondary, 0, -0.15);\r\n      fillRegion(6, 34, 4, 3, noseColor, 5, 40);\r\n\r\n      // Legs (uv 0,40) - all four legs share UV\r\n      fillRegion(0, 40, 16, 16, legColor, 10, 4);\r\n    } else if (bodyType === \"slime\") {\r\n      // Slime: single cube body\r\n      fillRegion(0, 0, 32, 16, bodyColor, 15, 1);\r\n      // Slight translucent/lighter center\r\n      fillRegion(8, 8, 8, 8, bellyColor, 10, 2);\r\n    } else if (bodyType === \"insect\") {\r\n      // Spider-like: body + head + legs\r\n      fillRegion(0, 0, 32, 16, bodyColor, 10, 1);\r\n      fillRegion(0, 16, 24, 12, headColor, 10, 2);\r\n      // Legs\r\n      fillRegion(24, 16, 16, 16, legColor, 10, 3);\r\n      // Eyes\r\n      const eyeColor2 = { r: 200, g: 20, b: 20 };\r\n      fillRegion(8, 22, 3, 2, eyeColor2, 5, 50);\r\n      fillRegion(14, 22, 3, 2, eyeColor2, 5, 51);\r\n    } else if (bodyType === \"flying\" || bodyType === \"bird\") {\r\n      // Flying creature\r\n      fillRegion(0, 0, 32, 16, bodyColor, 10, 1);\r\n      fillRegion(0, 16, 24, 16, headColor, 10, 2);\r\n      // Wings\r\n      const wingColor = shiftColor(primary, 15, 0.1);\r\n      fillRegion(24, 16, 24, 16, wingColor, 12, 3);\r\n      fillRegion(0, 32, 32, 16, wingColor, 12, 4);\r\n    } else if (bodyType === \"fish\") {\r\n      // Fish: body + fins\r\n      fillRegion(0, 0, 24, 16, bodyColor, 10, 1);\r\n      // Lighter belly stripe\r\n      fillRegion(6, 8, 12, 4, bellyColor, 8, 2);\r\n      // Fins\r\n      const finColor = shiftColor(primary, 20, 0.15);\r\n      fillRegion(24, 0, 16, 16, finColor, 10, 3);\r\n      fillRegion(0, 16, 20, 16, finColor, 10, 4);\r\n    } else {\r\n      // Generic fallback - paint body-sized regions in distinct colors\r\n      fillRegion(0, 0, 32, 16, headColor, 10, 1);\r\n      fillRegion(0, 16, 32, 16, bodyColor, 10, 2);\r\n      fillRegion(32, 0, 32, 32, armColor, 10, 3);\r\n      fillRegion(0, 32, 32, 32, legColor, 10, 4);\r\n      fillRegion(32, 32, 32, 32, bellyColor, 8, 5);\r\n    }\r\n\r\n    // Try runtime encoding \u2013 sync first, then async browser Canvas, fall back to pre-encoded placeholder\r\n    let encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (!encoded) {\r\n      encoded = await ImageCodec.encodeToPngBrowser(pixels, width, height);\r\n    }\r\n    return encoded || PngEncoder.getPlaceholderTexture(\"entity\");\r\n  }\r\n\r\n  /**\r\n   * Render an ITextureSpec to PNG bytes.\r\n   *\r\n   * Precedence:\r\n   *   1. If `spec` is a string or `spec.file` is set, the caller should use that file reference\r\n   *      directly \u2014 this helper returns `undefined` so no placeholder PNG is emitted.\r\n   *   2. If `spec.generate` and/or `spec.pixelArt` is set, build the PNG procedurally.\r\n   *      - `generate` controls the background (use type: \"none\" for a transparent background).\r\n   *      - `pixelArt` layers are drawn on top.\r\n   *      - `spec.effects` are applied last.\r\n   *   3. Returns `undefined` if the spec has nothing renderable.\r\n   */\r\n  private async _renderTextureSpecToPng(\r\n    spec: string | ITextureSpec | undefined,\r\n    width: number,\r\n    height: number,\r\n    contextString: string\r\n  ): Promise<Uint8Array | undefined> {\r\n    if (!spec) {\r\n      return undefined;\r\n    }\r\n\r\n    // String shorthand = file reference; caller should skip placeholder.\r\n    if (typeof spec === \"string\") {\r\n      return undefined;\r\n    }\r\n\r\n    // Explicit file reference = skip placeholder.\r\n    if (spec.file) {\r\n      return undefined;\r\n    }\r\n\r\n    const hasGenerate = !!spec.generate;\r\n    const hasPixelArt = spec.pixelArt && spec.pixelArt.length > 0;\r\n\r\n    if (!hasGenerate && !hasPixelArt && !spec.effects) {\r\n      return undefined;\r\n    }\r\n\r\n    // Build background. Default is transparent when only pixelArt is specified.\r\n    let pixels: Uint8Array;\r\n    if (hasGenerate) {\r\n      pixels = TexturedRectangleGenerator.generatePixels(spec.generate!, width, height, contextString);\r\n    } else {\r\n      pixels = new Uint8Array(width * height * 4); // transparent\r\n    }\r\n\r\n    // Overlay pixel art layers.\r\n    if (hasPixelArt) {\r\n      TexturedRectangleGenerator.applyPixelArtLayers(pixels, width, height, spec.pixelArt!);\r\n    }\r\n\r\n    // Apply post-processing effects.\r\n    if (spec.effects) {\r\n      applyTextureEffects(pixels, width, height, spec.effects);\r\n    }\r\n\r\n    // Encode. Try sync first, then async (browser).\r\n    let encoded = ImageCodec.encodeToPngSync(pixels, width, height);\r\n    if (!encoded) {\r\n      encoded = await ImageCodec.encodeToPngBrowser(pixels, width, height);\r\n    }\r\n    return encoded || undefined;\r\n  }\r\n\r\n  /**\r\n   * Pick the most representative face from an IBlockTexture to drive the single-PNG\r\n   * placeholder we currently emit per block. Preference order: all, side, up, north,\r\n   * south, east, west, down.\r\n   */\r\n  private _pickBlockFaceTexture(texture: IBlockTexture | undefined): string | ITextureSpec | undefined {\r\n    if (!texture) {\r\n      return undefined;\r\n    }\r\n    return (\r\n      texture.all ??\r\n      texture.side ??\r\n      texture.up ??\r\n      texture.north ??\r\n      texture.south ??\r\n      texture.east ??\r\n      texture.west ??\r\n      texture.down\r\n    );\r\n  }\r\n\r\n  // ============================================================================\r\n  // BLOCK GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateBlock(block: IBlockTypeDefinition, result: IGeneratedContent): Promise<void> {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(block.id);\r\n    const fullId = `${this._namespace}:${block.id}`;\r\n\r\n    let components: Record<string, any> = {};\r\n    let properties: Record<string, any[]> = {};\r\n    let permutations: any[] = [];\r\n    let blockEvents: Record<string, any> = {};\r\n    let minecraftTraits: Record<string, any> = {};\r\n\r\n    // Apply traits using the new trait system\r\n    if (block.traits) {\r\n      for (const traitId of block.traits) {\r\n        // First try the new registry-based traits\r\n        const trait = TraitRegistry.getBlockTrait(traitId);\r\n        if (trait) {\r\n          const traitData = trait.getData({\r\n            hardness: block.destroyTime,\r\n            lightLevel: block.lightEmission,\r\n          });\r\n\r\n          // Merge components\r\n          if (traitData.components) {\r\n            components = { ...components, ...traitData.components };\r\n          }\r\n\r\n          // Merge properties\r\n          if (traitData.properties) {\r\n            properties = { ...properties, ...traitData.properties };\r\n          }\r\n\r\n          // Merge permutations\r\n          if (traitData.permutations) {\r\n            permutations = [...permutations, ...traitData.permutations];\r\n          }\r\n\r\n          // Merge events\r\n          if (traitData.events) {\r\n            blockEvents = { ...blockEvents, ...traitData.events };\r\n          }\r\n\r\n          // Merge Minecraft-native traits (e.g., minecraft:placement_position, minecraft:connection)\r\n          if (traitData.minecraftTraits) {\r\n            minecraftTraits = { ...minecraftTraits, ...traitData.minecraftTraits };\r\n          }\r\n\r\n          // Add geometry files to resource pack\r\n          if (traitData.geometryFiles) {\r\n            for (const geoFile of traitData.geometryFiles) {\r\n              result.geometries.push({\r\n                path: geoFile.path,\r\n                pack: \"resource\",\r\n                type: \"json\",\r\n                content: geoFile.content,\r\n              });\r\n            }\r\n          }\r\n        } else {\r\n          // Fall back to legacy BLOCK_TRAIT_COMPONENTS lookup\r\n          const traitComponents = BLOCK_TRAIT_COMPONENTS[traitId];\r\n          if (traitComponents) {\r\n            components = { ...components, ...traitComponents };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Apply simplified properties\r\n    if (block.destroyTime !== undefined) {\r\n      components[\"minecraft:destructible_by_mining\"] = { seconds_to_destroy: block.destroyTime };\r\n    }\r\n    if (block.explosionResistance !== undefined) {\r\n      components[\"minecraft:destructible_by_explosion\"] = { explosion_resistance: block.explosionResistance };\r\n    }\r\n    if (block.friction !== undefined) {\r\n      components[\"minecraft:friction\"] = block.friction;\r\n    }\r\n    if (block.lightEmission !== undefined) {\r\n      components[\"minecraft:light_emission\"] = block.lightEmission;\r\n    }\r\n    if (block.lightDampening !== undefined) {\r\n      components[\"minecraft:light_dampening\"] = block.lightDampening;\r\n    }\r\n    if (block.mapColor !== undefined) {\r\n      components[\"minecraft:map_color\"] = block.mapColor;\r\n    }\r\n\r\n    // Flammability\r\n    if (block.flammable) {\r\n      if (typeof block.flammable === \"boolean\") {\r\n        components[\"minecraft:flammable\"] = { catch_chance_modifier: 5, destroy_chance_modifier: 20 };\r\n      } else {\r\n        components[\"minecraft:flammable\"] = {\r\n          catch_chance_modifier: Math.floor(block.flammable.catchChance * 100),\r\n          destroy_chance_modifier: Math.floor(block.flammable.destroyChance * 100),\r\n        };\r\n      }\r\n    }\r\n\r\n    // Add geometry for blocks that don't already have one (solid cubes need minecraft:geometry.full_block)\r\n    if (!components[\"minecraft:geometry\"]) {\r\n      components[\"minecraft:geometry\"] = \"minecraft:geometry.full_block\";\r\n    }\r\n\r\n    // Add material_instances to reference our generated texture\r\n    const textureKey = `${this._namespace}_${block.id}`;\r\n    if (!components[\"minecraft:material_instances\"]) {\r\n      components[\"minecraft:material_instances\"] = {\r\n        \"*\": {\r\n          texture: textureKey,\r\n          render_method: \"opaque\",\r\n        },\r\n      };\r\n    }\r\n\r\n    // Apply native components\r\n    if (block.components) {\r\n      components = { ...components, ...block.components };\r\n    }\r\n\r\n    // Use 1.26.0 if connection trait is used (requires that version), otherwise 1.21.40\r\n    const blockFormatVersion = minecraftTraits[\"minecraft:connection\"] ? \"1.26.0\" : \"1.21.40\";\r\n\r\n    const behaviorBlock: any = {\r\n      format_version: blockFormatVersion,\r\n      \"minecraft:block\": {\r\n        description: {\r\n          identifier: fullId,\r\n          menu_category: {\r\n            category: \"construction\",\r\n          },\r\n        },\r\n        components,\r\n      },\r\n    };\r\n\r\n    // Merge properties/states from traits with those specified directly\r\n    const mergedProperties = { ...properties };\r\n    if (block.states) {\r\n      for (const [key, value] of Object.entries(block.states)) {\r\n        mergedProperties[key] = value;\r\n      }\r\n    }\r\n    if (Object.keys(mergedProperties).length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].description.states = mergedProperties;\r\n    }\r\n\r\n    // Add Minecraft-native traits to description\r\n    if (Object.keys(minecraftTraits).length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].description.traits = minecraftTraits;\r\n    }\r\n\r\n    // Merge permutations from traits with those specified directly\r\n    const mergedPermutations = [...permutations];\r\n    if (block.permutations) {\r\n      mergedPermutations.push(...block.permutations);\r\n    }\r\n    if (mergedPermutations.length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].permutations = mergedPermutations;\r\n    }\r\n\r\n    // Add events if we have any from traits\r\n    if (Object.keys(blockEvents).length > 0) {\r\n      behaviorBlock[\"minecraft:block\"].events = blockEvents;\r\n    }\r\n\r\n    result.blockBehaviors.push({\r\n      path: `blocks/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: behaviorBlock,\r\n    });\r\n\r\n    // Generate placeholder texture for the block\r\n    const texture = await this._generateBlockTexturePlaceholder(block);\r\n    if (texture) {\r\n      result.textures.push({\r\n        path: `textures/blocks/${safeId}.png`,\r\n        pack: \"resource\",\r\n        type: \"png\",\r\n        content: texture,\r\n      });\r\n    }\r\n\r\n    // Generate loot table from drops\r\n    if (block.drops && block.drops.length > 0) {\r\n      const lootTable = this._generateLootTableFromDrops(block.id, block.drops, \"blocks\");\r\n      result.lootTables.push(lootTable);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a placeholder texture for a block.\r\n   *\r\n   * Precedence:\r\n   *   1. `block.texture` (ITextureSpec) \u2014 rendered via _renderTextureSpecToPng.\r\n   *   2. `block.mapColor` \u2014 checkerboard fallback.\r\n   *\r\n   * Returns undefined if block.texture is a string/file reference (no placeholder needed).\r\n   */\r\n  private async _generateBlockTexturePlaceholder(block: IBlockTypeDefinition): Promise<Uint8Array | undefined> {\r\n    // 1. Honor block.texture if it specifies inline generate/pixelArt content.\r\n    const faceSpec = this._pickBlockFaceTexture(block.texture);\r\n    if (faceSpec) {\r\n      const rendered = await this._renderTextureSpecToPng(faceSpec, 16, 16, `block-${block.id}`);\r\n      if (rendered) {\r\n        return rendered;\r\n      }\r\n      // String or { file: ... } means \"use an existing file\" \u2014 don't emit a placeholder.\r\n      if (typeof faceSpec === \"string\" || faceSpec.file) {\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    // 2. Fallback: checkerboard from mapColor.\r\n    const primaryColor = block.mapColor || \"#808080\";\r\n    const secondaryColor = this._darkenColor(primaryColor, 0.15);\r\n\r\n    const custom = await PngEncoder.createCheckerboardPngAsync(16, 16, primaryColor, secondaryColor, 4);\r\n    return custom || PngEncoder.getPlaceholderTexture(\"block\");\r\n  }\r\n\r\n  /**\r\n   * Darken a hex color by a percentage.\r\n   */\r\n  private _darkenColor(hex: string, percent: number): string {\r\n    // Parse hex color\r\n    let r = parseInt(hex.slice(1, 3), 16);\r\n    let g = parseInt(hex.slice(3, 5), 16);\r\n    let b = parseInt(hex.slice(5, 7), 16);\r\n\r\n    // Darken\r\n    r = Math.max(0, Math.floor(r * (1 - percent)));\r\n    g = Math.max(0, Math.floor(g * (1 - percent)));\r\n    b = Math.max(0, Math.floor(b * (1 - percent)));\r\n\r\n    // Convert back to hex\r\n    return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\r\n  }\r\n\r\n  // ============================================================================\r\n  // ITEM GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateItem(item: IItemTypeDefinition, result: IGeneratedContent): Promise<void> {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(item.id);\r\n    const fullId = `${this._namespace}:${item.id}`;\r\n\r\n    let components: Record<string, any> = {};\r\n    let itemEvents: Record<string, any> = {};\r\n    let attachableData: any = undefined;\r\n\r\n    // Apply traits using the new trait system\r\n    if (item.traits) {\r\n      for (const traitId of item.traits) {\r\n        // First try the new registry-based traits\r\n        const trait = TraitRegistry.getItemTrait(traitId);\r\n        if (trait) {\r\n          const traitData = trait.getData({\r\n            damage: item.weapon?.damage,\r\n            durability: item.durability,\r\n            protection: item.armor?.defense,\r\n            nutrition: item.food?.nutrition,\r\n            saturation: item.food?.saturation,\r\n          });\r\n\r\n          // Merge components\r\n          if (traitData.components) {\r\n            components = { ...components, ...traitData.components };\r\n          }\r\n\r\n          // Merge events\r\n          if (traitData.events) {\r\n            itemEvents = { ...itemEvents, ...traitData.events };\r\n          }\r\n\r\n          // Collect attachable data\r\n          if (traitData.attachable && !attachableData) {\r\n            attachableData = traitData.attachable;\r\n          }\r\n        } else {\r\n          // Fall back to legacy ITEM_TRAIT_COMPONENTS lookup\r\n          const traitComponents = ITEM_TRAIT_COMPONENTS[traitId];\r\n          if (traitComponents) {\r\n            components = { ...components, ...traitComponents };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Apply simplified properties\r\n    if (item.maxStackSize !== undefined) {\r\n      components[\"minecraft:max_stack_size\"] = item.maxStackSize;\r\n    }\r\n    if (item.durability !== undefined) {\r\n      components[\"minecraft:durability\"] = { max_durability: item.durability };\r\n    }\r\n    if (item.glint) {\r\n      components[\"minecraft:glint\"] = true;\r\n    }\r\n    if (item.fuel !== undefined) {\r\n      components[\"minecraft:fuel\"] = { duration: item.fuel / 20 }; // Convert ticks to seconds\r\n    }\r\n\r\n    // Food properties\r\n    if (item.food) {\r\n      components[\"minecraft:food\"] = {\r\n        nutrition: item.food.nutrition,\r\n        saturation_modifier: item.food.saturation !== undefined ? \"custom\" : \"normal\",\r\n        can_always_eat: item.food.canAlwaysEat || false,\r\n      };\r\n      if (item.food.effects) {\r\n        components[\"minecraft:food\"].effects = item.food.effects.map((e) => ({\r\n          name: e.name,\r\n          duration: e.duration,\r\n          amplifier: e.amplifier || 0,\r\n          chance: e.chance || 1.0,\r\n        }));\r\n      }\r\n    }\r\n\r\n    // Weapon properties\r\n    if (item.weapon) {\r\n      components[\"minecraft:damage\"] = item.weapon.damage;\r\n      if (item.weapon.durability) {\r\n        components[\"minecraft:durability\"] = { max_durability: item.weapon.durability };\r\n      }\r\n    }\r\n\r\n    // Armor properties\r\n    if (item.armor) {\r\n      const slotMap: Record<string, string> = {\r\n        helmet: \"slot.armor.head\",\r\n        chestplate: \"slot.armor.chest\",\r\n        leggings: \"slot.armor.legs\",\r\n        boots: \"slot.armor.feet\",\r\n      };\r\n      components[\"minecraft:wearable\"] = {\r\n        slot: slotMap[item.armor.slot] || \"slot.armor.chest\",\r\n      };\r\n      components[\"minecraft:armor\"] = { protection: item.armor.defense };\r\n      components[\"minecraft:durability\"] = { max_durability: item.armor.durability };\r\n    }\r\n\r\n    // Tool properties\r\n    if (item.tool) {\r\n      components[\"minecraft:durability\"] = { max_durability: item.tool.durability };\r\n    }\r\n\r\n    // Projectile properties (bow/crossbow-style chargeable shooters, or throwables like snowballs).\r\n    if (item.projectile) {\r\n      const projectileEntityId = item.projectile.projectile.includes(\":\")\r\n        ? item.projectile.projectile\r\n        : `minecraft:${item.projectile.projectile}`;\r\n      const launchPower = item.projectile.launchPower ?? 1.0;\r\n\r\n      if (item.projectile.chargeable) {\r\n        // Bow/crossbow: charge-while-held + release-to-shoot.\r\n        components[\"minecraft:shooter\"] = {\r\n          projectiles: [\r\n            {\r\n              projectile: projectileEntityId,\r\n              launch_power_scale: launchPower,\r\n            },\r\n          ],\r\n        };\r\n        components[\"minecraft:chargeable\"] = { movement_modifier: 0.5 };\r\n        components[\"minecraft:use_modifiers\"] = { use_duration: 999999, movement_modifier: 0.5 };\r\n      } else {\r\n        // Throwable (snowball/egg style): single-use, no charge.\r\n        components[\"minecraft:throwable\"] = {\r\n          do_swing_animation: true,\r\n          launch_power_scale: launchPower,\r\n          max_draw_duration: 0,\r\n          max_launch_power: launchPower,\r\n          min_draw_duration: 0,\r\n          scale_power_by_draw_duration: false,\r\n        };\r\n        components[\"minecraft:projectile\"] = {\r\n          projectile_entity: projectileEntityId,\r\n        };\r\n      }\r\n    }\r\n\r\n    // Add icon component using string shorthand (1.21.70+ format)\r\n    const textureKey = `${this._namespace}:${item.id}`;\r\n    if (!components[\"minecraft:icon\"]) {\r\n      components[\"minecraft:icon\"] = textureKey;\r\n    }\r\n\r\n    // Apply native components\r\n    if (item.components) {\r\n      components = { ...components, ...item.components };\r\n    }\r\n\r\n    const behaviorItem: any = {\r\n      format_version: \"1.21.70\",\r\n      \"minecraft:item\": {\r\n        description: {\r\n          identifier: fullId,\r\n          menu_category: {\r\n            category: item.category || \"items\",\r\n          },\r\n        },\r\n        components,\r\n      },\r\n    };\r\n\r\n    result.itemBehaviors.push({\r\n      path: `items/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: behaviorItem,\r\n    });\r\n\r\n    // Generate placeholder texture for the item\r\n    const texture = await this._generateItemTexturePlaceholder(item);\r\n    if (texture) {\r\n      result.textures.push({\r\n        path: `textures/items/${safeId}.png`,\r\n        pack: \"resource\",\r\n        type: \"png\",\r\n        content: texture,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate a placeholder texture for an item.\r\n   *\r\n   * Precedence:\r\n   *   1. `item.icon` (ITextureSpec) \u2014 rendered via _renderTextureSpecToPng. If it's a\r\n   *      string/file reference, no placeholder is emitted (caller should skip).\r\n   *   2. `item.traits` \u2014 shaped template (sword/pickaxe/etc.) recolored with item.color.\r\n   *   3. Fallback \u2014 checkerboard with item.color.\r\n   */\r\n  private async _generateItemTexturePlaceholder(item: IItemTypeDefinition): Promise<Uint8Array | undefined> {\r\n    // 1. Honor item.icon if it specifies inline generate/pixelArt content.\r\n    if (item.icon !== undefined) {\r\n      const rendered = await this._renderTextureSpecToPng(item.icon, 16, 16, `item-${item.id}`);\r\n      if (rendered) {\r\n        return rendered;\r\n      }\r\n      // String or { file: ... } means \"use an existing file\" \u2014 don't emit a placeholder.\r\n      if (typeof item.icon === \"string\" || item.icon.file) {\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    const color = item.color || \"#808080\";\r\n\r\n    // 2. Try template-based generation (shaped icons recolored to user's color).\r\n    if (item.traits) {\r\n      const templateTexture = await generateItemTextureFromTemplate(item.traits, color);\r\n      if (templateTexture) {\r\n        return templateTexture;\r\n      }\r\n    }\r\n\r\n    // 3. Fallback: checkerboard with the user's color.\r\n    const secondaryColor = this._darkenColor(color, 0.2);\r\n    const custom = await PngEncoder.createCheckerboardPngAsync(16, 16, color, secondaryColor, 4);\r\n    return custom || PngEncoder.getPlaceholderTexture(\"item\");\r\n  }\r\n\r\n  /**\r\n   * Generate terrain_texture.json content for all blocks.\r\n   */\r\n  private _generateTerrainTextures(blocks: IBlockTypeDefinition[]): IGeneratedFile {\r\n    const textureData: Record<string, { textures: string }> = {};\r\n\r\n    for (const block of blocks) {\r\n      const textureKey = `${this._namespace}_${block.id}`;\r\n      textureData[textureKey] = {\r\n        textures: `textures/blocks/${block.id}`,\r\n      };\r\n    }\r\n\r\n    return {\r\n      path: \"textures/terrain_texture.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: {\r\n        resource_pack_name: this._namespace,\r\n        texture_name: \"atlas.terrain\",\r\n        padding: 8,\r\n        num_mip_levels: 4,\r\n        texture_data: textureData,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate item_texture.json content for all items.\r\n   */\r\n  private _generateItemTextures(items: IItemTypeDefinition[]): IGeneratedFile {\r\n    const textureData: Record<string, { textures: string }> = {};\r\n\r\n    for (const item of items) {\r\n      const textureKey = `${this._namespace}:${item.id}`;\r\n      textureData[textureKey] = {\r\n        textures: `textures/items/${item.id}`,\r\n      };\r\n    }\r\n\r\n    return {\r\n      path: \"textures/item_texture.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: {\r\n        resource_pack_name: this._namespace,\r\n        texture_name: \"atlas.items\",\r\n        texture_data: textureData,\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Generate blocks.json catalog for the resource pack.\r\n   * This maps block identifiers to their texture and sound references.\r\n   */\r\n  private _generateBlocksCatalog(blocks: IBlockTypeDefinition[]): IGeneratedFile {\r\n    const blockEntries: Record<string, any> = {};\r\n\r\n    for (const block of blocks) {\r\n      const fullId = `${this._namespace}:${block.id}`;\r\n      const textureKey = `${this._namespace}_${block.id}`;\r\n      const entry: any = {\r\n        textures: textureKey,\r\n      };\r\n\r\n      if (block.sounds) {\r\n        entry.sound = block.sounds;\r\n      }\r\n\r\n      blockEntries[fullId] = entry;\r\n    }\r\n\r\n    return {\r\n      path: \"blocks.json\",\r\n      pack: \"resource\",\r\n      type: \"json\",\r\n      content: blockEntries,\r\n    };\r\n  }\r\n\r\n  // ============================================================================\r\n  // LOOT TABLE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateLootTable(lootTable: ILootTableDefinition, result: IGeneratedContent): void {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(lootTable.id);\r\n    const nativeLootTable: any = {\r\n      pools: lootTable.pools.map((pool) => ({\r\n        rolls: pool.rolls,\r\n        entries: pool.entries.map((entry) => ({\r\n          type: \"item\",\r\n          name: entry.item.includes(\":\") ? entry.item : `minecraft:${entry.item}`,\r\n          weight: entry.weight || 1,\r\n          functions: this._buildLootFunctions(entry),\r\n        })),\r\n        conditions: pool.conditions?.map((c) => this._buildLootCondition(c)),\r\n      })),\r\n    };\r\n\r\n    result.lootTables.push({\r\n      path: `loot_tables/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeLootTable,\r\n    });\r\n  }\r\n\r\n  private _generateLootTableFromDrops(\r\n    id: string,\r\n    drops: IDropDefinition[],\r\n    folder: string = \"entities\"\r\n  ): IGeneratedFile {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(id);\r\n    const safeFolder = ContentGenerator._sanitizeIdForPath(folder);\r\n    const entries = drops.map((drop) => ({\r\n      type: \"item\",\r\n      name: drop.item.includes(\":\") ? drop.item : `minecraft:${drop.item}`,\r\n      weight: 1,\r\n      functions: this._buildLootFunctions({\r\n        count: drop.count,\r\n        lootingBonus: drop.lootingBonus,\r\n      }),\r\n    }));\r\n\r\n    return {\r\n      path: `loot_tables/${safeFolder}/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: {\r\n        pools: [\r\n          {\r\n            rolls: 1,\r\n            entries,\r\n          },\r\n        ],\r\n      },\r\n    };\r\n  }\r\n\r\n  private _buildLootFunctions(entry: {\r\n    count?: number | { min: number; max: number };\r\n    lootingBonus?: number;\r\n  }): ILootFunction[] | undefined {\r\n    const functions: ILootFunction[] = [];\r\n\r\n    if (entry.count) {\r\n      if (typeof entry.count === \"number\") {\r\n        functions.push({ function: \"set_count\", count: entry.count });\r\n      } else {\r\n        functions.push({\r\n          function: \"set_count\",\r\n          count: { min: entry.count.min, max: entry.count.max },\r\n        });\r\n      }\r\n    }\r\n\r\n    if (entry.lootingBonus) {\r\n      functions.push({\r\n        function: \"looting_enchant\",\r\n        count: { min: 0, max: entry.lootingBonus },\r\n      });\r\n    }\r\n\r\n    return functions.length > 0 ? functions : undefined;\r\n  }\r\n\r\n  private _buildLootCondition(condition: { type: string; chance?: number }): ILootCondition {\r\n    switch (condition.type) {\r\n      case \"killed_by_player\":\r\n        return { condition: \"killed_by_player\" };\r\n      case \"random_chance\":\r\n        return { condition: \"random_chance\", chance: condition.chance };\r\n      default:\r\n        return { condition: condition.type };\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // RECIPE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateRecipe(recipe: IRecipeDefinition, result: IGeneratedContent): void {\r\n    let nativeRecipe: any;\r\n\r\n    const resultItem =\r\n      typeof recipe.result === \"string\"\r\n        ? { item: recipe.result, count: 1 }\r\n        : { item: recipe.result.item, count: recipe.result.count };\r\n\r\n    switch (recipe.type) {\r\n      case \"shaped\":\r\n        nativeRecipe = {\r\n          format_version: \"1.21.0\",\r\n          \"minecraft:recipe_shaped\": {\r\n            description: { identifier: `${this._namespace}:${recipe.id}` },\r\n            tags: [\"crafting_table\"],\r\n            pattern: recipe.pattern,\r\n            key: Object.fromEntries(\r\n              Object.entries(recipe.key || {}).map(([k, v]) => [k, { item: v.includes(\":\") ? v : `minecraft:${v}` }])\r\n            ),\r\n            result: {\r\n              item: resultItem.item.includes(\":\") ? resultItem.item : `${this._namespace}:${resultItem.item}`,\r\n              count: resultItem.count,\r\n            },\r\n          },\r\n        };\r\n        break;\r\n\r\n      case \"shapeless\":\r\n        nativeRecipe = {\r\n          format_version: \"1.21.0\",\r\n          \"minecraft:recipe_shapeless\": {\r\n            description: { identifier: `${this._namespace}:${recipe.id}` },\r\n            tags: [\"crafting_table\"],\r\n            ingredients: (recipe.ingredients || []).map((i) => ({\r\n              item: i.includes(\":\") ? i : `minecraft:${i}`,\r\n            })),\r\n            result: {\r\n              item: resultItem.item.includes(\":\") ? resultItem.item : `${this._namespace}:${resultItem.item}`,\r\n              count: resultItem.count,\r\n            },\r\n          },\r\n        };\r\n        break;\r\n\r\n      case \"furnace\":\r\n        nativeRecipe = {\r\n          format_version: \"1.21.0\",\r\n          \"minecraft:recipe_furnace\": {\r\n            description: { identifier: `${this._namespace}:${recipe.id}` },\r\n            tags: [\"furnace\"],\r\n            input: recipe.input?.includes(\":\") ? recipe.input : `minecraft:${recipe.input}`,\r\n            output: resultItem.item.includes(\":\") ? resultItem.item : `${this._namespace}:${resultItem.item}`,\r\n          },\r\n        };\r\n        break;\r\n\r\n      default:\r\n        this._warnings.push(`Unsupported recipe type: ${recipe.type}`);\r\n        return;\r\n    }\r\n\r\n    result.recipes.push({\r\n      path: `recipes/${ContentGenerator._sanitizeIdForPath(recipe.id)}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeRecipe,\r\n    });\r\n  }\r\n\r\n  // ============================================================================\r\n  // SPAWN RULE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateSpawnRule(spawnRule: ISpawnRuleDefinition, result: IGeneratedContent): void {\r\n    const entityId = spawnRule.entity.includes(\":\") ? spawnRule.entity : `${this._namespace}:${spawnRule.entity}`;\r\n\r\n    const nativeSpawnRule: any = {\r\n      format_version: \"1.8.0\",\r\n      \"minecraft:spawn_rules\": {\r\n        description: {\r\n          identifier: entityId,\r\n          population_control: \"animal\",\r\n        },\r\n        conditions: [this._buildSpawnConditions(spawnRule)],\r\n      },\r\n    };\r\n\r\n    result.spawnRules.push({\r\n      path: `spawn_rules/${ContentGenerator._sanitizeIdForPath(spawnRule.entity.replace(\":\", \"_\"))}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeSpawnRule,\r\n    });\r\n  }\r\n\r\n  private _generateSpawnRuleFromConfig(id: string, fullId: string, config: ISpawnConfig): IGeneratedFile {\r\n    const nativeSpawnRule: any = {\r\n      format_version: \"1.8.0\",\r\n      \"minecraft:spawn_rules\": {\r\n        description: {\r\n          identifier: fullId,\r\n          population_control: \"animal\",\r\n        },\r\n        conditions: [this._buildSpawnConditions(config as any)],\r\n      },\r\n    };\r\n\r\n    return {\r\n      path: `spawn_rules/${ContentGenerator._sanitizeIdForPath(id)}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: nativeSpawnRule,\r\n    };\r\n  }\r\n\r\n  private _buildSpawnConditions(config: ISpawnRuleDefinition | ISpawnConfig): any {\r\n    const conditions: any = {\r\n      \"minecraft:spawns_on_surface\": {},\r\n      \"minecraft:weight\": { default: (config as any).weight || 10 },\r\n    };\r\n\r\n    if ((config as any).biomes) {\r\n      conditions[\"minecraft:biome_filter\"] = {\r\n        any_of: (config as any).biomes.map((b: string) => ({\r\n          test: \"has_biome_tag\",\r\n          value: b,\r\n        })),\r\n      };\r\n    }\r\n\r\n    if ((config as any).groupSize) {\r\n      conditions[\"minecraft:herd\"] = {\r\n        min_size: (config as any).groupSize.min,\r\n        max_size: (config as any).groupSize.max,\r\n      };\r\n    }\r\n\r\n    if ((config as any).lightLevel) {\r\n      conditions[\"minecraft:brightness_filter\"] = {\r\n        min: (config as any).lightLevel.min || 0,\r\n        max: (config as any).lightLevel.max || 15,\r\n        adjust_for_weather: true,\r\n      };\r\n    }\r\n\r\n    if ((config as any).heightRange) {\r\n      conditions[\"minecraft:height_filter\"] = {\r\n        min: (config as any).heightRange.min,\r\n        max: (config as any).heightRange.max,\r\n      };\r\n    }\r\n\r\n    return conditions;\r\n  }\r\n\r\n  // ============================================================================\r\n  // FEATURE GENERATION\r\n  // ============================================================================\r\n\r\n  private _generateFeature(feature: IFeatureDefinition, result: IGeneratedContent): void {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(feature.id);\r\n    if (feature.spread) {\r\n      // Generate from spread definition\r\n      this._generateFeatureFromSpread(feature, result);\r\n    } else if (feature.nativeFeature) {\r\n      // Use native feature directly\r\n      result.features.push({\r\n        path: `features/${safeId}.json`,\r\n        pack: \"behavior\",\r\n        type: \"json\",\r\n        content: feature.nativeFeature,\r\n      });\r\n\r\n      if (feature.nativeFeatureRule) {\r\n        result.featureRules.push({\r\n          path: `feature_rules/${safeId}.json`,\r\n          pack: \"behavior\",\r\n          type: \"json\",\r\n          content: feature.nativeFeatureRule,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  private _generateFeatureFromSpread(feature: IFeatureDefinition, result: IGeneratedContent): void {\r\n    const safeId = ContentGenerator._sanitizeIdForPath(feature.id);\r\n    const spread = feature.spread!;\r\n    const featureId = `${this._namespace}:${feature.id}`;\r\n\r\n    // Create scatter feature for placement\r\n    const scatterFeature: any = {\r\n      format_version: \"1.13.0\",\r\n      \"minecraft:scatter_feature\": {\r\n        description: { identifier: featureId },\r\n        iterations: typeof spread.count === \"number\" ? spread.count : spread.count?.max || 1,\r\n        scatter_chance: spread.rarity ? { numerator: 1, denominator: spread.rarity } : 100.0,\r\n        x: { distribution: \"uniform\", extent: [0, 16] },\r\n        z: { distribution: \"uniform\", extent: [0, 16] },\r\n        y: this._buildHeightPlacement(spread.heightPlacement),\r\n        places_feature: `${this._namespace}:${feature.id}_placed`,\r\n      },\r\n    };\r\n\r\n    result.features.push({\r\n      path: `features/${safeId}_scatter.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: scatterFeature,\r\n    });\r\n\r\n    // Create the actual placement feature(s)\r\n    for (const placement of spread.places) {\r\n      if (placement.type === \"ore\") {\r\n        const oreFeature: any = {\r\n          format_version: \"1.13.0\",\r\n          \"minecraft:ore_feature\": {\r\n            description: { identifier: `${this._namespace}:${feature.id}_placed` },\r\n            count: typeof placement.count === \"number\" ? placement.count : placement.count?.max || 8,\r\n            replace_rules: [\r\n              {\r\n                places_block: placement.id.includes(\":\") ? placement.id : `${this._namespace}:${placement.id}`,\r\n                may_replace: (placement.replacesBlocks || [\"stone\"]).map((b) =>\r\n                  b.includes(\":\") ? b : `minecraft:${b}`\r\n                ),\r\n              },\r\n            ],\r\n          },\r\n        };\r\n\r\n        result.features.push({\r\n          path: `features/${safeId}_placed.json`,\r\n          pack: \"behavior\",\r\n          type: \"json\",\r\n          content: oreFeature,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Create feature rule\r\n    const featureRule: any = {\r\n      format_version: \"1.13.0\",\r\n      \"minecraft:feature_rules\": {\r\n        description: { identifier: `${this._namespace}:${feature.id}_rule`, places_feature: featureId },\r\n        conditions: {\r\n          placement_pass: \"underground_pass\",\r\n          \"minecraft:biome_filter\": spread.biomes\r\n            ? { any_of: spread.biomes.map((b) => ({ test: \"has_biome_tag\", value: b })) }\r\n            : { test: \"has_biome_tag\", value: \"overworld\" },\r\n        },\r\n        distribution: {\r\n          iterations: 1,\r\n          x: 0,\r\n          y: 0,\r\n          z: 0,\r\n        },\r\n      },\r\n    };\r\n\r\n    result.featureRules.push({\r\n      path: `feature_rules/${safeId}.json`,\r\n      pack: \"behavior\",\r\n      type: \"json\",\r\n      content: featureRule,\r\n    });\r\n  }\r\n\r\n  private _buildHeightPlacement(placement?: { type: string; y?: number; min?: number; max?: number }): any {\r\n    if (!placement) {\r\n      return { distribution: \"uniform\", extent: [0, 64] };\r\n    }\r\n\r\n    switch (placement.type) {\r\n      case \"fixed\":\r\n        return placement.y || 64;\r\n      case \"surface\":\r\n        return \"q.heightmap(v.worldx, v.worldz)\";\r\n      case \"underground\":\r\n        return { distribution: \"uniform\", extent: [placement.min || 0, placement.max || 64] };\r\n      case \"range\":\r\n        return { distribution: \"uniform\", extent: [placement.min || 0, placement.max || 256] };\r\n      default:\r\n        return { distribution: \"uniform\", extent: [0, 64] };\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // STRUCTURE GENERATION\r\n  // ============================================================================\r\n\r\n  private async _generateStructure(structure: IStructureDefinition, result: IGeneratedContent): Promise<void> {\r\n    // For now, just track structure references\r\n    // Full .mcstructure generation would use StructureUtilities\r\n    if (structure.type === \"simple\" && structure.blocks) {\r\n      this._warnings.push(`Structure ${structure.id}: Inline block generation not yet implemented`);\r\n    }\r\n\r\n    if (structure.type === \"jigsaw\" && structure.jigsaw) {\r\n      this._warnings.push(`Structure ${structure.id}: Jigsaw generation not yet implemented`);\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // UTILITY METHODS\r\n  // ============================================================================\r\n\r\n  private _generateUuid(): string {\r\n    return CreatorToolsHost.generateUuid();\r\n  }\r\n}\r\n\r\n// ============================================================================\r\n// CONVENIENCE FUNCTION\r\n// ============================================================================\r\n\r\n/**\r\n * Generate Minecraft content from a meta-schema definition.\r\n */\r\nexport async function generateContent(definition: IMinecraftContentDefinition): Promise<IGeneratedContent> {\r\n  const generator = new ContentGenerator(definition);\r\n  return generator.generate();\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ContentWriter - Writes IGeneratedContent files to a Minecraft project's packs.\r\n *\r\n * Shared utility used by both the web Content Wizard (ProjectAddButton) and the\r\n * CLI \"add\" command. Extracts the file-writing logic so it doesn't live in a\r\n * React component.\r\n *\r\n * Key behavior:\r\n * - Writes behavior pack files (entities, blocks, items, loot tables, recipes, spawn rules)\r\n * - Writes resource pack files (entity resources, geometries, textures, render controllers)\r\n * - Deep-merges singleton JSON files (terrain_texture.json, item_texture.json, blocks.json,\r\n *   sound_definitions.json, music_definitions.json) so that multiple generation passes\r\n *   accumulate entries rather than overwriting previous content\r\n * - Skips regular files that already exist (prevents accidental overwrites)\r\n *\r\n * @see ContentGenerator.ts for generating IGeneratedContent\r\n * @see ProjectAddButton.tsx for web UI integration\r\n * @see AddCommand.ts for CLI integration\r\n */\r\n\r\nimport type IFolder from \"../storage/IFolder\";\r\nimport type { IGeneratedContent, IGeneratedFile } from \"./ContentGenerator\";\r\nimport type Project from \"../app/Project\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\n/**\r\n * Extract the filename from a relative path like \"entities/orc.json\" \u2192 \"orc.json\".\r\n */\r\nfunction getFilename(filePath: string): string {\r\n  const parts = filePath.split(\"/\");\r\n  return parts[parts.length - 1];\r\n}\r\n\r\n/**\r\n * Serialize a generated file's content to a string or Uint8Array suitable for writing.\r\n */\r\nfunction serializeContent(generatedFile: IGeneratedFile): string | Uint8Array {\r\n  if (generatedFile.content instanceof Uint8Array) {\r\n    return generatedFile.content;\r\n  }\r\n  if (typeof generatedFile.content === \"string\") {\r\n    return generatedFile.content;\r\n  }\r\n  return JSON.stringify(generatedFile.content, null, 2);\r\n}\r\n\r\n/**\r\n * Write a list of generated files to a specific subfolder within a pack folder.\r\n */\r\nfunction writeFilesToSubfolder(packFolder: IFolder, subfolderName: string, files: IGeneratedFile[]): void {\r\n  if (files.length === 0) return;\r\n  const subfolder = packFolder.ensureFolder(subfolderName);\r\n  for (const file of files) {\r\n    StorageUtilities.writeFileIfNew(subfolder, getFilename(file.path), serializeContent(file));\r\n  }\r\n}\r\n\r\n/**\r\n * Write a singleton JSON file (terrain_texture.json, item_texture.json, blocks.json, etc.)\r\n * by deep-merging with any existing content so that previously-added entries are preserved.\r\n */\r\nfunction writeSingletonJsonMerging(folder: IFolder, fileName: string, newContent: object): void {\r\n  const file = folder.ensureFile(fileName);\r\n\r\n  if (file.isContentLoaded || folder.fileExists(fileName)) {\r\n    const existing = StorageUtilities.getJsonObject(file);\r\n    if (existing && typeof existing === \"object\") {\r\n      const merged = StorageUtilities.deepMergeJsonObjects(existing, newContent);\r\n      file.setContent(JSON.stringify(merged, null, 2));\r\n      return;\r\n    }\r\n  }\r\n\r\n  file.setContent(JSON.stringify(newContent, null, 2));\r\n}\r\n\r\nexport class ContentWriter {\r\n  /**\r\n   * Write all generated content files to a project's behavior pack and resource pack folders.\r\n   *\r\n   * @param project The project to write content into.\r\n   * @param content The generated content from ContentGenerator.generate().\r\n   */\r\n  static async writeGeneratedContent(project: Project, content: IGeneratedContent): Promise<void> {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    // === Behavior Pack ===\r\n    if (bpFolder) {\r\n      writeFilesToSubfolder(bpFolder, \"entities\", content.entityBehaviors);\r\n      writeFilesToSubfolder(bpFolder, \"blocks\", content.blockBehaviors);\r\n      writeFilesToSubfolder(bpFolder, \"items\", content.itemBehaviors);\r\n      writeFilesToSubfolder(bpFolder, \"loot_tables\", content.lootTables);\r\n      writeFilesToSubfolder(bpFolder, \"recipes\", content.recipes);\r\n      writeFilesToSubfolder(bpFolder, \"spawn_rules\", content.spawnRules);\r\n    }\r\n\r\n    // === Resource Pack ===\r\n    if (rpFolder) {\r\n      writeFilesToSubfolder(rpFolder, \"entity\", content.entityResources);\r\n\r\n      // Render controllers\r\n      writeFilesToSubfolder(rpFolder, \"render_controllers\", content.renderControllers);\r\n\r\n      // Geometries \u2014 determine subfolder from path (e.g., \"models/blocks/slab.geo.json\" \u2192 \"blocks\")\r\n      for (const geometryFile of content.geometries) {\r\n        const pathParts = geometryFile.path.split(\"/\");\r\n        const subfolderName = pathParts.length >= 2 ? pathParts[pathParts.length - 2] : \"entity\";\r\n        const modelsFolder = rpFolder.ensureFolder(\"models\");\r\n        const subFolder = modelsFolder.ensureFolder(subfolderName);\r\n        StorageUtilities.writeFileIfNew(subFolder, getFilename(geometryFile.path), serializeContent(geometryFile));\r\n      }\r\n\r\n      // Textures \u2014 determine subfolder from path and handle binary content\r\n      for (const textureFile of content.textures) {\r\n        const pathParts = textureFile.path.split(\"/\");\r\n        const subfolderName = pathParts.length >= 2 ? pathParts[pathParts.length - 2] : \"entity\";\r\n\r\n        const texturesFolder = rpFolder.ensureFolder(\"textures\");\r\n        const subFolder = texturesFolder.ensureFolder(subfolderName);\r\n        const fileName = getFilename(textureFile.path);\r\n\r\n        if (subFolder.fileExists(fileName)) {\r\n          Log.debug(`Skipping texture \"${fileName}\" \u2014 file already exists`);\r\n          continue;\r\n        }\r\n\r\n        const file = subFolder.ensureFile(fileName);\r\n        if (textureFile.content instanceof Uint8Array) {\r\n          file.setContent(textureFile.content);\r\n        } else if (Array.isArray(textureFile.content)) {\r\n          file.setContent(new Uint8Array(textureFile.content as number[]));\r\n        } else if (typeof textureFile.content === \"string\") {\r\n          file.setContent(textureFile.content);\r\n        } else {\r\n          Log.debug(`WARNING: Texture content is object, will serialize as JSON`);\r\n          file.setContent(JSON.stringify(textureFile.content, null, 2));\r\n        }\r\n      }\r\n\r\n      // terrain_texture.json \u2014 block texture atlas (merge with existing)\r\n      if (content.terrainTextures) {\r\n        const texturesFolder = rpFolder.ensureFolder(\"textures\");\r\n        writeSingletonJsonMerging(texturesFolder, \"terrain_texture.json\", content.terrainTextures.content as object);\r\n      }\r\n\r\n      // item_texture.json \u2014 item texture atlas (merge with existing)\r\n      if (content.itemTextures) {\r\n        const texturesFolder = rpFolder.ensureFolder(\"textures\");\r\n        writeSingletonJsonMerging(texturesFolder, \"item_texture.json\", content.itemTextures.content as object);\r\n      }\r\n\r\n      // blocks.json \u2014 block resource catalog (merge with existing)\r\n      if (content.blocksCatalog) {\r\n        writeSingletonJsonMerging(\r\n          rpFolder,\r\n          getFilename(content.blocksCatalog.path),\r\n          content.blocksCatalog.content as object\r\n        );\r\n      }\r\n\r\n      // sound_definitions.json (merge with existing)\r\n      if (content.soundDefinitions) {\r\n        writeSingletonJsonMerging(\r\n          rpFolder,\r\n          getFilename(content.soundDefinitions.path),\r\n          content.soundDefinitions.content as object\r\n        );\r\n      }\r\n\r\n      // music_definitions.json (merge with existing)\r\n      if (content.musicDefinitions) {\r\n        writeSingletonJsonMerging(\r\n          rpFolder,\r\n          getFilename(content.musicDefinitions.path),\r\n          content.musicDefinitions.content as object\r\n        );\r\n      }\r\n\r\n      // Additional sounds (singleton files that should be merged)\r\n      for (const soundFile of content.sounds) {\r\n        const pathParts = soundFile.path.split(\"/\");\r\n        const targetFolder = pathParts.length >= 2 ? rpFolder.ensureFolder(pathParts.slice(0, -1).join(\"/\")) : rpFolder;\r\n        writeSingletonJsonMerging(targetFolder, getFilename(soundFile.path), soundFile.content as object);\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * AddCommand - Add content to a Minecraft project\r\n *\r\n * This ToolCommand provides content addition capabilities across all surfaces.\r\n *\r\n * Two modes of operation:\r\n * 1. **Gallery mode** (default): Adds from pre-built gallery templates.\r\n *    Example: `/add entity my_mob`\r\n * 2. **Wizard mode**: Uses ContentGenerator to procedurally create content from\r\n *    traits and properties \u2014 the same engine powering the web Content Wizard.\r\n *    Activated when `--traits` or any wizard flag is provided.\r\n *    Example: `/add entity my_orc --traits hostile,melee_attacker,humanoid --health 30`\r\n *\r\n * @see ContentGenerator.ts for the procedural generation engine\r\n * @see ContentWriter.ts for writing generated files to a project\r\n * @see ContentWizard.tsx for the web UI equivalent\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport {\r\n  contentTypeProvider,\r\n  createGalleryItemProvider,\r\n  allTraitsProvider,\r\n  CONTENT_TYPE_TO_GALLERY,\r\n  ENTITY_TRAITS,\r\n  BLOCK_TRAITS,\r\n  ITEM_TRAITS,\r\n} from \"../AutocompleteProviders\";\r\nimport ProjectItemCreateManager from \"../../ProjectItemCreateManager\";\r\nimport { ProjectFocus } from \"../../IProjectData\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport type {\r\n  IMinecraftContentDefinition,\r\n  EntityTraitId,\r\n  BlockTraitId,\r\n  ItemTraitId,\r\n} from \"../../../minecraft/IContentMetaSchema\";\r\n\r\n// ============================================================================\r\n// CONSTANTS\r\n// ============================================================================\r\n\r\n/** Content types that support wizard-mode generation (traits + properties). */\r\nconst WIZARD_CONTENT_TYPES = [\"entity\", \"block\", \"item\"];\r\n\r\n/** Entity body-type trait IDs (exclusive \u2014 at most one). */\r\nconst ENTITY_BODY_TYPES = [\"humanoid\", \"quadruped\", \"quadruped_small\", \"flying\", \"aquatic\", \"arthropod\", \"slime\"];\r\n\r\n/**\r\n * Maps content type names to their preferred ProjectItemType for template matching.\r\n */\r\nconst CONTENT_TYPE_TO_ITEM_TYPE: Record<string, ProjectItemType> = {\r\n  spawn_rule: ProjectItemType.spawnRuleBehavior,\r\n  loot_table: ProjectItemType.lootTableBehavior,\r\n  trade_table: ProjectItemType.tradingBehaviorJson,\r\n};\r\n\r\n// ============================================================================\r\n// AUTOCOMPLETE PROVIDERS FOR WIZARD FLAGS\r\n// ============================================================================\r\n\r\nconst bodyTypeProvider = (partial: string) => {\r\n  const lower = partial.toLowerCase();\r\n  return ENTITY_BODY_TYPES.filter((t) => t.startsWith(lower));\r\n};\r\n\r\n// ============================================================================\r\n// VALIDATION\r\n// ============================================================================\r\n\r\ninterface IValidationError {\r\n  flag: string;\r\n  message: string;\r\n}\r\n\r\n/**\r\n * Validate wizard flag values and return any errors.\r\n */\r\n/** Union of all possible flag value types from the command parser. */\r\nexport type WizardFlagValue = string | boolean | number | string[];\r\n\r\nexport function validateWizardFlags(contentType: string, flags: Record<string, WizardFlagValue>): IValidationError[] {\r\n  const errors: IValidationError[] = [];\r\n  const lowerType = contentType.toLowerCase();\r\n\r\n  const checkRange = (name: string, min: number, max: number) => {\r\n    const val = flags[name];\r\n    if (val !== undefined) {\r\n      const n = Number(val);\r\n      if (isNaN(n) || n < min || n > max) {\r\n        errors.push({ flag: name, message: `--${name} must be between ${min} and ${max} (got ${val})` });\r\n      }\r\n    }\r\n  };\r\n\r\n  const checkColor = (name: string) => {\r\n    const val = flags[name] as string | undefined;\r\n    if (val !== undefined && !/^#[0-9a-fA-F]{6}$/.test(val)) {\r\n      errors.push({ flag: name, message: `--${name} must be a hex color like #FF0000 (got ${val})` });\r\n    }\r\n  };\r\n\r\n  // Type-specific validation ranges\r\n  if (lowerType === \"entity\") {\r\n    checkRange(\"health\", 1, 100);\r\n    checkRange(\"damage\", 0, 20);\r\n    checkRange(\"speed\", 0.1, 1.0);\r\n  } else if (lowerType === \"block\") {\r\n    checkRange(\"destroy-time\", 0, 10);\r\n    checkRange(\"light-emission\", 0, 15);\r\n  } else if (lowerType === \"item\") {\r\n    checkRange(\"max-stack\", 1, 64);\r\n    checkRange(\"durability\", 0, 2000);\r\n  }\r\n\r\n  checkColor(\"color\");\r\n  checkColor(\"secondary-color\");\r\n\r\n  // Validate traits belong to the correct content type\r\n  const traits = flags.traits as string[] | undefined;\r\n  if (traits && traits.length > 0) {\r\n    let validTraits: string[];\r\n    switch (lowerType) {\r\n      case \"entity\":\r\n        validTraits = ENTITY_TRAITS;\r\n        break;\r\n      case \"block\":\r\n        validTraits = BLOCK_TRAITS;\r\n        break;\r\n      case \"item\":\r\n        validTraits = ITEM_TRAITS;\r\n        break;\r\n      default:\r\n        validTraits = [];\r\n    }\r\n    for (const trait of traits) {\r\n      if (!validTraits.includes(trait)) {\r\n        errors.push({ flag: \"traits\", message: `Trait \"${trait}\" is not valid for ${contentType} type` });\r\n      }\r\n    }\r\n\r\n    // Check body-type exclusivity for entities\r\n    if (lowerType === \"entity\") {\r\n      const bodyTraits = traits.filter((t) => ENTITY_BODY_TYPES.includes(t));\r\n      if (bodyTraits.length > 1) {\r\n        errors.push({\r\n          flag: \"traits\",\r\n          message: `Only one body type trait allowed, got: ${bodyTraits.join(\", \")}`,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  return errors;\r\n}\r\n\r\n// ============================================================================\r\n// DEFINITION BUILDER\r\n// ============================================================================\r\n\r\n/** Flags specific to wizard mode that trigger the content generator path. */\r\nconst WIZARD_FLAG_NAMES = [\r\n  \"health\",\r\n  \"damage\",\r\n  \"speed\",\r\n  \"body-type\",\r\n  \"color\",\r\n  \"secondary-color\",\r\n  \"destroy-time\",\r\n  \"light-emission\",\r\n  \"max-stack\",\r\n  \"durability\",\r\n  \"display-name\",\r\n  \"namespace\",\r\n];\r\n\r\n/**\r\n * Determine whether wizard-mode generation should be used instead of gallery mode.\r\n * Returns true if traits or any wizard-specific flag is provided.\r\n */\r\nexport function shouldUseWizardMode(\r\n  contentType: string,\r\n  traits: string[] | undefined,\r\n  flags: Record<string, WizardFlagValue>\r\n): boolean {\r\n  if (!WIZARD_CONTENT_TYPES.includes(contentType.toLowerCase())) {\r\n    return false;\r\n  }\r\n  if (traits && traits.length > 0) {\r\n    return true;\r\n  }\r\n  return WIZARD_FLAG_NAMES.some((name) => flags[name] !== undefined);\r\n}\r\n\r\n/**\r\n * Build an IMinecraftContentDefinition from CLI args and flags.\r\n * Mirrors the _buildDefinition() logic in ContentWizard.tsx.\r\n */\r\nexport function buildDefinitionFromFlags(\r\n  contentType: string,\r\n  name: string,\r\n  traits: string[] | undefined,\r\n  flags: Record<string, WizardFlagValue>\r\n): IMinecraftContentDefinition {\r\n  const namespace = (flags.namespace as string) || \"custom\";\r\n  const displayName =\r\n    (flags[\"display-name\"] as string) || name.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n\r\n  const definition: IMinecraftContentDefinition = {\r\n    schemaVersion: \"1.0.0\",\r\n    namespace,\r\n  };\r\n\r\n  const lowerType = contentType.toLowerCase();\r\n\r\n  if (lowerType === \"entity\") {\r\n    let entityTraits = [...(traits || [])] as EntityTraitId[];\r\n\r\n    // If --body-type flag is provided, ensure it's the only body type in the traits list\r\n    const bodyType = flags[\"body-type\"] as string | undefined;\r\n    if (bodyType) {\r\n      // Remove any existing body type traits (flag takes priority)\r\n      entityTraits = entityTraits.filter((t) => !ENTITY_BODY_TYPES.includes(t)) as EntityTraitId[];\r\n      if (!entityTraits.includes(bodyType as EntityTraitId)) {\r\n        entityTraits.push(bodyType as EntityTraitId);\r\n      }\r\n    }\r\n\r\n    definition.entityTypes = [\r\n      {\r\n        id: name,\r\n        displayName,\r\n        traits: entityTraits.length > 0 ? entityTraits : undefined,\r\n        health: flags.health !== undefined ? Number(flags.health) : 20,\r\n        attackDamage: flags.damage !== undefined ? Number(flags.damage) : 3,\r\n        movementSpeed: flags.speed !== undefined ? Number(flags.speed) : 0.25,\r\n        appearance: {\r\n          bodyType: bodyType || (entityTraits.find((t) => ENTITY_BODY_TYPES.includes(t)) as any) || \"humanoid\",\r\n          primaryColor: (flags.color as string) || \"#4A7BA5\",\r\n          secondaryColor: (flags[\"secondary-color\"] as string) || \"#2D4F6B\",\r\n        },\r\n      },\r\n    ];\r\n  } else if (lowerType === \"block\") {\r\n    definition.blockTypes = [\r\n      {\r\n        id: name,\r\n        displayName,\r\n        traits: traits && traits.length > 0 ? (traits as BlockTraitId[]) : undefined,\r\n        destroyTime: flags[\"destroy-time\"] !== undefined ? Number(flags[\"destroy-time\"]) : 3,\r\n        lightEmission: flags[\"light-emission\"] !== undefined ? Number(flags[\"light-emission\"]) : 0,\r\n        mapColor: (flags.color as string) || undefined,\r\n      },\r\n    ];\r\n  } else if (lowerType === \"item\") {\r\n    const itemTraits = (traits || []).filter((t) => t !== \"custom\") as ItemTraitId[];\r\n\r\n    definition.itemTypes = [\r\n      {\r\n        id: name,\r\n        displayName,\r\n        traits: itemTraits.length > 0 ? itemTraits : undefined,\r\n        maxStackSize: flags[\"max-stack\"] !== undefined ? Number(flags[\"max-stack\"]) : 64,\r\n        durability: flags.durability !== undefined ? Number(flags.durability) : undefined,\r\n        color: (flags.color as string) || undefined,\r\n      },\r\n    ];\r\n  }\r\n\r\n  return definition;\r\n}\r\n\r\n// ============================================================================\r\n// ADD COMMAND\r\n// ============================================================================\r\n\r\nexport class AddCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"add\",\r\n    description: \"Add new content to the current project\",\r\n    aliases: [\"a\"],\r\n    category: \"Content\",\r\n    arguments: [\r\n      {\r\n        name: \"type\",\r\n        description: \"Type of content to add (entity, block, item, script, etc.) or gallery template ID\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: contentTypeProvider,\r\n      },\r\n      {\r\n        name: \"name\",\r\n        description: \"Name for the new content item\",\r\n        type: \"identifier\",\r\n        required: true,\r\n      },\r\n    ],\r\n    flags: [\r\n      // --- Shared flags ---\r\n      {\r\n        name: \"traits\",\r\n        shortName: \"t\",\r\n        description: \"Comma-separated list of traits to apply (e.g., hostile,melee_attacker)\",\r\n        type: \"stringArray\",\r\n        autocompleteProvider: allTraitsProvider,\r\n      },\r\n      {\r\n        name: \"template\",\r\n        description: \"Specific gallery template ID to use (gallery mode only)\",\r\n        type: \"string\",\r\n        autocompleteProvider: createGalleryItemProvider(),\r\n      },\r\n      {\r\n        name: \"display-name\",\r\n        description: \"Display name shown in-game (defaults to formatted version of name)\",\r\n        type: \"string\",\r\n      },\r\n      {\r\n        name: \"namespace\",\r\n        shortName: \"n\",\r\n        description: \"Namespace for the content (defaults to 'custom')\",\r\n        type: \"string\",\r\n      },\r\n      {\r\n        name: \"color\",\r\n        description: \"Primary color as hex (e.g., #FF0000)\",\r\n        type: \"string\",\r\n      },\r\n      // --- Entity-specific flags ---\r\n      {\r\n        name: \"health\",\r\n        description: \"Entity health points (1-100, default 20)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"damage\",\r\n        description: \"Entity attack damage (0-20, default 3)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"speed\",\r\n        description: \"Entity movement speed (0.1-1.0, default 0.25)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"body-type\",\r\n        description: \"Entity body type (humanoid, quadruped, flying, aquatic, etc.)\",\r\n        type: \"string\",\r\n        autocompleteProvider: bodyTypeProvider,\r\n      },\r\n      {\r\n        name: \"secondary-color\",\r\n        description: \"Entity secondary/accent color as hex (e.g., #00FF00)\",\r\n        type: \"string\",\r\n      },\r\n      // --- Block-specific flags ---\r\n      {\r\n        name: \"destroy-time\",\r\n        description: \"Block mining time in seconds (0-10, default 3)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"light-emission\",\r\n        description: \"Block light emission level (0-15, default 0)\",\r\n        type: \"number\",\r\n      },\r\n      // --- Item-specific flags ---\r\n      {\r\n        name: \"max-stack\",\r\n        description: \"Item max stack size (1-64, default 64)\",\r\n        type: \"number\",\r\n      },\r\n      {\r\n        name: \"durability\",\r\n        description: \"Item durability (0-2000)\",\r\n        type: \"number\",\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\r\n      \"/add entity my_mob\",\r\n      \"/add entity my_orc --traits hostile,melee_attacker,humanoid --health 30 --damage 5\",\r\n      \"/add block my_brick --traits solid --destroy-time 3\",\r\n      \"/add item my_sword --traits sword --durability 500 --max-stack 1\",\r\n      \"/add script my_behavior\",\r\n      \"/add allay custom_allay\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) {\r\n      return validationError;\r\n    }\r\n\r\n    const typeOrTemplate = args[0];\r\n    const name = args[1];\r\n    const traits = flags.traits as string[] | undefined;\r\n    const explicitTemplate = flags.template as string | undefined;\r\n\r\n    if (!context.creatorTools) {\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    const creatorTools = context.creatorTools;\r\n\r\n    // If no project is open, auto-create an addon starter project first\r\n    if (!context.project) {\r\n      context.output.info(\"No project open. Creating a new Add-On Starter project...\");\r\n\r\n      await creatorTools.loadGallery();\r\n\r\n      const starterTemplate = await creatorTools.getGalleryProjectById(\"addonstarter\");\r\n      if (!starterTemplate) {\r\n        return this.error(\"TEMPLATE_NOT_FOUND\", \"Could not find the Add-On Starter template.\");\r\n      }\r\n\r\n      const newProjectName = await creatorTools.getNewProjectName(\"my-project\");\r\n      let project = await creatorTools.createNewProject(\r\n        newProjectName,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        ProjectFocus.general,\r\n        false,\r\n        undefined\r\n      );\r\n\r\n      if (!project) {\r\n        return this.error(\"PROJECT_ERROR\", \"Could not create project.\");\r\n      }\r\n\r\n      const ProjectExporter = (await import(\"../../ProjectExporter\")).default;\r\n\r\n      project = await ProjectExporter.syncProjectFromGitHub(\r\n        true,\r\n        creatorTools,\r\n        starterTemplate.gitHubRepoName,\r\n        starterTemplate.gitHubOwner,\r\n        starterTemplate.gitHubBranch,\r\n        starterTemplate.gitHubFolder,\r\n        newProjectName,\r\n        project,\r\n        starterTemplate.fileList,\r\n        async (message: string) => {\r\n          context.output.debug(message);\r\n        },\r\n        true\r\n      );\r\n\r\n      await project.save();\r\n\r\n      context.project = project;\r\n      context.output.info(`Created project '${newProjectName}'.`);\r\n    }\r\n\r\n    // ================================================================\r\n    // WIZARD MODE \u2014 procedural generation via ContentGenerator\r\n    // ================================================================\r\n    if (shouldUseWizardMode(typeOrTemplate, traits, flags)) {\r\n      return this._executeWizardMode(context, typeOrTemplate, name, traits, flags);\r\n    }\r\n\r\n    // ================================================================\r\n    // GALLERY MODE \u2014 add from pre-built templates\r\n    // ================================================================\r\n    return this._executeGalleryMode(context, typeOrTemplate, name, explicitTemplate, flags);\r\n  }\r\n\r\n  /**\r\n   * Wizard mode: build an IMinecraftContentDefinition \u2192 ContentGenerator \u2192 ContentWriter.\r\n   */\r\n  private async _executeWizardMode(\r\n    context: IToolCommandContext,\r\n    contentType: string,\r\n    name: string,\r\n    traits: string[] | undefined,\r\n    flags: Record<string, WizardFlagValue>\r\n  ): Promise<IToolCommandResult> {\r\n    // Validate inputs\r\n    const validationErrors = validateWizardFlags(contentType, flags);\r\n    if (validationErrors.length > 0) {\r\n      const messages = validationErrors.map((e) => e.message).join(\"; \");\r\n      return this.error(\"VALIDATION_ERROR\", messages);\r\n    }\r\n\r\n    // Build the content definition\r\n    const definition = buildDefinitionFromFlags(contentType, name, traits, flags);\r\n\r\n    // Generate content\r\n    const { ContentGenerator } = await import(\"../../../minecraft/ContentGenerator\");\r\n    const { ContentWriter } = await import(\"../../../minecraft/ContentWriter\");\r\n\r\n    const generator = new ContentGenerator(definition);\r\n    const content = await generator.generate();\r\n\r\n    // Check for generation errors\r\n    if (content.summary.errors.length > 0) {\r\n      return this.error(\"GENERATION_ERROR\", `Content generation failed: ${content.summary.errors.join(\"; \")}`);\r\n    }\r\n\r\n    // Write to project\r\n    await ContentWriter.writeGeneratedContent(context.project!, content);\r\n\r\n    // Re-infer project items so the new files are tracked\r\n    await context.project!.inferProjectItemsFromFiles(true);\r\n\r\n    // Report warnings\r\n    for (const warning of content.summary.warnings) {\r\n      context.output.warn(warning);\r\n    }\r\n\r\n    // Build summary\r\n    const parts: string[] = [];\r\n    if (content.summary.entityCount > 0) parts.push(`${content.summary.entityCount} entity`);\r\n    if (content.summary.blockCount > 0) parts.push(`${content.summary.blockCount} block`);\r\n    if (content.summary.itemCount > 0) parts.push(`${content.summary.itemCount} item`);\r\n    if (content.summary.textureCount > 0) parts.push(`${content.summary.textureCount} texture(s)`);\r\n\r\n    const summaryText = `Generated ${parts.join(\", \")} for '${name}'`;\r\n    context.output.success(summaryText);\r\n\r\n    return this.success(summaryText, {\r\n      name,\r\n      type: contentType,\r\n      traits: traits || [],\r\n      mode: \"wizard\",\r\n      generated: {\r\n        entities: content.summary.entityCount,\r\n        blocks: content.summary.blockCount,\r\n        items: content.summary.itemCount,\r\n        textures: content.summary.textureCount,\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Gallery mode: add from a pre-built gallery template.\r\n   */\r\n  private async _executeGalleryMode(\r\n    context: IToolCommandContext,\r\n    typeOrTemplate: string,\r\n    name: string,\r\n    explicitTemplate: string | undefined,\r\n    flags: Record<string, WizardFlagValue>\r\n  ): Promise<IToolCommandResult> {\r\n    const creatorTools = context.creatorTools!;\r\n\r\n    // Load gallery\r\n    await creatorTools.loadGallery();\r\n\r\n    if (!creatorTools.gallery) {\r\n      return this.error(\"GALLERY_ERROR\", \"Could not load project gallery\");\r\n    }\r\n\r\n    // Try to find as direct gallery item first\r\n    let galleryItem = await creatorTools.getGalleryProjectById(explicitTemplate || typeOrTemplate);\r\n\r\n    // If not found, map content type to gallery type and find default template\r\n    if (!galleryItem) {\r\n      const galleryType = CONTENT_TYPE_TO_GALLERY[typeOrTemplate.toLowerCase()];\r\n\r\n      if (galleryType !== undefined) {\r\n        const items = creatorTools.getGalleryProjectByType(galleryType);\r\n\r\n        if (items && items.length > 0) {\r\n          const preferredItemType = CONTENT_TYPE_TO_ITEM_TYPE[typeOrTemplate.toLowerCase()];\r\n          if (preferredItemType) {\r\n            const match = items.find(\r\n              (item) => item.targetType === preferredItemType || item.id === typeOrTemplate.toLowerCase()\r\n            );\r\n            if (match) {\r\n              galleryItem = match;\r\n              context.output.debug(`Using matched template '${match.id}' for type '${typeOrTemplate}'`);\r\n            }\r\n          }\r\n\r\n          if (!galleryItem) {\r\n            galleryItem = items[0];\r\n            context.output.debug(`Using template '${galleryItem.id}' for type '${typeOrTemplate}'`);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!galleryItem) {\r\n      const gallery = creatorTools.gallery;\r\n      const types = Object.keys(CONTENT_TYPE_TO_GALLERY).join(\", \");\r\n      const templates = gallery.items\r\n        .slice(0, 10)\r\n        .map((i) => i.id)\r\n        .join(\", \");\r\n      return this.error(\r\n        \"TYPE_NOT_FOUND\",\r\n        `Unknown type or template '${typeOrTemplate}'. Valid types: ${types}. Example templates: ${templates}...`\r\n      );\r\n    }\r\n\r\n    context.output.info(`Adding '${name}' from template '${galleryItem.title}'...`);\r\n\r\n    try {\r\n      await ProjectItemCreateManager.addFromGallery(context.project!, name, galleryItem);\r\n\r\n      await context.project!.save();\r\n\r\n      context.output.success(`Added '${name}' to project`);\r\n\r\n      return this.success(`Added ${name}`, {\r\n        name,\r\n        template: galleryItem.id,\r\n        type: typeOrTemplate,\r\n        mode: \"gallery\",\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"ADD_ERROR\", `Failed to add content: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Custom completions based on argument position and type context.\r\n   */\r\n  async getCompletions(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    const lower = partialArg.toLowerCase();\r\n\r\n    if (argIndex === 0) {\r\n      const types = Object.keys(CONTENT_TYPE_TO_GALLERY).filter((t) => t.startsWith(lower));\r\n\r\n      if (context.creatorTools) {\r\n        await context.creatorTools.loadGallery();\r\n        const gallery = context.creatorTools.gallery;\r\n        const templateIds = gallery?.items.filter((i) => i.id.toLowerCase().startsWith(lower)).map((i) => i.id) || [];\r\n        return [...types, ...templateIds];\r\n      }\r\n\r\n      return types;\r\n    }\r\n\r\n    return [];\r\n  }\r\n}\r\n\r\nexport const addCommand = new AddCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * RemoveCommand - Remove content from a Minecraft project\r\n *\r\n * Removes a project item by path or name.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectItemProvider } from \"../AutocompleteProviders\";\r\n\r\nexport class RemoveCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"remove\",\r\n    description: \"Remove content from the current project\",\r\n    aliases: [\"rm\", \"delete\"],\r\n    category: \"Content\",\r\n    requiresProject: true,\r\n    arguments: [\r\n      {\r\n        name: \"path\",\r\n        description: \"Path or name of the item to remove\",\r\n        type: \"path\",\r\n        required: true,\r\n        autocompleteProvider: projectItemProvider,\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"force\",\r\n        shortName: \"f\",\r\n        description: \"Skip confirmation\",\r\n        type: \"boolean\",\r\n        isBoolean: true,\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\"/remove entities/my_entity.json\", \"/remove my_entity\", \"/remove --force old_script.ts\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) {\r\n      return validationError;\r\n    }\r\n\r\n    const pathOrName = args[0];\r\n    const force = flags.force as boolean;\r\n\r\n    if (!context.project) {\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    // Find the item by path or name\r\n    const items = context.project.items || [];\r\n    let itemToRemove = items.find(\r\n      (item) => item.projectPath === pathOrName || item.projectPath?.endsWith(\"/\" + pathOrName)\r\n    );\r\n\r\n    // Also try by name\r\n    if (!itemToRemove) {\r\n      itemToRemove = items.find((item) => item.name.toLowerCase() === pathOrName.toLowerCase());\r\n    }\r\n\r\n    if (!itemToRemove) {\r\n      return this.error(\"ITEM_NOT_FOUND\", `Item '${pathOrName}' not found in project`);\r\n    }\r\n\r\n    // When --force is not specified, log that the item is being removed.\r\n    // Future: add interactive confirmation prompt when not forced.\r\n    if (!force) {\r\n      context.output.info(`Removing '${itemToRemove.projectPath || itemToRemove.name}'...`);\r\n    }\r\n\r\n    try {\r\n      context.project.removeItem(itemToRemove);\r\n      await context.project.save();\r\n\r\n      context.output.success(`Removed '${itemToRemove.name}'`);\r\n      return this.success(`Removed ${itemToRemove.name}`);\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"REMOVE_ERROR\", `Failed to remove item: ${message}`);\r\n    }\r\n  }\r\n}\r\n\r\nexport const removeCommand = new RemoveCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * RenameCommand - Rename content in a Minecraft project\r\n *\r\n * Renames a project item, updating the identifier inside its JSON\r\n * and cascading the rename to related files:\r\n *   - Entity behavior \u2192 resource entity, spawn rules\r\n *   - Entity resource \u2192 (file + identifier only)\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectItemNameProvider } from \"../AutocompleteProviders\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport EntityTypeDefinition from \"../../../minecraft/EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"../../../minecraft/EntityTypeResourceDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../../../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport type Project from \"../../Project\";\r\nimport type ProjectItem from \"../../ProjectItem\";\r\n\r\nexport class RenameCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"rename\",\r\n    description: \"Rename a content item in the project\",\r\n    aliases: [\"mv\", \"move\"],\r\n    category: \"Content\",\r\n    requiresProject: true,\r\n    arguments: [\r\n      {\r\n        name: \"oldName\",\r\n        description: \"Current name or path of the item\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: projectItemNameProvider,\r\n      },\r\n      {\r\n        name: \"newName\",\r\n        description: \"New name for the item\",\r\n        type: \"string\",\r\n        required: true,\r\n      },\r\n    ],\r\n    isWriteCommand: true,\r\n    examples: [\"/rename my_old_entity my_new_entity\", \"/rename old_block cool_block\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const oldName = args[0];\r\n    const newName = args[1];\r\n\r\n    if (!context.project) {\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    // Validate required args\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) return validationError;\r\n\r\n    // Find the item\r\n    const items = context.project.items || [];\r\n    let item = items.find((i) => i.name.toLowerCase() === oldName.toLowerCase() || i.projectPath?.includes(oldName));\r\n\r\n    if (!item) {\r\n      return this.error(\"ITEM_NOT_FOUND\", `Item '${oldName}' not found in project`);\r\n    }\r\n\r\n    const originalName = item.name;\r\n\r\n    try {\r\n      const renamedFiles: string[] = [originalName];\r\n\r\n      if (item.itemType === ProjectItemType.entityTypeBehavior) {\r\n        await this._cascadeEntityBehaviorRename(context.project, item, newName, renamedFiles);\r\n      } else if (item.itemType === ProjectItemType.entityTypeResource) {\r\n        await this._cascadeEntityResourceRename(item, newName);\r\n      }\r\n\r\n      // Rename the primary item's file\r\n      await item.rename(newName);\r\n\r\n      await context.project.save();\r\n\r\n      if (renamedFiles.length > 1) {\r\n        context.output.success(\r\n          `Renamed '${originalName}' to '${newName}' (also updated: ${renamedFiles.slice(1).join(\", \")})`\r\n        );\r\n      } else {\r\n        context.output.success(`Renamed '${originalName}' to '${newName}'`);\r\n      }\r\n      return this.success(`Renamed ${originalName} to ${newName}`, {\r\n        oldName: originalName,\r\n        newName,\r\n        renamedFiles,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"RENAME_ERROR\", `Failed to rename item: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Builds a new entity identifier by replacing the short name portion.\r\n   * E.g., \"myns:old_mob\" + \"new_mob\" \u2192 \"myns:new_mob\"\r\n   */\r\n  private _buildNewEntityId(oldId: string, newShortName: string): string {\r\n    const colonIndex = oldId.indexOf(\":\");\r\n    if (colonIndex >= 0) {\r\n      return oldId.substring(0, colonIndex + 1) + newShortName;\r\n    }\r\n    return newShortName;\r\n  }\r\n\r\n  /**\r\n   * Cascades a rename from an entity behavior item to its resource entity\r\n   * and spawn rules. Updates identifiers in JSON and renames related files.\r\n   */\r\n  private async _cascadeEntityBehaviorRename(\r\n    project: Project,\r\n    behaviorItem: ProjectItem,\r\n    newName: string,\r\n    renamedFiles: string[]\r\n  ) {\r\n    // Load the behavior definition with comment preservation for safe editing\r\n    if (!behaviorItem.isContentLoaded) {\r\n      await behaviorItem.loadContent();\r\n    }\r\n\r\n    const primaryFile = behaviorItem.primaryFile;\r\n    if (!primaryFile) {\r\n      return;\r\n    }\r\n\r\n    const etd = await EntityTypeDefinition.ensureOnFile(primaryFile, undefined, true);\r\n    if (!etd || !etd.id) {\r\n      return;\r\n    }\r\n\r\n    const oldEntityId = etd.id;\r\n    const newEntityId = this._buildNewEntityId(oldEntityId, newName);\r\n\r\n    // Update the behavior entity's identifier\r\n    etd.id = newEntityId;\r\n    etd.persist();\r\n\r\n    // Find and update matching resource entities\r\n    const resourceItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    for (const resItem of resourceItems) {\r\n      if (!resItem.isContentLoaded) {\r\n        await resItem.loadContent();\r\n      }\r\n\r\n      if (resItem.primaryFile) {\r\n        const etrd = await EntityTypeResourceDefinition.ensureOnFile(resItem.primaryFile);\r\n        if (etrd && etrd.id === oldEntityId) {\r\n          const oldResName = resItem.name;\r\n          // Re-load with comment preservation for editing\r\n          await etrd.load(true);\r\n          etrd.id = newEntityId;\r\n          etrd.persist();\r\n          await resItem.rename(newName);\r\n          renamedFiles.push(oldResName);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Find and update matching spawn rules\r\n    const spawnRuleItems = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n    for (const srItem of spawnRuleItems) {\r\n      if (!srItem.isContentLoaded) {\r\n        await srItem.loadContent();\r\n      }\r\n\r\n      if (srItem.primaryFile) {\r\n        const srb = await SpawnRulesBehaviorDefinition.ensureOnFile(srItem.primaryFile);\r\n        if (srb && srb.id === oldEntityId) {\r\n          const oldSrName = srItem.name;\r\n          // Re-load with comment preservation for editing\r\n          await srb.load(true);\r\n          srb.id = newEntityId;\r\n          srb.persist();\r\n          await srItem.rename(newName);\r\n          renamedFiles.push(oldSrName);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the identifier inside an entity resource definition when\r\n   * the resource item itself is being renamed directly.\r\n   */\r\n  private async _cascadeEntityResourceRename(resourceItem: ProjectItem, newName: string) {\r\n    if (!resourceItem.isContentLoaded) {\r\n      await resourceItem.loadContent();\r\n    }\r\n\r\n    const primaryFile = resourceItem.primaryFile;\r\n    if (!primaryFile) {\r\n      return;\r\n    }\r\n\r\n    const etrd = await EntityTypeResourceDefinition.ensureOnFile(primaryFile);\r\n    if (!etrd || !etrd.id) {\r\n      return;\r\n    }\r\n\r\n    const newEntityId = this._buildNewEntityId(etrd.id, newName);\r\n    await etrd.load(true);\r\n    etrd.id = newEntityId;\r\n    etrd.persist();\r\n  }\r\n}\r\n\r\nexport const renameCommand = new RenameCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ScriptCommand - Run JavaScript or send messages via Bedrock Dedicated Server\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * Executes code or commands on an active Bedrock server connection.\r\n * This is useful for testing and debugging script behavior.\r\n *\r\n * EXECUTION PATHWAYS:\r\n *\r\n * 1. **Action Set pathway (default, reliable)**:\r\n *    Uses the `mct:runactions` protocol which has a complete round-trip:\r\n *    - Sends an action set to the in-game creator_tools_ingame addon\r\n *    - The addon parses the action set, executes it, and returns results\r\n *    - Actions include: world_send_message, test_simulated_player_spawn, etc.\r\n *    - This is the same pathway used by the MCP server's runActionSetInMinecraft\r\n *\r\n * 2. **Direct command pathway (--raw flag)**:\r\n *    Sends a raw Bedrock server command (e.g., `/say Hello`, `/tp @s 0 64 0`)\r\n *    via DedicatedServer.writeToServer(). No response parsing.\r\n *\r\n * 3. **Eval pathway (--eval flag)**:\r\n *    Evaluates arbitrary JavaScript code in the in-game scripting context.\r\n *    Uses the `mct:eval` scriptevent protocol with token-based response:\r\n *    - Encodes code: replaces `\"` with `|` for transport\r\n *    - Sends: `/scriptevent mct:eval \"token|encodedCode\"`\r\n *    - Addon receives via scriptEventReceive, reverses encoding\r\n *    - Addon evaluates code with `new Function(\"world\", \"system\", \"dimension\", code)`\r\n *    - Addon responds: `console.log(\"evl|\" + token + \"|\" + result)`\r\n *    - ScriptCommand parses the `evl|token|result` response line\r\n *    The eval function receives `world`, `system`, and `dimension` (overworld)\r\n *    as available variables. Example: `/script --eval return world.getAllPlayers().length`\r\n *\r\n * TRANSPORT ENCODING:\r\n * The scriptevent transport cannot carry JSON double-quotes directly, so all\r\n * quotes in the payload are replaced with `|` before sending and reversed on\r\n * receipt. Response prefixes: `ras|` for actionset, `evl|` for eval, `gs|` for getState.\r\n *\r\n * RELATED FILES:\r\n * - src/local/DedicatedServer.ts \u2014 writeToServer(), runCommandImmediate()\r\n * - src/local/MinecraftMcpServer.ts \u2014 _runActionSet() with token-based responses\r\n * - src/actions/IActionSetData.ts \u2014 Action set data structures\r\n * - mc/scripts/creator_tools/CreatorTools.ts \u2014 In-game handler (outside workspace)\r\n *   Handles mct:actionset, mct:eval, and mct:state scriptevents + CustomCommands.\r\n *\r\n * In MCP context, requires a session to be created first via createMinecraftSessionWithContent.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase, ToolCommandScope } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport Utilities from \"../../../core/Utilities\";\r\n\r\nexport class ScriptCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"script\",\r\n    description: \"Run a command or send a message on the Bedrock server\",\r\n    aliases: [\"js\", \"eval\"],\r\n    category: \"Server\",\r\n    arguments: [\r\n      {\r\n        name: \"code\",\r\n        description: \"Command or message to send to the server\",\r\n        type: \"string\",\r\n        required: true,\r\n      },\r\n    ],\r\n    flags: [\r\n      {\r\n        name: \"session\",\r\n        shortName: \"s\",\r\n        description: \"Session name to run on (required for MCP/API)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"raw\",\r\n        shortName: \"r\",\r\n        description: \"Send as a raw server command (e.g., /say, /tp, /give)\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"eval\",\r\n        shortName: \"e\",\r\n        description: \"Evaluate JavaScript code in the server's scripting context (world, system, dimension available)\",\r\n        type: \"boolean\",\r\n        required: false,\r\n      },\r\n      {\r\n        name: \"timeout\",\r\n        shortName: \"t\",\r\n        description: \"Timeout in seconds for --eval response (default: 5)\",\r\n        type: \"string\",\r\n        required: false,\r\n      },\r\n    ],\r\n    scopes: [ToolCommandScope.serveTerminal, ToolCommandScope.ui, ToolCommandScope.serverApi, ToolCommandScope.mcp],\r\n    examples: [\r\n      \"/script say Hello from MCT!\",\r\n      \"/script --raw tp @s 0 64 0\",\r\n      \"/script --eval return world.getAllPlayers().length\",\r\n      \"/script --eval --timeout 30 return world.getDimension('overworld').getEntities().length\",\r\n      \"/script --session mySession --eval return world.getDimension('overworld').id\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const code = args.join(\" \");\r\n    const sessionName = flags.session as string | undefined;\r\n    const isRaw = flags.raw === true;\r\n    const isEval = flags.eval === true;\r\n\r\n    // In MCP or serverApi context, we need session info\r\n    if ((context.scope === \"mcp\" || context.scope === \"serverApi\") && !sessionName && !context.session) {\r\n      return this.error(\"NO_SESSION\", \"Session name required in MCP/API context. Use --session <name>\");\r\n    }\r\n\r\n    if (!code || code.trim() === \"\") {\r\n      return this.error(\"NO_CODE\", \"No command or message provided\");\r\n    }\r\n\r\n    context.output.info(`Executing: ${code}`);\r\n\r\n    try {\r\n      // Eval pathway: send code to the in-game addon for evaluation via scriptevent\r\n      if (isEval) {\r\n        return await this._executeEval(context, code, sessionName, flags);\r\n      }\r\n\r\n      // Determine the command to send\r\n      let command: string;\r\n\r\n      if (isRaw) {\r\n        // Raw mode: send the command as-is (prefix with / if needed)\r\n        command = code.startsWith(\"/\") ? code : \"/\" + code;\r\n      } else {\r\n        // Default mode: treat as a server command\r\n        // If it looks like a slash command already, send as-is\r\n        // Otherwise, wrap as a /say command for message delivery\r\n        if (code.startsWith(\"/\")) {\r\n          command = code;\r\n        } else {\r\n          command = \"/say \" + code;\r\n        }\r\n      }\r\n\r\n      // Try to run via IMinecraft (serve mode, Electron with server connection)\r\n      if (context.minecraft) {\r\n        const result = await context.minecraft.runCommand(command);\r\n        context.output.success(\"Command executed\");\r\n        return this.success(\"Command executed\", {\r\n          result,\r\n          command,\r\n          sessionName: sessionName || context.session?.sessionName,\r\n        });\r\n      }\r\n\r\n      // Fall back to session's serverManager (MCP/API contexts)\r\n      if (context.session?.serverManager) {\r\n        const server = context.session.serverManager.getActiveServer(context.session.slot || 0);\r\n        if (server) {\r\n          const result = await server.runCommandImmediate(command);\r\n          context.output.success(\"Command executed\");\r\n          return this.success(\"Command executed\", {\r\n            result,\r\n            command,\r\n            sessionName: sessionName || context.session?.sessionName,\r\n          });\r\n        }\r\n      }\r\n\r\n      return this.error(\"NO_SERVER\", \"No active Minecraft server connection\");\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"SCRIPT_ERROR\", `Command execution failed: ${message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evaluates JavaScript code in the in-game scripting context via the mct:eval\r\n   * scriptevent protocol with token-based response parsing.\r\n   *\r\n   * Protocol:\r\n   * 1. Encode: replace all `\"` with `|` in the code\r\n   * 2. Send: `/scriptevent mct:eval \"token|encodedCode\"`\r\n   * 3. Wait for stdout line containing the token\r\n   * 4. Parse `evl|token|result` from the response\r\n   */\r\n  private async _executeEval(\r\n    context: IToolCommandContext,\r\n    code: string,\r\n    sessionName: string | undefined,\r\n    flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    // Encode the code for transport: replace double quotes with pipes\r\n    const encodedCode = code.replace(/\"/g, \"|\");\r\n    const token = Utilities.createRandomLowerId(6);\r\n\r\n    // Build the scriptevent command\r\n    const command = 'scriptevent mct:eval \"' + token + \"|\" + encodedCode + '\"';\r\n\r\n    let result: string | undefined;\r\n\r\n    const timeoutSec = parseInt(flags.timeout as string, 10) || 5;\r\n    const maxWaitMs = timeoutSec * 1000;\r\n\r\n    // Eval requires token-based response parsing via runCommandImmediate.\r\n    // The session.serverManager pathway supports this; the IMinecraft pathway\r\n    // (serve mode) does not currently support token-based waiting.\r\n    if (context.session?.serverManager) {\r\n      const server = context.session.serverManager.getActiveServer(context.session.slot || 0);\r\n      if (server) {\r\n        result = await server.runCommandImmediate(command, token + \"|\", maxWaitMs);\r\n      }\r\n    } else if (context.minecraft) {\r\n      // IMinecraft.runCommand doesn't support token-based waiting, so the result\r\n      // may not contain the eval response. Best-effort approach.\r\n      result = await context.minecraft.runCommand(command);\r\n    }\r\n\r\n    if (result === undefined) {\r\n      return this.error(\"NO_SERVER\", \"No active Minecraft server connection or eval timed out\");\r\n    }\r\n\r\n    // Parse the evl|token|result response\r\n    const evlIndex = result.indexOf(\"evl|\");\r\n    if (evlIndex >= 0) {\r\n      // Find the token after \"evl|\"\r\n      const afterEvl = result.substring(evlIndex + 4);\r\n      const pipeIndex = afterEvl.indexOf(\"|\");\r\n\r\n      if (pipeIndex >= 0) {\r\n        const evalResult = afterEvl.substring(pipeIndex + 1);\r\n\r\n        if (evalResult.startsWith(\"Error: \")) {\r\n          return this.error(\"EVAL_ERROR\", evalResult);\r\n        }\r\n\r\n        context.output.success(`Eval result: ${evalResult}`);\r\n        return this.success(\"Eval completed\", {\r\n          result: evalResult,\r\n          code,\r\n          sessionName: sessionName || context.session?.sessionName,\r\n        });\r\n      }\r\n    }\r\n\r\n    // If we got a result but couldn't parse it as evl| format, return raw\r\n    context.output.success(`Result: ${result}`);\r\n    return this.success(\"Eval completed\", {\r\n      result,\r\n      code,\r\n      sessionName: sessionName || context.session?.sessionName,\r\n    });\r\n  }\r\n}\r\n\r\nexport const scriptCommand = new ScriptCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * OpenSampleCommand - Open a built-in sample project\r\n *\r\n * Loads vanilla Minecraft content from the web server's /res/ folder\r\n * directly into the editor as a read-only project. This is useful for:\r\n * - Testing with large real-world content (2000+ files)\r\n * - Exploring vanilla Minecraft definitions\r\n * - Performance testing and benchmarking\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport HttpStorage from \"../../../storage/HttpStorage\";\r\nimport Project from \"../../Project\";\r\n\r\nconst SAMPLES: Record<string, { path: string; title: string; description: string }> = {\r\n  vanilla: {\r\n    path: \"/res/latest/van/serve/\",\r\n    title: \"Vanilla Minecraft\",\r\n    description: \"The complete vanilla Minecraft behavior pack + resource pack (2000+ files)\",\r\n  },\r\n  \"vanilla-bp\": {\r\n    path: \"/res/latest/van/serve/behavior_pack/\",\r\n    title: \"Vanilla Behavior Pack\",\r\n    description: \"Vanilla entities, items, recipes, loot tables, spawn rules, and biomes\",\r\n  },\r\n  \"vanilla-rp\": {\r\n    path: \"/res/latest/van/serve/resource_pack/\",\r\n    title: \"Vanilla Resource Pack\",\r\n    description: \"Vanilla textures, models, animations, and sounds\",\r\n  },\r\n};\r\n\r\nexport class OpenSampleCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"open-sample\",\r\n    description: \"Open a built-in sample project (e.g., vanilla Minecraft content)\",\r\n    aliases: [\"sample\", \"vanilla\"],\r\n    category: \"Project\",\r\n    arguments: [\r\n      {\r\n        name: \"sample\",\r\n        description: \"Sample to open: vanilla, vanilla-bp, vanilla-rp\",\r\n        type: \"choice\",\r\n        required: false,\r\n        defaultValue: \"vanilla-bp\",\r\n      },\r\n    ],\r\n    flags: [],\r\n    isWriteCommand: false,\r\n    examples: [\r\n      \"/open-sample\",\r\n      \"/open-sample vanilla-bp\",\r\n      \"/open-sample vanilla\",\r\n      \"/open-sample vanilla-rp\",\r\n    ],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const sampleId = (args[0] || \"vanilla-bp\").toLowerCase();\r\n    const sample = SAMPLES[sampleId];\r\n\r\n    if (!sample) {\r\n      const available = Object.keys(SAMPLES).join(\", \");\r\n      return this.error(\"SAMPLE_NOT_FOUND\", `Sample '${sampleId}' not found. Available: ${available}`);\r\n    }\r\n\r\n    if (!context.creatorTools) {\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    context.output.info(`Loading ${sample.title}...`);\r\n\r\n    try {\r\n      const contentStorage = HttpStorage.get(sample.path);\r\n      await contentStorage.rootFolder.load();\r\n\r\n      const newProject = new Project(context.creatorTools, sample.title, null);\r\n      newProject.setProjectFolder(contentStorage.rootFolder);\r\n      newProject.readOnlySafety = true;\r\n\r\n      await newProject.attemptToLoadPreferences();\r\n      await newProject.inferProjectItemsFromFiles(true);\r\n\r\n      context.project = newProject;\r\n\r\n      const itemCount = newProject.items.length;\r\n      context.output.success(`Loaded ${sample.title} with ${itemCount} items`);\r\n\r\n      return this.success(`Loaded ${sample.title}`, {\r\n        sampleId,\r\n        itemCount,\r\n        title: sample.title,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      return this.error(\"LOAD_ERROR\", `Failed to load sample: ${message}`);\r\n    }\r\n  }\r\n\r\n  async getCompletions(\r\n    _context: IToolCommandContext,\r\n    _args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex === 0) {\r\n      const all = Object.keys(SAMPLES);\r\n      if (!partialArg) return all;\r\n      return all.filter((s) => s.startsWith(partialArg.toLowerCase()));\r\n    }\r\n    return [];\r\n  }\r\n}\r\n\r\nexport const openSampleCommand = new OpenSampleCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ValidateCommand - Run inspector validation on the current project\r\n *\r\n * Builds a `ProjectInfoSet` for the active project using the\r\n * `defaultInDevelopment` suite and reports a one-line summary of\r\n * errors, warnings, and recommendations. Useful as a quick\r\n * \"is my project healthy?\" check from the slash bar.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { ProjectInfoSuite } from \"../../../info/IProjectInfoData\";\r\nimport { InfoItemType } from \"../../../info/IInfoItemData\";\r\nimport ProjectInfoSet from \"../../../info/ProjectInfoSet\";\r\n\r\nexport class ValidateCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"validate\",\r\n    description: \"Run inspector validation on the current project and print a summary\",\r\n    aliases: [\"val\"],\r\n    category: \"Validation\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/validate\", \"/val\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /validate.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n\r\n    try {\r\n      context.output.info(`Validating project '${project.name}'...`);\r\n\r\n      const infoSet = new ProjectInfoSet(project, ProjectInfoSuite.defaultInDevelopment);\r\n      await infoSet.generateForProject();\r\n\r\n      const errors = infoSet.getCountByType(InfoItemType.error);\r\n      const warnings = infoSet.getCountByType(InfoItemType.warning);\r\n      const recommendations = infoSet.getCountByType(InfoItemType.recommendation);\r\n      const internal = infoSet.getCountByType(InfoItemType.internalProcessingError);\r\n\r\n      const summary = `errors=${errors} warnings=${warnings} recommendations=${recommendations}`;\r\n\r\n      if (errors > 0 || internal > 0) {\r\n        context.output.error(`Validation: ${summary}`);\r\n      } else if (warnings > 0) {\r\n        context.output.warn(`Validation: ${summary}`);\r\n      } else {\r\n        context.output.success(`Validation: ${summary}`);\r\n      }\r\n\r\n      return this.success(summary, {\r\n        errors,\r\n        warnings,\r\n        recommendations,\r\n        internalProcessingErrors: internal,\r\n        projectName: project.name,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      context.output.error(`Validation failed: ${message}`);\r\n      return this.error(\"VALIDATE_ERROR\", `Failed to validate project: ${message}`);\r\n    }\r\n  }\r\n}\r\n\r\nexport const validateCommand = new ValidateCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * InfoCommand - Display project metadata\r\n *\r\n * Prints a short summary of the active project: name, total item\r\n * count, the number of behavior-pack vs resource-pack items, and\r\n * the manifest format_version when discoverable. Read-only.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport ProjectItemUtilities from \"../../ProjectItemUtilities\";\r\n\r\nexport class InfoCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"info\",\r\n    description: \"Display metadata about the current project (name, item counts, pack info)\",\r\n    aliases: [\"i\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/info\", \"/i\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /info.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n    const items = project.items || [];\r\n\r\n    let bpItemCount = 0;\r\n    let rpItemCount = 0;\r\n    let bpManifestCount = 0;\r\n    let rpManifestCount = 0;\r\n\r\n    for (const item of items) {\r\n      if (ProjectItemUtilities.isBehaviorRelated(item.itemType)) {\r\n        bpItemCount++;\r\n      } else if (ProjectItemUtilities.isResourceRelated(item.itemType)) {\r\n        rpItemCount++;\r\n      }\r\n\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        bpManifestCount++;\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        rpManifestCount++;\r\n      }\r\n    }\r\n\r\n    const title = project.title || project.name;\r\n    context.output.info(`Project: ${title}`);\r\n    if (project.description) {\r\n      context.output.info(`Description: ${project.description}`);\r\n    }\r\n    context.output.info(`Total items: ${items.length}`);\r\n    context.output.info(\r\n      `Behavior pack: ${bpItemCount} item(s) (${bpManifestCount} manifest${bpManifestCount === 1 ? \"\" : \"s\"})`\r\n    );\r\n    context.output.info(\r\n      `Resource pack: ${rpItemCount} item(s) (${rpManifestCount} manifest${rpManifestCount === 1 ? \"\" : \"s\"})`\r\n    );\r\n\r\n    if (project.defaultBehaviorPackUniqueId) {\r\n      context.output.info(`Default BP uuid: ${project.defaultBehaviorPackUniqueId}`);\r\n    }\r\n    if (project.defaultResourcePackUniqueId) {\r\n      context.output.info(`Default RP uuid: ${project.defaultResourcePackUniqueId}`);\r\n    }\r\n\r\n    const summary = `${items.length} items (BP=${bpItemCount}, RP=${rpItemCount})`;\r\n    context.output.success(summary);\r\n\r\n    return this.success(summary, {\r\n      name: project.name,\r\n      title,\r\n      description: project.description || \"\",\r\n      itemCount: items.length,\r\n      behaviorPackItems: bpItemCount,\r\n      resourcePackItems: rpItemCount,\r\n      behaviorPackManifests: bpManifestCount,\r\n      resourcePackManifests: rpManifestCount,\r\n      defaultBehaviorPackUniqueId: project.defaultBehaviorPackUniqueId,\r\n      defaultResourcePackUniqueId: project.defaultResourcePackUniqueId,\r\n    });\r\n  }\r\n}\r\n\r\nexport const infoCommand = new InfoCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ExportCommand - Hint for exporting the current project as a .mcaddon\r\n *\r\n * The slash-bar version is intentionally informational \u2014 actual\r\n * .mcaddon packaging is best driven from the Project Actions\r\n * \"Export\" dropdown (which orchestrates dialogs, file pickers,\r\n * and pack selection). This command tells the user where to go.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class ExportCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"export\",\r\n    description: \"Show how to export the current project as a .mcaddon\",\r\n    aliases: [\"exportaddon\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/export\", \"/exportaddon\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /export.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n    const message =\r\n      `To export '${project.name}' as a .mcaddon, open the project's ` +\r\n      `Actions panel and use the \"Export\" dropdown. The dropdown lets you ` +\r\n      `select packs, choose an output folder, and produce .mcaddon / .mcpack files.`;\r\n\r\n    context.output.info(message);\r\n    context.output.info(\"Tip: from the CLI you can also run `npx mct exportaddon -i <project-folder>`.\");\r\n\r\n    return this.success(\"Displayed export instructions\", {\r\n      projectName: project.name,\r\n      hint: \"Use Project Actions \u2192 Export dropdown\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const exportCommand = new ExportCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * DeployCommand - Hint for deploying the current project\r\n *\r\n * Real deployment requires filesystem access (e.g. com.mojang\r\n * folder on Windows) and is only available in the Electron host\r\n * or via the CLI. The slash-bar version is informational \u2014 it\r\n * directs the user to the Project Actions \"Deploy\" dropdown.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport CreatorToolsHost, { HostType } from \"../../CreatorToolsHost\";\r\n\r\nexport class DeployCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"deploy\",\r\n    description: \"Show how to deploy the current project to a Minecraft instance\",\r\n    aliases: [\"dp\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/deploy\", \"/dp\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /deploy.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const isWebOnly =\r\n      CreatorToolsHost.hostType === HostType.web || CreatorToolsHost.hostType === HostType.webPlusServices;\r\n\r\n    if (isWebOnly) {\r\n      context.output.warn(\r\n        \"Web builds cannot deploy to your Minecraft installation \u2014 deployment requires filesystem access.\"\r\n      );\r\n      context.output.info(\r\n        \"Open this project in the Electron desktop app, the VS Code extension, or run the CLI \" +\r\n          \"(`npx mct deploy`) to push packs to com.mojang.\"\r\n      );\r\n    } else {\r\n      context.output.info(\r\n        `To deploy '${context.project.name}', open the project's Actions panel and use the ` +\r\n          `\"Deploy\" dropdown to push to your local Minecraft installation, a dedicated server, ` +\r\n          `or another configured target.`\r\n      );\r\n      context.output.info(\"Tip: from the CLI you can also run `npx mct deploy -i <project-folder>`.\");\r\n    }\r\n\r\n    return this.success(\"Displayed deploy instructions\", {\r\n      projectName: context.project.name,\r\n      hostType: CreatorToolsHost.hostType,\r\n      hint: \"Use Project Actions \u2192 Deploy dropdown\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const deployCommand = new DeployCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * SwitchModeCommand - Switch the global edit-preference mode\r\n *\r\n * Updates `creatorTools.editPreference` to one of the three\r\n * built-in modes:\r\n *   - focused \u2192 CreatorToolsEditPreference.summarized\r\n *   - full    \u2192 CreatorToolsEditPreference.editors\r\n *   - raw     \u2192 CreatorToolsEditPreference.raw\r\n *\r\n * The new preference is persisted via creatorTools.save() so the\r\n * choice survives a reload.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { CreatorToolsEditPreference } from \"../../ICreatorToolsData\";\r\n\r\nconst MODE_CHOICES = [\"focused\", \"full\", \"raw\"] as const;\r\ntype ModeChoice = (typeof MODE_CHOICES)[number];\r\n\r\nconst MODE_TO_PREFERENCE: Record<ModeChoice, CreatorToolsEditPreference> = {\r\n  focused: CreatorToolsEditPreference.summarized,\r\n  full: CreatorToolsEditPreference.editors,\r\n  raw: CreatorToolsEditPreference.raw,\r\n};\r\n\r\nconst MODE_DESCRIPTIONS: Record<ModeChoice, string> = {\r\n  focused: \"Focused mode \u2014 simplified, summary-first editing surface.\",\r\n  full: \"Full mode \u2014 complete file access with visual form-based editors.\",\r\n  raw: \"Raw mode \u2014 direct JSON / text editing of every file in the project.\",\r\n};\r\n\r\nexport class SwitchModeCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"mode\",\r\n    description: \"Switch the editor mode (focused | full | raw)\",\r\n    aliases: [\"setmode\"],\r\n    category: \"General\",\r\n    arguments: [\r\n      {\r\n        name: \"mode\",\r\n        description: \"Edit-preference mode to switch to\",\r\n        type: \"choice\",\r\n        required: true,\r\n        choices: [...MODE_CHOICES],\r\n      },\r\n    ],\r\n    isWriteCommand: false,\r\n    examples: [\"/mode focused\", \"/mode full\", \"/mode raw\", \"/setmode raw\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) return validationError;\r\n\r\n    if (!context.creatorTools) {\r\n      context.output.error(\"No CreatorTools instance available \u2014 cannot change edit preference.\");\r\n      return this.error(\"NO_CREATOR_TOOLS\", \"No CreatorTools instance available.\");\r\n    }\r\n\r\n    const requested = (args[0] || \"\").toLowerCase() as ModeChoice;\r\n    if (!MODE_CHOICES.includes(requested)) {\r\n      const message = `Unknown mode '${args[0]}'. Choose one of: ${MODE_CHOICES.join(\", \")}.`;\r\n      context.output.error(message);\r\n      return this.error(\"INVALID_MODE\", message);\r\n    }\r\n\r\n    const preference = MODE_TO_PREFERENCE[requested];\r\n\r\n    try {\r\n      context.creatorTools.editPreference = preference;\r\n      await context.creatorTools.save();\r\n\r\n      context.output.success(`Edit mode set to '${requested}'.`);\r\n      context.output.info(MODE_DESCRIPTIONS[requested]);\r\n\r\n      return this.success(`Edit mode set to '${requested}'`, {\r\n        mode: requested,\r\n        preference,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      context.output.error(`Failed to switch mode: ${message}`);\r\n      return this.error(\"MODE_SWITCH_ERROR\", `Failed to switch mode: ${message}`);\r\n    }\r\n  }\r\n\r\n  async getCompletions(\r\n    _context: IToolCommandContext,\r\n    _args: string[],\r\n    partialArg: string,\r\n    argIndex: number\r\n  ): Promise<string[]> {\r\n    if (argIndex !== 0) return [];\r\n    const lower = partialArg.toLowerCase();\r\n    return MODE_CHOICES.filter((m) => m.startsWith(lower));\r\n  }\r\n}\r\n\r\nexport const switchModeCommand = new SwitchModeCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToggleInspectorCommand - Hint for opening the project Inspector tab\r\n *\r\n * The Inspector is a UI surface owned by `ProjectEditor`/`App`\r\n * (ProjectEditorMode.inspector); there is no global toggle on\r\n * `Project` or `CreatorTools` that can flip it from outside the\r\n * React tree. This command emits a hint pointing the user at the\r\n * Inspector tab so they can open it manually.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class ToggleInspectorCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"inspector\",\r\n    description: \"Show how to open the project Inspector view\",\r\n    aliases: [\"ti\"],\r\n    category: \"Validation\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/inspector\", \"/ti\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /inspector.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    context.output.info(\r\n      \"Open the Inspector by clicking the Inspector tab in the project navigation pane \" +\r\n        \"(or selecting Inspector from the Actions panel). Use /validate (alias /val) for a \" +\r\n        \"quick error/warning/recommendation summary directly from this command bar.\"\r\n    );\r\n\r\n    return this.success(\"Displayed Inspector hint\", {\r\n      projectName: context.project.name,\r\n      hint: \"Click Inspector tab in project navigation\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const toggleInspectorCommand = new ToggleInspectorCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ReloadProjectCommand - Re-scan the current project's files\r\n *\r\n * Re-runs `project.inferProjectItemsFromFiles(true)` so any files\r\n * that were added, removed, or modified outside the editor are\r\n * picked up. Reports the new total item count.\r\n *\r\n * NOTE: this shadows Bedrock's in-game `/reload` command for the\r\n * MCT slash bar. Inside a Bedrock console you can still reach\r\n * Bedrock's reload via the dedicated server console.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class ReloadProjectCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"reload\",\r\n    description: \"Re-scan project files and refresh the item list\",\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    isWriteCommand: false,\r\n    examples: [\"/reload\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /reload.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const project = context.project;\r\n    const before = project.items.length;\r\n\r\n    try {\r\n      context.output.info(`Reloading project '${project.name}'...`);\r\n      await project.inferProjectItemsFromFiles(true);\r\n      const after = project.items.length;\r\n      const delta = after - before;\r\n      const deltaStr = delta === 0 ? \"no change\" : delta > 0 ? `+${delta}` : `${delta}`;\r\n\r\n      context.output.success(`Reloaded '${project.name}': ${after} item(s) (${deltaStr}).`);\r\n\r\n      return this.success(`Reloaded ${after} items`, {\r\n        projectName: project.name,\r\n        itemCountBefore: before,\r\n        itemCountAfter: after,\r\n        delta,\r\n      });\r\n    } catch (error: unknown) {\r\n      const message = error instanceof Error ? error.message : String(error);\r\n      context.output.error(`Reload failed: ${message}`);\r\n      return this.error(\"RELOAD_ERROR\", `Failed to reload project: ${message}`);\r\n    }\r\n  }\r\n}\r\n\r\nexport const reloadProjectCommand = new ReloadProjectCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * OpenFileCommand - Locate a project item by name or path (slash command: `/find`)\r\n *\r\n * Search-only: takes a filename / path fragment, finds the matching project\r\n * item (by name or by `projectPath` substring), and prints its full project\r\n * path. Intentionally NOT named `/open` \u2014 actual \"open in editor\" navigation\r\n * depends on UI integration outside the ToolCommand layer, and a `/open`\r\n * that doesn't open is more surprising than helpful. Reserve `/open` for\r\n * when navigation is wired through `onActiveProjectItemChangeRequested`\r\n * (see ProjectAddButton for the existing pattern).\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\nimport { projectItemNameProvider } from \"../AutocompleteProviders\";\r\n\r\nexport class OpenFileCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"find\",\r\n    description: \"Find a project item by name or path and print its location\",\r\n    aliases: [\"locate\", \"f\"],\r\n    category: \"Project\",\r\n    requiresProject: true,\r\n    arguments: [\r\n      {\r\n        name: \"filename\",\r\n        description: \"Name or path fragment of the item to locate\",\r\n        type: \"string\",\r\n        required: true,\r\n        autocompleteProvider: projectItemNameProvider,\r\n      },\r\n    ],\r\n    isWriteCommand: false,\r\n    examples: [\"/find my_entity\", \"/locate behavior_pack/entities/sheep.json\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    if (!context.project) {\r\n      context.output.error(\"No active project \u2014 open a project before running /find.\");\r\n      return this.error(\"NO_PROJECT\", \"No active project\");\r\n    }\r\n\r\n    const validationError = this.validateRequiredArgs(args);\r\n    if (validationError) return validationError;\r\n\r\n    const query = args[0];\r\n    const lower = query.toLowerCase();\r\n    const items = context.project.items || [];\r\n\r\n    const matches = items.filter((item) => {\r\n      const name = (item.name || \"\").toLowerCase();\r\n      const path = (item.projectPath || \"\").toLowerCase();\r\n      return name === lower || name.includes(lower) || path.includes(lower);\r\n    });\r\n\r\n    if (matches.length === 0) {\r\n      const message = `No project item matches '${query}'.`;\r\n      context.output.warn(message);\r\n      return this.error(\"ITEM_NOT_FOUND\", message);\r\n    }\r\n\r\n    const exact = matches.find((item) => (item.name || \"\").toLowerCase() === lower);\r\n    const primary = exact || matches[0];\r\n\r\n    context.output.success(`Found: ${primary.name}`);\r\n    if (primary.projectPath) {\r\n      context.output.info(`Path: ${primary.projectPath}`);\r\n    }\r\n\r\n    if (matches.length > 1) {\r\n      context.output.info(`(${matches.length - 1} other match${matches.length - 1 === 1 ? \"\" : \"es\"})`);\r\n      const limit = Math.min(matches.length, 6);\r\n      for (let i = 0; i < limit; i++) {\r\n        const m = matches[i];\r\n        if (m === primary) continue;\r\n        context.output.info(`  \u2022 ${m.name} \u2014 ${m.projectPath || \"(no path)\"}`);\r\n      }\r\n    }\r\n\r\n    return this.success(`Located ${primary.name}`, {\r\n      query,\r\n      match: {\r\n        name: primary.name,\r\n        projectPath: primary.projectPath,\r\n        itemType: primary.itemType,\r\n      },\r\n      totalMatches: matches.length,\r\n    });\r\n  }\r\n}\r\n\r\nexport const openFileCommand = new OpenFileCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * FormatDocumentCommand - Hint about format-on-save behavior\r\n *\r\n * Informational only. Explains that format-on-save is now off by\r\n * default, that switching back to a visual editor mode reformats\r\n * the document automatically, and how to re-enable\r\n * `formatBeforeSave` from the Settings panel.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class FormatDocumentCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"format\",\r\n    description: \"Explain how document formatting works and how to enable format-on-save\",\r\n    aliases: [\"fmt\"],\r\n    category: \"General\",\r\n    isWriteCommand: false,\r\n    examples: [\"/format\", \"/fmt\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const lines = [\r\n      \"Format-on-save is OFF by default \u2014 your raw JSON / TS files are saved exactly as you typed them.\",\r\n      \"Switching from Raw mode back to a visual editor (Focused or Full) will reformat the document automatically.\",\r\n      \"To re-enable format-on-save for ALL saves: open the Settings panel and toggle 'Format documents before saving' ON.\",\r\n    ];\r\n\r\n    let formatBeforeSave: boolean | undefined;\r\n    if (context.creatorTools) {\r\n      try {\r\n        formatBeforeSave = context.creatorTools.formatBeforeSave;\r\n        lines.push(`Current setting: formatBeforeSave = ${formatBeforeSave ? \"on\" : \"off\"}.`);\r\n      } catch {\r\n        // ignore \u2014 settings access is best-effort here\r\n      }\r\n    }\r\n\r\n    for (const line of lines) {\r\n      context.output.info(line);\r\n    }\r\n\r\n    return this.success(\"Displayed formatting guidance\", {\r\n      formatBeforeSave,\r\n      hint: \"Settings panel \u2192 Format documents before saving\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const formatDocumentCommand = new FormatDocumentCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * OpenSettingsCommand - Pointer to the Settings panel\r\n *\r\n * Informational only. Tells the user where to find the Settings\r\n * panel (CreatorToolsSettingsPanel) so they can adjust theme,\r\n * mode, format-on-save, and other preferences. The slash bar\r\n * does not navigate the UI directly.\r\n */\r\n\r\nimport type { IToolCommandMetadata, IToolCommandResult } from \"../IToolCommand\";\r\nimport { ToolCommandBase } from \"../IToolCommand\";\r\nimport type { IToolCommandContext } from \"../IToolCommandContext\";\r\n\r\nexport class OpenSettingsCommand extends ToolCommandBase {\r\n  readonly metadata: IToolCommandMetadata = {\r\n    name: \"settings\",\r\n    description: \"Show how to open the Settings panel\",\r\n    aliases: [\"prefs\"],\r\n    category: \"General\",\r\n    isWriteCommand: false,\r\n    examples: [\"/settings\", \"/prefs\"],\r\n  };\r\n\r\n  async execute(\r\n    context: IToolCommandContext,\r\n    _args: string[],\r\n    _flags: Record<string, string | boolean | string[]>\r\n  ): Promise<IToolCommandResult> {\r\n    const lines = [\r\n      \"Settings live on the Home screen \u2014 click the gear / 'Settings' button on the home page to open the Settings panel.\",\r\n      \"From there you can change theme, edit mode (Focused / Full / Raw), format-on-save, and other preferences.\",\r\n      \"Quick alternatives: use /mode <focused|full|raw> to switch edit mode, or /format for formatting guidance.\",\r\n    ];\r\n\r\n    for (const line of lines) {\r\n      context.output.info(line);\r\n    }\r\n\r\n    return this.success(\"Displayed Settings guidance\", {\r\n      hint: \"Home page \u2192 Settings panel\",\r\n    });\r\n  }\r\n}\r\n\r\nexport const openSettingsCommand = new OpenSettingsCommand();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Command index - exports all ToolCommands\r\n *\r\n * NOTE: ServerCommand is NOT exported here because it imports Node.js-only\r\n * modules (net, child_process, os, timers) via DedicatedServer.ts.\r\n * Use registerNodeOnlyCommands() to register it in Node.js entry points.\r\n */\r\n\r\nexport { helpCommand, HelpCommand } from \"./HelpCommand\";\r\nexport { createCommand, CreateCommand } from \"./CreateCommand\";\r\nexport { addCommand, AddCommand } from \"./AddCommand\";\r\nexport { removeCommand, RemoveCommand } from \"./RemoveCommand\";\r\nexport { renameCommand, RenameCommand } from \"./RenameCommand\";\r\nexport { scriptCommand, ScriptCommand } from \"./ScriptCommand\";\r\nexport { openSampleCommand, OpenSampleCommand } from \"./OpenSampleCommand\";\r\nexport { validateCommand, ValidateCommand } from \"./ValidateCommand\";\r\nexport { infoCommand, InfoCommand } from \"./InfoCommand\";\r\nexport { exportCommand, ExportCommand } from \"./ExportCommand\";\r\nexport { deployCommand, DeployCommand } from \"./DeployCommand\";\r\nexport { switchModeCommand, SwitchModeCommand } from \"./SwitchModeCommand\";\r\nexport { toggleInspectorCommand, ToggleInspectorCommand } from \"./ToggleInspectorCommand\";\r\nexport { reloadProjectCommand, ReloadProjectCommand } from \"./ReloadProjectCommand\";\r\nexport { openFileCommand, OpenFileCommand } from \"./OpenFileCommand\";\r\nexport { formatDocumentCommand, FormatDocumentCommand } from \"./FormatDocumentCommand\";\r\nexport { openSettingsCommand, OpenSettingsCommand } from \"./OpenSettingsCommand\";\r\n\r\nimport { helpCommand } from \"./HelpCommand\";\r\nimport { createCommand } from \"./CreateCommand\";\r\nimport { addCommand } from \"./AddCommand\";\r\nimport { removeCommand } from \"./RemoveCommand\";\r\nimport { renameCommand } from \"./RenameCommand\";\r\nimport { scriptCommand } from \"./ScriptCommand\";\r\nimport { openSampleCommand } from \"./OpenSampleCommand\";\r\nimport { validateCommand } from \"./ValidateCommand\";\r\nimport { infoCommand } from \"./InfoCommand\";\r\nimport { exportCommand } from \"./ExportCommand\";\r\nimport { deployCommand } from \"./DeployCommand\";\r\nimport { switchModeCommand } from \"./SwitchModeCommand\";\r\nimport { toggleInspectorCommand } from \"./ToggleInspectorCommand\";\r\nimport { reloadProjectCommand } from \"./ReloadProjectCommand\";\r\nimport { openFileCommand } from \"./OpenFileCommand\";\r\nimport { formatDocumentCommand } from \"./FormatDocumentCommand\";\r\nimport { openSettingsCommand } from \"./OpenSettingsCommand\";\r\nimport type { IToolCommand } from \"../IToolCommand\";\r\nimport { ToolCommandRegistry } from \"../ToolCommandRegistry\";\r\n\r\n/**\r\n * All built-in ToolCommands that are safe for all build targets (web, Node.js, Electron).\r\n * ServerCommand is excluded because it transitively imports Node.js-only modules.\r\n */\r\nexport const allToolCommands: IToolCommand[] = [\r\n  helpCommand,\r\n  createCommand,\r\n  addCommand,\r\n  removeCommand,\r\n  renameCommand,\r\n  scriptCommand,\r\n  openSampleCommand,\r\n  validateCommand,\r\n  infoCommand,\r\n  exportCommand,\r\n  deployCommand,\r\n  switchModeCommand,\r\n  toggleInspectorCommand,\r\n  reloadProjectCommand,\r\n  openFileCommand,\r\n  formatDocumentCommand,\r\n  openSettingsCommand,\r\n];\r\n\r\n/**\r\n * Register all platform-safe built-in commands with the registry.\r\n */\r\nexport function registerAllToolCommands(): void {\r\n  ToolCommandRegistry.instance.registerAll(allToolCommands);\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ToolCommands - Unified command system for Minecraft Creator Tools\r\n *\r\n * This module provides a unified way to register and invoke commands across:\r\n * - CLI (via thin adapter)\r\n * - MCP tools\r\n * - In-game edit bar (SearchCommandEditor)\r\n * - Serve mode interactive terminal\r\n * - Server management UI\r\n * - Home page command bar\r\n *\r\n * USAGE:\r\n * ```typescript\r\n * import { ToolCommandRegistry, initializeToolCommands } from \"./toolcommands\";\r\n *\r\n * // Initialize (registers all built-in commands)\r\n * initializeToolCommands();\r\n *\r\n * // Execute a command\r\n * const result = await ToolCommandRegistry.instance.execute(\"/help\", context);\r\n *\r\n * // Get autocomplete suggestions\r\n * const completions = await ToolCommandRegistry.instance.getCompletions(\"/cr\", 3, context);\r\n * ```\r\n */\r\n\r\n// Core interfaces\r\nexport type { IToolCommand, IToolCommandMetadata, IToolCommandResult } from \"./IToolCommand\";\r\nexport { ToolCommandBase, ToolCommandScope } from \"./IToolCommand\";\r\nexport type { IToolCommandArgument, IToolCommandFlag, AutocompleteProvider } from \"./IToolCommandArgument\";\r\nexport type { IToolCommandContext, IToolCommandOutput, IToolCommandSession } from \"./IToolCommandContext\";\r\nexport { ToolCommandContextFactory } from \"./IToolCommandContext\";\r\n\r\n// Registry and parser\r\nexport { ToolCommandRegistry } from \"./ToolCommandRegistry\";\r\nexport { ToolCommandParser } from \"./ToolCommandParser\";\r\nexport type { ParsedToolCommand } from \"./ToolCommandParser\";\r\n\r\n\r\n\r\n// Autocomplete providers\r\nexport * from \"./AutocompleteProviders\";\r\n\r\n// Commands\r\nexport * from \"./commands\";\r\n\r\nimport { registerAllToolCommands } from \"./commands\";\r\n\r\nlet _initialized = false;\r\n\r\n/**\r\n * Initialize the ToolCommand system by registering all built-in commands.\r\n * Safe to call multiple times (only initializes once).\r\n *\r\n * NOTE: This registers only platform-safe commands. For Node.js-only commands\r\n * (e.g., ServerCommand), call registerNodeOnlyCommands() from\r\n * \"./registerNodeCommands\" in your Node.js entry point.\r\n */\r\nexport function initializeToolCommands(): void {\r\n  if (_initialized) return;\r\n  _initialized = true;\r\n  registerAllToolCommands();\r\n}\r\n\r\n/**\r\n * Check if ToolCommands have been initialized.\r\n */\r\nexport function isToolCommandsInitialized(): boolean {\r\n  return _initialized;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport CommandStructure from \"./CommandStructure\";\r\nimport { CommandStatus, ICommandResult } from \"./ICommand\";\r\nimport IContext from \"./IContext\";\r\nimport { ToolCommandRegistry, initializeToolCommands } from \"./toolcommands\";\r\nimport type { IToolCommandContext, IToolCommandOutput } from \"./toolcommands\";\r\n\r\nexport enum CommandScope {\r\n  any = 1,\r\n  project = 2,\r\n  minecraft = 3,\r\n  carto = 4,\r\n  host = 5,\r\n\r\n  debug = 10,\r\n  debugProject = 11,\r\n  debugMinecraft = 12,\r\n  debugHost = 14,\r\n}\r\n\r\nconst MinecraftCommands = [\r\n  \"aimassist\",\r\n  \"allowlist\",\r\n  \"alwaysday\",\r\n  \"camera\",\r\n  \"camerashake\",\r\n  \"changesetting\",\r\n  \"clear\",\r\n  \"clearspawnpoint\",\r\n  \"clone\",\r\n  \"commandbuilder\",\r\n  \"connect\",\r\n  \"controlscheme\",\r\n  \"damage\",\r\n  \"daylock\",\r\n  \"deop\",\r\n  \"dialogue\",\r\n  \"difficulty\",\r\n  \"effect\",\r\n  \"enchant\",\r\n  \"event\",\r\n  \"execute\",\r\n  \"fill\",\r\n  \"fog\",\r\n  \"function\",\r\n  \"gamemode\",\r\n  \"gamerule\",\r\n  \"gametest\",\r\n  \"give\",\r\n  \"help\",\r\n  \"hud\",\r\n  \"inputpermission\",\r\n  \"kick\",\r\n  \"kill\",\r\n  \"list\",\r\n  \"locate\",\r\n  \"loot\",\r\n  \"me\",\r\n  \"msg\",\r\n  \"mobevent\",\r\n  \"music\",\r\n  \"op\",\r\n  \"ops\",\r\n  \"particle\",\r\n  \"permission\",\r\n  \"place\",\r\n  \"playanimation\",\r\n  \"playsound\",\r\n  \"project\",\r\n  \"recipe\",\r\n  \"reload\",\r\n  \"reloadconfig\",\r\n  \"reloadpacketlimitconfig\",\r\n  \"replaceitem\",\r\n  \"ride\",\r\n  \"save\",\r\n  \"say\",\r\n  \"schedule\",\r\n  \"scoreboard\",\r\n  \"script\",\r\n  \"scriptevent\",\r\n  \"sendshowstoreoffer\",\r\n  \"setblock\",\r\n  \"setmaxplayers\",\r\n  \"setworldspawn\",\r\n  \"simulationtype\",\r\n  \"spawnpoint\",\r\n  \"spreadplayers\",\r\n  \"stop\",\r\n  \"stopsound\",\r\n  \"structure\",\r\n  \"summon\",\r\n  \"tag\",\r\n  \"teleport\",\r\n  \"tell\",\r\n  \"tellraw\",\r\n  \"testfor\",\r\n  \"testforblock\",\r\n  \"testforblocks\",\r\n  \"tickingarea\",\r\n  \"tp\",\r\n  \"time\",\r\n  \"title\",\r\n  \"titleraw\",\r\n  \"toggledownfall\",\r\n  \"transfer\",\r\n  \"volumearea\",\r\n  \"weather\",\r\n  \"wsserver\",\r\n  \"whitelist\",\r\n  \"?\",\r\n  \"w\",\r\n  \"xp\",\r\n];\r\n\r\nconst MinecraftAddOnBlockedCommands = [\r\n  \"allowlist\",\r\n  \"alwaysday\",\r\n  \"changesetting\",\r\n  \"connect\",\r\n  \"daylock\",\r\n  \"deop\",\r\n  \"difficulty\",\r\n  \"gamemode\",\r\n  \"gamerule\",\r\n  \"gametest\",\r\n  \"help\",\r\n  \"kick\",\r\n  \"list\",\r\n  \"locate\",\r\n  \"op\",\r\n  \"ops\",\r\n  \"permission\",\r\n  \"project\",\r\n  \"reload\",\r\n  \"reloadconfig\",\r\n  \"save\",\r\n  \"script\",\r\n  \"setmaxplayers\",\r\n  \"setworldspawn\",\r\n  \"simulationtype\",\r\n  \"stop\",\r\n  \"tickingarea\",\r\n  \"time\",\r\n  \"transfer\",\r\n  \"wsserver\",\r\n  \"whitelist\",\r\n  \"?\",\r\n];\r\n\r\nexport default class CommandRegistry {\r\n  private static _registry?: CommandRegistry;\r\n\r\n  private _commandsByName: {\r\n    [name: string]: (context: IContext, name: string, argumentCollection: string[]) => Promise<ICommandResult>;\r\n  } = {};\r\n  private _commandsByScope: { [name: string]: CommandScope } = {};\r\n\r\n  public static get main() {\r\n    if (!this._registry) {\r\n      this._registry = new CommandRegistry();\r\n\r\n      this._registry.registerCommand(\r\n        \"sleep\",\r\n        CommandScope.any,\r\n        async (context: IContext, name: string, args: string[]): Promise<ICommandResult> => {\r\n          if (args.length === 1) {\r\n            let delay = 0;\r\n            try {\r\n              delay = parseInt(args[0]);\r\n            } catch (e) {}\r\n\r\n            if (delay > 0) {\r\n              context.creatorTools.notifyStatusUpdate(\"(Delaying commands for \" + delay + \"ms).\");\r\n\r\n              await Utilities.sleep(delay);\r\n            }\r\n          }\r\n\r\n          return { status: CommandStatus.completed };\r\n        }\r\n      );\r\n    }\r\n\r\n    return this._registry;\r\n  }\r\n\r\n  registerCommand(\r\n    commandName: string,\r\n    commandScope: CommandScope,\r\n    command: (context: IContext, name: string, argumentCollection: string[]) => Promise<ICommandResult>\r\n  ) {\r\n    commandName = commandName.toLowerCase();\r\n\r\n    if (Utilities.isUsableAsObjectKey(commandName)) {\r\n      this._commandsByName[commandName] = command;\r\n      this._commandsByScope[commandName] = commandScope;\r\n    } else {\r\n      Log.unsupportedToken(commandName);\r\n    }\r\n  }\r\n\r\n  logHelp() {\r\n    let commandArr = [];\r\n\r\n    for (const commandName in this._commandsByName) {\r\n      commandArr.push(commandName);\r\n    }\r\n\r\n    commandArr = commandArr.sort();\r\n\r\n    Log.message(\"Use help <command name> for more detailed help on a command.\");\r\n\r\n    for (let i = 0; i < commandArr.length; i++) {\r\n      Log.message(commandArr[i]);\r\n    }\r\n  }\r\n\r\n  static isMinecraftBuiltInCommand(name: string) {\r\n    return MinecraftCommands.includes(name) || name === \"#\";\r\n  }\r\n\r\n  static isAddOnBlockedCommand(name: string) {\r\n    return MinecraftAddOnBlockedCommands.includes(name);\r\n  }\r\n\r\n  /**\r\n   * Create an IToolCommandOutput from IContext for ToolCommand execution.\r\n   */\r\n  private createToolCommandOutput(context: IContext): IToolCommandOutput {\r\n    return {\r\n      info: (msg) => {\r\n        Log.message(msg);\r\n        context.creatorTools.notifyStatusUpdate(msg);\r\n      },\r\n      success: (msg) => {\r\n        Log.message(\"\u2713 \" + msg);\r\n        context.creatorTools.notifyStatusUpdate(msg);\r\n      },\r\n      warn: (msg) => Log.debug(msg),\r\n      error: (msg) => Log.error(msg),\r\n      debug: (msg) => Log.verbose(msg),\r\n      progress: (current, total, msg) => {\r\n        const pct = Math.round((current / total) * 100);\r\n        context.creatorTools.notifyStatusUpdate(`[${pct}%] ${msg || \"\"}`);\r\n      },\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Create an IToolCommandContext from the app's IContext.\r\n   */\r\n  private createToolCommandContext(context: IContext): IToolCommandContext {\r\n    return {\r\n      creatorTools: context.creatorTools,\r\n      project: context.project,\r\n      minecraft: context.minecraft,\r\n      output: this.createToolCommandOutput(context),\r\n      scope: \"ui\",\r\n    };\r\n  }\r\n\r\n  async runCommand(context: IContext, commandText: string): Promise<ICommandResult | undefined> {\r\n    const command = CommandStructure.parse(commandText);\r\n\r\n    if (!command || !command.fullName || !command.commandArguments) {\r\n      return undefined;\r\n    }\r\n\r\n    // Initialize ToolCommands if not already done\r\n    initializeToolCommands();\r\n\r\n    // Check ToolCommandRegistry first (except for Minecraft built-in commands other than \"help\")\r\n    // The \"help\" command is special - we want our unified help to handle it\r\n    const toolRegistry = ToolCommandRegistry.instance;\r\n\r\n    if (command.fullName === \"help\" || !CommandRegistry.isMinecraftBuiltInCommand(command.fullName)) {\r\n      if (toolRegistry.has(command.fullName)) {\r\n        const toolContext = this.createToolCommandContext(context);\r\n        const result = await toolRegistry.execute(commandText, toolContext);\r\n\r\n        if (result) {\r\n          if (result.success) {\r\n            return { status: CommandStatus.completed, data: result.data };\r\n          } else {\r\n            Log.error(result.error?.message || \"Command failed\");\r\n            return { status: CommandStatus.invalidArguments };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const scope = this._commandsByScope[command.fullName];\r\n    const commandName = this._commandsByName[command.fullName];\r\n\r\n    // Pass through Minecraft built-in commands (except \"help\" which is handled above)\r\n    if (\r\n      CommandRegistry.isMinecraftBuiltInCommand(command.fullName) &&\r\n      command.fullName !== \"help\" &&\r\n      context.minecraft\r\n    ) {\r\n      Log.debug(\"Sending '\" + commandText + \"' to Minecraft.\");\r\n\r\n      let result = await context.minecraft.runCommand(commandText);\r\n\r\n      return {\r\n        data: result,\r\n        status: CommandStatus.completed,\r\n      };\r\n    } else if (scope && commandName) {\r\n      if (\r\n        (scope === CommandScope.debug ||\r\n          scope === CommandScope.debugProject ||\r\n          scope === CommandScope.debugMinecraft) &&\r\n        !Utilities.isDebug\r\n      ) {\r\n        return undefined;\r\n      }\r\n\r\n      if ((scope === CommandScope.project || scope === CommandScope.debugProject) && !context.project) {\r\n        Log.message(\"Could not run command '\" + command.fullName + \"'; no active project.\");\r\n        return undefined;\r\n      }\r\n\r\n      if ((scope === CommandScope.minecraft || scope === CommandScope.debugMinecraft) && !context.minecraft) {\r\n        Log.message(\"Could not run command '\" + command.fullName + \"'; no active Minecraft deploy target was set.\");\r\n        return undefined;\r\n      }\r\n\r\n      if ((scope === CommandScope.host || scope === CommandScope.debugHost) && !context.host) {\r\n        Log.message(\"Could not run command '\" + command.fullName + \"'; no host was set.\");\r\n        return undefined;\r\n      }\r\n\r\n      const result = await commandName(context, command.fullName, command.commandArguments);\r\n\r\n      if (result.status === CommandStatus.invalidEnvironment) {\r\n        Log.error(\"'\" + command.fullName + \"' was not set up properly.\");\r\n      } else if (result.status === CommandStatus.invalidArguments) {\r\n        Log.error(\"'\" + command.fullName + \"' command arguments were not set up.\");\r\n      }\r\n\r\n      return result;\r\n    }\r\n\r\n    context.creatorTools.notifyStatusUpdate(\"Could not find a command '\" + command.fullName + \"'.\");\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IDialogueWrapper, { IDialogueSceneButton } from \"./IDialogue\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class Dialogue {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public definition?: IDialogueWrapper;\r\n\r\n  private _onLoaded = new EventDispatcher<Dialogue, Dialogue>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<Dialogue, Dialogue>) {\r\n    let dia: Dialogue | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dia = new Dialogue();\r\n\r\n      dia.file = file;\r\n\r\n      file.manager = dia;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof Dialogue) {\r\n      dia = file.manager as Dialogue;\r\n\r\n      if (!dia.isLoaded) {\r\n        if (loadHandler) {\r\n          dia.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await dia.load();\r\n      }\r\n    }\r\n\r\n    return dia;\r\n  }\r\n\r\n  getAllButtons() {\r\n    const buttons: IDialogueSceneButton[] = [];\r\n\r\n    if (\r\n      this.definition &&\r\n      this.definition[\"minecraft:npc_dialogue\"] &&\r\n      Array.isArray(this.definition[\"minecraft:npc_dialogue\"].scenes)\r\n    ) {\r\n      for (const scene of this.definition[\"minecraft:npc_dialogue\"].scenes) {\r\n        if (scene && scene.buttons && Array.isArray(scene.buttons)) {\r\n          for (const button of scene.buttons) {\r\n            buttons.push(button);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return buttons;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"DGUEP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  public ensureDefinition(name: string, description: string) {\r\n    if (!this.definition) {\r\n      this.definition = {\r\n        format_version: \"1.12.0\",\r\n        \"minecraft:npc_dialogue\": {\r\n          scenes: [],\r\n        },\r\n      };\r\n    }\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.definition = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport Log from \"../core/Log\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport CommandBlockActor from \"../minecraft/blockActors/CommandBlockActor\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport CommandStructure from \"../app/CommandStructure\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport CommandRegistry from \"../app/CommandRegistry\";\r\nimport Dialogue from \"../minecraft/Dialogue\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport { NbtTagType } from \"../minecraft/NbtBinaryTag\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationControllerBehaviorDefinition\";\r\nimport AnimationBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport { GameType } from \"../minecraft/WorldLevelDat\";\r\n\r\nimport { IGeneratorOptions, ResourceConsumptionConstraint } from \"./ProjectInfoSet\";\r\n\r\nexport const MaxWorldRecordsToProcess = 3000000; // very crudely, this equates to about 100K chunks\r\n\r\n/**\r\n * Validates and aggregates world data including command blocks and level.dat information.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/worlddata.form.json} for topic definitions\r\n */\r\nexport enum WorldDataInfoGeneratorTest {\r\n  unexpectedCommandInMCFunction = 101,\r\n  unexpectedCommandInCommandBlock = 102,\r\n  minX = 103,\r\n  minZ = 104,\r\n  maxX = 105,\r\n  maxZ = 106,\r\n  containsWorldImpactingCommand = 112,\r\n  blocks = 121,\r\n  blockData = 122,\r\n  command = 123,\r\n  executeSubCommand = 124,\r\n  levelDat = 125,\r\n  levelDatExperiments = 126,\r\n  subchunklessChunks = 127,\r\n  chunks = 128,\r\n  commandIsFromOlderMinecraftVersion = 212,\r\n  couldNotProcessWorld = 216,\r\n  errorProcessingWorld = 400,\r\n  unexpectedError = 401,\r\n}\r\n\r\nexport default class WorldDataInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"WORLDDATA\";\r\n  title = \"World Data Validation\";\r\n\r\n  modernCommandVersion = 33; // corresponds to 1.20.0 versions of Minecraft.\r\n\r\n  performAddOnValidations = false;\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.chunkCount = infoSet.getSummedDataValue(\"WORLDDATA\", WorldDataInfoGeneratorTest.chunks);\r\n\r\n    info.subchunkLessChunkCount = infoSet.getSummedDataValue(\r\n      \"WORLDDATA\",\r\n      WorldDataInfoGeneratorTest.subchunklessChunks\r\n    );\r\n\r\n    info.completedWorldDataProcessing =\r\n      infoSet.getCount(\"WORLDDATA\", WorldDataInfoGeneratorTest.couldNotProcessWorld) === 0;\r\n\r\n    info.worldLoadErrors = infoSet.getCount(\"WORLDDATA\", WorldDataInfoGeneratorTest.errorProcessingWorld);\r\n\r\n    const levelItems = infoSet.getItems(this.id, WorldDataInfoGeneratorTest.levelDat);\r\n    const capabilitiesSet = new Set(info.capabilities);\r\n\r\n    for (const levelItem of levelItems) {\r\n      if (levelItem && levelItem.featureSets) {\r\n        const gameType = levelItem.featureSets.GameType;\r\n\r\n        if (gameType !== undefined) {\r\n          if (gameType[GameType.adventure] !== undefined && gameType[GameType.adventure] > 0) {\r\n            if (!capabilitiesSet.has(\"adventure\")) {\r\n              info.capabilities.push(\"adventure\");\r\n              capabilitiesSet.add(\"adventure\");\r\n            }\r\n          }\r\n          if (gameType[GameType.survival] !== undefined && gameType[GameType.survival] > 0) {\r\n            if (!capabilitiesSet.has(\"survival\")) {\r\n              info.capabilities.push(\"survival\");\r\n              capabilitiesSet.add(\"survival\");\r\n            }\r\n          }\r\n          if (gameType[GameType.creative] !== undefined && gameType[GameType.creative] > 0) {\r\n            if (!capabilitiesSet.has(\"creative\")) {\r\n              info.capabilities.push(\"creative\");\r\n              capabilitiesSet.add(\"creative\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.commands = [];\r\n    const commandsSet = new Set<string>();\r\n\r\n    const commandItems = infoSet.getItems(this.id, WorldDataInfoGeneratorTest.command);\r\n    const subCommandItems = infoSet.getItems(this.id, WorldDataInfoGeneratorTest.executeSubCommand);\r\n\r\n    for (const commandItem of commandItems) {\r\n      let commandNames = commandItem.featureSets;\r\n\r\n      if (commandNames) {\r\n        for (const commandName in commandNames) {\r\n          if (!commandsSet.has(commandName)) {\r\n            info.commands.push(commandName);\r\n            commandsSet.add(commandName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const commandItem of subCommandItems) {\r\n      let commandNames = commandItem.featureSets;\r\n\r\n      if (commandNames) {\r\n        for (const commandName in commandNames) {\r\n          if (!commandsSet.has(commandName)) {\r\n            info.commands.push(commandName);\r\n            commandsSet.add(commandName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.commands.sort();\r\n  }\r\n\r\n  processListOfCommands(\r\n    commandList: string[],\r\n    items: ProjectInfoItem[],\r\n    projectItem: ProjectItem,\r\n    commandsPi: ProjectInfoItem,\r\n    subCommandsPi: ProjectInfoItem,\r\n    checkForSlash: boolean\r\n  ) {\r\n    for (let i = 0; i < commandList.length; i++) {\r\n      if (commandList[i].trim().length > 0 && (!checkForSlash || commandList[i].startsWith(\"/\"))) {\r\n        const command = CommandStructure.parse(commandList[i]);\r\n\r\n        if (command.fullName.length === 0) {\r\n          continue;\r\n        }\r\n\r\n        if (CommandRegistry.isMinecraftBuiltInCommand(command.fullName)) {\r\n          if (this.performAddOnValidations && CommandRegistry.isAddOnBlockedCommand(command.fullName)) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.warning,\r\n                this.id,\r\n                WorldDataInfoGeneratorTest.containsWorldImpactingCommand,\r\n                \"Contains command '\" +\r\n                  command.fullName +\r\n                  \"' which is impacts the state of the entire world, and generally shouldn't be used in an add-on\",\r\n                projectItem,\r\n                command.fullName,\r\n                undefined,\r\n                commandList[i]\r\n              )\r\n            );\r\n          }\r\n          commandsPi.incrementFeature(command.fullName);\r\n\r\n          if (command.fullName === \"execute\") {\r\n            let foundRun = false;\r\n            for (const arg of command.commandArguments) {\r\n              if (arg === \"run\") {\r\n                foundRun = true;\r\n              } else if (foundRun && CommandRegistry.isMinecraftBuiltInCommand(arg)) {\r\n                subCommandsPi.incrementFeature(arg);\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        } else if (!this.performPlatformVersionValidations && !this.performAddOnValidations) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              WorldDataInfoGeneratorTest.unexpectedCommandInCommandBlock,\r\n              \"Unexpected command '\" + command.fullName + \"'\",\r\n              projectItem,\r\n              command.fullName,\r\n              undefined,\r\n              commandList[i]\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async generate(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    options?: IGeneratorOptions\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const performAggressiveCleanup = options?.performAggressiveCleanup ?? false;\r\n    const onProgress = options?.onProgress;\r\n\r\n    if (\r\n      projectItem.itemType !== ProjectItemType.MCWorld &&\r\n      projectItem.itemType !== ProjectItemType.MCTemplate &&\r\n      projectItem.itemType !== ProjectItemType.worldFolder &&\r\n      projectItem.itemType !== ProjectItemType.dialogueBehaviorJson &&\r\n      projectItem.itemType !== ProjectItemType.animationControllerBehaviorJson &&\r\n      projectItem.itemType !== ProjectItemType.animationBehaviorJson &&\r\n      projectItem.itemType !== ProjectItemType.MCFunction\r\n    ) {\r\n      return items;\r\n    }\r\n\r\n    // Determine if this is a world-type item (needs all aggregates) or just command-related\r\n    const isWorldType =\r\n      projectItem.itemType === ProjectItemType.MCWorld ||\r\n      projectItem.itemType === ProjectItemType.MCTemplate ||\r\n      projectItem.itemType === ProjectItemType.worldFolder;\r\n\r\n    // World-specific aggregates - only create for world items\r\n    let blocksPi: ProjectInfoItem | undefined;\r\n    let blockActorsPi: ProjectInfoItem | undefined;\r\n    let nbtPi: ProjectInfoItem | undefined;\r\n    let nbtExperimentsPi: ProjectInfoItem | undefined;\r\n\r\n    if (isWorldType) {\r\n      blocksPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.blocks,\r\n        ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.blocks),\r\n        projectItem\r\n      );\r\n      items.push(blocksPi);\r\n\r\n      blockActorsPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.blockData,\r\n        ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.blockData),\r\n        projectItem\r\n      );\r\n      items.push(blockActorsPi);\r\n\r\n      nbtPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.levelDat,\r\n        ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.levelDat),\r\n        projectItem\r\n      );\r\n      items.push(nbtPi);\r\n\r\n      nbtExperimentsPi = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        WorldDataInfoGeneratorTest.levelDatExperiments,\r\n        ProjectInfoUtilities.getTitleFromEnum(\r\n          WorldDataInfoGeneratorTest,\r\n          WorldDataInfoGeneratorTest.levelDatExperiments\r\n        ),\r\n        projectItem\r\n      );\r\n      items.push(nbtExperimentsPi);\r\n    }\r\n\r\n    // Command aggregates - used by all supported item types\r\n    const commandsPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      WorldDataInfoGeneratorTest.command,\r\n      ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.command),\r\n      projectItem\r\n    );\r\n    items.push(commandsPi);\r\n\r\n    const subCommandsPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      WorldDataInfoGeneratorTest.executeSubCommand,\r\n      ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.executeSubCommand),\r\n      projectItem\r\n    );\r\n    items.push(subCommandsPi);\r\n\r\n    if (projectItem.itemType === ProjectItemType.dialogueBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const diaManifest = await Dialogue.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (diaManifest && diaManifest.definition && diaManifest.definition[\"minecraft:npc_dialogue\"]) {\r\n          let scenes = diaManifest.definition[\"minecraft:npc_dialogue\"].scenes;\r\n\r\n          for (const scene of scenes) {\r\n            if (scene.on_open_commands) {\r\n              this.processListOfCommands(scene.on_open_commands, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n            if (scene.on_close_commands) {\r\n              this.processListOfCommands(scene.on_close_commands, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n          let buttons = diaManifest.getAllButtons();\r\n\r\n          for (const button of buttons) {\r\n            if (button.commands) {\r\n              this.processListOfCommands(button.commands, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationControllerBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const acManifest = await AnimationControllerBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (acManifest && acManifest.data && acManifest.data.animation_controllers) {\r\n          let states = acManifest.getAllStates();\r\n\r\n          for (const state of states) {\r\n            if (state.state.on_entry) {\r\n              this.processListOfCommands(state.state.on_entry, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n\r\n            if (state.state.on_exit) {\r\n              this.processListOfCommands(state.state.on_exit, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.animationBehaviorJson) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (projectItem.primaryFile) {\r\n        const animManifest = await AnimationBehaviorDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n        if (animManifest && animManifest.data && animManifest.data.animations) {\r\n          let timelines = animManifest.getAllTimeline();\r\n\r\n          for (const timeline of timelines) {\r\n            if (timeline.timeline) {\r\n              this.processListOfCommands(timeline.timeline, items, projectItem, commandsPi, subCommandsPi, true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else if (projectItem.itemType === ProjectItemType.MCFunction) {\r\n      let content = await projectItem.getStringContent();\r\n\r\n      if (content !== undefined) {\r\n        let contentLines = content.split(\"\\n\");\r\n\r\n        this.processListOfCommands(contentLines, items, projectItem, commandsPi, subCommandsPi, false);\r\n      }\r\n    }\r\n\r\n    if (\r\n      projectItem.itemType === ProjectItemType.MCWorld ||\r\n      projectItem.itemType === ProjectItemType.MCTemplate ||\r\n      projectItem.itemType === ProjectItemType.worldFolder\r\n    ) {\r\n      let mcworld: MCWorld | undefined = await MCWorld.ensureOnItem(projectItem);\r\n\r\n      if (!mcworld) {\r\n        Log.debugAlert(\"Could not find respective world.\");\r\n        return items;\r\n      }\r\n\r\n      await mcworld.loadMetaFiles(false);\r\n\r\n      // Determine whether to apply record processing limits based on resource consumption constraint\r\n      const constrainResources = options?.constrainResourceConsumption !== ResourceConsumptionConstraint.none;\r\n      const maxRecordsToProcess = constrainResources ? MaxWorldRecordsToProcess : undefined;\r\n\r\n      let didProcessWorldData = await mcworld.loadLevelDb(false, {\r\n        maxNumberOfRecordsToProcess: maxRecordsToProcess,\r\n      });\r\n\r\n      if (\r\n        mcworld.isInErrorState &&\r\n        mcworld.errorMessages &&\r\n        !this.performAddOnValidations &&\r\n        !this.performPlatformVersionValidations\r\n      ) {\r\n        for (const err of mcworld.errorMessages) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              WorldDataInfoGeneratorTest.errorProcessingWorld,\r\n              ProjectInfoUtilities.getTitleFromEnum(\r\n                WorldDataInfoGeneratorTest,\r\n                WorldDataInfoGeneratorTest.errorProcessingWorld\r\n              ),\r\n              projectItem,\r\n              err.message + (err.context ? \" - \" + err.context : \"\"),\r\n              mcworld.name\r\n            )\r\n          );\r\n        }\r\n\r\n        didProcessWorldData = false;\r\n      }\r\n\r\n      if (!didProcessWorldData) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            WorldDataInfoGeneratorTest.couldNotProcessWorld,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              WorldDataInfoGeneratorTest,\r\n              WorldDataInfoGeneratorTest.couldNotProcessWorld\r\n            ),\r\n            projectItem,\r\n            mcworld.name\r\n          )\r\n        );\r\n      }\r\n\r\n      if (\r\n        projectItem.projectPath &&\r\n        contentIndex &&\r\n        mcworld.levelData &&\r\n        mcworld.levelData.nbt &&\r\n        mcworld.levelData.nbt.singleRoot\r\n      ) {\r\n        const children = mcworld.levelData.nbt.singleRoot.getTagChildren();\r\n\r\n        for (const child of children) {\r\n          if (child.name === \"experiments\") {\r\n            for (const experimentChild of child.getTagChildren()) {\r\n              if (\r\n                experimentChild.type === NbtTagType.int ||\r\n                experimentChild.type === NbtTagType.byte ||\r\n                experimentChild.type === NbtTagType.string\r\n              ) {\r\n                nbtExperimentsPi?.incrementFeature(experimentChild.name, experimentChild.valueAsString);\r\n\r\n                contentIndex.insert(\r\n                  experimentChild.name + \"==\" + experimentChild.valueAsString,\r\n                  projectItem.projectPath,\r\n                  AnnotationCategory.experiment\r\n                );\r\n              }\r\n            }\r\n          } else if (\r\n            child.type === NbtTagType.int ||\r\n            child.type === NbtTagType.byte ||\r\n            child.type === NbtTagType.string\r\n          ) {\r\n            if (\r\n              child.name !== \"LevelName\" &&\r\n              child.name !== \"FlatWorldLayers\" &&\r\n              child.name !== \"lightningTime\" &&\r\n              child.name !== \"EducationOid\" &&\r\n              child.name !== \"EducationProductId\" &&\r\n              child.name !== \"rainTime\" &&\r\n              child.name !== \"worldTemplateUUID\" &&\r\n              !child.name.startsWith(\"LimitedWorld\") &&\r\n              !child.name.startsWith(\"SpawnX\") &&\r\n              !child.name.startsWith(\"SpawnY\") &&\r\n              !child.name.startsWith(\"SpawnZ\")\r\n            ) {\r\n              if (child.name.indexOf(\"ersion\") >= 0 && !child.valueAsString.startsWith(\"1.\")) {\r\n                nbtPi?.incrementFeature(child.name, \"(unknown version)\");\r\n              } else {\r\n                nbtPi?.incrementFeature(child.name, child.valueAsString);\r\n              }\r\n\r\n              contentIndex.insert(\r\n                child.name + \"==\" + child.valueAsString,\r\n                projectItem.projectPath,\r\n                AnnotationCategory.worldProperty\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.chunks,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.chunks),\r\n          projectItem,\r\n          mcworld.chunkCount,\r\n          mcworld.name\r\n        )\r\n      );\r\n\r\n      if (didProcessWorldData) {\r\n        let blockCount = 0;\r\n        let chunkCount = 0;\r\n        let subchunkLessChunkCount = 0;\r\n\r\n        // Use the memory-efficient chunk iterator with aggressive data clearing\r\n        // This prevents heap exhaustion on large worlds by clearing chunk data after processing\r\n        await mcworld.forEachChunk(\r\n          async (chunk, x, z, dimIndex) => {\r\n            chunkCount++;\r\n\r\n            if (chunk.subChunks.length <= 0) {\r\n              subchunkLessChunkCount++;\r\n            }\r\n\r\n            const blockActors = chunk.blockActors;\r\n\r\n            for (let i = 0; i < blockActors.length; i++) {\r\n              const blockActor = blockActors[i];\r\n\r\n              if (blockActor.id) {\r\n                blockActorsPi?.incrementFeature(blockActor.id);\r\n              }\r\n\r\n              if (blockActor instanceof CommandBlockActor) {\r\n                let cba = blockActor as CommandBlockActor;\r\n                if (cba.version) {\r\n                  blockActorsPi?.spectrumIntFeature(\"Command Version\", cba.version);\r\n                }\r\n\r\n                if (cba.version && cba.version < this.modernCommandVersion) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.recommendation,\r\n                      this.id,\r\n                      WorldDataInfoGeneratorTest.commandIsFromOlderMinecraftVersion,\r\n                      \"Command '\" + cba.command + \"' is from an older Minecraft version (\" + cba.version + \") \",\r\n                      projectItem,\r\n                      \"(Command at location \" + cba.x + \", \" + cba.y + \", \" + cba.z + \")\",\r\n                      undefined,\r\n                      cba.command\r\n                    )\r\n                  );\r\n                }\r\n\r\n                if (cba.command && cba.command.trim().length > 0) {\r\n                  let command = CommandStructure.parse(cba.command);\r\n\r\n                  if (command.fullName.length === 0) {\r\n                    // Skip empty command names (e.g., command block containing just \"/\")\r\n                  } else if (CommandRegistry.isMinecraftBuiltInCommand(command.fullName)) {\r\n                    if (this.performAddOnValidations && CommandRegistry.isAddOnBlockedCommand(command.fullName)) {\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.warning,\r\n                          this.id,\r\n                          WorldDataInfoGeneratorTest.containsWorldImpactingCommand,\r\n                          \"Contains command '\" +\r\n                            command.fullName +\r\n                            \"' which is impacts the state of the entire world, and generally shouldn't be used in an add-on\",\r\n                          projectItem,\r\n                          command.fullName,\r\n                          undefined,\r\n                          cba.command\r\n                        )\r\n                      );\r\n                    }\r\n\r\n                    commandsPi.incrementFeature(command.fullName);\r\n\r\n                    if (command.fullName === \"execute\") {\r\n                      let foundRun = false;\r\n                      for (const arg of command.commandArguments) {\r\n                        if (arg === \"run\") {\r\n                          foundRun = true;\r\n                        } else if (foundRun && CommandRegistry.isMinecraftBuiltInCommand(arg)) {\r\n                          subCommandsPi.incrementFeature(arg);\r\n                          break;\r\n                        }\r\n                      }\r\n                    }\r\n                  } else if (!this.performAddOnValidations && !this.performPlatformVersionValidations) {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.error,\r\n                        this.id,\r\n                        WorldDataInfoGeneratorTest.unexpectedCommandInCommandBlock,\r\n                        \"Unexpected command '\" + command.fullName + \"'\",\r\n                        projectItem,\r\n                        command.fullName,\r\n                        undefined,\r\n                        cba.command\r\n                      )\r\n                    );\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            // Use memory-efficient block type counting instead of getBlockList()\r\n            // This avoids allocating massive arrays of Block objects\r\n            const blockTypeCounts = chunk.countBlockTypes();\r\n\r\n            for (const [typeName, count] of blockTypeCounts) {\r\n              blockCount += count;\r\n\r\n              let type = typeName;\r\n              if (type.indexOf(\":\") >= 0 && type.indexOf(\"minecraft:\") < 0) {\r\n                type = \"(custom)\";\r\n              }\r\n\r\n              blocksPi?.incrementFeature(type, \"count\", count);\r\n            }\r\n          },\r\n          {\r\n            // Always clear parsed/cached data after processing each chunk to prevent OOM.\r\n            // This is non-destructive - raw LevelKeyValue bytes are preserved, so chunks\r\n            // can be re-parsed on demand (e.g., when the world map needs them).\r\n            clearCacheAfterProcess: true,\r\n            // Only clear raw LevelKeyValue data when in aggressive cleanup mode (CLI validation).\r\n            // In browser contexts, we preserve raw data so the world map can re-parse chunks.\r\n            clearAllAfterProcess: performAggressiveCleanup,\r\n            progressCallback: async (processed, total) => {\r\n              // Use worldName captured from outside closure to avoid TypeScript null check issue\r\n              const worldName = mcworld?.name ?? \"unknown\";\r\n              const chunkPercent = total > 0 ? Math.floor((processed / total) * 100) : 0;\r\n              let mess =\r\n                \"World validation: scanned \" +\r\n                Math.floor(processed / 1000) +\r\n                \"K of \" +\r\n                Math.floor(total / 1000) +\r\n                \"K chunks in \" +\r\n                worldName;\r\n\r\n              // Report granular progress via onProgress callback if available\r\n              // Map chunk progress (0-100%) to the 30-80% range of overall validation\r\n              if (onProgress) {\r\n                const overallPercent = Math.floor(30 + chunkPercent * 0.5); // 30-80%\r\n                onProgress(mess, overallPercent);\r\n              }\r\n\r\n              await projectItem.project.creatorTools.notifyStatusUpdate(mess, StatusTopic.validation);\r\n            },\r\n          }\r\n        );\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.info,\r\n            this.id,\r\n            WorldDataInfoGeneratorTest.subchunklessChunks,\r\n            \"Subchunkless Chunks\",\r\n            projectItem,\r\n            subchunkLessChunkCount,\r\n            mcworld.name\r\n          )\r\n        );\r\n\r\n        if (blocksPi) {\r\n          blocksPi.data = blockCount;\r\n        }\r\n      }\r\n\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.minX,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.minX),\r\n          projectItem,\r\n          mcworld.minX,\r\n          mcworld.name\r\n        )\r\n      );\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.minZ,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.minZ),\r\n          projectItem,\r\n          mcworld.minZ,\r\n          mcworld.name\r\n        )\r\n      );\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.maxX,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.maxX),\r\n          projectItem,\r\n          mcworld.maxX,\r\n          mcworld.name\r\n        )\r\n      );\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.info,\r\n          this.id,\r\n          WorldDataInfoGeneratorTest.maxZ,\r\n          ProjectInfoUtilities.getTitleFromEnum(WorldDataInfoGeneratorTest, WorldDataInfoGeneratorTest.maxZ),\r\n          projectItem,\r\n          mcworld.maxZ,\r\n          mcworld.name\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IJsonUIControl, IJsonUIScreen } from \"./IJsonUIScreen\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\n\r\nexport default class JsonUIResourceDefinition {\r\n  public jsonUIScreen?: IJsonUIScreen;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<JsonUIResourceDefinition, JsonUIResourceDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get namespaceId() {\r\n    if (!this.jsonUIScreen || !this.jsonUIScreen[\"namespace\"]) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.jsonUIScreen[\"namespace\"];\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<JsonUIResourceDefinition, JsonUIResourceDefinition>\r\n  ) {\r\n    let et: JsonUIResourceDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new JsonUIResourceDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JsonUIResourceDefinition) {\r\n      et = file.manager as JsonUIResourceDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.jsonUIScreen) {\r\n      Log.unexpectedUndefined(\"ITRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.jsonUIScreen);\r\n  }\r\n\r\n  getControlRefs() {\r\n    const namespaceId = this.namespaceId;\r\n    const jsonUITextureRefs: string[] = [];\r\n\r\n    if (namespaceId && this.jsonUIScreen) {\r\n      for (const jsonControlId in this.jsonUIScreen) {\r\n        const jsonControl = this.jsonUIScreen[jsonControlId] as IJsonUIControl;\r\n\r\n        if (jsonControlId !== \"namespace\" && jsonControl && jsonControl.texture) {\r\n          if (!jsonUITextureRefs.includes(jsonControlId)) {\r\n            jsonUITextureRefs.push(jsonControlId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return jsonUITextureRefs;\r\n  }\r\n\r\n  getTexturePaths() {\r\n    const texturePaths: string[] = [];\r\n\r\n    if (this.jsonUIScreen) {\r\n      this.addTexturesFromArrayOfKeyPaths([this.jsonUIScreen], texturePaths);\r\n    }\r\n\r\n    return texturePaths;\r\n  }\r\n\r\n  addTexturesFromArrayOfKeyPaths(controlSets: { [name: string]: IJsonUIControl | string }[], texturePaths: string[]) {\r\n    if (!Array.isArray(controlSets)) {\r\n      return;\r\n    }\r\n\r\n    for (const controlSet of controlSets) {\r\n      for (const key in controlSet) {\r\n        const control = controlSet[key];\r\n\r\n        if (key !== \"namespace\" && key !== \"controls\") {\r\n          if (typeof control === \"string\") {\r\n            texturePaths.push(control);\r\n          } else {\r\n            if (control.texture) {\r\n              const tex = TextureDefinition.canonicalizeTexturePath(control.texture);\r\n\r\n              if (tex) {\r\n                texturePaths.push(tex);\r\n              }\r\n            }\r\n            if (control.controls) {\r\n              this.addTexturesFromArrayOfKeyPaths(control.controls, texturePaths);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"PERPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this.jsonUIScreen = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"ui\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n    const uiTextureItems = project.getItemsByType(ProjectItemType.uiTexture);\r\n    const allTextureItems = [...textureItems, ...uiTextureItems];\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let textureList = this.getTexturePaths();\r\n\r\n    if (textureList.length > 0) {\r\n      for (const candItem of allTextureItems) {\r\n        if (packRootFolder && textureList) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n              StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n            );\r\n\r\n            if (relativePath) {\r\n              if (textureList && textureList.includes(relativePath)) {\r\n                item.addChildItem(candItem);\r\n\r\n                textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (textureList) {\r\n        for (const texturePath of textureList) {\r\n          if (!texturePath.startsWith(\"$\")) {\r\n            const isVanilla = await Database.isVanillaToken(texturePath);\r\n            item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, isVanilla);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"../minecraft/TerrainTextureCatalogDefinition\";\r\nimport ParticleEffectResourceDefinition from \"../minecraft/ParticleEffectResourceDefinition\";\r\nimport ItemTextureCatalogDefinition from \"../minecraft/ItemTextureCatalogDefinition\";\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport FlipbookTextureCatalogDefinition from \"../minecraft/FlipbookTextureCatalogDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport JsonUIResourceDefinition from \"../minecraft/JsonUIResourceDefinition\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport TextureDefinition from \"../minecraft/TextureDefinition\";\r\n\r\nexport enum TextureInfoGeneratorTest {\r\n  tooManyTextureHandles = 100,\r\n  textures = 101,\r\n}\r\n\r\n/**\r\n * Validates texture references and aggregates texture usage information.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/texture.form.json} for topic definitions\r\n */\r\nexport default class TextureInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TEXTURE\";\r\n  title = \"Texture Validation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedDataValue(\"TEXTURE\", TextureInfoGeneratorTest.textures);\r\n  }\r\n\r\n  /**\r\n   * Cache for Database.matchesVanillaPath() results across calls.\r\n   * The same texture paths are checked many times; caching eliminates redundant folder I/O.\r\n   */\r\n  private _vanillaPathCache: Map<string, boolean> = new Map();\r\n\r\n  /**\r\n   * Cached version of Database.matchesVanillaPath() that avoids repeated folder I/O\r\n   * for the same texture path.\r\n   */\r\n  private async _matchesVanillaPathCached(path: string): Promise<boolean> {\r\n    const cached = this._vanillaPathCache.get(path);\r\n    if (cached !== undefined) {\r\n      return cached;\r\n    }\r\n    const result = await Database.matchesVanillaPath(path);\r\n    this._vanillaPathCache.set(path, result);\r\n    return result;\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const textureHandles = new Set<string>();\r\n    const allTexturePaths = new Set<string>();\r\n    const blockTextureRefs = new Set<string>();\r\n    const blockTexturePaths = new Set<string>();\r\n    const entityTexturePaths = new Set<string>();\r\n    const entityVanillaTexturePaths = new Set<string>();\r\n    const attachableTextureRefs = new Set<string>();\r\n    const particleTextureRefs = new Set<string>();\r\n    const particleTexturePaths = new Set<string>();\r\n    const particleVanillaTexturePaths = new Set<string>();\r\n    const jsonUITextureRefs = new Set<string>();\r\n    const jsonUITexturePaths = new Set<string>();\r\n    const jsonUIVanillaTexturePaths = new Set<string>();\r\n\r\n    const terrainTextureRefs = new Set<string>();\r\n    const terrainTexturePaths = new Set<string>();\r\n    const flipbookTextureRefs = new Set<string>();\r\n    const flipbookTexturePaths = new Set<string>();\r\n    const itemTexturePaths = new Set<string>();\r\n    const itemTextureVanillaPaths = new Set<string>();\r\n    const entitySpawnEggTextures = new Set<string>();\r\n    const textureCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TextureInfoGeneratorTest.textures,\r\n      \"Textures\"\r\n    );\r\n    items.push(textureCountPi);\r\n\r\n    // Process each item type separately using getItemsByType() for efficiency,\r\n    // instead of iterating all 15K items and filtering by type.\r\n    const blocksCatalogItems = project.getItemsByType(ProjectItemType.blocksCatalogResourceJson);\r\n    const particleItems = project.getItemsByType(ProjectItemType.particleJson);\r\n    const uiItems = project.getItemsByType(ProjectItemType.uiJson);\r\n    const terrainTexItems = project.getItemsByType(ProjectItemType.terrainTextureCatalogResourceJson);\r\n    const flipbookItems = project.getItemsByType(ProjectItemType.flipbookTexturesJson);\r\n    const itemTexItems = project.getItemsByType(ProjectItemType.itemTextureJson);\r\n    const entityResItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    const attachableItems = project.getItemsByType(ProjectItemType.attachableResourceJson);\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n    const uiTextureItems = project.getItemsByType(ProjectItemType.uiTexture);\r\n\r\n    for (const projectItem of blocksCatalogItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const blockCat = await BlocksCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!blockCat?.blocksCatalog) {\r\n        continue;\r\n      }\r\n\r\n      for (const resourceId in blockCat.blocksCatalog) {\r\n        const resource = blockCat.blocksCatalog[resourceId];\r\n\r\n        if (!resource?.textures) {\r\n          continue;\r\n        }\r\n\r\n        textureCountPi.incrementFeature(\"Block Resource Count\");\r\n        blockTextureRefs.add(resourceId);\r\n\r\n        if (typeof resource.textures === \"string\") {\r\n          allTexturePaths.add(resource.textures);\r\n          blockTexturePaths.add(resource.textures);\r\n        } else {\r\n          for (const texturePathKey in resource.textures) {\r\n            const textureVal = (resource.textures as any)[texturePathKey];\r\n            allTexturePaths.add(textureVal);\r\n            blockTexturePaths.add(textureVal);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of particleItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const particleEffect = await ParticleEffectResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      const desc = particleEffect?.data?.particle_effect?.description;\r\n\r\n      if (!desc?.identifier || !desc.basic_render_parameters?.texture) {\r\n        continue;\r\n      }\r\n\r\n      const texturePath = desc.basic_render_parameters.texture;\r\n      const matchesVP = await this._matchesVanillaPathCached(desc.basic_render_parameters.texture);\r\n\r\n      if (!matchesVP) {\r\n        textureHandles.add(texturePath);\r\n        particleTextureRefs.add(desc.identifier);\r\n        allTexturePaths.add(texturePath);\r\n        particleTexturePaths.add(texturePath);\r\n      } else {\r\n        particleVanillaTexturePaths.add(texturePath);\r\n      }\r\n    }\r\n\r\n    for (const projectItem of uiItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const jsonUI = await JsonUIResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!jsonUI) {\r\n        continue;\r\n      }\r\n\r\n      for (const ref of jsonUI.getControlRefs()) {\r\n        jsonUITextureRefs.add(ref);\r\n      }\r\n\r\n      const texturePaths = jsonUI.getTexturePaths();\r\n\r\n      for (const texturePath of texturePaths) {\r\n        const matchesVP = await this._matchesVanillaPathCached(texturePath);\r\n\r\n        if (!matchesVP) {\r\n          textureHandles.add(texturePath);\r\n          allTexturePaths.add(texturePath);\r\n          jsonUITexturePaths.add(texturePath);\r\n        } else {\r\n          jsonUIVanillaTexturePaths.add(texturePath);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of terrainTexItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const terrainTextureCat = await TerrainTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!terrainTextureCat?.data?.texture_data) {\r\n        continue;\r\n      }\r\n\r\n      for (const terrainTextureId in terrainTextureCat.data.texture_data) {\r\n        const terrainTexture = terrainTextureCat.data.texture_data[terrainTextureId];\r\n\r\n        if (!terrainTexture?.textures) {\r\n          continue;\r\n        }\r\n\r\n        textureCountPi.incrementFeature(\"Terrain Texture Resource Count\");\r\n        terrainTextureRefs.add(terrainTextureId);\r\n\r\n        if (typeof terrainTexture.textures === \"string\") {\r\n          terrainTexturePaths.add(terrainTexture.textures);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of flipbookItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const flipbookTexturesCat = await FlipbookTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!flipbookTexturesCat?.data || !Array.isArray(flipbookTexturesCat.data)) {\r\n        continue;\r\n      }\r\n\r\n      const pathId = projectItem.primaryFile.storageRelativePath + \"_flipbooktextures\";\r\n      allTexturePaths.add(pathId);\r\n\r\n      for (const flipbookTexture of flipbookTexturesCat.data) {\r\n        if (!flipbookTexture?.flipbook_texture) {\r\n          continue;\r\n        }\r\n\r\n        textureCountPi.incrementFeature(\"Flipbook Texture Resource Count\");\r\n        textureHandles.add(flipbookTexture.flipbook_texture);\r\n        flipbookTextureRefs.add(flipbookTexture.atlas_tile);\r\n        flipbookTexturePaths.add(flipbookTexture.flipbook_texture);\r\n      }\r\n    }\r\n\r\n    for (const projectItem of itemTexItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const itemTextureCat = await ItemTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!itemTextureCat) {\r\n        continue;\r\n      }\r\n\r\n      const texturePaths = itemTextureCat.getTexturePathList();\r\n\r\n      if (!texturePaths) {\r\n        continue;\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"Item Texture Resource Count\");\r\n\r\n      for (const str of texturePaths) {\r\n        const matchesVP = await this._matchesVanillaPathCached(str);\r\n\r\n        if (!matchesVP) {\r\n          itemTexturePaths.add(str);\r\n        } else {\r\n          itemTextureVanillaPaths.add(str);\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const projectItem of entityResItems) {\r\n      textureCountPi.incrementFeature(\"Entity Resource Count\");\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const entityTypeResourceDef = await EntityTypeResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      const textures = entityTypeResourceDef?.data?.textures;\r\n\r\n      if (!textures) {\r\n        continue;\r\n      }\r\n\r\n      let textureCount = 0;\r\n\r\n      for (const texture in textures) {\r\n        const texturePath = textures[texture];\r\n\r\n        if (texturePath) {\r\n          const matchesVP = await this._matchesVanillaPathCached(texturePath);\r\n\r\n          if (!matchesVP) {\r\n            textureHandles.add(texturePath);\r\n            entityTexturePaths.add(texturePath);\r\n            allTexturePaths.add(texturePath);\r\n          } else {\r\n            entityVanillaTexturePaths.add(texturePath);\r\n          }\r\n        }\r\n        textureCount++;\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"Texture References\", \"Count\", textureCount);\r\n      textureCountPi.incrementFeature(\"Entity References\", \"Count\", textureCount);\r\n    }\r\n\r\n    for (const projectItem of attachableItems) {\r\n      textureCountPi.incrementFeature(\"Attachable Resource Count\");\r\n\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      const attachableResourceDef = await AttachableResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n      const textures = attachableResourceDef?.data?.textures;\r\n\r\n      if (!textures) {\r\n        continue;\r\n      }\r\n\r\n      let textureCount = 0;\r\n\r\n      for (const texture in textures) {\r\n        const texturePath = textures[texture];\r\n\r\n        if (texturePath) {\r\n          textureHandles.add(texturePath);\r\n          attachableTextureRefs.add(texturePath);\r\n          allTexturePaths.add(texturePath);\r\n          textureCount++;\r\n        }\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"Texture References\", \"Count\", textureCount);\r\n      textureCountPi.incrementFeature(\"Attachable References\", \"Count\", textureCount);\r\n    }\r\n\r\n    // Process texture and UI texture items\r\n    const allTextureSourceItems = [...textureItems, ...uiTextureItems];\r\n    for (const projectItem of allTextureSourceItems) {\r\n      if (!projectItem.isContentLoaded) {\r\n        await projectItem.loadContent();\r\n      }\r\n\r\n      if (!projectItem.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      textureCountPi.incrementFeature(\"File Count\");\r\n\r\n      const textureResourceDef = await TextureDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n      if (!textureResourceDef?.data) {\r\n        continue;\r\n      }\r\n\r\n      const texturePath = textureResourceDef.getReferencePath();\r\n\r\n      if (texturePath && projectItem.projectPath) {\r\n        contentIndex.insert(texturePath, projectItem.projectPath, AnnotationCategory.textureFile);\r\n      }\r\n    }\r\n\r\n    if (textureHandles.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Texture Handles (estimated)\", \"Count\", textureHandles.size);\r\n    }\r\n    if (allTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Texture Paths\", \"Count\", allTexturePaths.size);\r\n    }\r\n\r\n    if (particleTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Particle Texture References\", \"Count\", particleTextureRefs.size);\r\n    }\r\n    if (particleTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Particle Texture Paths\", \"Count\", particleTexturePaths.size);\r\n    }\r\n\r\n    if (particleVanillaTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\r\n        \"Unique Particle Texture Vanilla Paths\",\r\n        \"Count\",\r\n        particleVanillaTexturePaths.size\r\n      );\r\n    }\r\n\r\n    if (jsonUITextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique JSON UI Texture References\", \"Count\", jsonUITextureRefs.size);\r\n    }\r\n\r\n    if (jsonUITexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique JSON UI Texture Paths\", \"Count\", jsonUITexturePaths.size);\r\n    }\r\n    if (jsonUIVanillaTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\r\n        \"Unique JSON UI Texture Vanilla Paths\",\r\n        \"Count\",\r\n        jsonUIVanillaTexturePaths.size\r\n      );\r\n    }\r\n\r\n    if (entityTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Entity Texture Paths\", \"Count\", entityTexturePaths.size);\r\n    }\r\n\r\n    if (entityVanillaTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Entity Texture Vanilla Paths\", \"Count\", entityVanillaTexturePaths.size);\r\n    }\r\n\r\n    if (attachableTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Attachable Texture References\", \"Count\", attachableTextureRefs.size);\r\n    }\r\n\r\n    if (terrainTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Terrain Texture References\", \"Count\", terrainTextureRefs.size);\r\n    }\r\n\r\n    if (terrainTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Terrain Texture Paths\", \"Count\", terrainTexturePaths.size);\r\n    }\r\n\r\n    if (itemTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Item Texture Paths\", \"Count\", itemTexturePaths.size);\r\n    }\r\n\r\n    if (flipbookTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Flipbook Texture References\", \"Count\", flipbookTextureRefs.size);\r\n    }\r\n\r\n    if (flipbookTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Flipbook Texture Paths\", \"Count\", flipbookTexturePaths.size);\r\n    }\r\n\r\n    if (blockTextureRefs.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Block Texture References\", \"Count\", blockTextureRefs.size);\r\n    }\r\n\r\n    if (blockTexturePaths.size > 0) {\r\n      textureCountPi.incrementFeature(\"Unique Block Texture Paths\", \"Count\", blockTexturePaths.size);\r\n    }\r\n\r\n    if (entitySpawnEggTextures.size > 0) {\r\n      textureCountPi.incrementFeature(\r\n        \"Unique Entity Spawn Egg Texture References\",\r\n        \"Count\",\r\n        entitySpawnEggTextures.size\r\n      );\r\n    }\r\n\r\n    if (this.performAddOnValidations && textureHandles.size > 800) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TextureInfoGeneratorTest.tooManyTextureHandles,\r\n          \"Uses more than 800 texture handles, which could impact overall Minecraft usage\",\r\n          undefined,\r\n          textureHandles.size\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\n\r\nexport enum PackSizeInfoGeneratorTest {\r\n  overallSize = 101,\r\n  fileCount = 102,\r\n  folderCount = 103,\r\n  contentSize = 104,\r\n  contentFileCount = 105,\r\n  contentFolderCount = 106,\r\n  exceedsRecommendedAddonSize = 401,\r\n  exceedsRecommendedPackageSize = 402,\r\n\r\n  zipFileCouldNotBeProcessed = 410,\r\n}\r\n\r\nexport interface IPackSizeInfoGeneratorResults {\r\n  size: number;\r\n  fileCounts: number;\r\n  folderCounts: number;\r\n  contentSize: number;\r\n  contentFileCounts: number;\r\n  contentFolderCounts: number;\r\n}\r\n\r\n/**\r\n * Calculates and validates pack size information including file and folder counts.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/packsize.form.json} for topic definitions\r\n */\r\nexport default class PackSizeInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"PACKSIZE\";\r\n  title = \"Pack Size Information\";\r\n  canAlwaysProcess = true;\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.overallSize = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.overallSize);\r\n    info.fileCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.fileCount);\r\n    info.folderCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.folderCount);\r\n    info.contentSize = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.contentSize);\r\n    info.contentFileCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.contentFileCount);\r\n    info.contentFolderCounts = infoSet.getFirstNumberDataValue(this.id, PackSizeInfoGeneratorTest.contentFolderCount);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const genItems: ProjectInfoItem[] = [];\r\n    const results: IPackSizeInfoGeneratorResults = {\r\n      size: 0,\r\n      fileCounts: 0,\r\n      folderCounts: 0,\r\n      contentSize: 0,\r\n      contentFileCounts: 0,\r\n      contentFolderCounts: 0,\r\n    };\r\n\r\n    await this.processFolder(project, await project.ensureProjectFolder(), genItems, contentIndex, results, 0, false);\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.overallSize,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.overallSize),\r\n        undefined,\r\n        results.size\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.fileCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.fileCount),\r\n        undefined,\r\n        results.fileCounts\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.folderCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.folderCount),\r\n        undefined,\r\n        results.folderCounts\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.contentSize,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.contentSize),\r\n        undefined,\r\n        results.contentSize\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.contentFileCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.contentFileCount),\r\n        undefined,\r\n        results.contentFileCounts\r\n      )\r\n    );\r\n\r\n    genItems.push(\r\n      new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        PackSizeInfoGeneratorTest.contentFolderCount,\r\n        ProjectInfoUtilities.getTitleFromEnum(PackSizeInfoGeneratorTest, PackSizeInfoGeneratorTest.contentFolderCount),\r\n        undefined,\r\n        results.contentFolderCounts\r\n      )\r\n    );\r\n\r\n    if (this.performAddOnValidations && results.contentSize > 25000000) {\r\n      genItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PackSizeInfoGeneratorTest.exceedsRecommendedAddonSize,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            PackSizeInfoGeneratorTest,\r\n            PackSizeInfoGeneratorTest.exceedsRecommendedAddonSize\r\n          ),\r\n          undefined,\r\n          results.contentSize\r\n        )\r\n      );\r\n    } else if (!this.performAddOnValidations && results.contentSize > 250000000) {\r\n      genItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          PackSizeInfoGeneratorTest.exceedsRecommendedPackageSize,\r\n          ProjectInfoUtilities.getTitleFromEnum(\r\n            PackSizeInfoGeneratorTest,\r\n            PackSizeInfoGeneratorTest.exceedsRecommendedPackageSize\r\n          ),\r\n          undefined,\r\n          results.contentSize\r\n        )\r\n      );\r\n    }\r\n\r\n    return genItems;\r\n  }\r\n\r\n  async processFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    genItems: ProjectInfoItem[],\r\n    genContentIndex: ContentIndex,\r\n    results: IPackSizeInfoGeneratorResults,\r\n    depth: number,\r\n    isInContent: boolean\r\n  ) {\r\n    if (!folder.isLoaded) {\r\n      await folder.load();\r\n    }\r\n\r\n    if (!isInContent && folder.files[\"manifest.json\"]) {\r\n      isInContent = true;\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        results.fileCounts++;\r\n\r\n        if (StorageUtilities.isContainerFile(file.fullPath)) {\r\n          let storageFolder = undefined;\r\n\r\n          storageFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n          if (storageFolder && typeof storageFolder !== \"string\") {\r\n            await this.processFolder(\r\n              project,\r\n              storageFolder,\r\n              genItems,\r\n              genContentIndex,\r\n              results,\r\n              depth + 1,\r\n              isInContent\r\n            );\r\n          } else if (typeof storageFolder === \"string\") {\r\n            genItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                PackSizeInfoGeneratorTest.zipFileCouldNotBeProcessed,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  PackSizeInfoGeneratorTest,\r\n                  PackSizeInfoGeneratorTest.exceedsRecommendedPackageSize\r\n                ),\r\n                undefined,\r\n                file.errorStateMessage\r\n              )\r\n            );\r\n          }\r\n        } else {\r\n          if (isInContent) {\r\n            results.contentFileCounts++;\r\n\r\n            results.contentSize += file.coreContentLength;\r\n          }\r\n\r\n          results.size += file.coreContentLength;\r\n        }\r\n      }\r\n    }\r\n\r\n    if ((isInContent && depth < 15) || (!isInContent && depth < 8)) {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder && !childFolder.errorStatus && childFolder.name) {\r\n          results.folderCounts++;\r\n\r\n          if (isInContent) {\r\n            results.contentFolderCounts++;\r\n          }\r\n\r\n          await this.processFolder(project, childFolder, genItems, genContentIndex, results, depth + 1, isInContent);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport Database from \"../minecraft/Database\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport TextureDefinition from \"../minecraft/TextureDefinition\";\r\nimport ProjectUtilities, { ProjectMetaCategory } from \"../app/ProjectUtilities\";\r\nimport ProjectItemVariant from \"../app/ProjectItemVariant\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\n\r\nexport enum TextureImageInfoGeneratorTest {\r\n  textureImages = 101,\r\n  textureImagesTier0 = 200,\r\n  textureImagesTier1 = 201,\r\n  textureImagesTier2 = 202,\r\n  textureImagesTier3 = 203,\r\n  textureImagesTier4 = 204,\r\n  textureImagesTier5 = 205,\r\n  pngJpgImageProcessingError = 401,\r\n  individualTextureMemoryExceedsBudget = 402,\r\n  totalTextureMemoryExceedsBudget = 403,\r\n  tgaImageProcessingError = 404,\r\n  individualAtlasTextureMemoryExceedsBudget = 405,\r\n  totalAtlasTextureMemoryExceedsBudgetWarn = 406,\r\n  totalAtlasTextureMemoryExceedsBudgetError = 407,\r\n  pngJpgImageProcessingNoResults = 408,\r\n  invalidTieringConfiguration = 409,\r\n  invalidTieringForVibrantVisuals = 410,\r\n\r\n  totalTextureMemoryExceedsBudgetErrorBase = 420,\r\n  totalTextureMemoryExceedsBudgetWarningBase = 440,\r\n  texturePackDoesntOverrideVanillaGameTexture = 460,\r\n  texturePackDoesntOverrideMostTextures = 461,\r\n  mashupPackDoesntOverrideMostTextures = 462,\r\n}\r\n\r\nexport const TexturePerformanceTierCount = 6;\r\n\r\nconst TextureTiersBase = 200;\r\n\r\nconst MashupResourcePackThresholdErrorPercent = 0.6; // for a global resource pack in content that also has a world (i.e., a mashup), return an error if it doesn't override at least 60% of vanilla game textures.\r\nconst TextureOverrideThresholdPercent = 0.7; // if you override at least 70% of vanilla game textures, we assume you're trying to create a \"texture pack\" and should warn when you're not \"covering\" a vanilla texture.\r\nconst TextureOverrideThresholdErrorPercent = 0.95; // if you override at least 95% of vanilla game textures, we assume you're trying to create a \"texture pack\" and should error if you don't have 95% coverage.\r\n\r\nconst ExemptVanillaOverridePaths = [\r\n  \"/entity/npc/\",\r\n  \"/entity/banner/\",\r\n  \"/entity/horse/\",\r\n  \"/entity/horse/armor/\",\r\n  \"/entity/zombie_villager/\",\r\n  \"/entity/villager/\",\r\n  \"/entity/zombie_villager2/professions/\",\r\n  \"/colormap/\",\r\n  \"/particle/\",\r\n  \"/misc/\",\r\n  \"/persona_thumbnails/\",\r\n  \"/ui/\",\r\n  \"/gui/\",\r\n  \"/entity/shield_patterns/\",\r\n  \"/textures/trims/\",\r\n  // Blocks\r\n  \"/blocks/glowing_obsidian\",\r\n  \"/blocks/missing_tile\",\r\n  \"/blocks/camera_back\",\r\n  \"/blocks/camera_front\",\r\n  \"/blocks/camera_side\",\r\n  \"/blocks/camera_top\",\r\n  \"/blocks/reactor_core_stage_0\",\r\n  \"/blocks/reactor_core_stage_1\",\r\n  \"/blocks/reactor_core_stage_2\",\r\n  \"/blocks/bed_feet_end\",\r\n  \"/blocks/bed_feet_side\",\r\n  \"/blocks/bed_feet_top\",\r\n  \"/blocks/bed_head_end\",\r\n  \"/blocks/bed_head_side\",\r\n  \"/blocks/bed_head_top\",\r\n  \"/blocks/flower_rose_blue\",\r\n  \"/blocks/flower_paeonia\",\r\n  \"/blocks/llama\",\r\n  \"/blocks/border\",\r\n  \"/blocks/build_allow\",\r\n  \"/blocks/build_deny\",\r\n  \"/blocks/smithing_table_top\",\r\n  \"/blocks/end_gateway\",\r\n  \"/blocks/end_portal\",\r\n  \"/blocks/water_flow\",\r\n  \"/blocks/water_still\",\r\n  \"/blocks/carrots_stage3\",\r\n  \"/blocks/bell_side\",\r\n  \"/blocks/bell_top\",\r\n\r\n  // Entity\r\n  \"/entity/agent\",\r\n  \"/entity/alex\",\r\n  \"/entity/camera_tripod\",\r\n  \"/entity/char\",\r\n  \"/entity/dummy\",\r\n  \"/entity/screenshot_frame\",\r\n  \"/entity/enchanting_table_book_shadow\",\r\n  \"/entity/loyalty_rope\",\r\n  \"/entity/egg_null\",\r\n  \"/entity/egg_template\",\r\n  \"/entity/dragon_exploding\",\r\n  \"/entity/dragon_eyes\",\r\n  \"/entity/llama\",\r\n  \"/entity/pigzombie\",\r\n  \"/entity/steve\",\r\n  \"/entity/cape_invisible\",\r\n\r\n  // Entity subcategories\r\n  \"/entity/cat/blackcat\",\r\n  \"/entity/cat/graytabby_tame\",\r\n  \"/entity/cat/red\",\r\n  \"/entity/cat/siamese\",\r\n  \"/entity/fish/clownfish\",\r\n  \"/entity/fish/fish\",\r\n  \"/entity/villager2/professions/unskilled\",\r\n  \"/entity/horse2/horse_markings_none\",\r\n  \"/entity/horse2/armor/horse_armor_none\",\r\n  \"/entity/llama/decor/decor_none\",\r\n  \"/entity/llama/spit\",\r\n  \"/entity/iron_golem/cracked_none\",\r\n  \"/entity/wolf/wolf_armor_cracked_none\",\r\n\r\n  // Items\r\n  \"/items/camera\",\r\n  \"/items/chalkboard_large\",\r\n  \"/items/chalkboard_medium\",\r\n  \"/items/chalkboard_small\",\r\n  \"/items/egg_agent\",\r\n  \"/items/egg_npc\",\r\n  \"/items/quiver\",\r\n  \"/items/ruby\",\r\n  \"/items/spawn_egg_overlay\",\r\n  \"/items/book_portfolio\",\r\n  \"/items/boat\",\r\n  \"/items/tipped_arrow_base\",\r\n  \"/items/tipped_arrow_head\",\r\n  \"/items/tipped_arrow_luck\",\r\n  \"/items/potion_bottle_saturation\",\r\n  \"/items/potion_overlay\",\r\n  \"/items/egg_template\",\r\n  \"/items/egg_mask\",\r\n  \"/items/spawn_egg\",\r\n  \"/items/hoglin_meat_cooked\",\r\n  \"/items/hoglin_meat_raw\",\r\n  \"/items/egg_fish\",\r\n  \"/items/boat_dark_oak\",\r\n  \"/items/light_block_0\",\r\n  \"/items/light_block_1\",\r\n  \"/items/light_block_10\",\r\n  \"/items/light_block_11\",\r\n  \"/items/light_block_12\",\r\n  \"/items/light_block_13\",\r\n  \"/items/light_block_14\",\r\n  \"/items/light_block_15\",\r\n  \"/items/light_block_2\",\r\n  \"/items/light_block_3\",\r\n  \"/items/light_block_4\",\r\n  \"/items/light_block_5\",\r\n  \"/items/light_block_6\",\r\n  \"/items/light_block_7\",\r\n  \"/items/light_block_8\",\r\n  \"/items/light_block_9\",\r\n\r\n  // Models\r\n  \"models/armor/cloth_1\",\r\n  \"models/armor/cloth_2\",\r\n\r\n  // Map\r\n  \"map/player_icon_background\",\r\n  \"map/jungle_temple\",\r\n  \"map/swamp_hut\",\r\n  \"map/village_desert\",\r\n  \"map/village_plains\",\r\n  \"map/village_savanna\",\r\n  \"map/village_snowy\",\r\n  \"map/village_taiga\",\r\n  \"map/trial_chambers\",\r\n\r\n  // Root level\r\n  \"forcefield_atlas\",\r\n];\r\n\r\n/*\r\nexport enum ProjectMetaCategory {\r\n  mix = 0,\r\n  worldTemplate = 1,\r\n  texturePack = 2,\r\n  addOn = 3,\r\n  skinPack = 4,\r\n  persona = 5,\r\n}*/\r\n\r\nconst TextureMemoryLimitsByTier: { [category: number]: { [tier: number]: number } } = {\r\n  0 /*mix*/: { 0: 750, 1: 750, 2: 1000, 3: 1500, 4: 3000, 5: 4000 },\r\n  1 /*world template*/: { 0: 750, 1: 750, 2: 1000, 3: 1500, 4: 3000, 5: 4000 },\r\n  2 /*texture pack*/: { 0: 350, 1: 350, 2: 500, 3: 650, 4: 1250, 5: 1650 }, // added 50mb as a \"discount\" assuming texture packs override vanilla textures, and therefore save the 50mb of vanilla texture overhead\r\n  3 /*add-on*/: { 0: 150, 1: 150, 2: 225, 3: 300, 4: 600, 5: 800 },\r\n  4 /*skin pack*/: { 0: 150, 1: 150, 2: 225, 3: 300, 4: 600, 5: 800 },\r\n  5 /*persona*/: { 0: 150, 1: 150, 2: 225, 3: 300, 4: 600, 5: 800 },\r\n};\r\n\r\n/**\r\n * Validates texture images for size, format, and memory budget compliance.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/textureimage.form.json} for topic definitions\r\n */\r\nexport default class TextureImageInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TEXTUREIMAGE\";\r\n  title = \"Texture Image Validation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  private _vanillaPathCache: Map<string, boolean> = new Map();\r\n\r\n  private async _matchesVanillaPathCached(path: string): Promise<boolean> {\r\n    const cached = this._vanillaPathCache.get(path);\r\n    if (cached !== undefined) {\r\n      return cached;\r\n    }\r\n    const result = await Database.matchesVanillaPath(path);\r\n    this._vanillaPathCache.set(path, result);\r\n    return result;\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"texels\",\r\n      \"instanceCount\"\r\n    );\r\n\r\n    info.textureTexelSize = infoSet.getSummedFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"nonVanillaTexels\",\r\n      \"total\"\r\n    );\r\n\r\n    info.vanillaGameTextureCoverage = infoSet.getAverageFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"vanillaGameTextureCoverage\",\r\n      \"percent\"\r\n    );\r\n\r\n    info.vanillaGameTextureCount = infoSet.getAverageFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"vanillaGameTextureCoverage\",\r\n      \"overrideCount\"\r\n    );\r\n\r\n    let minimumSupportablePerformanceTier = 0;\r\n\r\n    for (let i = 0; i < TexturePerformanceTierCount; i++) {\r\n      const overBudgetTierErrors = infoSet.getCount(\r\n        this.id,\r\n        TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudgetWarningBase + i\r\n      );\r\n\r\n      if (overBudgetTierErrors > 0) {\r\n        minimumSupportablePerformanceTier = i + 1;\r\n      }\r\n    }\r\n\r\n    // If the project uses subpacks, the minimum tier is at least the lowest tier\r\n    // any subpack targets \u2014 Minecraft never loads a resource pack with subpacks\r\n    // without one of them applied.\r\n    const minSubpackTier = infoSet.getSummedFeatureValue(\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"subpackTiering\",\r\n      \"minimumEffectiveTier\"\r\n    );\r\n\r\n    if (minSubpackTier > 0) {\r\n      minimumSupportablePerformanceTier = Math.max(minimumSupportablePerformanceTier, minSubpackTier);\r\n    }\r\n\r\n    info.minimumSupportablePerformanceTier = minimumSupportablePerformanceTier;\r\n  }\r\n\r\n  static isGameTexturePath(path: string) {\r\n    path = path.toLowerCase();\r\n\r\n    let result =\r\n      path.startsWith(\"/resource_pack/textures/\") &&\r\n      (path.endsWith(\".png\") || path.endsWith(\".tga\") || path.indexOf(\".\") < 0) &&\r\n      path.indexOf(\"_mers.\") < 0 &&\r\n      path.indexOf(\"_mer.\") < 0 &&\r\n      path.indexOf(\"_normal.\") < 0 &&\r\n      path.indexOf(\"_mipmap.\") < 0 &&\r\n      (path.indexOf(\"/textures/blocks\") >= 0 ||\r\n        path.indexOf(\"/textures/entity\") >= 0 ||\r\n        path.indexOf(\"/textures/items\") >= 0);\r\n\r\n    if (!result) {\r\n      return false;\r\n    }\r\n\r\n    for (let exemptPath of ExemptVanillaOverridePaths) {\r\n      if (path.toLowerCase().indexOf(exemptPath) >= 0) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const textureImagePi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TextureImageInfoGeneratorTest.textureImages,\r\n      \"Texture Images\"\r\n    );\r\n\r\n    items.push(textureImagePi);\r\n\r\n    const vanillaPathList = await Database.getVanillaPathList();\r\n\r\n    const nonVanillaTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const totalTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const itemAtlasTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const blockAtlasTextureMemoryByTier: { [path: string]: number }[] = [];\r\n    const textureTierImagePi: ProjectInfoItem[] = [];\r\n    const hasSupportForTier: boolean[] = [];\r\n    const tierTotalMemorySizes: number[] = [];\r\n    let isExplicitlyTargetingTiers = false;\r\n\r\n    const vanillaTexturePathNonMers: { [path: string]: boolean } = {};\r\n    let vanillaTexturePathNonMersCount = 0;\r\n\r\n    if (vanillaPathList) {\r\n      for (const path of vanillaPathList) {\r\n        if (TextureImageInfoGenerator.isGameTexturePath(path)) {\r\n          vanillaTexturePathNonMersCount++;\r\n          let extensionlessPath = StorageUtilities.stripExtension(path);\r\n\r\n          vanillaTexturePathNonMers[extensionlessPath] = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < TexturePerformanceTierCount; i++) {\r\n      hasSupportForTier[i] = false;\r\n      nonVanillaTextureMemoryByTier.push({});\r\n      totalTextureMemoryByTier.push({});\r\n\r\n      itemAtlasTextureMemoryByTier.push({});\r\n      blockAtlasTextureMemoryByTier.push({});\r\n\r\n      textureTierImagePi[i] = new ProjectInfoItem(\r\n        InfoItemType.featureAggregate,\r\n        this.id,\r\n        TextureTiersBase + i,\r\n        \"Texture Images Tier \" + i\r\n      );\r\n\r\n      items.push(textureTierImagePi[i]);\r\n    }\r\n\r\n    for (const projectVariant in project.variants) {\r\n      const variant = project.variants[projectVariant];\r\n\r\n      if (!variant.isDefault && variant.effectiveUnifiedTier !== undefined) {\r\n        hasSupportForTier[variant.effectiveUnifiedTier] = true;\r\n        isExplicitlyTargetingTiers = true;\r\n      }\r\n    }\r\n\r\n    // When a resource pack uses subpacks, Minecraft never loads the pack without\r\n    // one of the subpacks applied.  The lowest tier among all subpacks is therefore\r\n    // the de-facto minimum device tier the creator supports, regardless of texture\r\n    // budgets.  Record it so that summarize() can incorporate it into\r\n    // minimumSupportablePerformanceTier.\r\n    if (isExplicitlyTargetingTiers) {\r\n      let minSubpackTier = TexturePerformanceTierCount; // start above max, will be reduced\r\n\r\n      for (const projectVariant in project.variants) {\r\n        const variant = project.variants[projectVariant];\r\n\r\n        if (!variant.isDefault && variant.effectiveUnifiedTier !== undefined) {\r\n          minSubpackTier = Math.min(minSubpackTier, variant.effectiveUnifiedTier);\r\n        }\r\n      }\r\n\r\n      if (minSubpackTier < TexturePerformanceTierCount) {\r\n        textureImagePi.setFeature(\"Subpack Tiering\", \"Minimum Effective Tier\", minSubpackTier);\r\n      }\r\n    }\r\n\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    for (const projectItem of textureItems) {\r\n      if (\r\n        projectItem.projectPath &&\r\n        !projectItem.projectPath.endsWith(\".hdr\") // ignore HDR files\r\n      ) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const variantList = projectItem.getVariantList();\r\n\r\n        // we assume that the default (base) variant, with a label of \"\", must go\r\n        // first.\r\n        variantList.sort((a: ProjectItemVariant, b: ProjectItemVariant) => {\r\n          return a.label.localeCompare(b.label);\r\n        });\r\n\r\n        for (const variant of variantList) {\r\n          const variantFile = variant.file;\r\n\r\n          if (variantFile) {\r\n            let nonVanillaTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let totalTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let itemAtlasTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let blockAtlasTextureMemoryByTierToUpdate: { [path: string]: number }[] = [];\r\n            let textureTierItem: ProjectInfoItem | undefined = undefined;\r\n\r\n            if (variant.projectVariant) {\r\n              if (variant.projectVariant.isDefault) {\r\n                // if this is the default, set texture sizes by path for all tiers\r\n                nonVanillaTextureMemoryByTierToUpdate = nonVanillaTextureMemoryByTier;\r\n                totalTextureMemoryByTierToUpdate = totalTextureMemoryByTier;\r\n                itemAtlasTextureMemoryByTierToUpdate = itemAtlasTextureMemoryByTier;\r\n                blockAtlasTextureMemoryByTierToUpdate = blockAtlasTextureMemoryByTier;\r\n              } else if (variant.projectVariant.effectiveUnifiedTier !== undefined) {\r\n                // otherwise, set the texture sizes by path for the effective tier\r\n                textureTierItem = textureTierImagePi[variant.projectVariant.effectiveUnifiedTier];\r\n                nonVanillaTextureMemoryByTierToUpdate.push(\r\n                  nonVanillaTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n                totalTextureMemoryByTierToUpdate.push(\r\n                  totalTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n                itemAtlasTextureMemoryByTierToUpdate.push(\r\n                  itemAtlasTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n                blockAtlasTextureMemoryByTierToUpdate.push(\r\n                  blockAtlasTextureMemoryByTier[variant.projectVariant.effectiveUnifiedTier]\r\n                );\r\n              }\r\n            }\r\n\r\n            let pathInRp = await projectItem.getPackRelativePath();\r\n            let isVanilla = false;\r\n\r\n            // Log.assertDefined(pathInRp, \"TIIGGP\");\r\n\r\n            if (pathInRp) {\r\n              pathInRp = StorageUtilities.getBaseFromName(StorageUtilities.ensureNotStartsWithDelimiter(pathInRp));\r\n\r\n              const vanillaRpPath = \"/resource_pack/\" + pathInRp;\r\n\r\n              if (vanillaTexturePathNonMers[vanillaRpPath] === false) {\r\n                vanillaTexturePathNonMers[vanillaRpPath] = true;\r\n              }\r\n\r\n              if (await this._matchesVanillaPathCached(pathInRp)) {\r\n                textureImagePi.incrementFeature(\"Vanilla Override Texture\");\r\n\r\n                if (textureTierItem) {\r\n                  textureTierItem.incrementFeature(\"Vanilla Override Texture\");\r\n                }\r\n\r\n                isVanilla = true;\r\n              } else {\r\n                textureImagePi.incrementFeature(\"Custom Texture\");\r\n\r\n                if (textureTierItem) {\r\n                  textureTierItem.incrementFeature(\"Custom Texture\");\r\n                }\r\n              }\r\n            } else {\r\n              textureImagePi.incrementFeature(\"Custom Texture\");\r\n            }\r\n\r\n            let imageWidth = -1;\r\n            let imageHeight = -1;\r\n\r\n            if (variantFile.content && variantFile.content instanceof Uint8Array) {\r\n              const textureDefinition = await TextureDefinition.ensureOnFile(variantFile);\r\n\r\n              if (textureDefinition) {\r\n                await textureDefinition.processContent();\r\n\r\n                if (textureDefinition.errorProcessing) {\r\n                  if (variantFile.type === \"tga\") {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.internalProcessingError,\r\n                        this.id,\r\n                        TextureImageInfoGeneratorTest.tgaImageProcessingError,\r\n                        `Error processing TGA image`,\r\n                        projectItem,\r\n                        textureDefinition.errorMessage\r\n                      )\r\n                    );\r\n                  } else {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.warning,\r\n                        this.id,\r\n                        TextureImageInfoGeneratorTest.pngJpgImageProcessingNoResults,\r\n                        `Could not extract metadata from PNG/JPG/TIF/HEIC image`,\r\n                        projectItem,\r\n                        textureDefinition.errorMessage\r\n                      )\r\n                    );\r\n                  }\r\n                } else if (textureDefinition.width !== undefined && textureDefinition.height !== undefined) {\r\n                  imageWidth = textureDefinition.width;\r\n                  imageHeight = textureDefinition.height;\r\n\r\n                  const textureMem = imageWidth * imageHeight * 4;\r\n\r\n                  if (variantFile.type === \"tga\") {\r\n                    textureImagePi.spectrumIntFeature(\"TGA Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"TGA Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"TGA Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"TGA Texture Memory\", textureMem);\r\n                  } else {\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"PNGJPG Texture Memory\", textureMem);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            if (imageWidth >= 0 && imageHeight >= 0) {\r\n              const textureMem = imageWidth * imageHeight * 4;\r\n              let isAtlasTexture = false;\r\n\r\n              textureImagePi.spectrumIntFeature(\"Width\", imageWidth);\r\n              textureImagePi.spectrumIntFeature(\"Height\", imageHeight);\r\n              textureImagePi.spectrumIntFeature(\"Texels\", imageWidth * imageHeight);\r\n              textureImagePi.spectrumIntFeature(\"Texture Memory\", textureMem);\r\n\r\n              if (pathInRp) {\r\n                for (const totalTextureMemoryByTier of totalTextureMemoryByTierToUpdate) {\r\n                  totalTextureMemoryByTier[pathInRp] = textureMem;\r\n                }\r\n              }\r\n\r\n              if (!isVanilla) {\r\n                textureImagePi.spectrumIntFeature(\"Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Non-Vanilla Texture Memory\", textureMem);\r\n\r\n                if (pathInRp) {\r\n                  for (const nonVanillaTextureMemoryByTier of nonVanillaTextureMemoryByTierToUpdate) {\r\n                    nonVanillaTextureMemoryByTier[pathInRp] = textureMem;\r\n                  }\r\n                }\r\n              }\r\n\r\n              let relations = 0;\r\n              if (ProjectItemUtilities.isUIRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"UI Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"UI Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"UI Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"UI Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"UI Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"UI Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n\r\n                relations++;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isBlockRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Block Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Block Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Block Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Block Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Block Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Block Non-Vanilla Texture Memory\", textureMem);\r\n\r\n                  if (pathInRp) {\r\n                    for (const blockAtlasMemoryByTier of blockAtlasTextureMemoryByTierToUpdate) {\r\n                      blockAtlasMemoryByTier[pathInRp] = textureMem;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                relations++;\r\n\r\n                isAtlasTexture = true;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isEntityRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Entity Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Entity Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Entity Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Entity Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Entity Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Entity Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n\r\n                relations++;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isItemRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Item Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Item Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Item Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Item Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Item Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Item Non-Vanilla Texture Memory\", textureMem);\r\n\r\n                  if (pathInRp) {\r\n                    for (const itemAtlasMemoryByTier of itemAtlasTextureMemoryByTierToUpdate) {\r\n                      itemAtlasMemoryByTier[pathInRp] = textureMem;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                relations++;\r\n\r\n                isAtlasTexture = true;\r\n              }\r\n\r\n              if (ProjectItemUtilities.isParticleRelated(projectItem)) {\r\n                textureImagePi.spectrumIntFeature(\"Particle Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Particle Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Particle Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Particle Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Particle Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Particle Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n\r\n                relations++;\r\n              }\r\n\r\n              if (relations === 0 && projectItem.projectPath) {\r\n                const texturePath = TextureDefinition.getTexturePath(projectItem.projectPath);\r\n\r\n                if (texturePath) {\r\n                  const isVanillaEx = await this._matchesVanillaPathCached(texturePath);\r\n\r\n                  if (isVanillaEx) {\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Vanilla Override Texture Memory\", textureMem);\r\n                  } else {\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Width\", imageWidth);\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Height\", imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Texels\", imageWidth * imageHeight);\r\n                    textureImagePi.spectrumIntFeature(\"Non-tied Texture Memory\", textureMem);\r\n\r\n                    if (!isVanilla) {\r\n                      textureImagePi.spectrumIntFeature(\"Non-tied Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                      textureImagePi.spectrumIntFeature(\"Non-tied Non-Vanilla Texture Memory\", textureMem);\r\n                    }\r\n                  }\r\n                }\r\n              } else if (relations > 1) {\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Width\", imageWidth);\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Height\", imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Texels\", imageWidth * imageHeight);\r\n                textureImagePi.spectrumIntFeature(\"Multi-tied Texture Memory\", textureMem);\r\n\r\n                if (!isVanilla) {\r\n                  textureImagePi.spectrumIntFeature(\"Multi-tied Non-Vanilla Texels\", imageWidth * imageHeight);\r\n                  textureImagePi.spectrumIntFeature(\"Multi-tied Non-Vanilla Texture Memory\", textureMem);\r\n                }\r\n              }\r\n\r\n              let individualMemoryBudget = 2048 * 2048 * 4;\r\n\r\n              if (isAtlasTexture) {\r\n                individualMemoryBudget = 256 * 256 * 4;\r\n                if (textureMem > individualMemoryBudget) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.warning,\r\n                      this.id,\r\n                      TextureImageInfoGeneratorTest.individualAtlasTextureMemoryExceedsBudget,\r\n                      `Individual atlassed texture memory exceeds budget of ${individualMemoryBudget} bytes. Memory used`,\r\n                      projectItem,\r\n                      textureMem\r\n                    )\r\n                  );\r\n                }\r\n              } else {\r\n                if (textureMem > individualMemoryBudget) {\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.warning,\r\n                      this.id,\r\n                      TextureImageInfoGeneratorTest.individualTextureMemoryExceedsBudget,\r\n                      `Individual loose texture memory exceeds budget of ${individualMemoryBudget} bytes. Memory used`,\r\n                      projectItem,\r\n                      textureMem\r\n                    )\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    let maxTotalTextureMemory = 0;\r\n    let maxNonVanillaTextureMemory = 0;\r\n    let maxBlockAtlasTextureMemory = 0;\r\n    let maxItemAtlasTextureMemory = 0;\r\n\r\n    const category = await ProjectUtilities.getMetaCategory(project);\r\n\r\n    for (let curTier = 0; curTier < TexturePerformanceTierCount; curTier++) {\r\n      let tierNonVanillaTextureMemory = 0;\r\n      let tierTotalTextureMemory = 0;\r\n      let tierTotalBlockAtlasTextureMemory = 0;\r\n      let tierTotalItemAtlasTextureMemory = 0;\r\n\r\n      for (const texturePath in nonVanillaTextureMemoryByTier[curTier]) {\r\n        tierNonVanillaTextureMemory += nonVanillaTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      for (const texturePath in totalTextureMemoryByTier[curTier]) {\r\n        tierTotalTextureMemory += totalTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      for (const texturePath in blockAtlasTextureMemoryByTier[curTier]) {\r\n        tierTotalBlockAtlasTextureMemory += blockAtlasTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      for (const texturePath in itemAtlasTextureMemoryByTier[curTier]) {\r\n        tierTotalItemAtlasTextureMemory += itemAtlasTextureMemoryByTier[curTier][texturePath];\r\n      }\r\n\r\n      if (curTier > 0 && !hasSupportForTier[curTier]) {\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Non-Vanilla Texture Memory Tier\", maxNonVanillaTextureMemory);\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Total Texture Memory Tier\", maxTotalTextureMemory);\r\n      } else {\r\n        maxItemAtlasTextureMemory = Math.max(maxItemAtlasTextureMemory, tierTotalItemAtlasTextureMemory);\r\n        maxBlockAtlasTextureMemory = Math.max(maxBlockAtlasTextureMemory, tierTotalBlockAtlasTextureMemory);\r\n        maxNonVanillaTextureMemory = Math.max(maxNonVanillaTextureMemory, tierNonVanillaTextureMemory);\r\n        maxTotalTextureMemory = Math.max(maxTotalTextureMemory, tierTotalTextureMemory);\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Non-Vanilla Texture Memory Tier\", tierNonVanillaTextureMemory);\r\n        textureTierImagePi[curTier].spectrumIntFeature(\"Total Texture Memory Tier\", tierTotalTextureMemory);\r\n      }\r\n\r\n      // Expand atlases to power of 2\r\n      tierTotalBlockAtlasTextureMemory = Math.pow(2, Math.ceil(Math.log2(tierTotalBlockAtlasTextureMemory)));\r\n      tierTotalItemAtlasTextureMemory = Math.pow(2, Math.ceil(Math.log2(tierTotalItemAtlasTextureMemory)));\r\n\r\n      textureTierImagePi[curTier].spectrumIntFeature(\r\n        \"Block Atlas Texture Memory Tier\",\r\n        tierTotalBlockAtlasTextureMemory\r\n      );\r\n      textureTierImagePi[curTier].spectrumIntFeature(\"Item Atlas Texture Memory Tier\", tierTotalItemAtlasTextureMemory);\r\n\r\n      // 4K limit for warn, 8K as hard limit\r\n      const totalAtlasTextureMemoryBudgetWarn = 4096 * 4096 * 4;\r\n      const totalAtlasTextureMemoryBudgetError = totalAtlasTextureMemoryBudgetWarn * 4;\r\n\r\n      if (tierTotalBlockAtlasTextureMemory > totalAtlasTextureMemoryBudgetError) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetError,\r\n            `Texture memory of block atlas exceeds hard limit of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetError\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalBlockAtlasTextureMemory\r\n          )\r\n        );\r\n      } else if (tierTotalBlockAtlasTextureMemory > totalAtlasTextureMemoryBudgetWarn) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetWarn,\r\n            `Texture memory of block atlas exceeds budget of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetWarn\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalBlockAtlasTextureMemory\r\n          )\r\n        );\r\n      }\r\n\r\n      if (tierTotalItemAtlasTextureMemory > totalAtlasTextureMemoryBudgetError) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetError,\r\n            `Texture memory of item atlas exceeds hard limit of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetError\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalItemAtlasTextureMemory\r\n          )\r\n        );\r\n      } else if (tierTotalItemAtlasTextureMemory > totalAtlasTextureMemoryBudgetWarn) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalAtlasTextureMemoryExceedsBudgetWarn,\r\n            `Texture memory of item atlas exceeds budget of ${Utilities.addCommasToNumber(\r\n              totalAtlasTextureMemoryBudgetWarn\r\n            )} bytes. Total memory used`,\r\n            undefined,\r\n            tierTotalItemAtlasTextureMemory\r\n          )\r\n        );\r\n      }\r\n\r\n      tierNonVanillaTextureMemory += tierTotalBlockAtlasTextureMemory + tierTotalItemAtlasTextureMemory;\r\n      tierTotalTextureMemory += tierTotalBlockAtlasTextureMemory + tierTotalItemAtlasTextureMemory;\r\n\r\n      let curMemoryUsedInTier = tierTotalTextureMemory;\r\n\r\n      if (curMemoryUsedInTier <= 0) {\r\n        curMemoryUsedInTier = maxTotalTextureMemory;\r\n      }\r\n\r\n      if (curTier > 0 && !hasSupportForTier[curTier]) {\r\n        curMemoryUsedInTier = maxTotalTextureMemory;\r\n      }\r\n\r\n      tierTotalMemorySizes[curTier] = curMemoryUsedInTier;\r\n\r\n      // check for non linear tier scaling (e.g., tier 2 occupies more memory than tier 3)\r\n      if (hasSupportForTier[curTier]) {\r\n        for (let prevTier = 0; prevTier < curTier; prevTier++) {\r\n          if (tierTotalMemorySizes[prevTier] && tierTotalMemorySizes[prevTier] > curMemoryUsedInTier) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.invalidTieringConfiguration,\r\n                `Lower tier ${prevTier} has a higher memory requirement (${Utilities.addCommasToNumber(\r\n                  tierTotalMemorySizes[prevTier]\r\n                )}) than tier ${curTier}`,\r\n                undefined,\r\n                curMemoryUsedInTier\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      const tierTotalTextureMemoryBudget = 1024 * 1024 * TextureMemoryLimitsByTier[category][curTier];\r\n\r\n      if (curMemoryUsedInTier > tierTotalTextureMemoryBudget) {\r\n        let warningMessage = `Total texture memory exceeds budget of ${Utilities.addCommasToNumber(\r\n          tierTotalTextureMemoryBudget\r\n        )} bytes for items of type ${ProjectUtilities.getMetaCategoryDescription(category)} at tier ${curTier}.`;\r\n\r\n        warningMessage += \" Total texture memory used\";\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudgetWarningBase + curTier,\r\n            warningMessage,\r\n            undefined,\r\n            curMemoryUsedInTier\r\n          )\r\n        );\r\n\r\n        for (const pvLabel in project.variants) {\r\n          const pv = project.variants[pvLabel];\r\n\r\n          if (pv && pv.effectiveUnifiedTier === curTier) {\r\n            warningMessage += \" Because this project specifically targets this tier, it is an error.\";\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudgetErrorBase + curTier,\r\n                warningMessage,\r\n                undefined,\r\n                curMemoryUsedInTier\r\n              )\r\n            );\r\n\r\n            break;\r\n          }\r\n        }\r\n\r\n        // vibrant visuals content must support tier 2 memory limits.\r\n        if (curTier === 2) {\r\n          const isVibrantVisualsCompatible = await ProjectUtilities.isVibrantVisualsCompatible(project);\r\n\r\n          if (isVibrantVisualsCompatible) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.invalidTieringForVibrantVisuals,\r\n                `Project is marked to support vibrant visuals, but does not support texture limits at tiers ${curTier}. Texture memory`,\r\n                undefined,\r\n                curMemoryUsedInTier\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // if add-on content is not managing its texture memory across tiers and is exceeding a base limit, throw an error\r\n    if (\r\n      !isExplicitlyTargetingTiers &&\r\n      category === ProjectMetaCategory.addOn &&\r\n      maxTotalTextureMemory > TextureMemoryLimitsByTier[category][0] * 1024 * 1024\r\n    ) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudget,\r\n          `Total texture memory exceeds base budget of ${Utilities.addCommasToNumber(\r\n            TextureMemoryLimitsByTier[category][0] * 1024 * 1024\r\n          )} bytes and is not using subpacks to target specific tiers. Total memory used`,\r\n          undefined,\r\n          maxTotalTextureMemory\r\n        )\r\n      );\r\n    }\r\n\r\n    const totalTextureMemoryBudget = 1024 * 1024 * TextureMemoryLimitsByTier[category][5];\r\n    // if content exceeds absolute limits, throw an error\r\n    if (maxTotalTextureMemory > totalTextureMemoryBudget) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TextureImageInfoGeneratorTest.totalTextureMemoryExceedsBudget,\r\n          `Total texture memory exceeds absolute budget of ${Utilities.addCommasToNumber(\r\n            totalTextureMemoryBudget\r\n          )} bytes. Total memory used`,\r\n          undefined,\r\n          maxTotalTextureMemory\r\n        )\r\n      );\r\n    }\r\n\r\n    if (vanillaTexturePathNonMersCount > 0) {\r\n      let vanillaOverrideTextureCount = 0;\r\n\r\n      for (const path in vanillaTexturePathNonMers) {\r\n        if (vanillaTexturePathNonMers[path] === true) {\r\n          vanillaOverrideTextureCount++;\r\n        }\r\n      }\r\n\r\n      textureImagePi.setFeature(\"Vanilla Game Texture Coverage\", \"Override Count\", vanillaOverrideTextureCount);\r\n      textureImagePi.setFeature(\r\n        \"Vanilla Game Texture Coverage\",\r\n        \"Vanilla Texture Count\",\r\n        vanillaTexturePathNonMersCount\r\n      );\r\n      textureImagePi.setFeature(\r\n        \"Vanilla Game Texture Coverage\",\r\n        \"Percent\",\r\n        vanillaOverrideTextureCount / vanillaTexturePathNonMersCount\r\n      );\r\n\r\n      const actualOverridePercent = vanillaOverrideTextureCount / vanillaTexturePathNonMersCount;\r\n      if (actualOverridePercent < MashupResourcePackThresholdErrorPercent) {\r\n        let hasGlobalResourcePack = false;\r\n        for (const pack of project.packs) {\r\n          if (pack.packType === PackType.resource && !pack.isInWorld) {\r\n            hasGlobalResourcePack = true;\r\n          }\r\n        }\r\n\r\n        const worldCount = project.getItemsByType(ProjectItemType.worldFolder).length;\r\n\r\n        if (hasGlobalResourcePack && worldCount > 0) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              TextureImageInfoGeneratorTest.mashupPackDoesntOverrideMostTextures,\r\n              `Content seems like a mashup pack, but the resource pack does not override >60% of vanilla textures.`,\r\n              undefined,\r\n              actualOverridePercent\r\n            )\r\n          );\r\n        }\r\n      }\r\n\r\n      if (actualOverridePercent >= TextureOverrideThresholdPercent) {\r\n        if (actualOverridePercent < TextureOverrideThresholdErrorPercent) {\r\n          const nonRpItemCount =\r\n            project.getItemsByType(ProjectItemType.behaviorPackManifestJson).length +\r\n            project.getItemsByType(ProjectItemType.worldFolder).length;\r\n\r\n          if (nonRpItemCount === 0) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.texturePackDoesntOverrideMostTextures,\r\n                `Content seems like a texture pack (overrides >70% of textures), but does not override the vast majority of textures. This pack should override at least 95% of vanilla textures.`,\r\n                undefined,\r\n                actualOverridePercent\r\n              )\r\n            );\r\n          }\r\n        }\r\n\r\n        for (const path in vanillaTexturePathNonMers) {\r\n          if (vanillaTexturePathNonMers[path] === false) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.warning,\r\n                this.id,\r\n                TextureImageInfoGeneratorTest.texturePackDoesntOverrideVanillaGameTexture,\r\n                `Content seems like a texture pack, but does not override vanilla texture`,\r\n                undefined,\r\n                path\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport RecipeBehaviorDefinition from \"../minecraft/RecipeBehaviorDefinition\";\r\nimport AnimationControllerBehaviorDefinition from \"../minecraft/AnimationBehaviorDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport FogResourceDefinition from \"../minecraft/FogResourceDefinition\";\r\nimport WorldTemplateManifestDefinition from \"../minecraft/WorldTemplateManifestDefinition\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { isMinorVersionTooOld } from \"../core/versioning/MinecraftVersionRules\";\r\n\r\n/**\r\n * Validates and updates format versions across various Minecraft definition types.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/formatver.form.json} for topic definitions\r\n */\r\nexport default class FormatVersionManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"FORMATVER\";\r\n  title = \"Format Version\";\r\n\r\n  performPlatformVersionValidations: boolean = false;\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, content: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 500, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const modernGameVersionSplit = ver.split(\".\");\r\n    if (modernGameVersionSplit.length < 3 || modernGameVersionSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          501,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.blockTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const btdef = await BlockTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (btdef) {\r\n            const ver = btdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Block type\", 110);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                btdef?.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const itdef = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (itdef) {\r\n            const ver = itdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Item type\", 130);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                itdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.recipeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const rbdef = await RecipeBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rbdef) {\r\n            const ver = rbdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Recipe\", 150);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                rbdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationBehaviorJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const abdef = await AnimationControllerBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (abdef) {\r\n            const ver = abdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Behavior animation\", 170);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                abdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationControllerBehaviorJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const abdef = await AnimationControllerBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (abdef) {\r\n            const ver = abdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Behavior animation controller\", 190);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                abdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const ardef = await AnimationResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (ardef) {\r\n            const ver = ardef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Resource animation\", 210);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                ardef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.animationControllerResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const acrdef = await AnimationControllerResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (acrdef) {\r\n            const ver = acrdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Resource animation controller\", 230);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                acrdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.spawnRuleBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const srbdef = await SpawnRulesBehaviorDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (srbdef) {\r\n            const ver = srbdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"12\", \"0\"], infoItems, pi, \"Spawn rules\", 250);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                srbdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.attachableResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const srbdef = await AttachableResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (srbdef) {\r\n            const ver = srbdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, [\"1\", \"10\", \"0\"], infoItems, pi, \"Attachables\", 270, true);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                srbdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.entityTypeResource) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const etrdef = await EntityTypeResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (etrdef) {\r\n            const ver = etrdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Entity type resource\", 290);\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                etrdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.fogResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const etrdef = await FogResourceDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (etrdef) {\r\n            const ver = etrdef.getFormatVersion();\r\n\r\n            this.checkVersions(ver, modernGameVersionSplit, infoItems, pi, \"Fog resource\", 310);\r\n\r\n            infoItems.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.info,\r\n                this.id,\r\n                600 + (pi.itemType as number),\r\n                ProjectItemUtilities.getDescriptionForType(pi.itemType) + \" format_version\",\r\n                pi,\r\n                etrdef.getFormatVersion()\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  checkVersions(\r\n    ver: number[] | undefined,\r\n    currentVersion: string[],\r\n    infoItems: ProjectInfoItem[],\r\n    pi: ProjectItem,\r\n    typeString: string,\r\n    identifierOffset: number,\r\n    allowHigherVersions?: boolean\r\n  ) {\r\n    const verShort = currentVersion[0] + \".\" + currentVersion[1] + \".\" + currentVersion[2];\r\n\r\n    if (!ver || ver.length !== 3) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          identifierOffset,\r\n          typeString + \" does not define a format_version.\",\r\n          pi\r\n        )\r\n      );\r\n      return true;\r\n    } else {\r\n      if (ver[0] < parseInt(currentVersion[0])) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n            this.id,\r\n            identifierOffset + 2,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a lower major version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (ver[0] > parseInt(currentVersion[0]) && !allowHigherVersions) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            identifierOffset + 4,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a higher major version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n        return true;\r\n      } else if (isMinorVersionTooOld(parseInt(currentVersion[0]), parseInt(currentVersion[1]), ver[1])) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            this.performPlatformVersionValidations ? InfoItemType.error : InfoItemType.recommendation,\r\n            this.id,\r\n            identifierOffset + 6,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a lower minor version number compared to the expected version (\" +\r\n              verShort +\r\n              \") or its previous minor version\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (\r\n        ver[1] > parseInt(currentVersion[1]) &&\r\n        !this.performPlatformVersionValidations &&\r\n        !allowHigherVersions\r\n      ) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            identifierOffset + 8,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a higher minor version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n        return true;\r\n      } else if (ver[2] < parseInt(currentVersion[2])) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.recommendation,\r\n            this.id,\r\n            identifierOffset + 10,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a lower patch version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n      } else if (\r\n        ver[2] > parseInt(currentVersion[2]) &&\r\n        ver[1] === parseInt(currentVersion[1]) &&\r\n        !this.performPlatformVersionValidations &&\r\n        !allowHigherVersions\r\n      ) {\r\n        infoItems.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            identifierOffset + 12,\r\n            typeString +\r\n              \" version (\" +\r\n              ver.join(\".\") +\r\n              \") has a higher patch version number compared to the expected version (\" +\r\n              verShort +\r\n              \")\",\r\n            pi\r\n          )\r\n        );\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case 1:\r\n        const localResults = await this.updateBaseGameVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [1];\r\n  }\r\n\r\n  async updateBaseGameVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await WorldTemplateManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.baseGameVersion;\r\n\r\n            if (!mev || mev.length < 3 || mev.length > 4 || mev[0] !== major || mev[1] !== minor || mev[2] !== patch) {\r\n              wtManifest.setBaseGameVersion([major, minor, patch], project);\r\n              wtManifest.persist();\r\n\r\n              results.push(\r\n                new ProjectUpdateResult(\r\n                  UpdateResultType.updatedFile,\r\n                  this.id,\r\n                  200,\r\n                  \"Updated world template base_game_version to '\" + major + \".\" + minor + \".\" + patch + \"'.\",\r\n                  pi,\r\n                  ver\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\n\r\nexport enum AnimationResourceInfoGeneratorTest {\r\n  animations = 101,\r\n  bones = 102,\r\n}\r\n\r\n/**\r\n * Aggregates animation resource information from resource packs.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/resourceanimation.form.json} for topic definitions\r\n */\r\nexport default class AnimationResourceInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"RESOURCEANIMATION\";\r\n  title = \"Resource Animation\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.animationCount = infoSet.getSummedDataValue(\"RESOURCEANIMATION\", 1);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const animationCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      AnimationResourceInfoGeneratorTest.animations,\r\n      ProjectInfoUtilities.getTitleFromEnum(\r\n        AnimationResourceInfoGeneratorTest,\r\n        AnimationResourceInfoGeneratorTest.animations\r\n      )\r\n    );\r\n    items.push(animationCountPi);\r\n\r\n    const boneCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      AnimationResourceInfoGeneratorTest.bones,\r\n      ProjectInfoUtilities.getTitleFromEnum(\r\n        AnimationResourceInfoGeneratorTest,\r\n        AnimationResourceInfoGeneratorTest.bones\r\n      )\r\n    );\r\n    items.push(boneCountPi);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.animationResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const ra = await AnimationResourceDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (ra && ra.animations) {\r\n            for (const animationName in ra.animations) {\r\n              const animation = ra.animations[animationName];\r\n\r\n              animationCountPi.incrementFeature(\"Resource\", \"Count\", 1);\r\n\r\n              if (animation && animation.bones) {\r\n                for (const boneName in animation.bones) {\r\n                  const bone = animation.bones[boneName];\r\n\r\n                  if (bone) {\r\n                    boneCountPi.incrementFeature(\"Resource Animation Bone\", \"Count\", 1);\r\n\r\n                    if (bone.position) {\r\n                      this.processAnimationValue(boneCountPi, bone.position, \"Position\");\r\n                    }\r\n\r\n                    if (bone.rotation) {\r\n                      this.processAnimationValue(boneCountPi, bone.rotation, \"Rotation\");\r\n                    }\r\n\r\n                    if (bone.scale) {\r\n                      this.processAnimationValue(boneCountPi, bone.scale, \"Scale\");\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  processAnimationValue(boneCountPi: ProjectInfoItem, value: any, type: string) {\r\n    let isKeyframedBoneAnimation = false;\r\n\r\n    if (typeof value === \"string\") {\r\n      boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Expression\", \"Count\", 1);\r\n      return;\r\n    }\r\n\r\n    for (const key in value) {\r\n      const val = value[key];\r\n\r\n      if (Array.isArray(val)) {\r\n        isKeyframedBoneAnimation = true;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (isKeyframedBoneAnimation) {\r\n      boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Keyframe\", \"Count\", 1);\r\n\r\n      for (const key in value) {\r\n        const val = value[key];\r\n\r\n        if (Array.isArray(val)) {\r\n          for (const valAtom of val) {\r\n            if (typeof valAtom === \"string\") {\r\n              boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Keyframe with Molang\", \"Count\", 1);\r\n            } else {\r\n              boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Keyframe\", \"Count\", 1);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Continuous\", \"Count\", 1);\r\n\r\n      if (Array.isArray(value)) {\r\n        for (const val of value) {\r\n          if (typeof val.position === \"string\") {\r\n            boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Continuous with Molang\", \"Count\", 1);\r\n          } else {\r\n            boneCountPi.incrementFeature(\"Resource Animation Bone \" + type + \" Continuous\", \"Count\", 1);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\n\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\n\r\nexport enum UnlinkedItemInfoGeneratorTest {\r\n  unlinkedItemIsNotUsed = 191,\r\n  avoidLinksToVanillaItems = 205,\r\n}\r\n\r\nexport const UnlinkedItemNotFoundByType = 300;\r\n\r\n/**\r\n * Detects unlinked items and validates item relationships.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/unlink.form.json} for topic definitions\r\n */\r\nexport default class UnlinkedItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"UNLINK\";\r\n  title = \"Unlinked Items\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (projectItem.unfulfilledRelationships) {\r\n      for (const rel of projectItem.unfulfilledRelationships) {\r\n        if (rel.isVanillaDependent) {\r\n          // UNLINK205\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.recommendation,\r\n              this.id,\r\n              UnlinkedItemInfoGeneratorTest.avoidLinksToVanillaItems,\r\n              `Link to vanilla ` +\r\n                ProjectItemUtilities.getDescriptionForType(rel.itemType).toLowerCase() +\r\n                ` item; avoid if possible`,\r\n              projectItem,\r\n              rel.path\r\n            )\r\n          );\r\n        } else {\r\n          const message =\r\n            `Link to ` +\r\n            ProjectItemUtilities.getDescriptionForType(rel.itemType).toLowerCase() +\r\n            ` is not found in this pack`;\r\n\r\n          // UNLINK300+\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              UnlinkedItemNotFoundByType + rel.itemType,\r\n              message,\r\n              projectItem,\r\n              projectItem.projectPath + \" to `\" + rel.path + \"`\"\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.itemType === ProjectItemType.texture || projectItem.itemType === ProjectItemType.audio) {\r\n      if (projectItem.parentItemCount <= 0 && projectItem.childItemCount <= 0) {\r\n        const path = await projectItem.getPackRelativePath();\r\n\r\n        if (path) {\r\n          const isVanilla = await Database.matchesVanillaPath(path);\r\n\r\n          if (!isVanilla) {\r\n            // UNLINK191\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.warning,\r\n                this.id,\r\n                UnlinkedItemInfoGeneratorTest.unlinkedItemIsNotUsed,\r\n                ProjectItemUtilities.getDescriptionForType(projectItem.itemType) +\r\n                  ` does not have any items in this pack that are using this.`,\r\n                projectItem\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport { ItemDisplayTransforms } from \"../minecraft/IModelGeometry\";\r\n\r\nexport enum GeometryInfoGeneratorTest {\r\n  blockGeometry = 101,\r\n  entityGeometry = 102,\r\n  itemGeometry = 103,\r\n  overlyComplexBlockGeometry = 501,\r\n}\r\n\r\n/**\r\n * Validates and aggregates model geometry information from resource packs.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/geometry.form.json} for topic definitions\r\n */\r\nexport default class GeometryInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"GEOMETRY\";\r\n  title = \"Model Geometry Validation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    const blockGeometryPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      GeometryInfoGeneratorTest.blockGeometry,\r\n      \"Block Geometry\"\r\n    );\r\n\r\n    const entityGeometryPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      GeometryInfoGeneratorTest.entityGeometry,\r\n      \"Entity Geometry\"\r\n    );\r\n\r\n    const itemGeometryPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      GeometryInfoGeneratorTest.itemGeometry,\r\n      \"Items Geometry\"\r\n    );\r\n\r\n    const items: ProjectInfoItem[] = [blockGeometryPi, entityGeometryPi, itemGeometryPi];\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.modelGeometryJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const srPath = projectItem.primaryFile.storageRelativePath.toLowerCase();\r\n          const modGeo = await ModelGeometryDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (modGeo && modGeo.definitions) {\r\n            for (const geoDef of modGeo.definitions) {\r\n              if (geoDef.bones) {\r\n                let totalCubes = 0;\r\n                for (const bone of geoDef.bones) {\r\n                  if (bone.cubes) {\r\n                    totalCubes += bone.cubes.length;\r\n                  }\r\n                }\r\n\r\n                if (srPath.indexOf(\"/blocks/\") >= 0) {\r\n                  blockGeometryPi.spectrumIntFeature(\"Cubes\", totalCubes);\r\n\r\n                  const blockCubeBudget = 50;\r\n                  if (totalCubes > blockCubeBudget) {\r\n                    items.push(\r\n                      new ProjectInfoItem(\r\n                        InfoItemType.warning,\r\n                        this.id,\r\n                        GeometryInfoGeneratorTest.overlyComplexBlockGeometry,\r\n                        `More than ${blockCubeBudget} cubes in custom blocks may lead to degraded performance. Cubes used`,\r\n                        projectItem,\r\n                        totalCubes\r\n                      )\r\n                    );\r\n                  }\r\n                } else if (srPath.indexOf(\"/items/\") >= 0 || srPath.indexOf(\"/attachable\") >= 0) {\r\n                  // note that sometimes this is in /entity, e.g., /entity/attachables, so this check needs to be first\r\n                  itemGeometryPi.spectrumIntFeature(\"Cubes\", totalCubes);\r\n                } else if (srPath.indexOf(\"/entity/\") >= 0) {\r\n                  entityGeometryPi.spectrumIntFeature(\"Cubes\", totalCubes);\r\n                }\r\n              }\r\n\r\n              if (geoDef.item_display_transforms) {\r\n                for (const itemDisplayKey in geoDef.item_display_transforms) {\r\n                  const itemDisplayTransform = (geoDef.item_display_transforms as any)[\r\n                    itemDisplayKey\r\n                  ] as ItemDisplayTransforms;\r\n                  if (!itemDisplayTransform) {\r\n                    continue;\r\n                  }\r\n\r\n                  itemGeometryPi.incrementFeature(itemDisplayKey + \" Item Display Transform\");\r\n\r\n                  if (itemDisplayTransform.fit_to_frame === true) {\r\n                    itemGeometryPi.incrementFeature(itemDisplayKey + \" Item Display Transform Fit To Frame True\");\r\n                  }\r\n\r\n                  if (itemDisplayTransform.fit_to_frame === false) {\r\n                    itemGeometryPi.incrementFeature(itemDisplayKey + \" Item Display Transform Fit To Frame False\");\r\n                  }\r\n\r\n                  if (itemDisplayTransform.scale) {\r\n                    for (const scaleNum of itemDisplayTransform.scale) {\r\n                      itemGeometryPi.spectrumFeature(itemDisplayKey + \" Item Display Transform Scale \", scaleNum);\r\n                    }\r\n                  }\r\n\r\n                  if (itemDisplayTransform.rotation) {\r\n                    for (const rotationNum of itemDisplayTransform.rotation) {\r\n                      itemGeometryPi.spectrumFeature(itemDisplayKey + \" Item Display Transform Rotation \", rotationNum);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport Project from \"../app/Project\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"../minecraft/TerrainTextureCatalogDefinition\";\r\nimport ItemTextureCatalogDefinition from \"../minecraft/ItemTextureCatalogDefinition\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\n\r\nexport enum TextureReferenceInfoGeneratorTest {\r\n  textureReferences = 101,\r\n}\r\n\r\n/**\r\n * Aggregates texture reference information from various catalog definitions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/textureref.form.json} for topic definitions\r\n */\r\nexport default class TextureReferenceInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"TEXTUREREF\";\r\n  title = \"Texture References\";\r\n\r\n  performAddOnValidations = false;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.textureCount = infoSet.getSummedDataValue(this.id, TextureReferenceInfoGeneratorTest.textureReferences);\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const textureRefCountPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      TextureReferenceInfoGeneratorTest.textureReferences,\r\n      \"Texture References\"\r\n    );\r\n    items.push(textureRefCountPi);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockCat = await BlocksCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockCat && blockCat.blocksCatalog && projectItem.projectPath) {\r\n            const textureRefs = blockCat.getTextureReferences();\r\n\r\n            for (const textureRef of textureRefs) {\r\n              contentIndex.insert(\r\n                textureRef,\r\n                projectItem.projectPath,\r\n                AnnotationCategory.blockTextureReferenceDependent\r\n              );\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.terrainTextureCatalogResourceJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const blockCat = await TerrainTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (blockCat && projectItem.projectPath) {\r\n            const textureRefs = blockCat.getTextureReferences();\r\n\r\n            for (const textureRef of textureRefs) {\r\n              contentIndex.insert(textureRef, projectItem.projectPath, AnnotationCategory.blockTextureReferenceSource);\r\n            }\r\n          }\r\n        }\r\n      } else if (projectItem.itemType === ProjectItemType.itemTextureJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        if (projectItem.primaryFile) {\r\n          const itemCat = await ItemTextureCatalogDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (itemCat && projectItem.projectPath) {\r\n            const textureRefs = itemCat.getTextureReferences();\r\n\r\n            for (const textureRef of textureRefs) {\r\n              contentIndex.insert(textureRef, projectItem.projectPath, AnnotationCategory.itemTextureReferenceSource);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectFileInfoGenerator from \"./IProjectFileInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport IFile from \"../storage/IFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\n\r\nexport enum ValidGeneratorTest {\r\n  nonCompliantJson = 102,\r\n  emptyJson = 103,\r\n  jsonNotString = 104,\r\n}\r\n\r\n/**\r\n * Validates file contents for JSON compliance and format correctness.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/valfile.form.json} for topic definitions\r\n */\r\nexport default class ValidFileGenerator implements IProjectFileInfoGenerator {\r\n  id = \"VALFILE\";\r\n  title = \"Valid files\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, file: IFile, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (StorageUtilities.getMimeType(file) === \"application/json\") {\r\n      if (!file.isString) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            ValidGeneratorTest.jsonNotString,\r\n            `JSON file is not a string`,\r\n            project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n            file.content ? file.content.length + \" bytes\" : \"unloadable\"\r\n          )\r\n        );\r\n      } else if (!file.content || file.content?.length < 2) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            ValidGeneratorTest.emptyJson,\r\n            `JSON file is empty`,\r\n            project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n            file.content ? file.content.length + \" characters\" : \"unloadable\"\r\n          )\r\n        );\r\n      } else {\r\n        StorageUtilities.getJsonObject(file);\r\n\r\n        if (file.isInErrorState) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              ValidGeneratorTest.nonCompliantJson,\r\n              `JSON file is not JSON compliant`,\r\n              project.getItemByExtendedOrProjectPath(file.extendedPath),\r\n              file.errorStateMessage ? file.errorStateMessage : \"unparseable\"\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport BlocksCatalogDefinition from \"../minecraft/BlocksCatalogDefinition\";\r\n\r\nexport enum BlocksCatalogUpdate {\r\n  removeUnusedBlockResourceIdentifiers = 1051,\r\n}\r\n\r\nexport enum BlocksCatalogInfo {\r\n  unusedBlockCatalogResource = 100,\r\n  foundBlockCatalogResource = 101,\r\n  vanillaOverrideBlockCatalogResource = 102,\r\n  blockResourceIdentifier = 53,\r\n}\r\n\r\n/**\r\n * Validates and manages blocks catalog (blocks.json) resources in resource packs.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/blockscat.form.json} for topic definitions\r\n */\r\nexport default class BlocksCatalogManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"BLOCKSCAT\";\r\n  title = \"Blocks Catalog\";\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const blocksCatalog = await BlocksCatalogDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          results.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              BlocksCatalogInfo.foundBlockCatalogResource,\r\n              `Blocks catalog resource found`,\r\n              pi\r\n            )\r\n          );\r\n\r\n          if (blocksCatalog) {\r\n            const dependencies = await blocksCatalog.getDependenciesList(project);\r\n\r\n            for (const id of dependencies.unused) {\r\n              results.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.warning,\r\n                  this.id,\r\n                  BlocksCatalogInfo.unusedBlockCatalogResource,\r\n                  `Blocks catalog resource is not used`,\r\n                  pi,\r\n                  id\r\n                )\r\n              );\r\n            }\r\n\r\n            for (const id of dependencies.vanillaOverride) {\r\n              results.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.recommendation,\r\n                  this.id,\r\n                  BlocksCatalogInfo.vanillaOverrideBlockCatalogResource,\r\n                  `Overrides vanilla resource, which is not recommended`,\r\n                  pi,\r\n                  id\r\n                )\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.blocksCatalogResourceJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const blocksCatalog = await BlocksCatalogDefinition.ensureOnFile(pi.primaryFile);\r\n          let wasUpdated = false;\r\n          if (blocksCatalog) {\r\n            switch (updateId) {\r\n              case BlocksCatalogUpdate.removeUnusedBlockResourceIdentifiers:\r\n                const dependencies = await blocksCatalog.getDependenciesList(project);\r\n\r\n                for (const id of dependencies.unused) {\r\n                  blocksCatalog.removeId(id);\r\n\r\n                  wasUpdated = true;\r\n                  results.push(\r\n                    new ProjectUpdateResult(\r\n                      UpdateResultType.updatedFile,\r\n                      this.id,\r\n                      BlocksCatalogUpdate.removeUnusedBlockResourceIdentifiers,\r\n                      \"Removed ununused blocks catalog resource\",\r\n                      pi,\r\n                      id\r\n                    )\r\n                  );\r\n                }\r\n                break;\r\n            }\r\n          }\r\n\r\n          if (wasUpdated) {\r\n            blocksCatalog?.persist();\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [BlocksCatalogUpdate.removeUnusedBlockResourceIdentifiers];\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport enum EntityTypeUpdate {\r\n  UpdateFormatVersionToLatest = 1051,\r\n}\r\n\r\nexport enum EntityTypeInfo {\r\n  RuntimeIdentifier = 52,\r\n  Identifier = 53,\r\n  Metadata = 54,\r\n  FormatVersionDefined = 100,\r\n  FormatVersionMajorVersionLowerThanCurrent = 110,\r\n  FormatVersionMajorVersionHigherThanCurrent = 111,\r\n  FormatVersionMinorVersionLowerThanCurrent = 120,\r\n  FormatVersionMinorVersionHigherThanCurrent = 121,\r\n  FormatVersionPatchVersionLowerThanCurrent = 130,\r\n  FormatVersionPatchVersionHigherThanCurrent = 131,\r\n  FailedToRetrieveLatestMinecraftVersion = 500,\r\n  FailedToParseLatestMinecraftVersion = 501,\r\n}\r\n\r\n/**\r\n * Validates and updates entity type definitions, including format version management.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/entitytype.form.json} for topic definitions\r\n */\r\nexport default class EntityTypeManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id;\r\n  title = \"Entity Type\";\r\n\r\n  constructor() {\r\n    this.id = \"ENTITYTYPE\";\r\n  }\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 509, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          501,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const piiRuntimeIdentifier = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      EntityTypeInfo.RuntimeIdentifier,\r\n      \"Entity Type Runtime Identifier\"\r\n    );\r\n    const piiIdentifier = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      EntityTypeInfo.Identifier,\r\n      \"Entity Type Identifier\"\r\n    );\r\n    const piiMetadata = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      EntityTypeInfo.Metadata,\r\n      \"Entity Type Metadata\"\r\n    );\r\n\r\n    infoItems.push(piiRuntimeIdentifier);\r\n\r\n    infoItems.push(piiIdentifier);\r\n\r\n    infoItems.push(piiMetadata);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpEntityType = await EntityTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpEntityType) {\r\n            await bpEntityType.load();\r\n\r\n            if (bpEntityType && bpEntityType._data && bpEntityType._data.description) {\r\n              const desc = bpEntityType._data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                piiIdentifier.incrementFeature(desc.identifier.toLowerCase());\r\n              } else {\r\n                piiIdentifier.incrementFeature(\"(no override identifier)\");\r\n              }\r\n\r\n              if (\r\n                desc.runtime_identifier !== undefined &&\r\n                desc.runtime_identifier.toLowerCase !== undefined &&\r\n                desc.runtime_identifier.toLowerCase().startsWith(\"minecraft:\")\r\n              ) {\r\n                piiRuntimeIdentifier.incrementFeature(desc.runtime_identifier.toLowerCase());\r\n              } else {\r\n                piiRuntimeIdentifier.incrementFeature(\"(no runtime identifier)\");\r\n              }\r\n\r\n              if (desc.aliases) {\r\n                // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n                for (const aliasName in desc.aliases) {\r\n                  piiMetadata.incrementFeature(\"Entity Type Alias\");\r\n                }\r\n              }\r\n\r\n              if (desc.properties) {\r\n                for (const propName in desc.properties) {\r\n                  const prop = desc.properties[propName];\r\n\r\n                  if (prop) {\r\n                    piiMetadata.incrementFeature(\"Entity Type Property\");\r\n\r\n                    if (prop.client_sync === true) {\r\n                      piiMetadata.incrementFeature(\"Entity Type Property Client Sync=true\");\r\n                    }\r\n                    if (prop.client_sync === false) {\r\n                      piiMetadata.incrementFeature(\"Entity Type Property Client Sync=false\");\r\n                    }\r\n                    if (prop.type === \"bool\" || prop.type === \"int\" || prop.type === \"float\" || prop.type === \"enum\") {\r\n                      piiMetadata.incrementFeature(\"Entity Type \" + prop.type + \" Property\");\r\n                    } else if (prop.type) {\r\n                      Log.debug(\"Unknown entity property type found: \" + prop.type);\r\n                      piiMetadata.incrementFeature(\"Entity Type Unknown Property\");\r\n                    }\r\n\r\n                    if (prop.values) {\r\n                      piiMetadata.spectrumFeature(\"Entity Type Property Value Count\", prop.values.length);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (desc.is_experimental) {\r\n                piiMetadata.incrementFeature(\"Experimental Entity Type\");\r\n              }\r\n\r\n              if (desc.is_spawnable) {\r\n                piiMetadata.incrementFeature(\"Spawnable Entity Type\");\r\n              }\r\n\r\n              if (desc.is_summonable) {\r\n                piiMetadata.incrementFeature(\"Summonable Entity Type\");\r\n              }\r\n            } else {\r\n              piiMetadata.incrementFeature(\"Entity Type without description\");\r\n            }\r\n\r\n            const fv = bpEntityType.getFormatVersionAsNumberArray();\r\n            if (!bpEntityType || !fv) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  100,\r\n                  \"Entity type does not define a format_version.\",\r\n                  pi\r\n                )\r\n              );\r\n            } else {\r\n              if (fv.length > 0 && fv[0] < parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    110,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[0] > parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    111,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] < parseInt(verSplit[1]) - 1) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    120,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower minor version number compared to the current version or the previous current minor version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] > parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    121,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher minor version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] < parseInt(verSplit[2])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    130,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] > parseInt(verSplit[2]) && fv[1] === parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    131,\r\n                    \"Behavior pack entity type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case EntityTypeUpdate.UpdateFormatVersionToLatest:\r\n        const localResults = await this.updateFormatVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [EntityTypeUpdate.UpdateFormatVersionToLatest];\r\n  }\r\n\r\n  async updateFormatVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          EntityTypeInfo.FailedToRetrieveLatestMinecraftVersion,\r\n          \"Could not retrieve version.\"\r\n        )\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.entityTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await EntityTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.formatVersion;\r\n\r\n            if (mev) {\r\n              const mevY = mev?.split(\".\");\r\n\r\n              if (\r\n                mevY &&\r\n                (mevY.length < 3 ||\r\n                  mevY.length > 4 ||\r\n                  parseInt(mevY[0]) !== major ||\r\n                  parseInt(mevY[1]) !== minor ||\r\n                  parseInt(mevY[2]) !== patch)\r\n              ) {\r\n                wtManifest.setBehaviorPackFormatVersion(major + \".\" + minor + \".\" + patch);\r\n                wtManifest.persist();\r\n\r\n                results.push(\r\n                  new ProjectUpdateResult(\r\n                    UpdateResultType.updatedFile,\r\n                    this.id,\r\n                    200,\r\n                    \"Updated behavior pack entity type manager format_version to '\" +\r\n                      major +\r\n                      \".\" +\r\n                      minor +\r\n                      \".\" +\r\n                      patch +\r\n                      \"'.\",\r\n                    pi,\r\n                    ver\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"../info/IProjectInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IProjectUpdater from \"../updates/IProjectUpdater\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport { UpdateResultType } from \"../updates/IUpdateResult\";\r\nimport { IProjectInfoTopicData } from \"../info/IProjectInfoGeneratorBase\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport ProjectInfoUtilities from \"../info/ProjectInfoUtilities\";\r\n\r\nexport enum ItemTypeUpdate {\r\n  UpdateFormatVersionToLatest = 1,\r\n}\r\n\r\nexport enum ItemTypeInfo {\r\n  identifier = 53,\r\n  metadata = 54,\r\n  category = 55,\r\n  formatVersionDefined = 100,\r\n  formatVersionMajorVersionLowerThanCurrent = 110,\r\n  formatVersionMajorVersionHigherThanCurrent = 111,\r\n  formatVersionMinorVersionLowerThanCurrent = 120,\r\n  formatVersionMinorVersionHigherThanCurrent = 121,\r\n  formatVersionPatchVersionLowerThanCurrent = 130,\r\n  formatVersionPatchVersionHigherThanCurrent = 131,\r\n  failedToRetrieveLatestMinecraftVersion = 500,\r\n  failedToParseLatestMinecraftVersion = 501,\r\n}\r\n\r\n/**\r\n * Validates and updates item type definitions, including format version management.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/itemtype.form.json} for topic definitions\r\n */\r\nexport default class ItemTypeManager implements IProjectInfoGenerator, IProjectUpdater {\r\n  id = \"ITEMTYPE\";\r\n  title = \"Item Type\";\r\n\r\n  getTopicData(topicId: number): IProjectInfoTopicData | undefined {\r\n    const formatVersion = {\r\n      updaterId: this.id,\r\n      updaterIndex: ItemTypeUpdate.UpdateFormatVersionToLatest,\r\n      action: \"Set behavior pack item type format version to latest version.\",\r\n    };\r\n\r\n    const title = ProjectInfoUtilities.getTitleFromEnum(ItemTypeInfo, topicId);\r\n\r\n    switch (topicId) {\r\n      case ItemTypeInfo.formatVersionMajorVersionLowerThanCurrent:\r\n      case ItemTypeInfo.formatVersionMajorVersionHigherThanCurrent:\r\n      case ItemTypeInfo.formatVersionMinorVersionLowerThanCurrent:\r\n      case ItemTypeInfo.formatVersionMinorVersionHigherThanCurrent:\r\n      case ItemTypeInfo.formatVersionPatchVersionLowerThanCurrent:\r\n      case ItemTypeInfo.formatVersionPatchVersionHigherThanCurrent:\r\n        return {\r\n          title: title,\r\n          updaters: [formatVersion],\r\n        };\r\n    }\r\n\r\n    return {\r\n      title: title,\r\n    };\r\n  }\r\n\r\n  getUpdaterData(updaterId: number) {\r\n    return {\r\n      title: updaterId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const infoItems: ProjectInfoItem[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(InfoItemType.internalProcessingError, this.id, 500, \"Could not retrieve version.\")\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      infoItems.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.internalProcessingError,\r\n          this.id,\r\n          ItemTypeInfo.failedToRetrieveLatestMinecraftVersion,\r\n          \"Could not latest product retrieve version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return infoItems;\r\n    }\r\n\r\n    const piiIdentifier = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      ItemTypeInfo.identifier,\r\n      \"Item Type Identifier\"\r\n    );\r\n    const piiCategory = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      ItemTypeInfo.category,\r\n      \"Item Type Category\"\r\n    );\r\n\r\n    infoItems.push(piiIdentifier);\r\n\r\n    infoItems.push(piiCategory);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.itemTypeBehavior) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpItemType = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpItemType) {\r\n            await bpItemType.load();\r\n\r\n            if (bpItemType && bpItemType.data && bpItemType.data.description) {\r\n              const desc = bpItemType.data.description;\r\n\r\n              if (desc.identifier !== undefined && desc.identifier.toLowerCase().startsWith(\"minecraft:\")) {\r\n                piiIdentifier.incrementFeature(desc.identifier.toLowerCase());\r\n              } else {\r\n                piiIdentifier.incrementFeature(\"(no override identifier)\");\r\n              }\r\n\r\n              if (desc.category) {\r\n                if (desc.category.startsWith(\"minecraft:\") || desc.category.indexOf(\":\") <= 0) {\r\n                  piiCategory.incrementFeature(desc.category);\r\n                }\r\n              }\r\n            } else {\r\n              piiCategory.incrementFeature(\"(item type without category)\");\r\n            }\r\n\r\n            const fv = bpItemType.getFormatVersion();\r\n\r\n            if (!bpItemType || !bpItemType.formatVersion || !fv) {\r\n              infoItems.push(\r\n                new ProjectInfoItem(InfoItemType.error, this.id, 100, \"Item Type does not define a format_version.\", pi)\r\n              );\r\n            } else {\r\n              if (fv.length > 0 && fv[0] < parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMajorVersionLowerThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[0] > parseInt(verSplit[0])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMajorVersionHigherThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher major version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] < parseInt(verSplit[1]) - 1) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMinorVersionLowerThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower minor version number compared to the current version or the previous current minor version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[1] > parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionMinorVersionHigherThanCurrent,\r\n                    \"Behavior pack Item Type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher minor version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] < parseInt(verSplit[2])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.recommendation,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionPatchVersionLowerThanCurrent,\r\n                    \"Behavior pack item type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a lower patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              } else if (fv[2] > parseInt(verSplit[2]) && fv[1] === parseInt(verSplit[1])) {\r\n                infoItems.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.error,\r\n                    this.id,\r\n                    ItemTypeInfo.formatVersionPatchVersionHigherThanCurrent,\r\n                    \"Behavior pack item type format version (\" +\r\n                      fv.join(\".\") +\r\n                      \") has a higher patch version number compared to current version\",\r\n                    pi\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return infoItems;\r\n  }\r\n\r\n  async update(project: Project, updateId: number): Promise<ProjectUpdateResult[]> {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    switch (updateId) {\r\n      case ItemTypeUpdate.UpdateFormatVersionToLatest:\r\n        const localResults = await this.updateFormatVersionToLatestVersion(project);\r\n\r\n        results.push(...localResults);\r\n        break;\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  getUpdateIds() {\r\n    return [ItemTypeUpdate.UpdateFormatVersionToLatest];\r\n  }\r\n\r\n  async updateFormatVersionToLatestVersion(project: Project) {\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    const ver = await Database.getLatestVersionInfo(project.effectiveTrack);\r\n\r\n    if (!ver) {\r\n      results.push(\r\n        new ProjectUpdateResult(UpdateResultType.internalProcessingError, this.id, 199, \"Could not retrieve version.\")\r\n      );\r\n\r\n      return results;\r\n    }\r\n\r\n    const verSplit = ver.split(\".\");\r\n    if (verSplit.length < 3 || verSplit.length > 4) {\r\n      results.push(\r\n        new ProjectUpdateResult(\r\n          UpdateResultType.internalProcessingError,\r\n          this.id,\r\n          200,\r\n          \"Could not retrieve latest product version.\",\r\n          undefined,\r\n          ver\r\n        )\r\n      );\r\n      return results;\r\n    }\r\n\r\n    const major = parseInt(verSplit[0]);\r\n    const minor = parseInt(verSplit[1]);\r\n    const patch = parseInt(verSplit[2]);\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const wtManifest = await ItemTypeDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (wtManifest) {\r\n            const mev = wtManifest.formatVersion;\r\n\r\n            if (mev) {\r\n              const mevY = mev?.split(\".\");\r\n\r\n              if (\r\n                mevY &&\r\n                (mevY.length < 3 ||\r\n                  mevY.length > 4 ||\r\n                  parseInt(mevY[0]) !== major ||\r\n                  parseInt(mevY[1]) !== minor ||\r\n                  parseInt(mevY[2]) !== patch)\r\n              ) {\r\n                wtManifest.setBehaviorPackFormatVersion(major + \".\" + minor + \".\" + patch);\r\n                wtManifest.persist();\r\n\r\n                results.push(\r\n                  new ProjectUpdateResult(\r\n                    UpdateResultType.updatedFile,\r\n                    this.id,\r\n                    200,\r\n                    \"Updated behavior pack Item Type manager format_version to '\" +\r\n                      major +\r\n                      \".\" +\r\n                      minor +\r\n                      \".\" +\r\n                      patch +\r\n                      \"'.\",\r\n                    pi,\r\n                    ver\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { ProjectItemStorageType, ProjectItemType } from \"../app/IProjectItemData\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport { MaxItemTypes } from \"../app/IProjectItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\n\r\nexport enum SharingInfoGeneratorTest {\r\n  requiresCustomCapabilities = 100,\r\n  hasStrongLanguageContent = 101,\r\n}\r\n\r\nconst TopicTestIdBase = 500;\r\n\r\nconst UnsupportedForSharingTypes = [\r\n  ProjectItemType.jigsawProcessorList,\r\n  ProjectItemType.jigsawStructure,\r\n  ProjectItemType.jigsawStructureSet,\r\n  ProjectItemType.jigsawTemplatePool,\r\n  ProjectItemType.aimAssistPresetJson,\r\n  ProjectItemType.aimAssistCategoryJson,\r\n  ProjectItemType.behaviorTreeJson,\r\n  ProjectItemType.spawnGroupJson,\r\n];\r\n\r\nconst UnsupportedForSharingTypesSet = new Set(UnsupportedForSharingTypes);\r\n\r\n/**\r\n * Validates content for sharing best practices and platform compatibility.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/sharing.form.json} for topic definitions\r\n */\r\nexport default class SharingInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SHARING\";\r\n  title = \"Sharing Best Practices\";\r\n  canAlwaysProcess = true;\r\n\r\n  getTopicData(topicId: number) {\r\n    if (topicId >= TopicTestIdBase) {\r\n      return {\r\n        title: ProjectItemUtilities.getDescriptionForType(topicId - TopicTestIdBase),\r\n      };\r\n    }\r\n\r\n    return {\r\n      title: topicId.toString(),\r\n    };\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const itemsByType: { [index: number]: ProjectInfoItem } = {};\r\n    const lineSizeCounts: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      lineSizeCounts[i] = 0;\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n      let projInfoItem = undefined;\r\n\r\n      if (pi.storageType === ProjectItemStorageType.singleFile) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          /*\r\n          let strongLanguageContent = await BasicValidators.hasStrongLanguageContent(pi.availableFile);\r\n          if (strongLanguageContent) {\r\n            projInfoItem = new ProjectInfoItem(\r\n              InfoItemType.error,\r\n              this.id,\r\n              SharingInfoGeneratorTest.hasStrongLanguageContent,\r\n              `Contains strong language content: ` + strongLanguageContent,\r\n              pi\r\n            );\r\n            itemsByType[pi.itemType] = projInfoItem;\r\n            items.push(projInfoItem);\r\n          }*/\r\n        }\r\n      }\r\n\r\n      if (UnsupportedForSharingTypesSet.has(pi.itemType)) {\r\n        projInfoItem = new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          TopicTestIdBase + pi.itemType,\r\n          ProjectItemUtilities.getDescriptionForType(pi.itemType) +\r\n            \" is not supported for sharing - probably because this item is still an experimental feature.\",\r\n          pi\r\n        );\r\n        itemsByType[pi.itemType] = projInfoItem;\r\n        items.push(projInfoItem);\r\n      } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const bpManifest = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifest) {\r\n            await bpManifest.load();\r\n\r\n            if (bpManifest && bpManifest.definition && bpManifest.definition.capabilities) {\r\n              projInfoItem = new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                SharingInfoGeneratorTest.requiresCustomCapabilities,\r\n                `Declares a custom capabilities requirement, which is not recommended for sharing.`,\r\n                pi,\r\n                JSON.stringify(bpManifest.definition.capabilities, null, 2)\r\n              );\r\n              itemsByType[pi.itemType] = projInfoItem;\r\n              items.push(projInfoItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport Database from \"../../minecraft/Database\";\r\nimport ContentIndex from \"../../core/ContentIndex\";\r\n\r\nexport enum CheckVanillaDuplicatesInfoGeneratorTest {\r\n  completeVanillaCopy = 101,\r\n  partialVanillaCopy = 102,\r\n}\r\n\r\n// Files that are allowed to be complete copies of vanilla\r\nconst ALLOWLISTED_FILES = [\"texts/languages.json\"];\r\n\r\n// Files that are restricted from being partial copies\r\nconst RESTRICTED_FILES = [\r\n  \"/ui/\",\r\n  \"/materials/\",\r\n  \"models/mobs.json\",\r\n  \"sounds/sound_definitions.json\",\r\n  \"textures/item_texture.json\",\r\n  \"textures/terrain_texture.json\",\r\n  \"blocks.json\",\r\n];\r\n\r\n// Extensions to check for partial copies\r\nconst EXTENSIONS = [\".json\", \".material\"];\r\n\r\n// Message suffix matching C# implementation\r\nconst RESOURCE_PACK_SUFFIX = \"Vanilla files can be seen at https://aka.ms/resourcepacktemplate.\";\r\n\r\n/***********\r\n * Generator for Checking Vanilla Duplicates\r\n *\r\n * Will check:\r\n *  * Complete copies of vanilla files\r\n *  * Partial copies of vanilla files (for restricted files)\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/vandupes.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckVanillaDuplicatesInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"VANDUPES\";\r\n  title = \"Vanilla Duplicates\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.completeVanillaCopy = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckVanillaDuplicatesInfoGeneratorTest.completeVanillaCopy\r\n    );\r\n\r\n    info.partialVanillaCopy = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckVanillaDuplicatesInfoGeneratorTest.partialVanillaCopy\r\n    );\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    // Get the hash catalog from the content index\r\n    const hashCatalog = contentIndex.hashCatalog;\r\n\r\n    // Load vanilla hash catalog for comparison\r\n    await Database.loadReleaseVanillaInfoHashes();\r\n\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      const itemPath = item.projectPath || \"\";\r\n\r\n      if (ALLOWLISTED_FILES.some((allowedFile) => itemPath.includes(allowedFile))) {\r\n        continue;\r\n      }\r\n\r\n      await item.ensureStorage();\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      // Find hashes for this file in the catalog\r\n      const fileHashes = Object.entries(hashCatalog).filter(([hash, details]) => details.filePath === item.projectPath);\r\n\r\n      // Check for complete copy of vanilla file (file with empty propertyName)\r\n      const completeFileHash = fileHashes.find(([hash, details]) => details.propertyName === \"\");\r\n      if (completeFileHash) {\r\n        const completeHashResult = await this.checkCompleteVanillaCopy(completeFileHash[0], item);\r\n        if (completeHashResult) {\r\n          items.push(completeHashResult);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      // Check for partial copies (properties with non-empty propertyName)\r\n      if (this.isRestrictedFile(itemPath) && this.hasRestrictedExtension(item.primaryFile.fullPath)) {\r\n        const propertyHashes = fileHashes.filter(([hash, details]) => details.propertyName !== \"\");\r\n        const partialHashResults = await this.checkPartialVanillaCopy(propertyHashes, item);\r\n        items.push(...partialHashResults);\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  private isRestrictedFile(filePath: string): boolean {\r\n    return RESTRICTED_FILES.some((restrictedFile) => filePath.includes(restrictedFile));\r\n  }\r\n\r\n  private hasRestrictedExtension(filePath: string): boolean {\r\n    // Extract file extension from path\r\n    const extension = \".\" + filePath.split(\".\").pop()?.toLowerCase() || \"\";\r\n    return EXTENSIONS.includes(extension);\r\n  }\r\n\r\n  private async checkCompleteVanillaCopy(fileHash: string, item: ProjectItem): Promise<ProjectInfoItem | null> {\r\n    // Check if this hash exists in the vanilla hash catalog\r\n\r\n    if (!Database.releaseVanillaContentHashes) {\r\n      return null;\r\n    }\r\n\r\n    const vanillaDetails = Database.releaseVanillaContentHashes[fileHash];\r\n    if (vanillaDetails && vanillaDetails.propertyName === \"\") {\r\n      // This is a complete file match\r\n      return new ProjectInfoItem(\r\n        InfoItemType.warning,\r\n        this.id,\r\n        CheckVanillaDuplicatesInfoGeneratorTest.completeVanillaCopy,\r\n        `Complete copy of a vanilla file [${vanillaDetails.fileName}]. ${RESOURCE_PACK_SUFFIX}`,\r\n        item,\r\n        item.name\r\n      );\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private async checkPartialVanillaCopy(\r\n    propertyHashes: [string, any][],\r\n    item: ProjectItem\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    if (!Database.releaseVanillaContentHashes) {\r\n      return results;\r\n    }\r\n\r\n    try {\r\n      // Check each property hash from the catalog\r\n      for (const [hash, details] of propertyHashes) {\r\n        // Check if this property hash exists in the vanilla hash catalog\r\n        const vanillaDetails = Database.releaseVanillaContentHashes[hash];\r\n\r\n        if (\r\n          vanillaDetails &&\r\n          vanillaDetails.propertyName !== \"\" &&\r\n          item.name.toLowerCase() === vanillaDetails.fileName.toLowerCase()\r\n        ) {\r\n          results.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckVanillaDuplicatesInfoGeneratorTest.partialVanillaCopy,\r\n              `Partial copy of a vanilla file [${item.name}] at property [${details.propertyName}]. ${RESOURCE_PACK_SUFFIX}`,\r\n              item,\r\n              details.propertyName\r\n            )\r\n          );\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error checking partial vanilla copy:\", error);\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IFile from \"../../storage/IFile\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport IProjectFileInfoGenerator from \"../IProjectFileInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\n\r\nenum CheckNoBOMGeneratorTest {\r\n  NoByteOrderMarkAllowedInJsonFile = 101,\r\n}\r\n\r\n/**********\r\n * Generator that generates error results if Byte Order Marks are found within .json files\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/nobom.form.json} for topic definitions\r\n *********/\r\nexport default class CheckNoBOMGenerator implements IProjectFileInfoGenerator {\r\n  id: string = \"NOBOM\";\r\n  title: string = \"No Byte Order Mark allowed in json file.\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  generate(_project: Project, projectFile: IFile): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    if (StorageUtilities.isJsonFile(projectFile) && this.hasByteOrderMark(projectFile)) {\r\n      results.push(this.getNewBOMResult(projectFile));\r\n    }\r\n\r\n    return Promise.resolve(results);\r\n  }\r\n\r\n  summarize(): void {}\r\n\r\n  private hasByteOrderMark(file: IFile) {\r\n    const bytes = StorageUtilities.getContentsAsBinary(file);\r\n    const hasBOM = StorageUtilities.hasUTF8ByteOrderMark(bytes);\r\n\r\n    return hasBOM;\r\n  }\r\n\r\n  private getNewBOMResult(file: IFile) {\r\n    return new ProjectInfoItem(\r\n      this.severity,\r\n      this.id,\r\n      CheckNoBOMGeneratorTest.NoByteOrderMarkAllowedInJsonFile,\r\n      `Byte Order Marks found in file: ${file.name}`\r\n    );\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport CommandStructure from \"../app/CommandStructure\";\r\nimport CommandRegistry from \"../app/CommandRegistry\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\n\r\nexport enum MCFunctionInfoGeneratorTest {\r\n  invalidCommandSyntax = 102,\r\n  lineBeginsWithSlash = 103,\r\n}\r\n\r\n/***********\r\n * Generator for validating MCFunction Files\r\n *\r\n * Will ensure:\r\n *  * command syntax is correct\r\n *  * no slashes are present before commands\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/mcfunction.form.json} for topic definitions\r\n */\r\n\r\nexport default class MCFunctionInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"MCFUNCTION\";\r\n  title = \"MC Function Validation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.invalidCommandSyntaxCount = infoSet.getSummedDataValue(\r\n      this.id,\r\n      MCFunctionInfoGeneratorTest.invalidCommandSyntax\r\n    );\r\n\r\n    info.linesWithSlashCount = infoSet.getSummedDataValue(this.id, MCFunctionInfoGeneratorTest.lineBeginsWithSlash);\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      if (item.itemType !== ProjectItemType.MCFunction) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      const content = item.primaryFile.content;\r\n\r\n      if (!content || typeof content !== \"string\") {\r\n        continue;\r\n      }\r\n\r\n      const lines = content\r\n        .trim()\r\n        .split(/\\r?\\n/)\r\n        .filter((line) => line.trim() !== \"\");\r\n\r\n      const commands = lines.map(CommandStructure.parse);\r\n\r\n      items.push(...this.getNewLineBeginsWithSlashesResult(lines, item));\r\n      items.push(...this.getCommandSyntaxResult(commands, item));\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  private getNewLineBeginsWithSlashesResult(lines: string[], item: ProjectItem): ProjectInfoItem[] {\r\n    const results = [];\r\n    for (const line of lines) {\r\n      if (line.startsWith(\"/\")) {\r\n        results.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            MCFunctionInfoGeneratorTest.lineBeginsWithSlash,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              MCFunctionInfoGeneratorTest,\r\n              MCFunctionInfoGeneratorTest.lineBeginsWithSlash\r\n            ),\r\n            item,\r\n            `Relevant line: ${line}`\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private getCommandSyntaxResult(commands: CommandStructure[], item: ProjectItem): ProjectInfoItem[] {\r\n    const results = [];\r\n\r\n    for (const command of commands) {\r\n      if (\r\n        !command.isNamespaced &&\r\n        !CommandRegistry.isMinecraftBuiltInCommand(command.fullName) &&\r\n        !CommandRegistry.isAddOnBlockedCommand(command.fullName)\r\n      ) {\r\n        results.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            MCFunctionInfoGeneratorTest.invalidCommandSyntax,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              MCFunctionInfoGeneratorTest,\r\n              MCFunctionInfoGeneratorTest.invalidCommandSyntax\r\n            ),\r\n            item,\r\n            `${command.fullName} ${command.commandArguments.join(\" \")}`\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "import * as exifrModule from \"exifr\";\r\n// Handle CJS/ESM interop: esbuild wraps CJS default export, while ts-node uses named exports directly\r\nconst Exifr = (exifrModule as any).Exifr || (exifrModule as any).default?.Exifr;\r\nimport IFile from \"./IFile\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\n/*\r\n  Parses an image file, returning an any object with various metadata such as width and height\r\n\r\n  available data is based on image format, see Exifr docs for info\r\n*/\r\nexport async function parseImageMetadata(file: IFile): Promise<any | null> {\r\n  try {\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n    const imageReader = new Exifr();\r\n    const fileData = StorageUtilities.getContentsAsBinary(file);\r\n\r\n    if (!fileData) {\r\n      return null;\r\n    }\r\n\r\n    return await imageReader.read(fileData).then(() => imageReader.parse());\r\n  } catch (error) {\r\n    Log.verbose(\"Error parsing image metadata: \" + error);\r\n    return null;\r\n  }\r\n}\r\n\r\nexport function isPackIcon(file?: IFile | null): boolean {\r\n  return !!file && file.name.includes(\"pack_icon\") && file.name.endsWith(\".png\");\r\n}\r\n\r\nexport function isWorldIcon(file?: IFile): boolean {\r\n  return !!file && file.name.includes(\"world_icon\") && file.name.endsWith(\".jpeg\");\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport Pack, { PackType } from \"../../minecraft/Pack\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport { isPackIcon, parseImageMetadata } from \"../../storage/ImageUtilites\";\r\n\r\nenum CheckPacksIconsGeneratorTest {\r\n  NoIconFound = 101,\r\n  MultipleIconsFound = 102,\r\n  IconNotValidImage = 103,\r\n  IconNotValidSize = 104,\r\n}\r\n\r\nconst IconMaxWidth = 256;\r\nconst IconMinWidth = 2;\r\n\r\n/***********\r\n * Generator for validating Pack Icons\r\n *\r\n * Will ensure:\r\n *  * exactly 1 icon per pack\r\n *  * icon is a valid .png\r\n *  * icon is square\r\n *  * icon is within size limits\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cpackicon.form.json} for topic definitions\r\n */\r\nexport default class CheckPackIconsGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CPACKICON\";\r\n  title: string = \"Pack Icon\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    if (project.isVanillaEditSession) {\r\n      return results;\r\n    }\r\n\r\n    for (const pack of project.packs) {\r\n      if (requiresPackIcon(pack)) {\r\n        const result = await this.getResultForPack(pack);\r\n        if (result) {\r\n          results.push(result);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  summarize(): void {}\r\n\r\n  private async getResultForPack(pack: Pack): Promise<ProjectInfoItem | null> {\r\n    const icons = await pack.getFiles(isPackIcon);\r\n\r\n    if (icons.length === 0) {\r\n      const message = `pack_icon image file not found for ${pack.name}. It must use the .png extension.`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.NoIconFound, message);\r\n    } else if (icons.length > 1) {\r\n      const message = `Found multiple pack icon files for ${pack.name}, there should be only one.`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.MultipleIconsFound, message);\r\n    }\r\n\r\n    const file = icons[0];\r\n    const image = await parseImageMetadata(file);\r\n\r\n    if (!image?.ImageWidth || !image?.ImageHeight) {\r\n      const message = `Pack Image (${file.name}) is not valid`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.IconNotValidImage, message);\r\n    }\r\n\r\n    if (this.isValidSize(image.ImageWidth, image.ImageHeight)) {\r\n      const message = `pack_icon must be square with size 2, 4, 8, 16, 32, 64, 128, or 256. Found [${image.ImageWidth} x ${image.ImageHeight}] on ${file.name}`;\r\n      return this.createResult(CheckPacksIconsGeneratorTest.IconNotValidSize, message);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private createResult(test: CheckPacksIconsGeneratorTest, message: string) {\r\n    return new ProjectInfoItem(this.severity, this.id, test, message);\r\n  }\r\n\r\n  private isValidSize(width: number, height: number) {\r\n    return width !== height || width < IconMinWidth || width > IconMaxWidth || (width & (width - 1)) !== 0;\r\n  }\r\n}\r\nfunction requiresPackIcon(pack: Pack): pack is Pack {\r\n  return pack.packType !== PackType.skin && pack.packType !== PackType.design;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n  Collects a AsyncIterable into an array with an optional filter predicate\r\n*/\r\nexport async function filterAsync<TItem>(\r\n  iterable: AsyncIterable<TItem>,\r\n  predicate?: (item: TItem) => boolean\r\n): Promise<TItem[]> {\r\n  const results: TItem[] = [];\r\n  for await (const item of iterable) {\r\n    if (predicate && predicate(item)) {\r\n      results.push(item);\r\n    }\r\n  }\r\n\r\n  return results;\r\n}\r\n", "import { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport IFolder from \"../../storage/IFolder\";\r\nimport { isWorldIcon, parseImageMetadata } from \"../../storage/ImageUtilites\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { filterAsync } from \"../../core/async/AsyncUtilities\";\r\nimport Log from \"../../core/Log\";\r\n\r\nconst DefaultEduImageWidth = 480;\r\nconst DefaultEduImageHeight = 270;\r\nconst DefaultBedrockImageWidth = 800;\r\nconst DefaultBedrockImageHeight = 450;\r\n\r\nenum CheckWorldIconsGeneratorTest {\r\n  NoIconFound = 101,\r\n  MultipleIconsFound = 102,\r\n  IconNotValidImage = 103,\r\n  IconNotValidSize = 104,\r\n}\r\n\r\n/*\r\n * Generator for validating World Icons\r\n *\r\n * Will ensure:\r\n *  * exactly 1 icon per world folder (folders with a world manifest)\r\n *  * icon is a valid .jpeg\r\n *  * icon is the correct size\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cwi.form.json} for topic definitions\r\n */\r\nexport default class CheckWorldIconsGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CWI\";\r\n  title: string = \"World Icons\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    const isEDUOffer = itemsCopy.find((item) => item.itemType === ProjectItemType.educationJson) !== undefined;\r\n\r\n    const worldFolders = [];\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        if (!projectItem.isContentLoaded) {\r\n          await projectItem.loadContent();\r\n        }\r\n\r\n        const folder = projectItem.getFolder();\r\n\r\n        if (folder) {\r\n          worldFolders.push(folder);\r\n        }\r\n      }\r\n    }\r\n\r\n    const results = [];\r\n    for (const folder of worldFolders) {\r\n      Log.assert(folder !== null, \"Manifest file cannot exist without a folder\");\r\n      const resultForFolder = await this.validateWorldIconForFolder(folder, isEDUOffer);\r\n      results.push(...resultForFolder);\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private async validateWorldIconForFolder(folder: IFolder, isEDUOffer: boolean) {\r\n    const files = await filterAsync(folder.allFiles, isWorldIcon);\r\n\r\n    if (files.length === 0) {\r\n      const message = `No World Icon found for ${folder.getFolderRelativePath}.`;\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.NoIconFound, message)];\r\n    } else if (files.length > 1) {\r\n      const message = `Too many World Icons found for ${folder.getFolderRelativePath}. ${files.length} icons found, expected: 1`;\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.MultipleIconsFound, message)];\r\n    }\r\n\r\n    const file = files[0];\r\n    const image = await parseImageMetadata(file);\r\n\r\n    if (!image) {\r\n      const message = `Image (${file.name}) is not valid.`;\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.IconNotValidImage, message)];\r\n    }\r\n\r\n    const isSizeCorrect = isEDUOffer ? isSizeCorrectForEDU : isSizeCorrectForBedrock;\r\n\r\n    if (!isSizeCorrect({ width: image.ImageWidth, height: image.ImageHeight })) {\r\n      return [this.createResult(CheckWorldIconsGeneratorTest.IconNotValidSize, `Image (${file.name}) is not valid.`)];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private createResult(test: CheckWorldIconsGeneratorTest, message: string) {\r\n    return new ProjectInfoItem(this.severity, this.id, test, message);\r\n  }\r\n\r\n  summarize(): void {}\r\n}\r\n\r\nfunction isSizeCorrectForBedrock(size: { width: number; height: number }) {\r\n  return size.width === DefaultBedrockImageWidth && size.height === DefaultBedrockImageHeight;\r\n}\r\n\r\nfunction isSizeCorrectForEDU(size: { width: number; height: number }) {\r\n  const isEDUSize = size.width === DefaultEduImageWidth && size.height === DefaultEduImageHeight;\r\n  return isEDUSize || isSizeCorrectForBedrock(size);\r\n}\r\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\nimport { z } from \"zod\";\r\n\r\nexport interface ISoundDefinitionCatalog {\r\n  format_version: string;\r\n  sound_definitions: { [name: string]: ISoundDefinition };\r\n\r\n  // note there is a format that is just:\r\n  // {\r\n  //   \"ns:mysound.foo\" : {\r\n  //     \"category\": \"foo\",\r\n  //     \"sounds\": [\r\n  //        \"name\": \"sounds/foo\"\r\n  //     ]\r\n  //   }\r\n  // }\r\n}\r\n\r\nexport interface ISoundDefinition {\r\n  category?: string;\r\n  __use_legacy_max_distance?: string | boolean; // when it's a string, it's boolean values in a string: \"true\", \"false\"\r\n  max_distance?: number;\r\n  min_distance?: number;\r\n  sounds: (ISoundReference | string)[];\r\n}\r\n\r\nexport interface ISoundReference {\r\n  name: string;\r\n  is3D?: boolean;\r\n  stream?: boolean;\r\n  volume?: number;\r\n  weight?: number;\r\n  pitch?: number;\r\n  load_on_low_memory?: boolean;\r\n}\r\n\r\n// SoundReference zod schema\r\nconst SoundReferenceSchema = z.object({\r\n  name: z.string(),\r\n  is3D: z.boolean().optional(),\r\n  stream: z.boolean().optional(),\r\n  volume: z.number().optional(),\r\n  weight: z.number().optional(),\r\n  pitch: z.number().optional(),\r\n  load_on_low_memory: z.boolean().optional(),\r\n});\r\n\r\n// SoundDefinition zod schema\r\nconst SoundDefinitionSchema = z.object({\r\n  category: z.string().optional(),\r\n  __use_legacy_max_distance: z.union([z.literal(\"true\"), z.literal(\"false\"), z.boolean()]).optional(),\r\n  max_distance: z.number().optional().nullable(),\r\n  min_distance: z.number().optional().nullable(),\r\n  sounds: z.array(z.union([z.string(), SoundReferenceSchema])),\r\n});\r\n\r\n// Catalog w/ format_version zod schema\r\nconst CatalogWithFormatVersionSchema = z.object({\r\n  format_version: z.string(),\r\n  sound_definitions: z.record(z.string(), SoundDefinitionSchema),\r\n});\r\n\r\n// Flat Catalog zod Schema\r\nconst FlatCatalogEntrySchema = z.object({\r\n  sounds: z.array(\r\n    z.union([\r\n      z.string(),\r\n      z.object({\r\n        name: z.string(),\r\n      }),\r\n    ])\r\n  ),\r\n});\r\n\r\n// Catalog w/o format_version\r\nconst CatalogWithoutFormatVersionSchema = z.record(z.string(), FlatCatalogEntrySchema);\r\n\r\n// Union of both forms for runtime validation\r\nexport const SoundDefinitionCatalogSchema = z.union([\r\n  CatalogWithFormatVersionSchema,\r\n  CatalogWithoutFormatVersionSchema,\r\n]);\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport ProjectInfoUtilities from \"../ProjectInfoUtilities\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport { SoundDefinitionCatalogSchema } from \"../../minecraft/ISoundDefinitionCatalog\";\r\nimport { ZodIssueCode } from \"zod\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nexport enum SoundsDefinitionInfoGeneratorTest {\r\n  multipleSoundsDefinitionManifests = 101,\r\n  invalidSoundsDefinitionManifest = 102,\r\n  soundsDefinitionManifestInvalidJson = 103,\r\n  foundALooseSoundDefinition = 104,\r\n}\r\n\r\n/***********\r\n * Generator for validating Sounds Definition Manifest Files\r\n *\r\n * Will ensure:\r\n *  * only one Sounds Definition Manifest exists\r\n *  * Sounds Definition Manifest is valid JSON\r\n *  * Sounds Definition Manifest is formatted correctly\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/sndsdef.form.json} for topic definitions\r\n */\r\n\r\nexport default class SoundsDefinitionInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SNDSDEF\";\r\n  title = \"Sound Definitions\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.multipleSoundsManifests = infoSet.getSummedDataValue(\r\n      this.id,\r\n      SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests\r\n    );\r\n\r\n    info.soundsDefinitionManifestFormatIsValid = infoSet.getSummedDataValue(\r\n      this.id,\r\n      SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest\r\n    );\r\n\r\n    info.soundsDefinitionManifestIsNotValidJson = infoSet.getSummedDataValue(\r\n      this.id,\r\n      SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n\r\n    const packsWithSoundManifests: { [name: string]: boolean } = {};\r\n\r\n    for (const item of projItems) {\r\n      if (item.itemType !== ProjectItemType.soundDefinitionCatalog && item.itemType) {\r\n        continue;\r\n      }\r\n\r\n      const pack = await item.getPack();\r\n\r\n      if (!pack || !pack.projectItem.projectPath) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            SoundsDefinitionInfoGeneratorTest.foundALooseSoundDefinition,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              SoundsDefinitionInfoGeneratorTest,\r\n              SoundsDefinitionInfoGeneratorTest.foundALooseSoundDefinition\r\n            ),\r\n            item\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      if (packsWithSoundManifests[pack.projectItem.projectPath]) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              SoundsDefinitionInfoGeneratorTest,\r\n              SoundsDefinitionInfoGeneratorTest.multipleSoundsDefinitionManifests\r\n            ),\r\n            item\r\n          )\r\n        );\r\n\r\n        continue;\r\n      } else {\r\n        packsWithSoundManifests[pack.projectItem.projectPath] = true;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      const content = item.primaryFile.content;\r\n\r\n      if (!content || typeof content !== \"string\") {\r\n        continue;\r\n      }\r\n\r\n      const parsedContent: unknown = StorageUtilities.getJsonObject(item.primaryFile);\r\n      if (!parsedContent) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson,\r\n            ProjectInfoUtilities.getTitleFromEnum(\r\n              SoundsDefinitionInfoGeneratorTest,\r\n              SoundsDefinitionInfoGeneratorTest.soundsDefinitionManifestInvalidJson\r\n            ),\r\n            item\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      items.push(...this.getIsManifestValidResult(parsedContent));\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  // Uses a union to check for both possible versions of a Sound Manifest (per comment in ISoundDefinitionCatalog)\r\n  private getIsManifestValidResult(fileContent: unknown): ProjectInfoItem[] {\r\n    const results: ProjectInfoItem[] = [];\r\n    const parseResult = SoundDefinitionCatalogSchema.safeParse(fileContent);\r\n\r\n    if (!parseResult.success) {\r\n      const parsedErrors: string[] = [];\r\n      for (const issue of parseResult.error.issues) {\r\n        if (issue.code === ZodIssueCode.invalid_union) {\r\n          for (const e of issue.unionErrors) {\r\n            for (const i of e.issues) {\r\n              parsedErrors.push(`${i.message} at ${i.path.join(\"/\")}`);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      results.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest,\r\n          `${ProjectInfoUtilities.getTitleFromEnum(\r\n            SoundsDefinitionInfoGeneratorTest,\r\n            SoundsDefinitionInfoGeneratorTest.invalidSoundsDefinitionManifest\r\n          )}: ${parsedErrors.join(\", \")}`\r\n        )\r\n      );\r\n    }\r\n\r\n    return results;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectInfoGenerator from \"./IProjectInfoGenerator\";\r\nimport esprima from \"esprima-next\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport ProjectInfoUtilities from \"./ProjectInfoUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Log from \"../core/Log\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\n\r\nexport const CommonTerms = [\r\n  \"undefined\",\r\n  \"type\",\r\n  \"name\",\r\n  \"error\",\r\n  \"equals\",\r\n  \"value\",\r\n  \"length\",\r\n  \"index\",\r\n  \"String\",\r\n  \"number\",\r\n  \"width\",\r\n  \"height\",\r\n  \"count\",\r\n  \"event\",\r\n  \"string\",\r\n  \"text\",\r\n  \"object\",\r\n];\r\n\r\nexport const CommonTermsSet = new Set(CommonTerms);\r\n\r\nexport enum ScriptInfoGeneratorTest {\r\n  apisUsed = 101,\r\n}\r\n\r\nexport interface IScriptTokenInfo {}\r\n\r\n/**\r\n * Analyzes and aggregates information about script API usage.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/script.form.json} for topic definitions\r\n */\r\nexport default class ScriptInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"SCRIPT\";\r\n  title = \"Script\";\r\n  canAlwaysProcess = true;\r\n  minecraftTokens: { [name: string]: IScriptTokenInfo } = {};\r\n  generatedTokens = false;\r\n\r\n  async _generateTokens() {\r\n    await Database.loadStable20ScriptTypes();\r\n    const typeDefs = Database.stable20TypeDefs;\r\n\r\n    if (typeDefs) {\r\n      for (const typeDef of typeDefs.typeDefs) {\r\n        const typeDefContent = typeDef.content.join(\"\\n\");\r\n\r\n        let name = typeDef.name;\r\n        this.minecraftTokens[name] = {\r\n          typeDef: typeDef,\r\n        };\r\n\r\n        const slashIndex = name.indexOf(\"/\");\r\n\r\n        if (slashIndex >= 0) {\r\n          this.minecraftTokens[name.substring(0, slashIndex)] = {\r\n            typeDef: typeDef,\r\n          };\r\n          this.minecraftTokens[name.substring(slashIndex + 1)] = {\r\n            typeDef: typeDef,\r\n          };\r\n        }\r\n\r\n        const tokens = this.getAllTokens(typeDefContent);\r\n\r\n        for (const tok of tokens) {\r\n          this.minecraftTokens[tok] = {\r\n            typeDef: typeDef,\r\n          };\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const scriptTokensPi = new ProjectInfoItem(\r\n      InfoItemType.featureAggregate,\r\n      this.id,\r\n      ScriptInfoGeneratorTest.apisUsed,\r\n      ProjectInfoUtilities.getTitleFromEnum(ScriptInfoGeneratorTest, ScriptInfoGeneratorTest.apisUsed)\r\n    );\r\n\r\n    items.push(scriptTokensPi);\r\n\r\n    if (!this.generatedTokens) {\r\n      await this._generateTokens();\r\n    }\r\n\r\n    await Database.loadStable20ScriptTypes();\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.itemType === ProjectItemType.js) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          if (!pi.primaryFile.isContentLoaded) {\r\n            await pi.primaryFile.loadContent();\r\n          }\r\n\r\n          const content = pi.primaryFile.content;\r\n\r\n          if (content && typeof content === \"string\") {\r\n            this.parseJsContent(scriptTokensPi, content);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  getAllTokens(content: string) {\r\n    const tokens: string[] = [];\r\n    const tokensSet = new Set<string>();\r\n\r\n    try {\r\n      const results = esprima.tokenize(content);\r\n\r\n      if (results) {\r\n        for (const token of results) {\r\n          if ((token.type === \"Identifier\" || token.type === \"String\") && token.value && token.value.length > 3) {\r\n            let tok = token.value.trim();\r\n\r\n            if (tok.startsWith(\"'\") && tok.endsWith(\"'\")) {\r\n              tok = tok.substring(1, tok.length - 1);\r\n            } else if (tok.startsWith(\"'\") && tok.endsWith(\"'\")) {\r\n              tok = tok.substring(1, tok.length - 1);\r\n            }\r\n\r\n            if (token.type === \"Identifier\" && tok !== \"from\" && !tokensSet.has(tok) && !CommonTermsSet.has(tok)) {\r\n              tokens.push(tok);\r\n              tokensSet.add(tok);\r\n            } else if (\r\n              token.type === \"String\" &&\r\n              !CommonTermsSet.has(tok) &&\r\n              (tok.startsWith(\"minecraft:\") || tok.startsWith(\"@minecraft\")) &&\r\n              !tokensSet.has(tok)\r\n            ) {\r\n              tokens.push(tok);\r\n              tokensSet.add(tok);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.debugAlert(\"JS parsing error:\" + e);\r\n    }\r\n\r\n    return tokens;\r\n  }\r\n\r\n  parseJsContent(scriptTokensPi: ProjectInfoItem, content: string) {\r\n    let tokens = this.getAllTokens(content);\r\n\r\n    for (const token of tokens) {\r\n      if (this.minecraftTokens[token] !== undefined) {\r\n        scriptTokensPi.incrementFeature(token);\r\n      }\r\n    }\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    const scriptItems = infoSet.getItems(this.id, ScriptInfoGeneratorTest.apisUsed);\r\n    info.apisUsed = [];\r\n    const apisUsedSet = new Set<string>();\r\n\r\n    for (const scriptItem of scriptItems) {\r\n      let scriptTokens = scriptItem.featureSets;\r\n\r\n      if (scriptTokens) {\r\n        for (const scriptToken in scriptTokens) {\r\n          if (!apisUsedSet.has(scriptToken) && !CommonTermsSet.has(scriptToken)) {\r\n            info.apisUsed.push(scriptToken);\r\n            apisUsedSet.add(scriptToken);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    info.apisUsed.sort();\r\n  }\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport SemanticVersion from \"../../core/versioning/SemanticVersion\";\r\nimport IFile from \"../../storage/IFile\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\n\r\n/* Older versions do not require a check */\r\nconst MinVersionForCheck = new SemanticVersion(1, 20, 60);\r\n/* Used to validate that particle identifier correctly contains a namespace. */\r\nconst NamespaceRegexPattern = /^\\\\w{2,}:\\\\w+/;\r\n\r\nenum CheckParticleIdentifier {\r\n  FailedToReadFile = 101,\r\n  FailedToReadVersion = 102,\r\n  InvalidParticleIdentifier = 103,\r\n}\r\n\r\n/*\r\n * Generator for validating Particle Identifier\r\n *\r\n * Will ensure particle json files have a particle identifier with a namespace if above version 1.2.6.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cparti.form.json} for topic definitions\r\n */\r\nexport default class CheckParticleIdentifierGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CPARTI\";\r\n  title: string = \"Particle Identifiers\";\r\n  canAlwaysProcess = true;\r\n\r\n  private severity = InfoItemType.error;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const results: ProjectInfoItem[] = [];\r\n\r\n    const particleItems = project.getItemsByType(ProjectItemType.particleJson);\r\n\r\n    for (const particleItem of particleItems) {\r\n      if (!particleItem.isContentLoaded) {\r\n        await particleItem.loadContent();\r\n      }\r\n\r\n      if (particleItem.primaryFile) {\r\n        const packResults = await this.getResultsForFile(particleItem.primaryFile, particleItem);\r\n        results.push(...packResults);\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async getResultsForFile(file: IFile, particleItem: ProjectItem): Promise<ProjectInfoItem[]> {\r\n    const json = await StorageUtilities.getJsonObject(file);\r\n\r\n    if (!json) {\r\n      const message = `Failed to read file: ${file.name}`;\r\n      return [this.createResult(CheckParticleIdentifier.FailedToReadFile, message, particleItem)];\r\n    }\r\n\r\n    const version = SemanticVersion.parse(json.format_version);\r\n\r\n    if (!version) {\r\n      const message = `'format_version' expected in json in file: ${file.name}`;\r\n      return [this.createResult(CheckParticleIdentifier.FailedToReadVersion, message, particleItem)];\r\n    }\r\n\r\n    const checkNeeded = version.compareTo(MinVersionForCheck) >= 0;\r\n\r\n    if (!checkNeeded) {\r\n      return [];\r\n    }\r\n\r\n    const indentifier: string | undefined = json.particle_effect?.description?.identifier;\r\n\r\n    if (!isValidParticleIdentifier(indentifier)) {\r\n      const message = \"Invalid Particle Identifier. Particle identifier requires a namespace.\";\r\n      return [this.createResult(CheckParticleIdentifier.InvalidParticleIdentifier, message, particleItem)];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private createResult(test: CheckParticleIdentifier, message: string, particleItem: ProjectItem) {\r\n    return new ProjectInfoItem(this.severity, this.id, test, message, particleItem);\r\n  }\r\n\r\n  summarize(): void {}\r\n}\r\n\r\nfunction isValidParticleIdentifier(identifier?: string) {\r\n  return identifier && NamespaceRegexPattern.test(identifier);\r\n}\r\n", "export type Skin = {\r\n  localization_name: string;\r\n  geometry: string;\r\n  texture: string;\r\n  type: string;\r\n  cape?: string;\r\n  animations?: string;\r\n  enable_attachables?: boolean;\r\n};\r\n\r\nexport enum SkinModelTarget {\r\n  /* 'custom' is the model target used for Steve */\r\n  Custom = \"Custom\",\r\n  /* Model target for Alex uses */\r\n  CustomSlim = \"CustomSlim\",\r\n}\r\n\r\nconst GeometryNamesToModelTarget = new Map<string, SkinModelTarget>([\r\n  [\"geometry.humanoid.custom\", SkinModelTarget.Custom],\r\n  [\"geometry.humanoid.customSlim\", SkinModelTarget.CustomSlim],\r\n]);\r\nconst ValidSkinTextureResolutions = [\r\n  [64, 64],\r\n  [64, 32],\r\n  [128, 128],\r\n];\r\n\r\nconst ValidPurchaseTypes = new Set([\"free\", \"paid\"]);\r\n\r\nconst ValidCapeTextureSizes = [[64, 32]];\r\n\r\nexport function isValidSkinPurchaseType(type: string) {\r\n  return ValidPurchaseTypes.has(type);\r\n}\r\n\r\nexport function isValidGeometry(skin: Skin) {\r\n  return GeometryNamesToModelTarget.has(skin.geometry);\r\n}\r\n\r\nexport function getModelTargetGeometry(skin: Skin): SkinModelTarget | undefined {\r\n  return GeometryNamesToModelTarget.get(skin.geometry);\r\n}\r\n\r\nexport function isValidSkinModelTarget(modelTarget: [number, number]) {\r\n  return ValidSkinTextureResolutions.some((dim) => dim[0] === modelTarget[0] && dim[1] === modelTarget[1]);\r\n}\r\n\r\nexport function isValidCapeSize(size: [number, number]) {\r\n  return ValidCapeTextureSizes.some((dim) => dim[0] === size[0] && dim[1] === size[1]);\r\n}\r\n", "import ProjectItem from \"../../app/ProjectItem\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\n\r\nexport type TestDefinition = {\r\n  id: number;\r\n  title: string;\r\n  severity?: InfoItemType;\r\n  projectItem?: ProjectItem;\r\n  defaultMessage?: string;\r\n  generatorId?: string;\r\n};\r\n\r\nexport function resultFromTestWithMessage(\r\n  test: TestDefinition,\r\n  generatorId: string,\r\n  message?: string,\r\n  projectItem?: ProjectItem\r\n) {\r\n  return new ProjectInfoItem(\r\n    test.severity || InfoItemType.error,\r\n    generatorId,\r\n    test.id,\r\n    message ?? test.defaultMessage ?? test.title,\r\n    projectItem\r\n  );\r\n}\r\n\r\nexport function resultFromTest(\r\n  test: TestDefinition,\r\n  {\r\n    id,\r\n    message,\r\n    item,\r\n    data,\r\n  }: {\r\n    id?: string;\r\n    message?: string;\r\n    item?: ProjectItem;\r\n    data?: string | boolean | number | number[];\r\n  }\r\n) {\r\n  return new ProjectInfoItem(\r\n    test.severity || InfoItemType.error,\r\n    test.generatorId || id || \"\",\r\n    test.id,\r\n    message ?? test.defaultMessage ?? test.title,\r\n    item,\r\n    data\r\n  );\r\n}\r\n\r\n// Can be returned to show this check does apply to this case\r\nexport function notApplicable(): ProjectInfoItem[] {\r\n  return [];\r\n}\r\n\r\n// confirms a result has been returned and/or filters nulls in a way the compiler will understand\r\nexport function isResult(value: ProjectInfoItem | null | undefined): value is ProjectInfoItem {\r\n  return !!value;\r\n}\r\n\r\nexport function getTestTitleById(record: Record<string | number, TestDefinition>, testId: number) {\r\n  return Object.values(record).find((test) => test.id === testId)?.title || `Unknown Test: ${testId}`;\r\n}\r\n", "/**\r\n * JSONSchema Validator - Validates JavaScript objects using JSON Schemas\r\n *\t(http://www.json.com/json-schema-proposal/)\r\n * Licensed under AFL-2.1 OR BSD-3-Clause\r\nTo use the validator call the validate function with an instance object and an optional schema object.\r\nIf a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),\r\nthat schema will be used to validate and the schema parameter is not necessary (if both exist,\r\nboth validations will occur).\r\nThe validate method will return an array of validation errors. If there are no errors, then an\r\nempty list will be returned. A validation error will have two properties:\r\n\"property\" which indicates which property had the error\r\n\"message\" which indicates what the error was\r\n */\r\n(function (root, factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        // AMD. Register as an anonymous module.\r\n        define([], function () {\r\n            return factory();\r\n        });\r\n    } else if (typeof module === 'object' && module.exports) {\r\n        // Node. Does not work with strict CommonJS, but\r\n        // only CommonJS-like environments that support module.exports,\r\n        // like Node.\r\n        module.exports = factory();\r\n    } else {\r\n        // Browser globals\r\n        root.jsonSchema = factory();\r\n    }\r\n}(this, function () {// setup primitive classes to be JSON Schema types\r\nvar exports = validate\r\nexports.Integer = {type:\"integer\"};\r\nvar primitiveConstructors = {\r\n\tString: String,\r\n\tBoolean: Boolean,\r\n\tNumber: Number,\r\n\tObject: Object,\r\n\tArray: Array,\r\n\tDate: Date\r\n}\r\nexports.validate = validate;\r\nfunction validate(/*Any*/instance,/*Object*/schema) {\r\n\t\t// Summary:\r\n\t\t//  \tTo use the validator call JSONSchema.validate with an instance object and an optional schema object.\r\n\t\t// \t\tIf a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),\r\n\t\t// \t\tthat schema will be used to validate and the schema parameter is not necessary (if both exist,\r\n\t\t// \t\tboth validations will occur).\r\n\t\t// \t\tThe validate method will return an object with two properties:\r\n\t\t// \t\t\tvalid: A boolean indicating if the instance is valid by the schema\r\n\t\t// \t\t\terrors: An array of validation errors. If there are no errors, then an\r\n\t\t// \t\t\t\t\tempty list will be returned. A validation error will have two properties:\r\n\t\t// \t\t\t\t\t\tproperty: which indicates which property had the error\r\n\t\t// \t\t\t\t\t\tmessage: which indicates what the error was\r\n\t\t//\r\n\t\treturn validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false});\r\n\t};\r\nexports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) {\r\n\t\t// Summary:\r\n\t\t// \t\tThe checkPropertyChange method will check to see if an value can legally be in property with the given schema\r\n\t\t// \t\tThis is slightly different than the validate method in that it will fail if the schema is readonly and it will\r\n\t\t// \t\tnot check for self-validation, it is assumed that the passed in value is already internally valid.\r\n\t\t// \t\tThe checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for\r\n\t\t// \t\tinformation.\r\n\t\t//\r\n\t\treturn validate(value, schema, {changing: property || \"property\"});\r\n\t};\r\nvar validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) {\r\n\r\n\tif (!options) options = {};\r\n\tvar _changing = options.changing;\r\n\r\n\tfunction getType(schema){\r\n\t\treturn schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase());\r\n\t}\r\n\tvar errors = [];\r\n\t// validate a value against a property definition\r\n\tfunction checkProp(value, schema, path,i){\r\n\r\n\t\tvar l;\r\n\t\tpath += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i;\r\n\t\tfunction addError(message){\r\n\t\t\terrors.push({property:path,message:message});\r\n\t\t}\r\n\r\n\t\tif((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){\r\n\t\t\tif(typeof schema == 'function'){\r\n\t\t\t\tif(!(value instanceof schema)){\r\n\t\t\t\t\taddError(\"is not an instance of the class/constructor \" + schema.name);\r\n\t\t\t\t}\r\n\t\t\t}else if(schema){\r\n\t\t\t\taddError(\"Invalid schema/property definition \" + schema);\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif(_changing && schema.readonly){\r\n\t\t\taddError(\"is a readonly field, it can not be changed\");\r\n\t\t}\r\n\t\tif(schema['extends']){ // if it extends another schema, it must pass that schema as well\r\n\t\t\tcheckProp(value,schema['extends'],path,i);\r\n\t\t}\r\n\t\t// validate a value against a type definition\r\n\t\tfunction checkType(type,value){\r\n\t\t\tif(type){\r\n\t\t\t\tif(typeof type == 'string' && type != 'any' &&\r\n\t\t\t\t\t\t(type == 'null' ? value !== null : typeof value != type) &&\r\n\t\t\t\t\t\t!(value instanceof Array && type == 'array') &&\r\n\t\t\t\t\t\t!(value instanceof Date && type == 'date') &&\r\n\t\t\t\t\t\t!(type == 'integer' && value%1===0)){\r\n\t\t\t\t\treturn [{property:path,message:value + \" - \" + (typeof value) + \" value found, but a \" + type + \" is required\"}];\r\n\t\t\t\t}\r\n\t\t\t\tif(type instanceof Array){\r\n\t\t\t\t\tvar unionErrors=[];\r\n\t\t\t\t\tfor(var j = 0; j < type.length; j++){ // a union type\r\n\t\t\t\t\t\tif(!(unionErrors=checkType(type[j],value)).length){\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(unionErrors.length){\r\n\t\t\t\t\t\treturn unionErrors;\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(typeof type == 'object'){\r\n\t\t\t\t\tvar priorErrors = errors;\r\n\t\t\t\t\terrors = [];\r\n\t\t\t\t\tcheckProp(value,type,path);\r\n\t\t\t\t\tvar theseErrors = errors;\r\n\t\t\t\t\terrors = priorErrors;\r\n\t\t\t\t\treturn theseErrors;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif(value === undefined){\r\n\t\t\tif(schema.required){\r\n\t\t\t\taddError(\"is missing and it is required\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\terrors = errors.concat(checkType(getType(schema),value));\r\n\t\t\tif(schema.disallow && !checkType(schema.disallow,value).length){\r\n\t\t\t\taddError(\" disallowed value was matched\");\r\n\t\t\t}\r\n\t\t\tif(value !== null){\r\n\t\t\t\tif(value instanceof Array){\r\n\t\t\t\t\tif(schema.items){\r\n\t\t\t\t\t\tvar itemsIsArray = schema.items instanceof Array;\r\n\t\t\t\t\t\tvar propDef = schema.items;\r\n\t\t\t\t\t\tfor (i = 0, l = value.length; i < l; i += 1) {\r\n\t\t\t\t\t\t\tif (itemsIsArray)\r\n\t\t\t\t\t\t\t\tpropDef = schema.items[i];\r\n\t\t\t\t\t\t\tif (options.coerce)\r\n\t\t\t\t\t\t\t\tvalue[i] = options.coerce(value[i], propDef);\r\n\t\t\t\t\t\t\terrors.concat(checkProp(value[i],propDef,path,i));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(schema.minItems && value.length < schema.minItems){\r\n\t\t\t\t\t\taddError(\"There must be a minimum of \" + schema.minItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(schema.maxItems && value.length > schema.maxItems){\r\n\t\t\t\t\t\taddError(\"There must be a maximum of \" + schema.maxItems + \" in the array\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else if(schema.properties || schema.additionalProperties){\r\n\t\t\t\t\terrors.concat(checkObj(value, schema.properties, path, schema.additionalProperties));\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){\r\n\t\t\t\t\taddError(\"does not match the regex pattern \" + schema.pattern);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){\r\n\t\t\t\t\taddError(\"may only be \" + schema.maxLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(schema.minLength && typeof value == 'string' && value.length < schema.minLength){\r\n\t\t\t\t\taddError(\"must be at least \" + schema.minLength + \" characters long\");\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.minimum !== 'undefined' && typeof value == typeof schema.minimum &&\r\n\t\t\t\t\t\tschema.minimum > value){\r\n\t\t\t\t\taddError(\"must have a minimum value of \" + schema.minimum);\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maximum !== 'undefined' && typeof value == typeof schema.maximum &&\r\n\t\t\t\t\t\tschema.maximum < value){\r\n\t\t\t\t\taddError(\"must have a maximum value of \" + schema.maximum);\r\n\t\t\t\t}\r\n\t\t\t\tif(schema['enum']){\r\n\t\t\t\t\tvar enumer = schema['enum'];\r\n\t\t\t\t\tl = enumer.length;\r\n\t\t\t\t\tvar found;\r\n\t\t\t\t\tfor(var j = 0; j < l; j++){\r\n\t\t\t\t\t\tif(enumer[j]===value){\r\n\t\t\t\t\t\t\tfound=1;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!found){\r\n\t\t\t\t\t\taddError(\"does not have a value in the enumeration \" + enumer.join(\", \"));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(typeof schema.maxDecimal == 'number' &&\r\n\t\t\t\t\t(value.toString().match(new RegExp(\"\\\\.[0-9]{\" + (schema.maxDecimal + 1) + \",}\")))){\r\n\t\t\t\t\taddError(\"may only have \" + schema.maxDecimal + \" digits of decimal places\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t// validate an object against a schema\r\n\tfunction checkObj(instance,objTypeDef,path,additionalProp){\r\n\r\n\t\tif(typeof objTypeDef =='object'){\r\n\t\t\tif(typeof instance != 'object' || instance instanceof Array){\r\n\t\t\t\terrors.push({property:path,message:\"an object is required\"});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfor(var i in objTypeDef){ \r\n\t\t\t\tif(objTypeDef.hasOwnProperty(i) && i != '__proto__' && i != 'constructor'){\r\n\t\t\t\t\tvar value = instance.hasOwnProperty(i) ? instance[i] : undefined;\r\n\t\t\t\t\t// skip _not_ specified properties\r\n\t\t\t\t\tif (value === undefined && options.existingOnly) continue;\r\n\t\t\t\t\tvar propDef = objTypeDef[i];\r\n\t\t\t\t\t// set default\r\n\t\t\t\t\tif(value === undefined && propDef[\"default\"]){\r\n\t\t\t\t\t\tvalue = instance[i] = propDef[\"default\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(options.coerce && i in instance){\r\n\t\t\t\t\t\tvalue = instance[i] = options.coerce(value, propDef);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheckProp(value,propDef,path,i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(i in instance){\r\n\t\t\tif(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){\r\n\t\t\t\tif (options.filter) {\r\n\t\t\t\t\tdelete instance[i];\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t} else {\r\n\t\t\t\t\terrors.push({property:path,message:\"The property \" + i +\r\n\t\t\t\t\t\t\" is not defined in the schema and the schema does not allow additional properties\"});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires;\r\n\t\t\tif(requires && !(requires in instance)){\r\n\t\t\t\terrors.push({property:path,message:\"the presence of the property \" + i + \" requires that \" + requires + \" also be present\"});\r\n\t\t\t}\r\n\t\t\tvalue = instance[i];\r\n\t\t\tif(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){\r\n\t\t\t\tif(options.coerce){\r\n\t\t\t\t\tvalue = instance[i] = options.coerce(value, additionalProp);\r\n\t\t\t\t}\r\n\t\t\t\tcheckProp(value,additionalProp,path,i);\r\n\t\t\t}\r\n\t\t\tif(!_changing && value && value.$schema){\r\n\t\t\t\terrors = errors.concat(checkProp(value,value.$schema,path,i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn errors;\r\n\t}\r\n\tif(schema){\r\n\t\tcheckProp(instance,schema,'',_changing || '');\r\n\t}\r\n\tif(!_changing && instance && instance.$schema){\r\n\t\tcheckProp(instance,instance.$schema,'','');\r\n\t}\r\n\treturn {valid:!errors.length,errors:errors};\r\n};\r\nexports.mustBeValid = function(result){\r\n\t//\tsummary:\r\n\t//\t\tThis checks to ensure that the result is valid and will throw an appropriate error message if it is not\r\n\t// result: the result returned from checkPropertyChange or validate\r\n\tif(!result.valid){\r\n\t\tthrow new TypeError(result.errors.map(function(error){return \"for property \" + error.property + ': ' + error.message;}).join(\", \\n\"));\r\n\t}\r\n}\r\n\r\nreturn exports;\r\n}));\r\n", "import { JSONSchema4, JSONSchema6, JSONSchema7, validate } from \"json-schema\";\r\nimport { ZodType } from \"zod\";\r\n\r\nexport type ValidationError = {\r\n  message: string;\r\n  propertyName?: string;\r\n};\r\n\r\ntype UnvalidatedJson = any | undefined | null;\r\ntype AcceptedSchemas = JSONSchema4 | JSONSchema6 | JSONSchema7;\r\n\r\ntype ValidationSuccess<T> = [T, null];\r\ntype ValidationFail = [null, ValidationError[]];\r\n\r\n/*\r\n  uses schema to validate a json object and if valid, returns it with the type asserted\r\n\r\n  returns a tuple of [value, errors].\r\n  If errors is null, then value will be a valid value with type T\r\n  otherwise errors will be an array and value will be null\r\n*/\r\n\r\nexport function validateJsonAndAssert<T>(\r\n  json: UnvalidatedJson,\r\n  schema: AcceptedSchemas | ZodType,\r\n  transforms: ((jsonObj: any) => any)[] = []\r\n): ValidationSuccess<T> | ValidationFail {\r\n  const [result, errors] =\r\n    schema instanceof ZodType ? zodValidateSchema<T>(json, schema) : jsonschemaValidateSchema<T>(json, schema);\r\n\r\n  if (errors) {\r\n    return [null, errors];\r\n  }\r\n\r\n  let obj = result;\r\n  for (const transform of transforms) {\r\n    obj = transform(obj);\r\n  }\r\n\r\n  return [obj, null];\r\n}\r\n\r\nfunction jsonschemaValidateSchema<T>(\r\n  json: UnvalidatedJson,\r\n  schema: AcceptedSchemas,\r\n  transforms: ((jsonObj: any) => any)[] = []\r\n): ValidationSuccess<T> | ValidationFail {\r\n  if (!json || typeof json !== \"object\") {\r\n    return [null, [{ message: \"Could not parse json\" }]];\r\n  }\r\n\r\n  const validation = validate(json, schema);\r\n\r\n  return validation.valid ? [json, null] : [null, validation.errors];\r\n}\r\n\r\nfunction zodValidateSchema<T>(json: any, schema: ZodType): ValidationSuccess<T> | ValidationFail {\r\n  const parseResult = schema.safeParse(json);\r\n  if (!parseResult.success) {\r\n    const errors = parseResult.error.errors.map((error) => ({\r\n      message: error.message,\r\n      propertyName: error.path.join(\"/\"),\r\n    }));\r\n    return [null, errors];\r\n  }\r\n\r\n  return [parseResult.data, null];\r\n}\r\n", "import { JSONSchema7 } from \"json-schema\";\r\nimport { validateJsonAndAssert } from \"../../jsonschema/SchemaValidation\";\r\nimport { Skin } from \"./Skin\";\r\n\r\nexport type SkinPack = {\r\n  localization_name: string;\r\n  serialize_name: string;\r\n  skins: Skin[];\r\n};\r\n\r\n/*\r\n Schema for validating SkinPack\r\n*/\r\nconst SkinPackSchema: JSONSchema7 = {\r\n  type: \"object\",\r\n  properties: {\r\n    localization_name: { type: \"string\" },\r\n    serialize_name: { type: \"string\" },\r\n    skins: {\r\n      type: \"array\",\r\n      items: {\r\n        type: \"object\",\r\n        properties: {\r\n          localization_name: { type: \"string\" },\r\n          geometry: { type: \"string\" },\r\n          texture: { type: \"string\" },\r\n          type: { type: \"string\" },\r\n        },\r\n        required: [\"localization_name\", \"geometry\", \"texture\", \"type\"],\r\n      },\r\n    },\r\n  },\r\n  required: [\"localization_name\", \"serialize_name\", \"skins\"],\r\n};\r\n\r\n/*\r\n  validates json against SkinPack-Schema and returns it as a fully typed SkinPack object \r\n\r\n  alias of validateJsonAndAssert for clarity and convenience\r\n*/\r\nexport const validateSkinPackJson = (json: any) => validateJsonAndAssert<SkinPack>(json, SkinPackSchema);\r\n\r\nexport function getLocKeysFromSkinPack(pack: SkinPack) {\r\n  const skinKeys = pack.skins.map((skin) => `skin.${pack.localization_name}.${skin.localization_name}`);\r\n\r\n  return [`skinpack.${pack.localization_name}`, ...skinKeys];\r\n}\r\n", "import { ImageCoords } from \"../TextureDefinition\";\r\nimport { ModelSegment } from \"./TextureUtilities\";\r\n\r\nexport const Head: ModelSegment = {\r\n  name: \"Head\",\r\n  parts: {\r\n    top: { x1: 8, y1: 0, x2: 15, y2: 7 },\r\n    front: { x1: 8, y1: 8, x2: 15, y2: 15 },\r\n    left: { x1: 16, y1: 8, x2: 23, y2: 15 },\r\n    right: { x1: 0, y1: 8, x2: 7, y2: 15 },\r\n    bottom: { x1: 16, y1: 0, x2: 23, y2: 7 },\r\n    back: { x1: 24, y1: 8, x2: 31, y2: 15 },\r\n  },\r\n} as const;\r\n\r\nexport const Body: ModelSegment = {\r\n  name: \"Body\",\r\n  parts: {\r\n    top: { x1: 20, y1: 16, x2: 27, y2: 19 },\r\n    front: { x1: 20, y1: 20, x2: 27, y2: 31 },\r\n    left: { x1: 16, y1: 20, x2: 19, y2: 31 },\r\n    right: { x1: 28, y1: 20, x2: 31, y2: 31 },\r\n    bottom: { x1: 26, y1: 16, x2: 35, y2: 19 },\r\n    back: { x1: 32, y1: 20, x2: 39, y2: 31 },\r\n  },\r\n} as const;\r\n\r\n// Right Arm - Custom\r\nexport const RightArmCustom: ModelSegment = {\r\n  name: \"Right Arm\",\r\n  parts: {\r\n    top: { x1: 44, y1: 16, x2: 47, y2: 19 },\r\n    front: { x1: 44, y1: 20, x2: 47, y2: 31 },\r\n    left: { x1: 40, y1: 20, x2: 43, y2: 31 },\r\n    right: { x1: 48, y1: 20, x2: 51, y2: 31 },\r\n    bottom: { x1: 48, y1: 16, x2: 51, y2: 19 },\r\n    back: { x1: 52, y1: 20, x2: 55, y2: 31 },\r\n  },\r\n} as const;\r\n\r\n// Right Arm - Slim\r\nexport const RightArmSlim: ModelSegment = {\r\n  name: \"Right Arm\",\r\n  parts: {\r\n    top: { x1: 44, y1: 16, x2: 46, y2: 19 },\r\n    front: { x1: 44, y1: 20, x2: 46, y2: 31 },\r\n    left: { x1: 40, y1: 20, x2: 43, y2: 31 },\r\n    right: { x1: 47, y1: 20, x2: 50, y2: 31 },\r\n    bottom: { x1: 47, y1: 16, x2: 49, y2: 19 },\r\n    back: { x1: 51, y1: 20, x2: 53, y2: 31 },\r\n  },\r\n};\r\n\r\n// Left Arm - Custom\r\nexport const LeftArmCustom: ModelSegment = {\r\n  name: \"Left Arm\",\r\n  parts: {\r\n    top: { x1: 36, y1: 48, x2: 39, y2: 51 },\r\n    front: { x1: 36, y1: 52, x2: 39, y2: 63 },\r\n    left: { x1: 32, y1: 52, x2: 35, y2: 63 },\r\n    right: { x1: 40, y1: 52, x2: 43, y2: 63 },\r\n    bottom: { x1: 40, y1: 48, x2: 43, y2: 51 },\r\n    back: { x1: 44, y1: 52, x2: 47, y2: 63 },\r\n  },\r\n} as const;\r\n\r\n// Left Arm - Slim\r\nexport const LeftArmSlim: ModelSegment = {\r\n  name: \"Left Arm\",\r\n  parts: {\r\n    top: { x1: 36, y1: 48, x2: 38, y2: 51 },\r\n    front: { x1: 36, y1: 52, x2: 38, y2: 63 },\r\n    left: { x1: 32, y1: 52, x2: 35, y2: 63 },\r\n    right: { x1: 39, y1: 52, x2: 42, y2: 63 },\r\n    bottom: { x1: 39, y1: 48, x2: 41, y2: 51 },\r\n    back: { x1: 43, y1: 52, x2: 45, y2: 63 },\r\n  },\r\n} as const;\r\n\r\n// Right Leg\r\nexport const RightLeg: ModelSegment = {\r\n  name: \"Right Leg\",\r\n  parts: {\r\n    top: { x1: 4, y1: 16, x2: 7, y2: 19 },\r\n    front: { x1: 4, y1: 20, x2: 7, y2: 31 },\r\n    left: { x1: 0, y1: 20, x2: 3, y2: 31 },\r\n    right: { x1: 8, y1: 20, x2: 11, y2: 31 },\r\n    bottom: { x1: 8, y1: 16, x2: 11, y2: 19 },\r\n    back: { x1: 12, y1: 20, x2: 15, y2: 31 },\r\n  },\r\n} as const;\r\n\r\n// Left Leg\r\nexport const LeftLeg: ModelSegment = {\r\n  name: \"Left Leg\",\r\n  parts: {\r\n    top: { x1: 20, y1: 48, x2: 23, y2: 51 },\r\n    front: { x1: 20, y1: 52, x2: 23, y2: 63 },\r\n    left: { x1: 16, y1: 52, x2: 19, y2: 63 },\r\n    right: { x1: 24, y1: 52, x2: 27, y2: 63 },\r\n    bottom: { x1: 24, y1: 48, x2: 27, y2: 51 },\r\n    back: { x1: 28, y1: 52, x2: 31, y2: 63 },\r\n  },\r\n} as const;\r\n\r\n// Right Arm Custom Difference\r\nexport const RightArmCustomDifference: ImageCoords = { x1: 54, y1: 20, x2: 55, y2: 31 } as const;\r\n// Extra 1px column present in the Custom (thick) right arm but not in the Slim variant.\r\nexport const LeftArmCustomDifference: ImageCoords = { x1: 46, y1: 52, x2: 47, y2: 63 } as const;\r\n// Extra 1px column present in the Custom (thick) left arm but not in the Slim variant.\r\n", "import Database from \"../Database\";\r\nimport { SkinModelTarget as SkinTarget } from \"../skins/Skin\";\r\nimport TextureDefinition, { ImageCoords } from \"../TextureDefinition\";\r\nimport {\r\n  Head,\r\n  RightArmCustom,\r\n  LeftArmCustom,\r\n  LeftLeg,\r\n  RightLeg,\r\n  RightArmSlim,\r\n  LeftArmSlim,\r\n  LeftArmCustomDifference,\r\n  RightArmCustomDifference,\r\n} from \"./ModelSegments\";\r\n\r\ninterface TextureSizeData {\r\n  name: string;\r\n  allowedTextures: TextureDefinition | undefined;\r\n  allowedTexturesHighRes: TextureDefinition | undefined;\r\n  geometryName: string;\r\n  segments: readonly ModelSegment[];\r\n}\r\n\r\nexport type ModelSegment = {\r\n  name: string;\r\n  parts: {\r\n    top: ImageCoords;\r\n    front: ImageCoords;\r\n    left: ImageCoords;\r\n    right: ImageCoords;\r\n    bottom: ImageCoords;\r\n    back: ImageCoords;\r\n  };\r\n};\r\n\r\n// Generally, steve == custom and alex == customSlim\r\nconst CustomSlimGeometryTags = new Set<string>([\"a\", \"alex\", \"slim\", \"customslim\"]);\r\nconst CustomGeometryTags = new Set<string>([\"s\", \"steve\", \"custom\"]);\r\n\r\nexport default class TextureUtilities {\r\n  private static _custom: TextureSizeData = {\r\n    name: \"custom\",\r\n    allowedTextures: undefined,\r\n    allowedTexturesHighRes: undefined,\r\n    geometryName: \"geometry.humanoid.custom\",\r\n    segments: [Head, RightArmCustom, LeftArmCustom, LeftLeg, RightLeg],\r\n  };\r\n\r\n  private static _customSlim: TextureSizeData = {\r\n    name: \"customSlim\",\r\n    allowedTextures: undefined,\r\n    allowedTexturesHighRes: undefined,\r\n    geometryName: \"geometry.humanoid.customSlim\",\r\n    segments: [Head, RightArmSlim, LeftArmSlim, LeftLeg, RightLeg],\r\n  };\r\n\r\n  private static _isLoaded = false;\r\n\r\n  static getBySize(size: SkinTarget): TextureSizeData {\r\n    switch (size) {\r\n      case SkinTarget.Custom:\r\n        return this._custom;\r\n      case SkinTarget.CustomSlim:\r\n        return this._customSlim;\r\n      default:\r\n        throw new Error(`Unknown skin size: ${size}`);\r\n    }\r\n  }\r\n\r\n  static async getTextureDefinititionForContent(filePath: string) {\r\n    const contentFile = await Database.getContentFolderFile(filePath);\r\n\r\n    if (!contentFile) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!contentFile.isContentLoaded) {\r\n      await contentFile.loadContent();\r\n    }\r\n\r\n    if (!(contentFile.content instanceof Uint8Array)) {\r\n      return undefined;\r\n    }\r\n\r\n    let textDef = await TextureDefinition.ensureOnFile(contentFile);\r\n\r\n    if (!textDef) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!textDef.isContentProcessed) {\r\n      await textDef.processContent();\r\n    }\r\n\r\n    return textDef;\r\n  }\r\n\r\n  static async load() {\r\n    if (this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    this._custom.allowedTextures = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/Custom_AllowedPixels_64.png\"\r\n    );\r\n    this._custom.allowedTexturesHighRes = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/Custom_AllowedPixels_128.png\"\r\n    );\r\n\r\n    this._customSlim.allowedTextures = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/CustomSlim_AllowedPixels_64.png\"\r\n    );\r\n\r\n    this._customSlim.allowedTexturesHighRes = await TextureUtilities.getTextureDefinititionForContent(\r\n      \"textures/CustomSlim_AllowedPixels_128.png\"\r\n    );\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n\r\nexport function isRegionVisible(texture: TextureDefinition, area: ImageCoords) {\r\n  const multiplier = isHighResolutionSkinPackTexture(texture) ? 2 : 1;\r\n  const maxX = Math.floor(area.x2) * multiplier;\r\n  const maxY = Math.floor(area.y2) * multiplier;\r\n\r\n  if (texture.imageData) {\r\n    for (let x = area.x1 * multiplier; x <= maxX; x++) {\r\n      for (let y = area.y1 * multiplier; y <= maxY; y++) {\r\n        if (texture.getPixel(x, y).a !== 0) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nexport function getSkinTargetByUniquePixelLocations(texture: TextureDefinition) {\r\n  const hasCustomSkinPixels =\r\n    isRegionVisible(texture, RightArmCustomDifference) || isRegionVisible(texture, LeftArmCustomDifference);\r\n\r\n  return hasCustomSkinPixels ? SkinTarget.Custom : SkinTarget.CustomSlim;\r\n}\r\n\r\nexport function getSkinTargetFromName(textureName: string): SkinTarget | undefined {\r\n  const tokens = textureName.split(/[._]/);\r\n  if (tokens.length > 2) {\r\n    const prefix = tokens[0]?.toLowerCase();\r\n    const suffix = tokens[tokens.length - 2]?.toLowerCase();\r\n\r\n    if (CustomGeometryTags.has(prefix) || CustomGeometryTags.has(suffix)) {\r\n      return SkinTarget.Custom;\r\n    }\r\n\r\n    if (CustomSlimGeometryTags.has(prefix) || CustomSlimGeometryTags.has(suffix)) {\r\n      return SkinTarget.CustomSlim;\r\n    }\r\n  }\r\n  return undefined;\r\n}\r\n\r\nexport function isHighResolutionSkinPackTexture(textureDefinition: TextureDefinition) {\r\n  return textureDefinition.width === 128;\r\n}\r\n\r\nexport async function isOuterAreaIsBlank(texture: TextureDefinition, size: SkinTarget) {\r\n  await TextureUtilities.load();\r\n\r\n  if (texture.width === undefined || texture.height === undefined) {\r\n    throw new Error(\"Texture width or height is undefined\");\r\n  }\r\n\r\n  const allowedAlphaMask = isHighResolutionSkinPackTexture(texture)\r\n    ? TextureUtilities.getBySize(size).allowedTexturesHighRes\r\n    : TextureUtilities.getBySize(size).allowedTextures;\r\n\r\n  if (!allowedAlphaMask) {\r\n    throw new Error(\"Could not find reference for texture\");\r\n  }\r\n\r\n  if (texture.imageData) {\r\n    for (let x = 0; x < texture.width; ++x) {\r\n      for (let y = 0; y < texture.height; ++y) {\r\n        const texIsVisibleInDisallowedSpot = allowedAlphaMask.getPixel(x, y).a === 0 && texture.getPixel(x, y).a > 0;\r\n        if (texIsVisibleInDisallowedSpot) {\r\n          return false;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nexport function getSegmentsVisibilities(texture: TextureDefinition, size: SkinTarget) {\r\n  const values = TextureUtilities.getBySize(size);\r\n\r\n  return values.segments.map((segment) => checkTextureVisibilityForSegment(texture, segment));\r\n}\r\n\r\nfunction checkTextureVisibilityForSegment(texture: TextureDefinition, segment: ModelSegment) {\r\n  return {\r\n    segmentName: segment.name,\r\n    visibilities: {\r\n      top: isRegionVisible(texture, segment.parts.top),\r\n      front: isRegionVisible(texture, segment.parts.front),\r\n      left: isRegionVisible(texture, segment.parts.left),\r\n      right: isRegionVisible(texture, segment.parts.right),\r\n      bottom: isRegionVisible(texture, segment.parts.bottom),\r\n      back: isRegionVisible(texture, segment.parts.back),\r\n    },\r\n  };\r\n}\r\n", "import { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport {\r\n  getModelTargetGeometry,\r\n  isValidCapeSize,\r\n  isValidSkinPurchaseType,\r\n  isValidSkinModelTarget,\r\n  Skin,\r\n} from \"../../minecraft/skins/Skin\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { isResult, notApplicable, resultFromTest, resultFromTestWithMessage } from \"../tests/TestDefinition\";\r\nimport { findEnsuredFiles, getEnsuredFile, getEnsuredFileOfType } from \"../../app/ProjectItemUtilities\";\r\nimport { getLocKeysFromSkinPack, SkinPack, validateSkinPackJson } from \"../../minecraft/skins/SkinPack\";\r\nimport IFile from \"../../storage/IFile\";\r\nimport LocManager from \"../../minecraft/LocManager\";\r\nimport { getSkinTargetFromName } from \"../../minecraft/textures/TextureUtilities\";\r\nimport TextureDefinition from \"../../minecraft/TextureDefinition\";\r\n\r\nconst MaxFreeSkins = 2;\r\nconst MaxSkinsInAPack = 80;\r\nconst LeadingOrTrailingSpaceRegex = /^\\s+|\\s+$/;\r\n\r\nconst Tests = {\r\n  JsonNotFoundFile: {\r\n    id: 101,\r\n    title: \"Skin Pack Json File Not Found\",\r\n    severity: InfoItemType.error,\r\n    defaultMessage: \"skins.json file not found.\",\r\n  },\r\n  InvalidJsonFile: { id: 102, title: \"Invalid Json File\" },\r\n  InvalidPackLocName: {\r\n    id: 103,\r\n    title: \"Invalid Localization Name\",\r\n    severity: InfoItemType.error,\r\n    defaultMessage: \"skins.json localization_name and serialize_name must be the same.\",\r\n  },\r\n  TooManyFreeSkins: { id: 104, title: \"More Free Skins Than Allowed\" },\r\n  DuplicateTextures: { id: 105, title: \"Duplicate Textures Found\", severity: InfoItemType.warning },\r\n  CapeTextureNotAllowed: { id: 106, title: \"Cape Texture Not Allowed\" },\r\n  InvalidTextureSize: { id: 107, title: \"Texture Invalid Size\" },\r\n  MCCreatorPropertyNotAllowed: { id: 108, title: \"Minecraft Creator Property Not Allowed\" },\r\n  FailedToReadFile: { id: 109, title: \"File Read Failed\" },\r\n  OrphanedTexture: { id: 110, title: \"Texture Not Found in skins.json\" },\r\n  OrphanedLocKey: { id: 111, title: \"Loc Key Not Found in Lang File\" },\r\n  LocalizedKeyNotFoundInSkinsJson: { id: 112, title: \"Localized Key Not Found In skins.json\" },\r\n  InvalidSpacingOnLocalizedKey: { id: 113, title: \"Localized Key Cannot Have Leading Or Trailing Spaces\" },\r\n  InvalidSkinType: { id: 114, title: \"Skin Purchase Type Not Allowed\" },\r\n  InvalidSkinModelTarget: { id: 115, title: \"Invalid Skin Model Target\" },\r\n  InvalidNumberOfSkins: {\r\n    id: 116,\r\n    title: \"Invalid Number Of Skins\",\r\n    defaultMessage: `Maximum Allowable skins is: ${MaxSkinsInAPack}`,\r\n  },\r\n  OuterAreaIsBlank: { id: 117, title: \"Outer Area Blank\" },\r\n  ModelInvisible: { id: 118, title: \"Model Invisible From Some Angles\" },\r\n  ModelPartiallyInvisible: { id: 119, title: \"Model Partially Invisible\", severity: InfoItemType.warning },\r\n  CouldNotFindRelatedPack: {\r\n    id: 120,\r\n    title: \"Could Not Find Related Skin Pack\",\r\n    defaultMessage: \"Could not read skin pack manifest pack\",\r\n  },\r\n} as const;\r\n\r\n/**\r\n * Validates skin pack JSON files including skins.json structure and texture references.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cspj.form.json} for topic definitions\r\n */\r\nexport default class CheckSkinPackJsonGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CSPJ\";\r\n  title: string = \"Skin Pack Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const skinPackManifestItems = project.getItemsByType(ProjectItemType.skinPackManifestJson);\r\n\r\n    const allResults: ProjectInfoItem[] = [];\r\n\r\n    for (const skinPackManifestItem of skinPackManifestItems) {\r\n      if (!skinPackManifestItems.length) {\r\n        return notApplicable();\r\n      }\r\n\r\n      const skinPack = await skinPackManifestItem.getPack();\r\n\r\n      if (!skinPack) {\r\n        allResults.push(\r\n          resultFromTest(Tests.CouldNotFindRelatedPack, {\r\n            id: this.id,\r\n            item: skinPackManifestItem,\r\n            data: skinPackManifestItem.name,\r\n          })\r\n        );\r\n        continue;\r\n      }\r\n\r\n      const packItems = skinPack.getPackItems();\r\n      const skinCatalogJsonFile = await getEnsuredFileOfType(packItems, ProjectItemType.skinCatalogJson);\r\n\r\n      if (!skinCatalogJsonFile) {\r\n        return [\r\n          resultFromTestWithMessage(\r\n            Tests.JsonNotFoundFile,\r\n            this.id,\r\n            \"Could not find skins.json file\",\r\n            skinPackManifestItem\r\n          ),\r\n        ];\r\n      }\r\n\r\n      // read skin pack from json and return error results if it can't be read or validated\r\n      const skinCatalogJson = await StorageUtilities.getJsonObject(skinCatalogJsonFile);\r\n      const [skinPackManifestObj, errors] = validateSkinPackJson(skinCatalogJson);\r\n\r\n      if (errors) {\r\n        return errors.map((error) =>\r\n          resultFromTestWithMessage(Tests.InvalidJsonFile, this.id, error.message, skinPackManifestItem)\r\n        );\r\n      }\r\n\r\n      if (!hasValidLocalizationNames(skinPackManifestObj.localization_name, skinPackManifestObj.serialize_name)) {\r\n        return [resultFromTest(Tests.InvalidPackLocName, { id: this.id, item: skinPackManifestItem })];\r\n      }\r\n\r\n      allResults.push(...this.validateSkins(skinPackManifestObj.skins, project.isMinecraftCreator));\r\n      allResults.push(\r\n        ...(await this.validateTextures(packItems, skinPackManifestObj.skins, project.isMinecraftCreator))\r\n      );\r\n      allResults.push(...this.checkSkinLocalizations(project.loc, skinPackManifestObj));\r\n    }\r\n\r\n    return allResults;\r\n  }\r\n\r\n  summarize(): void {}\r\n\r\n  private validateSkins(skins: Skin[], isMCCreator: boolean) {\r\n    const results = [];\r\n\r\n    const invalidSkins = skins\r\n      .filter((skin) => !isValidSkinPurchaseType(skin.type))\r\n      .map(() => resultFromTestWithMessage(Tests.InvalidSkinType, this.id));\r\n    results.push(...invalidSkins);\r\n\r\n    const freeSkins = skins.filter((skin) => skin.type === \"free\");\r\n    if (freeSkins.length > MaxFreeSkins) {\r\n      const message = `${freeSkins.length} free skins found. Only ${MaxFreeSkins} allowed.`;\r\n      results.push(resultFromTestWithMessage(Tests.TooManyFreeSkins, this.id, message));\r\n    }\r\n\r\n    if (!isMCCreator) {\r\n      const nonFPResults = this.validateNonMCRestrictionsForSkin(skins);\r\n      results.push(...nonFPResults);\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private async validateTextures(\r\n    packItems: readonly ProjectItem[],\r\n    skins: Skin[],\r\n    isMCCreator: boolean\r\n  ): Promise<ProjectInfoItem[]> {\r\n    //check for duplicate capes\r\n    const capeTextureNames = skins.map((skin) => skin.cape).filter((cape) => !!cape);\r\n\r\n    // CSPJ105\r\n    const duplicateCapeTexturesResults = capeTextureNames\r\n      .filter((name, index) => capeTextureNames.indexOf(name) !== index)\r\n      .map((duplicate) =>\r\n        resultFromTestWithMessage(Tests.DuplicateTextures, this.id, `Duplicate cape texture found: ${duplicate}`)\r\n      );\r\n\r\n    //check cape textures\r\n    const capeTextureSet = new Set(capeTextureNames);\r\n    const capeTextures = await findEnsuredFiles(packItems, (item) => capeTextureSet.has(item.name));\r\n\r\n    const capeCheck = await Promise.all(capeTextures.map((cape) => this.validateCapeTextureImage(cape)));\r\n    const capeResults = capeCheck.filter(isResult);\r\n\r\n    //check for duplicate skin textures\r\n    const skinTextureNames = skins.map((skin) => skin.texture).filter((texture) => !!texture);\r\n    const duplicateTextureResults = skinTextureNames\r\n      .filter((name, index) => skinTextureNames.indexOf(name) !== index)\r\n      .map((duplicate) =>\r\n        resultFromTestWithMessage(Tests.DuplicateTextures, this.id, `Duplicate skin texture found: ${duplicate}`)\r\n      );\r\n\r\n    //check skin textures\r\n    const textureCheck = await Promise.all(\r\n      skins.map((skin) => this.validateTextureImage(skin, packItems, isMCCreator))\r\n    );\r\n    const textureResults = textureCheck.flatMap((result) => result);\r\n\r\n    //check orphaned textures\r\n    const knownTextures = new Set([...skinTextureNames, ...capeTextureSet]);\r\n    const allTexturesInProject = packItems.filter((item) => item.itemType === ProjectItemType.texture);\r\n    const orphaned = allTexturesInProject.filter(\r\n      (texItem) => !knownTextures.has(texItem.name) && !texItem.name.startsWith(\"pack_icon\")\r\n    );\r\n\r\n    // CSPJ110\r\n    const orphanResults = orphaned.map((orphan) =>\r\n      resultFromTestWithMessage(Tests.OrphanedTexture, this.id, `${orphan.name} in skin pack not found in skins.json`)\r\n    );\r\n\r\n    // combine and return results\r\n    return [\r\n      ...duplicateCapeTexturesResults,\r\n      ...capeResults,\r\n      ...duplicateTextureResults,\r\n      ...textureResults,\r\n      ...orphanResults,\r\n    ];\r\n  }\r\n\r\n  private validateNonMCRestrictionsForSkin(skins: Skin[]) {\r\n    const results = [];\r\n\r\n    if (skins.length > MaxSkinsInAPack) {\r\n      results.push(resultFromTestWithMessage(Tests.InvalidNumberOfSkins, this.id));\r\n    }\r\n\r\n    if (skins.find((skin) => hasMCOnlyProperties(skin))) {\r\n      const message = \"animations and enable_attachables not allowed if not Minecraft Creator\";\r\n      results.push(resultFromTestWithMessage(Tests.MCCreatorPropertyNotAllowed, this.id, message));\r\n    }\r\n\r\n    if (skins.find((skin) => !!skin.cape)) {\r\n      results.push(resultFromTestWithMessage(Tests.CapeTextureNotAllowed, this.id));\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private async validateCapeTextureImage(textureFile: IFile | null) {\r\n    if (!textureFile) {\r\n      return null;\r\n    }\r\n\r\n    const texture = await TextureDefinition.ensureOnFile(textureFile);\r\n\r\n    if (!texture) {\r\n      const message = `Failed to read file: ${textureFile.name}`;\r\n      return resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message);\r\n    }\r\n\r\n    const width = texture.width;\r\n    const height = texture.height;\r\n\r\n    if (!width || !height || texture.errorMessage) {\r\n      const message = `Failed to read dimensions from texture: ${texture.errorMessage}`;\r\n      return resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message);\r\n    }\r\n\r\n    if (!isValidCapeSize([width, height])) {\r\n      const message = `Texture: ${textureFile.name} is invalid size (${width}x${height})`;\r\n      return resultFromTestWithMessage(Tests.InvalidTextureSize, this.id, message);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private async validateTextureImage(\r\n    skin: Skin,\r\n    items: readonly ProjectItem[],\r\n    isMCCreator: boolean\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const textureFile = await getEnsuredFile(items, (item) => item.name === skin.texture);\r\n    if (!textureFile) {\r\n      return [];\r\n    }\r\n    const textureName = textureFile.name;\r\n\r\n    const texture = await TextureDefinition.ensureOnFile(textureFile);\r\n\r\n    if (!texture) {\r\n      const message = `Failed to read file: ${textureName}`;\r\n      return [resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message)];\r\n    }\r\n\r\n    if (!texture.isContentProcessed) {\r\n      await texture.processContent();\r\n    }\r\n\r\n    const width = texture.width;\r\n    const height = texture.height;\r\n\r\n    if (!width || !height || texture.errorMessage) {\r\n      const message = `Failed to read dimensions from texture: ${textureName} ${texture.errorMessage}`;\r\n      return [resultFromTestWithMessage(Tests.FailedToReadFile, this.id, message)];\r\n    }\r\n\r\n    if (!isValidSkinModelTarget([width, height])) {\r\n      const message = `Texture: ${textureName} is invalid size (${width}x${height})`;\r\n      return [resultFromTestWithMessage(Tests.InvalidTextureSize, this.id, message)];\r\n    }\r\n\r\n    // remaining checks do not apply to MC creator\r\n    if (isMCCreator) {\r\n      return [];\r\n    }\r\n\r\n    const skinTarget = getSkinTargetFromName(textureName);\r\n\r\n    //CSPJ115\r\n    if (!skinTarget) {\r\n      return [\r\n        resultFromTestWithMessage(\r\n          Tests.InvalidSkinModelTarget,\r\n          this.id,\r\n          `No intended model tag in name. Slim model skins must have the prefix or suffix of  'a', 'alex', 'slim', 'customSlim' separated by an '_' ex. <name>_customSlim. Custom model skins must have the prefix or suffix of  's', 'steve', 'custom' separated by an '_' ex. <name>_custom.`\r\n        ),\r\n      ];\r\n    }\r\n\r\n    const geoSkinSize = getModelTargetGeometry(skin);\r\n\r\n    //CSPJ115\r\n    if (!geoSkinSize) {\r\n      return [\r\n        resultFromTestWithMessage(\r\n          Tests.InvalidSkinModelTarget,\r\n          this.id,\r\n          `geometry property: ${skin.geometry} not allowed`\r\n        ),\r\n      ];\r\n    }\r\n\r\n    /*\r\n    // requires pixel data for PNG, which we don't have\r\n\r\n    const pixelSkinSize = getSkinTargetByUniquePixelLocations(texture);\r\n\r\n    const isSizeConsistent = skinTarget === geoSkinSize && skinTarget === pixelSkinSize;\r\n    if (!isSizeConsistent) {\r\n      const message = `Model size indicators are inconsistent. name: ${skinTarget}, geometry: ${geoSkinSize}, image data: ${pixelSkinSize}`;\r\n      return [resultFromTestWithMessage(Tests.InvalidSkinModelTarget, this.id, message)];\r\n    }\r\n      \r\n\r\n    if (!(await isOuterAreaIsBlank(texture, skinTarget))) {\r\n      const message = `[${textureFile.name}]: Ensure that no pixels not visible on the model are filled in with an alpha greater than 0`;\r\n      return [resultFromTestWithMessage(Tests.OuterAreaIsBlank, this.id, message)];\r\n    }\r\n\r\n    const segmentVisibilities = getSegmentsVisibilities(texture, skinTarget);\r\n\r\n    const visErrors = segmentVisibilities\r\n      .flatMap((segment) => {\r\n        const messages = [];\r\n        if (!segment.visibilities.top && !segment.visibilities.bottom) {\r\n          messages.push(\r\n            `The ${segment.segmentName} is not visible from the top and the bottom. This could cause this part of the model to be completely invisible from certain angles.`\r\n          );\r\n        }\r\n\r\n        if (!segment.visibilities.front && segment.visibilities.back) {\r\n          messages.push(\r\n            `The ${segment.segmentName} is not visible from the front and the back. This could cause this part of the model to be completely invisible from certain angles.`\r\n          );\r\n        }\r\n\r\n        if (!segment.visibilities.left && !segment.visibilities.right) {\r\n          messages.push(\r\n            `The ${segment.segmentName} is not visible from the right and the left. This could cause this part of the model to be completely invisible from certain angles.`\r\n          );\r\n        }\r\n\r\n        return messages;\r\n      })\r\n      .map((message) => resultFromTestWithMessage(Tests.ModelInvisible, this.id, message));\r\n\r\n    const visWarnings = segmentVisibilities\r\n      .flatMap((segment) =>\r\n        Object.entries(segment.visibilities)\r\n          .filter(([_side, isVisible]) => !isVisible)\r\n          .map(([side]) => `Side: [${side}] of segment: [${segment.segmentName}] is not visible!`)\r\n      )\r\n      .map((message) => resultFromTestWithMessage(Tests.ModelPartiallyInvisible, this.id, message));\r\n\r\n    return [...visErrors, ...visWarnings];*/\r\n    return [];\r\n  }\r\n\r\n  private checkSkinLocalizations(locManager: LocManager, skinPack: SkinPack) {\r\n    const locKeysFromSkinPack = getLocKeysFromSkinPack(skinPack);\r\n    const knownKeys = new Set(locManager.getAllTokenKeys());\r\n\r\n    const orphanLocKeyResults = locKeysFromSkinPack\r\n      .filter((key) => !knownKeys.has(key))\r\n      .map((key) =>\r\n        resultFromTestWithMessage(\r\n          Tests.OrphanedLocKey,\r\n          this.id,\r\n          `Loc key [${key}] in skins.json not found in en_US.lang file`\r\n        )\r\n      );\r\n\r\n    const knownSkinsKeys = new Set(locKeysFromSkinPack);\r\n\r\n    const localizedOrphansResults = [];\r\n    const invalidSpaceResults = [];\r\n\r\n    for (const lang of locManager.getAllLanguages()) {\r\n      const orphansResultsForLang = lang\r\n        .getLocKeys()\r\n        .filter((key) => !knownSkinsKeys.has(key) && (key.startsWith(\"skin.\") || key.startsWith(\"skinpack.\")))\r\n        .map((orphanedKey) => `Loc Key: [${orphanedKey}] found in ${lang.language}.lang not found in skins.json`)\r\n        .map((message) => resultFromTestWithMessage(Tests.LocalizedKeyNotFoundInSkinsJson, this.id, message));\r\n\r\n      const invalidSpaceResultsForLang = lang\r\n        .getLocKeys()\r\n        .filter((key) => LeadingOrTrailingSpaceRegex.test(key))\r\n        .map(\r\n          (invalidSpacedKey) =>\r\n            `Loc string for key [${invalidSpacedKey}] in ${lang.language}.lang must not contain leading or trailing spaces.`\r\n        )\r\n        .map((message) => resultFromTestWithMessage(Tests.InvalidSpacingOnLocalizedKey, this.id, message));\r\n\r\n      localizedOrphansResults.push(...orphansResultsForLang);\r\n      invalidSpaceResults.push(...invalidSpaceResultsForLang);\r\n    }\r\n\r\n    return [...orphanLocKeyResults, ...localizedOrphansResults, ...invalidSpaceResults];\r\n  }\r\n}\r\n\r\nfunction hasValidLocalizationNames(localizationName?: string, serializeName?: string): localizationName is string {\r\n  return !!localizationName && !!serializeName && localizationName === serializeName;\r\n}\r\n\r\nfunction hasMCOnlyProperties(skin: Skin) {\r\n  return !!skin.animations || !!skin.enable_attachables;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\nimport axios from \"axios\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { JSONSchema7, validate } from \"json-schema\";\r\n\r\nconst JsonSchemaErrorBase = 100;\r\nconst NotCurrentFormatVersionBase = 1100;\r\n\r\nexport enum CommunitySchemaItemInfoGeneratorTest {\r\n  couldNotParseJson = 1,\r\n}\r\n\r\n/**\r\n * Validates JSON files against JSON schema definitions.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/comjson.form.json} for topic definitions\r\n */\r\nexport default class CommunitySchemaItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"COMJSON\";\r\n  title = \"Community JSON Schema Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  _schemaContentByPath: { [id: string]: object } = {};\r\n\r\n  constructor() {\r\n    this.loadSchema = this.loadSchema.bind(this);\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async loadSchema(uri: string) {\r\n    const res = await axios.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + uri);\r\n    return res.data;\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.primaryFile &&\r\n      projectItem.primaryFile.content &&\r\n      typeof projectItem.primaryFile.content === \"string\"\r\n    ) {\r\n      const schemaPath = projectItem.getCommunitySchemaPath();\r\n\r\n      if (schemaPath) {\r\n        let verIsCurrent = await MinecraftDefinitions.formatVersionIsCurrent(projectItem);\r\n\r\n        if (verIsCurrent) {\r\n          let schemaContents: JSONSchema7 | undefined = this._schemaContentByPath[schemaPath] as\r\n            | JSONSchema7\r\n            | undefined;\r\n\r\n          if (!schemaContents) {\r\n            schemaContents = await Database.getCommunitySchema(schemaPath);\r\n\r\n            if (schemaContents) {\r\n              this._schemaContentByPath[schemaPath] = schemaContents;\r\n            }\r\n          }\r\n\r\n          if (schemaContents) {\r\n            let content = projectItem.primaryFile.content;\r\n            let contentObj = undefined;\r\n\r\n            content = Utilities.fixJsonContent(content);\r\n\r\n            try {\r\n              contentObj = JSON.parse(content);\r\n              const results = validate(contentObj, schemaContents);\r\n\r\n              for (const err of results.errors) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    JsonSchemaErrorBase + projectItem.itemType,\r\n                    `JSON structure error`,\r\n                    projectItem,\r\n                    `(${err.property}) ${err.message}`\r\n                  )\r\n                );\r\n              }\r\n            } catch (e: any) {\r\n              let errorMess: any = e;\r\n\r\n              if (e.message) {\r\n                errorMess = e.message;\r\n              }\r\n\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  CommunitySchemaItemInfoGeneratorTest.couldNotParseJson,\r\n                  \"Could not parse JSON - \" + errorMess,\r\n                  projectItem\r\n                )\r\n              );\r\n            }\r\n\r\n            if (contentObj) {\r\n            }\r\n          }\r\n        } else {\r\n          let fvStr = \"\";\r\n\r\n          const fv = await MinecraftDefinitions.getFormatVersion(projectItem);\r\n\r\n          if (fv) {\r\n            fvStr = \" (is at \" + fv.join(\".\") + \")\";\r\n          }\r\n\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              NotCurrentFormatVersionBase + projectItem.itemType,\r\n              ProjectItemUtilities.getDescriptionForType(projectItem.itemType) +\r\n                \" is not at a current format version\" +\r\n                fvStr,\r\n              projectItem\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\n\r\nimport axios from \"axios\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { JSONSchema7, validate } from \"json-schema\";\r\n\r\nconst JsonSchemaErrorBase = 100;\r\nconst NotCurrentFormatVersionBase = 1100;\r\n\r\nexport enum JsonSchemaItemInfoGeneratorTest {\r\n  couldNotParseJson = 1,\r\n}\r\n\r\n/**\r\n * Validates JSON files against official JSON schema definitions at public/schemas.\r\n *\r\n * @see {@link ../../public/data/forms/mctoolsval/json.form.json} for topic definitions\r\n */\r\nexport default class JsonSchemaItemInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"JSON\";\r\n  title = \"JSON Schema Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  constructor() {\r\n    this.loadSchema = this.loadSchema.bind(this);\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {}\r\n\r\n  async loadSchema(uri: string) {\r\n    const res = await axios.get(Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) + uri);\r\n    return res.data;\r\n  }\r\n\r\n  async generate(projectItem: ProjectItem, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.primaryFile &&\r\n      projectItem.primaryFile.content &&\r\n      typeof projectItem.primaryFile.content === \"string\"\r\n    ) {\r\n      const schemaPath = projectItem.getOfficialSchemaPath();\r\n\r\n      if (schemaPath) {\r\n        let verIsCurrent = await MinecraftDefinitions.formatVersionIsCurrent(projectItem);\r\n\r\n        if (verIsCurrent) {\r\n          let schemaContents: JSONSchema7 | undefined = (await Database.getOfficialSchema(schemaPath)) as\r\n            | JSONSchema7\r\n            | undefined;\r\n\r\n          if (schemaContents) {\r\n            let content = projectItem.primaryFile.content;\r\n            let contentObj: any = undefined;\r\n\r\n            content = Utilities.fixJsonContent(content);\r\n\r\n            try {\r\n              contentObj = JSON.parse(content);\r\n              const results = validate(contentObj, schemaContents);\r\n\r\n              for (const err of results.errors) {\r\n                let errorTitle = `JSON structure error`;\r\n                let errorDetail = `(${err.property}) ${err.message}`;\r\n\r\n                // Sanitize [object Object] from error messages - the jsonschema library\r\n                // bakes toString() of object values into the message. Resolve the actual value\r\n                // from contentObj using the property path and show a truncated JSON representation.\r\n                const errMessage = err.message\r\n                  ? err.message.replace(/\\[object Object\\]/g, () => {\r\n                      try {\r\n                        // Resolve the value from the parsed content using the error's property path.\r\n                        // Paths look like \"minecraft:spawn_rules.conditions[0]\"\r\n                        let resolved: any = contentObj;\r\n                        if (err.property) {\r\n                          const parts = err.property.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\r\n                          for (const part of parts) {\r\n                            if (resolved == null) break;\r\n                            resolved = resolved[part];\r\n                          }\r\n                        }\r\n                        if (resolved !== undefined && resolved !== null && typeof resolved === \"object\") {\r\n                          const json = JSON.stringify(resolved);\r\n                          return json.length > 30 ? json.substring(0, 30) + \"...\" : json;\r\n                        }\r\n                        return \"(object)\";\r\n                      } catch {\r\n                        return \"(object)\";\r\n                      }\r\n                    })\r\n                  : \"\";\r\n\r\n                // Minecraft format_version fields may legitimately be either a three-number\r\n                // array (e.g., [1,0,0]) OR a string (e.g., \"1.0.2\") - both forms are valid\r\n                // across current Bedrock content. The schema validator can flag one form\r\n                // as a type mismatch against the other, producing a false-positive warning\r\n                // that we suppress below. Only the array-vs-string mismatch is suppressed;\r\n                // genuinely unexpected types (number, boolean, object, ...) still produce a\r\n                // clear \"stringified or array form expected\" warning so the creator knows.\r\n                const propForCheck = err.property ? err.property.replace(\"instance.\", \"\") : \"\";\r\n                const isFormatVersionProperty =\r\n                  propForCheck === \"format_version\" || propForCheck.endsWith(\".format_version\");\r\n                const isTypeMismatch = !!errMessage && errMessage.includes(\"is not of a type\");\r\n\r\n                if (isFormatVersionProperty && isTypeMismatch) {\r\n                  // Resolve the actual value of format_version so we can decide whether the\r\n                  // type-mismatch is a benign array<->string mix or a genuinely wrong type.\r\n                  // Use the stripped property path (without \"instance.\" prefix) so the\r\n                  // walk actually finds the value in `contentObj` \u2014 otherwise resolution\r\n                  // always fails and every format_version produces a false-positive\r\n                  // \"Version format needs updating\" warning.\r\n                  let formatVersionValue: any = undefined;\r\n                  try {\r\n                    let resolved: any = contentObj;\r\n                    if (propForCheck) {\r\n                      const parts = propForCheck.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\r\n                      for (const part of parts) {\r\n                        if (resolved == null) break;\r\n                        resolved = resolved[part];\r\n                      }\r\n                    }\r\n                    formatVersionValue = resolved;\r\n                  } catch {\r\n                    // ignore - fall through to schema error reporting\r\n                  }\r\n\r\n                  const isStringForm = typeof formatVersionValue === \"string\";\r\n                  const isArrayForm =\r\n                    Array.isArray(formatVersionValue) &&\r\n                    formatVersionValue.every((v) => typeof v === \"number\");\r\n\r\n                  if (isStringForm || isArrayForm) {\r\n                    // Both array and string forms are acceptable for format_version - skip.\r\n                    continue;\r\n                  }\r\n\r\n                  // Truly unexpected type (number, boolean, object, null, ...). Surface a\r\n                  // targeted warning instead of the generic \"is not of a type\" message.\r\n                  items.push(\r\n                    new ProjectInfoItem(\r\n                      InfoItemType.warning,\r\n                      this.id,\r\n                      JsonSchemaErrorBase + projectItem.itemType,\r\n                      `Version format needs updating`,\r\n                      projectItem,\r\n                      `The \"format_version\" value should be a version string (e.g. \"1.21.0\") or a three-number array (e.g. [1, 21, 0]).`\r\n                    )\r\n                  );\r\n                  continue;\r\n                }\r\n\r\n                if (\r\n                  err.property &&\r\n                  err.property.includes(\"version\") &&\r\n                  errMessage &&\r\n                  errMessage.includes(\"object value found\") &&\r\n                  errMessage.includes(\"string is required\")\r\n                ) {\r\n                  // Bedrock manifest \"version\" fields (header.version, header.min_engine_version,\r\n                  // modules[].version, dependencies[].version) accept BOTH a three-number array\r\n                  // (e.g. [1, 4, 12]) and a three-number triplet string (e.g. \"1.4.12\") \u2014 but the\r\n                  // accepted form depends on the manifest's top-level `format_version`:\r\n                  //\r\n                  //   format_version 1 / 2  \u2192 array form is the canonical/required form.\r\n                  //                           String form is invalid; fail loudly.\r\n                  //   format_version 3+     \u2192 string form \"1.4.12\" is the modern/recommended form.\r\n                  //                           Array form still works but the schema flags it; we\r\n                  //                           emit a recommendation (not a misleading \"wrong type\").\r\n                  //\r\n                  // Resolve the value AND the manifest's top-level format_version, then decide.\r\n                  let versionValue: any = undefined;\r\n                  try {\r\n                    let resolved: any = contentObj;\r\n                    if (err.property) {\r\n                      const parts = err.property.replace(\"instance.\", \"\").replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\r\n                      for (const part of parts) {\r\n                        if (resolved == null || part === \"\") break;\r\n                        resolved = resolved[part];\r\n                      }\r\n                    }\r\n                    versionValue = resolved;\r\n                  } catch {\r\n                    // ignore - fall through to generic structure issue handling\r\n                  }\r\n\r\n                  const isStringForm = typeof versionValue === \"string\";\r\n                  const isThreeNumberArray =\r\n                    Array.isArray(versionValue) &&\r\n                    versionValue.length === 3 &&\r\n                    versionValue.every((v) => typeof v === \"number\");\r\n\r\n                  // Top-level manifest format_version (NOT to be confused with header.version).\r\n                  // When non-numeric or absent, treat as legacy (1/2) to keep the conservative path.\r\n                  const manifestFormatVersion =\r\n                    typeof contentObj?.format_version === \"number\" ? contentObj.format_version : undefined;\r\n\r\n                  if (manifestFormatVersion !== undefined && manifestFormatVersion >= 3) {\r\n                    // Modern manifest: string form is recommended.\r\n                    if (isStringForm) {\r\n                      // Already in modern form \u2014 fully correct, suppress.\r\n                      continue;\r\n                    }\r\n                    if (isThreeNumberArray) {\r\n                      // Valid legacy form on a modern manifest \u2014 emit a RECOMMENDATION (not error)\r\n                      // to upgrade. This is safe to follow and matches the manifest spec.\r\n                      const propPath = err.property.replace(\"instance.\", \"\");\r\n                      const recommended = `\"${versionValue[0]}.${versionValue[1]}.${versionValue[2]}\"`;\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.recommendation,\r\n                          this.id,\r\n                          JsonSchemaErrorBase + projectItem.itemType,\r\n                          `Version can be upgraded to string form`,\r\n                          projectItem,\r\n                          `In manifest format_version ${manifestFormatVersion}, \"${propPath}\" can be expressed as the string ${recommended} instead of the array [${versionValue.join(\", \")}]. Both work, but the string form is the modern convention.`\r\n                        )\r\n                      );\r\n                      continue;\r\n                    }\r\n                  } else {\r\n                    // Legacy manifest (format_version 1/2): array form is required.\r\n                    if (isThreeNumberArray) {\r\n                      // Correct \u2014 suppress the false-positive schema warning.\r\n                      continue;\r\n                    }\r\n                    if (isStringForm) {\r\n                      // Genuinely wrong: legacy manifest with a string version. Tell the truth.\r\n                      const propPath = err.property.replace(\"instance.\", \"\");\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.warning,\r\n                          this.id,\r\n                          JsonSchemaErrorBase + projectItem.itemType,\r\n                          `Version format incompatible with manifest format_version`,\r\n                          projectItem,\r\n                          `Manifest format_version ${manifestFormatVersion ?? \"(unset)\"} requires \"${propPath}\" to be an array like [1, 0, 0], not the string \"${versionValue}\". Either change the value to the array form OR upgrade the top-level \"format_version\" to 3 to use the string form.`\r\n                        )\r\n                      );\r\n                      continue;\r\n                    }\r\n                  }\r\n\r\n                  // Truly unexpected type (object, boolean, null, etc.). Surface a non-misleading\r\n                  // warning that does NOT push the user toward the wrong form.\r\n                  errorTitle = `Version format unrecognized`;\r\n                  errorDetail = `The \"${err.property.replace(\"instance.\", \"\")}\" value is not in a recognized format. Use a three-number array like [1, 0, 0] (manifest format_version 1/2) or a three-number string like \"1.0.0\" (manifest format_version 3+).`;\r\n                } else if (errMessage && errMessage.includes(\"is not one of enum values\")) {\r\n                  // Make enum errors friendlier\r\n                  const propName = err.property ? err.property.replace(\"instance.\", \"\") : \"a field\";\r\n                  errorTitle = `Invalid value`;\r\n                  errorDetail = `The value for \"${propName}\" isn't recognized. Check for typos or see the documentation for valid options.`;\r\n                } else if (errMessage && errMessage.includes(\"requires property\")) {\r\n                  // Make required property errors friendlier\r\n                  const match = errMessage.match(/requires property \"([^\"]+)\"/);\r\n                  const missingProp = match ? match[1] : \"a required field\";\r\n                  errorTitle = `Missing required field`;\r\n                  errorDetail = `This item is missing the \"${missingProp}\" field, which is needed for it to work properly.`;\r\n                } else if (errMessage && errMessage.includes(\"is not of a type\")) {\r\n                  // Make type mismatch errors friendlier\r\n                  const propName = err.property ? err.property.replace(\"instance.\", \"\") : \"a field\";\r\n                  errorTitle = `Wrong value type`;\r\n                  errorDetail = `The value for \"${propName}\" is the wrong type. ${errMessage.includes(\"string\") ? \"It should be text.\" : errMessage.includes(\"number\") ? \"It should be a number.\" : errMessage.includes(\"boolean\") ? \"It should be true or false.\" : \"Check the expected format.\"}`;\r\n                } else {\r\n                  // General case - still improve the property path display\r\n                  const propName = err.property ? err.property.replace(\"instance.\", \"\") : \"\";\r\n                  errorTitle = `Structure issue`;\r\n                  errorDetail = propName ? `In \"${propName}\": ${errMessage}` : errMessage || \"Unexpected structure\";\r\n                }\r\n\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    JsonSchemaErrorBase + projectItem.itemType,\r\n                    errorTitle,\r\n                    projectItem,\r\n                    errorDetail\r\n                  )\r\n                );\r\n              }\r\n            } catch (e: any) {\r\n              let errorMess: any = e;\r\n\r\n              if (e.message) {\r\n                errorMess = e.message;\r\n              }\r\n\r\n              items.push(\r\n                new ProjectInfoItem(\r\n                  InfoItemType.error,\r\n                  this.id,\r\n                  JsonSchemaItemInfoGeneratorTest.couldNotParseJson,\r\n                  \"This file has a syntax error and can't be read as JSON. Check for missing commas, brackets, or quotes. Details: \" +\r\n                    errorMess,\r\n                  projectItem\r\n                )\r\n              );\r\n            }\r\n\r\n            if (contentObj) {\r\n            }\r\n          }\r\n        } else {\r\n          let fvStr = \"\";\r\n\r\n          const fv = await MinecraftDefinitions.getFormatVersion(projectItem);\r\n\r\n          if (fv) {\r\n            fvStr = \" (is at \" + fv.join(\".\") + \")\";\r\n          }\r\n\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.info,\r\n              this.id,\r\n              NotCurrentFormatVersionBase + projectItem.itemType,\r\n              ProjectItemUtilities.getDescriptionForType(projectItem.itemType) +\r\n                \" is not at a current format version\" +\r\n                fvStr,\r\n              projectItem\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "import { PackType } from \"../../../minecraft/Pack\";\r\n\r\nexport type PackageType = PackType | \"WorldTemplate\";\r\n\r\nconst SharedBPRPExtensions = [\r\n  \".json\",\r\n  \".txt\",\r\n  \".lang\",\r\n  \".material\",\r\n  \".mcfunction\",\r\n  \".nbt\",\r\n  \".png\",\r\n  \".tga\",\r\n  \".jpg\",\r\n  \".jpeg\",\r\n  \".hdr\",\r\n  \".wav\",\r\n  \".ogg\",\r\n  \".fsb\",\r\n  \".mcstructure\",\r\n] as const;\r\n\r\nexport const AllowedExtensionsByType: Record<PackageType, Set<string> | \"*\"> = {\r\n  [PackType.resource]: new Set([...SharedBPRPExtensions]),\r\n  [PackType.behavior]: new Set([...SharedBPRPExtensions, \".js\", \".ts\"]),\r\n  [PackType.skin]: new Set([\".json\", \".lang\", \".png\", \".tga\", \".jpg\", \".jpeg\", \".mcstructure\"]),\r\n  [PackType.persona]: new Set([\".json\", \".lang\", \".png\", \".tga\", \".mcstructure\"]),\r\n  [PackType.design]: \"*\",\r\n  WorldTemplate: \"*\",\r\n} as const;\r\n\r\nconst SharedBPRPBlockedFiles = [\r\n  \"font/emoticons.json\",\r\n  \"credits/end.txt\",\r\n  \"items_client.json\",\r\n  \"items_offsets_clients.json\",\r\n  \"texts/languages_names.json\",\r\n  \"/shaders\",\r\n  \"ui/mcoin.png\",\r\n] as const;\r\n\r\n/* \r\n  In theory you would want to exclude these when handling \"SystemResourcePacks\"\r\n  but that seems to be more of a marketplace concept that isn't handled in mctools\r\n*/\r\nconst NonSystemResourceBlockedFiles = [\"Contents.json\"];\r\n\r\nexport const BlockedFilesByType: Record<PackageType, Set<string>> = {\r\n  [PackType.resource]: new Set([...SharedBPRPBlockedFiles, ...NonSystemResourceBlockedFiles]),\r\n  [PackType.behavior]: new Set([...SharedBPRPBlockedFiles, ...NonSystemResourceBlockedFiles]),\r\n  [PackType.skin]: new Set([\"ui/mcoin.png\", \"/contents.json\"]),\r\n  [PackType.persona]: new Set([]),\r\n  [PackType.design]: new Set([]),\r\n  WorldTemplate: new Set([\"ui/mcoin.png\", \"/contents.json\"]),\r\n} as const;\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\nimport { getWorldTemplates } from \"../../app/ProjectItemUtilities\";\r\nimport { AllowedExtensionsByType, BlockedFilesByType, PackageType } from \"./data/ForbiddenFiles\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nenum ForbiddenTest {\r\n  FailedToReadFile = \"FailedToReadFile\",\r\n  ExtNotInAllowList = \"ExtNotInAllowList\",\r\n  InvalidFileName = \"InvalidFileName\",\r\n  ContainsInvalidCharacter = \"ContainsInvalidCharacter\",\r\n}\r\n\r\nconst ForbiddenTests: Record<ForbiddenTest, TestDefinition> = {\r\n  FailedToReadFile: { id: 101, title: \"Failed To Read File\" },\r\n  ExtNotInAllowList: { id: 102, title: \"File Does Not Have Allowed Extension\" },\r\n  InvalidFileName: { id: 103, title: \"File Name Is Blocked\" },\r\n  ContainsInvalidCharacter: { id: 104, title: \"File Name Contains Invalid Character\" },\r\n} as const;\r\n\r\n/**\r\n * Validates files against forbidden file lists and allowed extensions.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/forbfile.form.json} for topic definitions\r\n */\r\nexport default class CheckForbiddenFilesGenerator implements IProjectInfoGenerator {\r\n  id: string = \"FORBFILE\";\r\n  title: string = \"Forbidden Files\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const packs = project.packs.map((pack) => [pack.getPackItems(), pack.packType] as const);\r\n    const templates = getWorldTemplates(project.items).map((template) => [template.items, \"WorldTemplate\"] as const);\r\n\r\n    const packages = [...packs, ...templates];\r\n\r\n    const results = await Promise.all(packages.map(([items, type]) => this.validateItemPackage(items, type)));\r\n\r\n    return results.flat();\r\n  }\r\n\r\n  private async validateItemPackage(items: readonly ProjectItem[], type: PackageType): Promise<ProjectInfoItem[]> {\r\n    // I'm avoiding reading (\"ensuring\") the whole file, we just need the path, we do need to extract the extension though\r\n    const files = items.map((item) => [item, \".\" + StorageUtilities.getTypeFromName(item.name)] as const);\r\n    const fileResults = files.flatMap(([item, ext]) => this.resultsForFile(type, item, ext));\r\n\r\n    return fileResults;\r\n  }\r\n\r\n  private resultsForFile(type: PackageType, item: ProjectItem, ext: string) {\r\n    const results = [];\r\n\r\n    const allowedExts = AllowedExtensionsByType[type];\r\n    const isFolder = item.projectPath?.endsWith(\"/\");\r\n    if (!isFolder && allowedExts !== \"*\" && !allowedExts.has(ext)) {\r\n      results.push(resultFromTest(ForbiddenTests.ExtNotInAllowList, { id: this.id, item, data: ext }));\r\n    }\r\n\r\n    if (BlockedFilesByType[type].has(item.name)) {\r\n      results.push(resultFromTest(ForbiddenTests.InvalidFileName, { id: this.id, item }));\r\n    }\r\n\r\n    if (item.projectPath?.includes(\"$\")) {\r\n      results.push(resultFromTest(ForbiddenTests.ContainsInvalidCharacter, { id: this.id, item }));\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\n\r\nconst MaxOrphanFileResults = 5;\r\n\r\nenum CheckIntegrityTest {\r\n  OrphanedFile = \"OrphanedFile\",\r\n  UnexpectedManifest = \"UnexpectedManifest\",\r\n}\r\n\r\nconst CheckIntegrityTests: Record<CheckIntegrityTest, TestDefinition> = {\r\n  OrphanedFile: {\r\n    id: 101,\r\n    title: \"Extraneous Files Or Folder\",\r\n    defaultMessage: \"Project contains extraneous file or folder\",\r\n  },\r\n  UnexpectedManifest: {\r\n    id: 102,\r\n    title: \"Unexpected Manifest Structure\",\r\n    defaultMessage: \"Pack has an unexpected structure, multiple manifests detected. Nested manifests are not allowed.\",\r\n  },\r\n};\r\n\r\n/**\r\n * Validates project structure integrity including orphaned files and nested manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/prjint.form.json} for topic definitions\r\n */\r\nexport default class CheckProjectIntegrityGenerator implements IProjectInfoGenerator {\r\n  id: string = \"PRJINT\";\r\n  title: string = \"Project Integrity\";\r\n  canAlwaysProcess = true;\r\n\r\n  generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const orphanResults = this.checkOrphanedFiles(project);\r\n    const manifestResults = this.checkNestedManifests(project);\r\n\r\n    const results = [...orphanResults, ...manifestResults];\r\n    return Promise.resolve(results);\r\n  }\r\n\r\n  private checkOrphanedFiles(project: Project) {\r\n    //limit items to avoid spam, then get results\r\n    const results = project.unknownFiles\r\n      .slice(0, MaxOrphanFileResults)\r\n      .map((file) => resultFromTest(CheckIntegrityTests.OrphanedFile, { id: this.id, data: file.extendedPath }));\r\n\r\n    return results;\r\n  }\r\n\r\n  private checkNestedManifests(project: Project): ProjectInfoItem[] {\r\n    const results = project.packs\r\n      // get all manifests within each pack\r\n      .map((pack) => [pack, pack.getPackItems().filter((item) => item.name === \"manifest.json\")] as const)\r\n      // more than one manifest indicates an issue\r\n      .filter(([_pack, manifests]) => manifests.length > 1)\r\n      // get results\r\n      .map(([pack]) => resultFromTest(CheckIntegrityTests.UnexpectedManifest, { id: this.id, data: pack.name }));\r\n\r\n    return results;\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/****\r\n *\r\n * separates an single array into an array of successes and an array of fails\r\n * success is based on the truthiness of an predicate function\r\n *\r\n * successes are the first value of the return tuple\r\n *****/\r\nexport function filterAndSeparate<TItem>(items: TItem[], predicate: (item: TItem) => boolean) {\r\n  const truthy: TItem[] = [];\r\n  const falsey: TItem[] = [];\r\n\r\n  for (const item of items) {\r\n    if (predicate(item)) {\r\n      truthy.push(item);\r\n    } else {\r\n      falsey.push(item);\r\n    }\r\n  }\r\n\r\n  return [truthy, falsey] as const;\r\n}\r\n\r\n/*\r\n  from an array of items, returns of all duplicates found\r\n*/\r\nexport function findDuplicates<TItem>(items: TItem[]) {\r\n  return items.filter((item, index) => items.indexOf(item) !== index);\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { tryEnsureFiles } from \"../../app/ProjectItemUtilities\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\nimport { filterAndSeparate } from \"../../core/ArrayUtilities\";\r\n\r\nenum CheckBetaTest {\r\n  UsingBetaFeatures = \"UsingBetaFeatures\",\r\n  FailedToParseJson = \"FailedToParseJson\",\r\n  FailedToReadFile = \"FailedToReadFile\",\r\n}\r\n\r\nconst CheckBetaTests: Record<CheckBetaTest, TestDefinition> = {\r\n  FailedToReadFile: { id: 101, title: \"Failed to read file\" },\r\n  FailedToParseJson: { id: 102, title: \"Failed to parse Json\", defaultMessage: \"Failed to parse json in file\" },\r\n  UsingBetaFeatures: { id: 103, title: \"Using beta features flag in custom definitions is not allowed\" },\r\n};\r\n\r\nconst JsonTypesToRead = new Set([\r\n  ProjectItemType.behaviorPackManifestJson,\r\n  ProjectItemType.entityTypeBehavior,\r\n  ProjectItemType.blockTypeBehavior,\r\n  ProjectItemType.itemTypeBehavior,\r\n]);\r\n\r\n/**\r\n * Validates that beta features flags are not used in custom definitions.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/cbfg.form.json} for topic definitions\r\n */\r\nexport default class CheckBetaFeaturesGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CBFG\";\r\n  title: string = \"Beta Features\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items = project.getItemsCopy();\r\n\r\n    const [readJsonItems, failedItems] = await tryEnsureFiles(items, (item) => JsonTypesToRead.has(item.itemType));\r\n\r\n    const failedReadResults = failedItems.map((item) =>\r\n      resultFromTest(CheckBetaTests.FailedToReadFile, { id: this.id, item })\r\n    );\r\n\r\n    const jsonObjects = await Promise.all(\r\n      readJsonItems.map(\r\n        async (item) => [item, item.primaryFile && (await StorageUtilities.getJsonObject(item.primaryFile))] as const\r\n      )\r\n    );\r\n\r\n    const [parsedJson, failedToParse] = filterAndSeparate(jsonObjects, ([_item, json]) => !!json);\r\n\r\n    const jsonParseResults = failedToParse\r\n      .map(([item]) => ({ id: this.id, item, data: item.primaryFile?.name }))\r\n      .map((testData) => resultFromTest(CheckBetaTests.FailedToParseJson, testData));\r\n\r\n    const useBetaResults = parsedJson\r\n      .filter(([, json]) => json.use_beta_features === true)\r\n      .map(([item]) => resultFromTest(CheckBetaTests.UsingBetaFeatures, { id: this.id, item }));\r\n\r\n    return [...failedReadResults, ...jsonParseResults, ...useBetaResults];\r\n  }\r\n\r\n  summarize(): void {}\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Project from \"../../app/Project\";\r\nimport MCWorld from \"../../minecraft/MCWorld\";\r\nimport WorldLevelDat from \"../../minecraft/WorldLevelDat\";\r\n\r\nexport enum CheckExperimentalFlagInfoGeneratorTest {\r\n  flagIsOrWasTrue = 101,\r\n  levelDatNotFound = 102,\r\n  worldNotFound = 103,\r\n}\r\n\r\n/***********\r\n * Generator for Checking Experimental Flag for world\r\n *\r\n * Will ensure:\r\n *  * experimental flag is false and has always been false or null\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/expflag.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckExperimentalFlagInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"EXPFLAG\";\r\n  title = \"Experimental Flags\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.experimentalFlagIsOrWasTrue = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckExperimentalFlagInfoGeneratorTest.flagIsOrWasTrue\r\n    );\r\n    info.levelDatNotFound = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckExperimentalFlagInfoGeneratorTest.levelDatNotFound\r\n    );\r\n    info.worldNotFound = infoSet.getSummedDataValue(this.id, CheckExperimentalFlagInfoGeneratorTest.worldNotFound);\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      if (\r\n        item.itemType !== ProjectItemType.MCWorld &&\r\n        item.itemType !== ProjectItemType.MCTemplate &&\r\n        item.itemType !== ProjectItemType.worldFolder &&\r\n        item.itemType !== ProjectItemType.levelDat &&\r\n        item.itemType !== ProjectItemType.levelDatOld\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      let levelDat = undefined;\r\n\r\n      if (\r\n        item.itemType === ProjectItemType.MCWorld ||\r\n        item.itemType === ProjectItemType.MCTemplate ||\r\n        item.itemType === ProjectItemType.worldFolder\r\n      ) {\r\n        const mcworld = await MCWorld.ensureOnItem(item);\r\n\r\n        if (!mcworld) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckExperimentalFlagInfoGeneratorTest.worldNotFound,\r\n              \"Could not load world.\",\r\n              item\r\n            )\r\n          );\r\n          continue;\r\n        }\r\n\r\n        await mcworld.loadMetaFiles();\r\n\r\n        if (!mcworld.levelData) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckExperimentalFlagInfoGeneratorTest.levelDatNotFound,\r\n              \"Level.dat not found in a broader world file.\",\r\n              item\r\n            )\r\n          );\r\n          continue;\r\n        }\r\n\r\n        levelDat = mcworld.levelData;\r\n      } else if (item.itemType === ProjectItemType.levelDat || item.itemType === ProjectItemType.levelDatOld) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (item.primaryFile && item.primaryFile.content && item.primaryFile.content instanceof Uint8Array) {\r\n          levelDat = new WorldLevelDat();\r\n          levelDat.loadFromNbtBytes(item.primaryFile.content);\r\n        }\r\n      }\r\n\r\n      if (levelDat && (levelDat.experimentalGameplay === true || levelDat.experimentsEverUsed === true)) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.warning,\r\n            this.id,\r\n            CheckExperimentalFlagInfoGeneratorTest.flagIsOrWasTrue,\r\n            \"Experimental gameplay is or was enabled in this world. Shareable content should not use experimental features.\",\r\n            item\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport Project from \"../../app/Project\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nexport enum CheckFeatureDeprecationInfoGeneratorTest {\r\n  deprecatedBlockOverride = 101,\r\n  deprecatedTerrainTexture = 102,\r\n  deprecatedTexture = 103,\r\n  jsonParseError = 104,\r\n}\r\n\r\nconst DEPRECATED_BLOCKS = [\"fletching_table\", \"smithing_table\"];\r\n\r\nconst DEPRECATED_TEXTURES = [\r\n  \"smithing_table_top.png\",\r\n  \"smithing_table_side1.png\",\r\n  \"smithing_table_side2.png\",\r\n  \"fletcher_table_top.png\",\r\n  \"fletcher_table_side1.png\",\r\n  \"fletcher_table_side2.png\",\r\n];\r\n\r\nconst DEPRECATED_TEXTURE_ENTRIES = [\r\n  \"smithing_table_top\",\r\n  \"smithing_table_side_a\",\r\n  \"smithing_table_side_b\",\r\n  \"fletching_table_top\",\r\n  \"fletching_table_side1\",\r\n  \"fletching_table_side2\",\r\n];\r\n\r\n/***********\r\n * Generator for Checking Feature Deprecation\r\n *\r\n * Will check:\r\n *  * blocks.json for deprecated block overrides (fletching_table, smithing_table)\r\n *  * terrain_texture.json for deprecated texture entries\r\n *  * textures/blocks/ folder for deprecated textures\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/checkfeaturedeprecation.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckFeatureDeprecationInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"CHECKFEATUREDEPRECATION\";\r\n  title = \"Feature Deprecation\";\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.deprecatedBlockOverride = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckFeatureDeprecationInfoGeneratorTest.deprecatedBlockOverride\r\n    );\r\n\r\n    info.deprecatedTerrainTexture = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckFeatureDeprecationInfoGeneratorTest.deprecatedTerrainTexture\r\n    );\r\n\r\n    info.deprecatedTexture = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckFeatureDeprecationInfoGeneratorTest.deprecatedTexture\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n\r\n    for (const item of projItems) {\r\n      if (item.name === \"blocks.json\") {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (!item.primaryFile) {\r\n          continue;\r\n        }\r\n\r\n        if (!item.primaryFile.isContentLoaded) {\r\n          await item.primaryFile.loadContent();\r\n        }\r\n\r\n        const content = item.primaryFile.content;\r\n        if (!content || typeof content !== \"string\") {\r\n          continue;\r\n        }\r\n\r\n        try {\r\n          const parsedContent = StorageUtilities.getJsonObject(item.primaryFile);\r\n          if (parsedContent) {\r\n            for (const deprecatedBlock of DEPRECATED_BLOCKS) {\r\n              if (parsedContent[deprecatedBlock]) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    CheckFeatureDeprecationInfoGeneratorTest.deprecatedBlockOverride,\r\n                    `Entity [${deprecatedBlock}] will be affected in an upcoming client update.`,\r\n                    item,\r\n                    deprecatedBlock\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        } catch (error) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckFeatureDeprecationInfoGeneratorTest.jsonParseError,\r\n              `Failed to parse JSON for entity. Error: ${error}`,\r\n              item\r\n            )\r\n          );\r\n        }\r\n      }\r\n\r\n      if (item.name === \"terrain_texture.json\") {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (!item.primaryFile) {\r\n          continue;\r\n        }\r\n\r\n        if (!item.primaryFile.isContentLoaded) {\r\n          await item.primaryFile.loadContent();\r\n        }\r\n\r\n        const content = item.primaryFile.content;\r\n        if (!content || typeof content !== \"string\") {\r\n          continue;\r\n        }\r\n\r\n        const parsedContent = StorageUtilities.getJsonObject(item.primaryFile);\r\n        try {\r\n          if (parsedContent) {\r\n            for (const deprecatedTexture of DEPRECATED_TEXTURE_ENTRIES) {\r\n              if (parsedContent.texture_data[deprecatedTexture]) {\r\n                items.push(\r\n                  new ProjectInfoItem(\r\n                    InfoItemType.warning,\r\n                    this.id,\r\n                    CheckFeatureDeprecationInfoGeneratorTest.deprecatedTerrainTexture,\r\n                    `Entity [${deprecatedTexture}] will be affected in an upcoming client update.`,\r\n                    item,\r\n                    deprecatedTexture\r\n                  )\r\n                );\r\n              }\r\n            }\r\n          }\r\n        } catch (error) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckFeatureDeprecationInfoGeneratorTest.jsonParseError,\r\n              `Failed to parse JSON for entity. Error: ${error}`,\r\n              item\r\n            )\r\n          );\r\n        }\r\n      }\r\n\r\n      if (item.getFolder()?.name === \"blocks\") {\r\n        if (DEPRECATED_TEXTURES.includes(item.name)) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CheckFeatureDeprecationInfoGeneratorTest.deprecatedTexture,\r\n              `Texture [${item.name}] will be affected in an upcoming client update. Please resubmit with no modifications to this texture.`,\r\n              item,\r\n              item.name\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport Project from \"../../app/Project\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport { IGeometry } from \"../../minecraft/IModelGeometry\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\n\r\nexport enum CheckGeometryFormatInfoGeneratorTest {\r\n  restrictedPolyMeshFound = 101,\r\n  jsonParseError = 102,\r\n}\r\n\r\n/***********\r\n * Generator for Checking Geometry Format\r\n *\r\n * Will check:\r\n *  * models folder JSON files for restricted \"poly_mesh\" string if project is not first party\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/geofmt.form.json} for topic definitions\r\n */\r\n\r\nexport default class CheckGeometryFormatInfoGenerator implements IProjectInfoGenerator {\r\n  id = \"GEOFMT\";\r\n  title = \"Geometry Format\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.restrictedPolyMeshFound = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckGeometryFormatInfoGeneratorTest.restrictedPolyMeshFound\r\n    );\r\n\r\n    info.jsonParseError = infoSet.getSummedDataValue(this.id, CheckGeometryFormatInfoGeneratorTest.jsonParseError);\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    // This restriction is only on content from a 3rd party. poly_mesh is restricted to first party content.\r\n    if (project.isMinecraftCreator === false) {\r\n      const projItems = project.getItemsCopy();\r\n\r\n      for (const item of projItems) {\r\n        if (item.itemType === ProjectItemType.modelGeometryJson) {\r\n          if (!item.loadContent) {\r\n            await item.loadContent();\r\n          }\r\n          if (!item.primaryFile) {\r\n            continue;\r\n          }\r\n\r\n          try {\r\n            const jsonData = StorageUtilities.getJsonObject(item.primaryFile);\r\n\r\n            if (jsonData && jsonData[\"minecraft:geometry\"]) {\r\n              const geometries: IGeometry[] = Array.isArray(jsonData[\"minecraft:geometry\"])\r\n                ? jsonData[\"minecraft:geometry\"]\r\n                : [jsonData[\"minecraft:geometry\"]];\r\n\r\n              for (const geometry of geometries) {\r\n                if (geometry && geometry.bones) {\r\n                  for (const bone of geometry.bones) {\r\n                    if (bone && bone.poly_mesh) {\r\n                      items.push(\r\n                        new ProjectInfoItem(\r\n                          InfoItemType.error,\r\n                          this.id,\r\n                          CheckGeometryFormatInfoGeneratorTest.restrictedPolyMeshFound,\r\n                          `Geometry bone \"${\r\n                            bone.name || \"unnamed\"\r\n                          }\" contains poly_mesh definition. This feature is not allowed!`,\r\n                          item,\r\n                          bone.name || \"unnamed bone\"\r\n                        )\r\n                      );\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          } catch (error) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CheckGeometryFormatInfoGeneratorTest.jsonParseError,\r\n                `Failed to parse JSON for geometry file. Error: ${error}`,\r\n                item\r\n              )\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { validateJsonAndAssert, ValidationError } from \"../../jsonschema/SchemaValidation\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport ProjectItem from \"../ProjectItem\";\r\n\r\nexport type LocalizationCatalog = {\r\n  langs: string[];\r\n};\r\n\r\nexport async function parseLocalizationCatalogFromItem(\r\n  item: ProjectItem | undefined\r\n): Promise<[null, ValidationError[]] | [LocalizationCatalog, null]> {\r\n  const file = item && (await item.loadFileContent());\r\n  const json = file && StorageUtilities.getJsonObject(file);\r\n\r\n  const [langs, errors] = validateJsonAndAssert<string[]>(json, {\r\n    type: \"array\",\r\n    items: {\r\n      type: \"string\",\r\n    },\r\n  });\r\n\r\n  if (errors) {\r\n    return [null, errors];\r\n  }\r\n\r\n  return [{ langs }, null];\r\n}\r\n", "import Project from \"../../app/Project\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport { resultFromTest, TestDefinition } from \"../tests/TestDefinition\";\r\nimport { parseLocalizationCatalogFromItem } from \"../../app/localization/LocalizationCatalog\";\r\nimport Pack from \"../../minecraft/Pack\";\r\n\r\nconst Tests: Record<string, TestDefinition> = {\r\n  MissingLanguagesJson: { id: 101, title: \"languages.json Not Found\" },\r\n  PrimaryLangMissing: { id: 102, title: \"en_US lang code is required.\" },\r\n  FailedToParseFile: { id: 103, title: \"Failed To Parse File\" },\r\n  LangFileMissing: {\r\n    id: 104,\r\n    title: \"Lang File Missing\",\r\n    defaultMessage: \"All entries in languages.json must have corresponding .lang file.\",\r\n  },\r\n  ExtraLangFile: {\r\n    id: 105,\r\n    title: \"Lang File Without Catalog Entry\",\r\n    defaultMessage: \".lang file exists in pack but its lang code is not referenced in languages.json\",\r\n  },\r\n};\r\n\r\n/*\r\n  Checks languages.json and the various .lang files in a pack to ensure that they match\r\n\r\n  For each language in languages.json there should be a corresponding .lang file,\r\n  and each .lang file should have a corresponding entry in languages.json\r\n\r\n  There should always be en_US\r\n\r\n  @see {@link ../../../public/data/forms/mctoolsval/langfiles.form.json} for topic definitions\r\n*/\r\nexport default class CheckLangFilesGenerator implements IProjectInfoGenerator {\r\n  id: string = \"LANGFILES\";\r\n  title: string = \"Language Files\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const results = await Promise.all(project.packs.map((pack) => this.validatePack(pack)));\r\n\r\n    return results.flat();\r\n  }\r\n\r\n  async validatePack(pack: Pack) {\r\n    const items = pack.getPackItems();\r\n    const catalogItem = items.find((item) => item.itemType === ProjectItemType.languagesCatalogJson);\r\n    const langItems = items.filter((item) => item.itemType === ProjectItemType.lang);\r\n\r\n    if (!catalogItem) {\r\n      return [resultFromTest(Tests.MissingLanguagesJson, { id: this.id })];\r\n    }\r\n\r\n    const [catalog, parseErrors] = await parseLocalizationCatalogFromItem(catalogItem);\r\n    if (parseErrors) {\r\n      return parseErrors\r\n        .map((error) => ({ id: this.id, message: error.message, item: catalogItem }))\r\n        .map((data) => resultFromTest(Tests.FailedToParseFile, data));\r\n    }\r\n\r\n    if (!catalog.langs.find((lang: string) => lang === \"en_US\")) {\r\n      return [resultFromTest(Tests.PrimaryLangMissing, { id: this.id, item: catalogItem })];\r\n    }\r\n\r\n    const allLangItems = langItems.map((item) => [item, StorageUtilities.getBaseFromName(item.name)] as const);\r\n    const knownLangFileLangs = new Set(allLangItems.map(([, lang]) => lang));\r\n    const knownCatalogLangs = new Set(catalog.langs);\r\n\r\n    const langFileNotInCatalogResults = allLangItems\r\n      .filter(([, lang]) => !knownCatalogLangs.has(lang))\r\n      .map(([item]) => resultFromTest(Tests.ExtraLangFile, { id: this.id, item }));\r\n\r\n    const catalogLangNotInFile = catalog.langs\r\n      .filter((lang: string) => !knownLangFileLangs.has(lang))\r\n      .map((lang: string) => resultFromTest(Tests.LangFileMissing, { id: this.id, data: lang, item: catalogItem }));\r\n\r\n    return [...langFileNotInCatalogResults, ...catalogLangNotInFile];\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "import { ProjectInfoSuite } from \"../IProjectInfoData\";\r\n\r\ntype SuiteConfig = {\r\n  performAddOnValidations: boolean;\r\n  performPlatformVersionValidations: boolean;\r\n  identifierOverridesAreErrors: boolean;\r\n};\r\n\r\nexport const SuiteConfigs: Record<ProjectInfoSuite, SuiteConfig> = {\r\n  [ProjectInfoSuite.cooperativeAddOn]: {\r\n    performAddOnValidations: true,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: true,\r\n  },\r\n  [ProjectInfoSuite.currentPlatformVersions]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: true,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n  [ProjectInfoSuite.sharing]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n  [ProjectInfoSuite.sharingStrict]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n  [ProjectInfoSuite.defaultInDevelopment]: {\r\n    performAddOnValidations: false,\r\n    performPlatformVersionValidations: false,\r\n    identifierOverridesAreErrors: false,\r\n  },\r\n} as const;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport SemanticVersion from \"../core/versioning/SemanticVersion\";\r\n\r\nconst Versioning = {\r\n  FirstMinEngineVersionForFormatV2: new SemanticVersion(1, 13, 0),\r\n  FirstMinEngineVersionForFormatV2EDU: new SemanticVersion(1, 15, 0),\r\n  PublishedClientVersion: new SemanticVersion(1, 16, 0),\r\n  MinimumAddOnVersion: new SemanticVersion(1, 20, 60),\r\n  PublishedClientVersionEDUv1: new SemanticVersion(1, 12, 3),\r\n  PublishedClientVersionEDU: new SemanticVersion(1, 14, 0),\r\n  PublishedClientVersionEDUR17: new SemanticVersion(1, 17, 0),\r\n  MaxClientVersion: new SemanticVersion(65535, 65535, 65535),\r\n  InitialPackVersion: new SemanticVersion(1, 0, 0),\r\n} as const;\r\n\r\nexport default Versioning;\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n  search in given object for property names, returns first property name not found, or undefined if nothing found\r\n*/\r\nexport function findMissingProperty<TObject>(obj: TObject, keys: (keyof TObject)[]): keyof TObject | undefined {\r\n  return keys.find((key) => !obj[key]);\r\n}\r\n\r\n/*\r\n  search in given object for property names, returns all property names not found\r\n*/\r\nexport function allMissingProperties<TObject>(obj: TObject, keys: (keyof TObject)[]): (keyof TObject)[] {\r\n  return keys.filter((key) => !obj[key]);\r\n}\r\n\r\n/*\r\n return true if the given value is truthey, while asserting the type\r\n can be used in filters etc to remove nulls in a way the compiler accepts\r\n*/\r\nexport function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\r\n  return !!value;\r\n}\r\n\r\n// Convert a single snake_case string to camelCase at the type level\r\ntype SnakeToCamelCase<S extends string> = S extends `${infer T}_${infer U}`\r\n  ? `${Lowercase<T>}${Capitalize<SnakeToCamelCase<U>>}`\r\n  : Lowercase<S>;\r\n\r\n/*\r\n    Converts a type to a similar type, but with snake_case property names converted to camelCase\r\n    handles primitives, nested objects, arrays, and optional arrays\r\n  */\r\nexport type CamelCase<T> = {\r\n  [K in keyof T as K extends string ? SnakeToCamelCase<K> : K]: T[K] extends Array<infer U> | undefined // optional array case\r\n    ? Array<CamelCase<U>> | undefined\r\n    : T[K] extends Array<infer U> // regular array\r\n    ? Array<CamelCase<U>>\r\n    : T[K] extends object // nested object\r\n    ? CamelCase<T[K]>\r\n    : T[K];\r\n};\r\n\r\nfunction toCamelCase(str: string): string {\r\n  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\r\n}\r\n\r\n//modifies an object such that its property names are converted from snake_case to camelCase\r\nexport function convertKeysToCamelCase(obj: any): any {\r\n  if (Array.isArray(obj)) {\r\n    return obj.map(convertKeysToCamelCase);\r\n  } else if (obj !== null && typeof obj === \"object\") {\r\n    return Object.fromEntries(\r\n      Object.entries(obj).map(([key, value]) => [toCamelCase(key), convertKeysToCamelCase(value)])\r\n    );\r\n  }\r\n  return obj;\r\n}\r\n", "import { z } from \"zod\";\r\n\r\n//Zod schemas:\r\nconst VersionSchema = z.union([z.string(), z.array(z.number())]);\r\n\r\nconst HeaderSchema = z.object({\r\n  name: z.string(),\r\n  uuid: z.string(),\r\n  version: VersionSchema,\r\n  description: z.string().optional(),\r\n  base_game_version: VersionSchema.optional(),\r\n  lock_template_options: z.boolean().optional(),\r\n  allow_random_seed: z.boolean().optional(),\r\n  min_engine_version: VersionSchema.optional(),\r\n  max_engine_version: VersionSchema.optional(),\r\n  platform_locked: z.boolean().optional(),\r\n  packScope: z.string().optional(),\r\n});\r\nconst ModuleSchema = z.array(\r\n  z.object({\r\n    type: z.string(),\r\n    uuid: z.string(),\r\n    version: VersionSchema,\r\n    description: z.string().optional(),\r\n    language: z.string().optional(),\r\n    entry: z.string().optional(),\r\n  })\r\n);\r\n\r\nconst SubpackSchema = z.array(\r\n  z.object({\r\n    folder_name: z.string(),\r\n    name: z.string(),\r\n    memory_tier: z.number().optional(),\r\n    memory_performance_tier: z.number().optional(),\r\n  })\r\n);\r\n\r\nconst DependenciesSchema = z.array(\r\n  z.object({\r\n    uuid: z.string().optional(),\r\n    module_name: z.string().optional(),\r\n    version: VersionSchema,\r\n  })\r\n);\r\n\r\nconst MetadataSchema = z.object({\r\n  authors: z.array(z.string()).optional(),\r\n  product_type: z.string().optional(),\r\n});\r\n\r\nconst SettingsSchema = z.array(\r\n  z.object({\r\n    type: z.string(),\r\n    text: z.string(),\r\n    name: z.string().optional(),\r\n    default: z.union([z.boolean(), z.number(), z.string()]).optional(),\r\n    min: z.number().optional(),\r\n    max: z.number().optional(),\r\n    step: z.number().optional(),\r\n    options: z\r\n      .array(\r\n        z.object({\r\n          name: z.string().optional(),\r\n          text: z.string().optional(),\r\n        })\r\n      )\r\n      .optional(),\r\n  })\r\n);\r\n\r\nexport const ManifestSchema = z.object({\r\n  format_version: z.number(),\r\n  header: HeaderSchema,\r\n  modules: ModuleSchema,\r\n  dependencies: DependenciesSchema.optional(),\r\n  subpacks: SubpackSchema.optional(),\r\n  capabilities: z.array(z.string()).optional(),\r\n  metadata: MetadataSchema.optional(),\r\n  settings: SettingsSchema.optional(),\r\n});\r\n\r\nexport type JsonManifest = z.infer<typeof ManifestSchema>;\r\n", "import { CamelCase, convertKeysToCamelCase } from \"../../core/ObjectUtilities\";\r\nimport { validateJsonAndAssert } from \"../../jsonschema/SchemaValidation\";\r\nimport { JsonManifest, ManifestSchema } from \"./JsonManifest\";\r\n\r\ntype Manifest = CamelCase<JsonManifest>;\r\n\r\nconst transforms = [convertKeysToCamelCase];\r\nexport const parseManifest = (json: any) => validateJsonAndAssert<Manifest>(json, ManifestSchema, transforms);\r\n\r\nexport default Manifest;\r\n", "import SemanticVersion from \"../../../core/versioning/SemanticVersion\";\r\nimport { InfoItemType } from \"../../IInfoItemData\";\r\n\r\nexport const MinDropDownOptions = 2;\r\n\r\nexport const AllowedPackScopes = new Set([\"global\", \"world\", \"any\"]);\r\n\r\nexport const AllowedCapabilities = new Set<string>([\"pbr\"]);\r\nexport const AllowedDependencyModules: Record<string, SemanticVersion> = {\r\n  \"@minecraft/server\": new SemanticVersion(1, 0, 0),\r\n  \"@minecraft/server-ui\": new SemanticVersion(1, 0, 0),\r\n};\r\nexport const TargetMevForVV = new SemanticVersion(1, 21, 120);\r\nexport const NamespaceFormat = /.+:.+/;\r\nexport const FormatVersion1 = 1;\r\nexport const FormatVersion2 = 2;\r\nexport const FormatVersion3 = 3;\r\nexport const ValidFormatVersions = new Set([FormatVersion1, FormatVersion2, FormatVersion3]);\r\nexport const WorldTemplateModuleName = \"world_template\";\r\nexport const KnownModuleTypes = new Set([\r\n  \"persona_piece\",\r\n  WorldTemplateModuleName,\r\n  \"skin_pack\",\r\n  \"data\",\r\n  \"script\",\r\n  \"resources\",\r\n]);\r\n\r\n// The mininmum min_engine_version allowed for blockbench emotes. See user story #1331327 for context\r\nexport const BlockBenchEmoteMinEngineVersion: SemanticVersion = new SemanticVersion(1, 17, 0);\r\n\r\nexport const Tests = {\r\n  InvalidFormatVersion: { id: 101, title: \"InvalidFormatVersion\" },\r\n  InvalidManifestSchema: { id: 102, title: \"Invalid Json Schema For Manifest File\" },\r\n  InvalidNumberOfManifests: {\r\n    id: 103,\r\n    title: \"Invalid Number Of Manifests\",\r\n    defaultMessage: \"Packs must have exactly one manifest\",\r\n  },\r\n  MissingHeaderProperty: {\r\n    id: 104,\r\n    title: \"Missing Header Property\",\r\n  },\r\n  HeaderPropertyRequiredV2: {\r\n    id: 105,\r\n    title: \"Header Property Required\",\r\n    defaultMessage: \"Header property is required for format version 2 and above\",\r\n  },\r\n  MinEngineVersionTooHigh: {\r\n    id: 106,\r\n    title: \"Min Engine Version Too High For Format Version 1\",\r\n    defaultMessage: `[min_engine_version] is too high. To use a higher version, you need to use [format_version] [${FormatVersion2}]`,\r\n  },\r\n  InvalidPackScope: {\r\n    id: 107,\r\n    title: \"InvalidPackScope\",\r\n    defaultMessage: `pack_scope must be one of [${[...AllowedPackScopes].join(\", \")}]`,\r\n  },\r\n  TooManyWorldTemplates: {\r\n    id: 108,\r\n    title: \"More Than 1 World Templates\",\r\n    defaultMessage: \"manifest.modules can have only 1 world_template module\",\r\n  },\r\n  InvalidModuleType: {\r\n    id: 109,\r\n    title: \"Invalid Module Type\",\r\n  },\r\n  DuplicateId: {\r\n    id: 110,\r\n    title: \"Duplicate Id Found\",\r\n    defaultMessage: \"Duplicate UUID found. All UUIDs must be unique\",\r\n  },\r\n  InvalidId: {\r\n    id: 111,\r\n    title: \"UUID is not valid\",\r\n  },\r\n  NoDependencyIdentifier: {\r\n    id: 112,\r\n    title: \"No Dependency Identifier\",\r\n    defaultMessage: \"Dependency is invalid, no 'module_name' or 'uuid' identifier found\",\r\n  },\r\n  MultipleDependencyIdentifier: {\r\n    id: 113,\r\n    title: \"Multiple Dependency Identifier\",\r\n    defaultMessage: \"Dependencies should be expressed by 'module_name' or UUID, not both\",\r\n  },\r\n  ModuleNameNotAllowed: {\r\n    id: 114,\r\n    title: \"Module Name Not Allowed\",\r\n  },\r\n  UnableToParseVersion: {\r\n    id: 115,\r\n    title: \"Unable To Parse Version\",\r\n  },\r\n  BelowMinVersion: {\r\n    id: 116,\r\n    title: \"Version Is Below Minimum Allowed\",\r\n  },\r\n  InvalidCapability: {\r\n    id: 117,\r\n    title: \"Invalid Capability\",\r\n  },\r\n  DuplicateSubpackFolder: {\r\n    id: 118,\r\n    title: \"Duplicate Subpack Folder\",\r\n    defaultMessage: \"Subpack folder name used twice\",\r\n  },\r\n  DuplicateSubpackName: {\r\n    id: 119,\r\n    title: \"Duplicate Subpack Name\",\r\n    defaultMessage: \"Subpack name used twice\",\r\n  },\r\n  InvalidSubpackName: {\r\n    id: 120,\r\n    title: \"Invalid Subpack Name\",\r\n  },\r\n  InvalidSubpackMemoryTier: {\r\n    id: 121,\r\n    title: \"Invalid Subpack Memory Tier\",\r\n    defaultMessage: \"Memory Tier for subpack must be greater than or equal to the minimum\",\r\n  },\r\n  MissingSettingsProperty: {\r\n    id: 122,\r\n    title: \"Manifest Settings Missing Property\",\r\n    defaultMessage: \"Property in manifest settings is missing or undefined\",\r\n  },\r\n  InvalidSettingType: {\r\n    id: 123,\r\n    title: \"Invalid Setting Type\",\r\n    defaultMessage: \"Manifest settings has invalid type property\",\r\n  },\r\n  InvalidSettingsMin: {\r\n    id: 124,\r\n    title: \"Invalid Setting Minimum\",\r\n    defaultMessage: \"Manifest min must be less max\",\r\n  },\r\n  InvalidSliderDefault: {\r\n    id: 125,\r\n    title: \"Invalid Slider Setting Default\",\r\n    defaultMessage: \"Manifest default must be less max, greather than min, and a number if type is slider\",\r\n  },\r\n  InvalidDropdownDefault: {\r\n    id: 126,\r\n    title: \"Invalid Dropdown Setting Default\",\r\n    defaultMessage: \"Default must exist in the options list\",\r\n  },\r\n  InvalidSettingsStep: {\r\n    id: 127,\r\n    title: \"Invalid Setting Step\",\r\n    defaultMessage: \"Manifest step must be greater than 0 and less than (max - min)\",\r\n  },\r\n  DuplicateSettingsName: {\r\n    id: 128,\r\n    title: \"Duplicate Settings Name\",\r\n  },\r\n  SettingsNamespaceRequired: {\r\n    id: 129,\r\n    title: \"Settings Name Requires Namespace\",\r\n    defaultMessage: \"Settings name must be in the format of a namespace and include ':'\",\r\n  },\r\n  NotEnoughSettingsOptions: {\r\n    id: 130,\r\n    title: \"Not Enough Settings Options\",\r\n    defaultMessage: `Settings dropdowns must have at least ${MinDropDownOptions} options`,\r\n  },\r\n  DuplicateOptions: {\r\n    id: 131,\r\n    title: \"Duplicate Settings Options\",\r\n    defaultMessage: `Settings dropdowns must not have duplicate options`,\r\n  },\r\n  InvalidBaseGameVersion: {\r\n    id: 132,\r\n    title: \"Invalid Base Game Version\",\r\n    defaultMessage: `Use of [base_game_version] requires [format_version] [${FormatVersion2}] or higher`,\r\n  },\r\n  WildCardGameVersion: {\r\n    id: 133,\r\n    title: \"WildCard Game Version\",\r\n    defaultMessage: `[base_game_version] wildcards are not recommended`,\r\n    severity: InfoItemType.warning,\r\n  },\r\n  MinEngineVersionForVV: {\r\n    id: 134,\r\n    title: \"PBR Pack Min Engine Version\",\r\n    defaultMessage: `Packs that support PBR must have a minimum min_engine_version of at least ${TargetMevForVV.asString()}`,\r\n    severity: InfoItemType.error,\r\n  },\r\n  HasPBRFilesButNoManifestCapability: {\r\n    id: 135,\r\n    title: \"Has Vibrant Visuals Enhanced Files But No Manifest Capability\",\r\n    defaultMessage: `Packs that contain PBR related files must declare the \"pbr\" capability in the manifest`,\r\n    severity: InfoItemType.error,\r\n  },\r\n} as const;\r\n", "import Project from \"../../../app/Project\";\r\nimport ProjectItem from \"../../../app/ProjectItem\";\r\nimport Versioning from \"../../../app/Versioning\";\r\nimport { filterAndSeparate, findDuplicates } from \"../../../core/ArrayUtilities\";\r\nimport ContentIndex from \"../../../core/ContentIndex\";\r\nimport { findMissingProperty, notEmpty } from \"../../../core/ObjectUtilities\";\r\nimport Utilities from \"../../../core/Utilities\";\r\nimport SemanticVersion from \"../../../core/versioning/SemanticVersion\";\r\nimport { PackType } from \"../../../minecraft/Pack\";\r\nimport IProjectInfoGenerator from \"../../IProjectInfoGenerator\";\r\nimport ProjectInfoItem from \"../../ProjectInfoItem\";\r\nimport { resultFromTest } from \"../../tests/TestDefinition\";\r\nimport Manifest, { parseManifest } from \"../../../minecraft/manifests/Manifest\";\r\nimport { Tests } from \"./CheckManifestData\";\r\nimport * as ValidationData from \"./CheckManifestData\";\r\nimport { ProjectItemType } from \"../../../app/IProjectItemData\";\r\n\r\ntype PackDesc = {\r\n  type?: PackType;\r\n  isWorld?: boolean;\r\n  isEDUOffer?: boolean;\r\n};\r\n\r\n/**\r\n * Validates pack manifest files for structure, required fields, and format compliance.\r\n *\r\n * @see {@link ../../../../public/data/forms/mctoolsval/chkmanif.form.json} for topic definitions\r\n */\r\nexport default class CheckManifestGenerator implements IProjectInfoGenerator {\r\n  id: string = \"CHKMANIF\";\r\n  title: string = \"Manifest Validation\";\r\n  canAlwaysProcess = true;\r\n\r\n  async generate(project: Project, contentIndex: ContentIndex): Promise<ProjectInfoItem[]> {\r\n    const packs = project.packs;\r\n\r\n    const invalidManifests = packs\r\n      .filter((pack) => {\r\n        const manifests = pack.getPackItems().filter((item) => item.name === \"manifest.json\");\r\n        return manifests.length === 0 || manifests.length > 1;\r\n      })\r\n      .map(() => resultFromTest(Tests.InvalidNumberOfManifests, { id: this.id }));\r\n\r\n    if (invalidManifests.length > 0) {\r\n      return invalidManifests;\r\n    }\r\n\r\n    const packManifests = packs.map((pack) => [pack.getManifest(), pack] as const);\r\n    const worldManifests = project.items\r\n      .filter((item) => item.itemType === ProjectItemType.worldTemplateManifestJson)\r\n      .map<[ProjectItem, PackDesc]>((manifest) => [manifest, { isWorld: true }]);\r\n\r\n    const allManifests = [...worldManifests, ...packManifests];\r\n\r\n    const results = await Promise.all(allManifests.map(([desc, manifest]) => this.validateManifest(desc, manifest)));\r\n    return results.flat();\r\n  }\r\n\r\n  async validateManifest(manifestItem: ProjectItem, pack: PackDesc): Promise<ProjectInfoItem[]> {\r\n    const json = await manifestItem.getContentAsJson();\r\n    const [manifest, parseErrors] = parseManifest(json);\r\n\r\n    if (parseErrors) {\r\n      return parseErrors\r\n        .map((error) => ({ id: this.id, message: error.message, item: manifestItem, data: error.propertyName }))\r\n        .map((resultData) => resultFromTest(Tests.InvalidManifestSchema, resultData));\r\n    }\r\n\r\n    const results = [\r\n      ...this.validateFormatVersion(pack, manifest, manifestItem),\r\n      ...this.validateIds(pack, manifest, manifestItem),\r\n      ...this.validateHeader(pack, manifest, manifestItem),\r\n      ...this.validateModules(pack, manifest, manifestItem),\r\n      ...this.validateDependencies(pack, manifest, manifestItem),\r\n      ...this.validateSubpacks(pack, manifest, manifestItem),\r\n      ...this.validateCapabilities(pack, manifest, manifestItem),\r\n      ...this.validateCapabilitiesForMinEngineVersionPlusPbr(pack, manifest, manifestItem),\r\n      ...this.validateSettings(pack, manifest, manifestItem),\r\n    ];\r\n\r\n    return results;\r\n  }\r\n\r\n  private validateIds(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const allIds = [\r\n      manifest.header.uuid,\r\n      ...(manifest.modules?.map((module) => module.uuid) || []),\r\n      ...(manifest.dependencies?.map((dep) => dep.uuid).filter(notEmpty) || []),\r\n    ];\r\n\r\n    const [validIds, invalidIds] = filterAndSeparate(allIds, (id) => Utilities.isValidUuid(id));\r\n\r\n    const invalidIdResults = invalidIds\r\n      .map((invalid) => ({ id: this.id, item: manifestItem, data: invalid }))\r\n      .map((data) => resultFromTest(Tests.InvalidId, data));\r\n\r\n    const dupIdResults = findDuplicates(validIds)\r\n      .map((dupId) => ({ id: this.id, item: manifestItem, data: dupId }))\r\n      .map((data) => resultFromTest(Tests.DuplicateId, data));\r\n\r\n    return [...invalidIdResults, ...dupIdResults];\r\n  }\r\n\r\n  private validateSettings(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const settings = manifest.settings;\r\n    if (!settings) {\r\n      return [];\r\n    }\r\n\r\n    const dupNameResults = findDuplicates(settings.map((setting) => setting.name))\r\n      .map((dup) => ({ id: this.id, data: dup, item: manifestItem }))\r\n      .map((data) => resultFromTest(Tests.DuplicateSettingsName, data));\r\n\r\n    const noNamespaces = settings\r\n      .filter((setting) => setting.name && ValidationData.NamespaceFormat.test(setting.name))\r\n      .map((setting) => ({ id: this.id, item: manifestItem, data: setting.name }))\r\n      .map((data) => resultFromTest(Tests.SettingsNamespaceRequired, data));\r\n\r\n    const toggles = settings.filter((setting) => setting.type === \"toggle\");\r\n    const sliders = settings.filter((setting) => setting.type === \"slider\");\r\n    const dropdowns = settings.filter((setting) => setting.type === \"dropdown\");\r\n\r\n    const knownTypes = new Set([\"label\", \"toggle\", \"slider\", \"dropdown\"]);\r\n    const invalidTypes = settings\r\n      .filter((settings) => !knownTypes.has(settings.type))\r\n      .map((settings) => ({ id: this.id, data: settings.type, item: manifestItem }))\r\n      .map((data) => resultFromTest(Tests.InvalidSettingType, data));\r\n\r\n    //note: type and text are always required, so we use the schema to validate that\r\n    //for other properties that are only conditionally required, we'll confirm post parsing\r\n\r\n    const missingPropResults = [\r\n      ...toggles\r\n        .map((toggle) => [toggle, findMissingProperty(toggle, [\"name\", \"default\"])] as const)\r\n        .filter(([, missingProperty]) => !!missingProperty)\r\n        .map(([, missingProperty]) => ({ id: this.id, item: manifestItem, data: missingProperty }))\r\n        .map((data) => resultFromTest(Tests.MissingSettingsProperty, data)),\r\n\r\n      ...sliders\r\n        .map((slider) => [slider, findMissingProperty(slider, [\"name\", \"min\", \"max\", \"step\", \"default\"])] as const)\r\n        .filter(([, missingProperty]) => !!missingProperty)\r\n        .map(([, missingProperty]) => ({ id: this.id, item: manifestItem, data: missingProperty }))\r\n        .map((data) => resultFromTest(Tests.MissingSettingsProperty, data)),\r\n\r\n      ...dropdowns\r\n        .map((dropdown) => [dropdown, findMissingProperty(dropdown, [\"name\", \"default\", \"options\"])] as const)\r\n        .filter(([, missingProperty]) => !!missingProperty)\r\n        .map(([, missingProperty]) => ({ id: this.id, item: manifestItem, data: missingProperty }))\r\n        .map((data) => resultFromTest(Tests.MissingSettingsProperty, data)),\r\n    ];\r\n\r\n    const invalidMins = sliders\r\n      // undefined values are reported by the missing property result, ignore for now\r\n      .filter((slider) => !!slider.min && !!slider.max)\r\n      // we've already filtered undefined values, '!' is safe\r\n      .filter((slider) => slider.min! > slider.max!)\r\n      .map((slider) => ({ id: this.id, item: manifestItem, data: slider.min }))\r\n      .map((data) => resultFromTest(Tests.InvalidSettingsMin, data));\r\n\r\n    const invalidDefaults = sliders\r\n      .filter((slider) => !!slider.default && !!slider.min && !!slider.max)\r\n      // we've already filtered undefined values, '!' is safe\r\n      .filter(\r\n        (slider) => typeof slider.default !== \"number\" || slider.default > slider.max! || slider.default < slider.min!\r\n      )\r\n      .map((slider) => ({ id: this.id, item: manifestItem, data: slider.default }))\r\n      .map((data) => resultFromTest(Tests.InvalidSliderDefault, data));\r\n\r\n    const invalidSteps = sliders\r\n      .filter((slider) => !!slider.step && !!slider.min && !!slider.max)\r\n      // we've already filtered undefined values, '!' is safe\r\n      .filter((slider) => slider.step! <= 0 || slider.step! > slider.max! - slider.min!)\r\n      .map((slider) => ({ id: this.id, item: manifestItem, data: slider.step }))\r\n      .map((data) => resultFromTest(Tests.InvalidSettingsStep, data));\r\n\r\n    const notEnoughOptions = dropdowns\r\n      .filter((dropdown) => !dropdown.options || dropdown.options.length < ValidationData.MinDropDownOptions)\r\n      .map(() => ({ id: this.id, item: manifestItem }))\r\n      .map((data) => resultFromTest(Tests.NotEnoughSettingsOptions, data));\r\n\r\n    const duplicateOptions = dropdowns\r\n      .flatMap((dropdown) => (dropdown.options ? findDuplicates(dropdown.options.map((opt) => opt.name)) : []))\r\n      .map((duplicate) => ({ id: this.id, item: manifestItem, data: duplicate }))\r\n      .map((data) => resultFromTest(Tests.DuplicateOptions, data));\r\n\r\n    const badDefaults = dropdowns\r\n      .filter(\r\n        (dropdown) =>\r\n          dropdown.options &&\r\n          typeof dropdown.default === \"string\" &&\r\n          dropdown.options.map((opt) => opt.name).includes(dropdown.default)\r\n      )\r\n      .map((dropdown) => ({ id: this.id, item: manifestItem, data: dropdown.default }))\r\n      .map((data) => resultFromTest(Tests.InvalidSliderDefault, data));\r\n\r\n    return [\r\n      ...noNamespaces,\r\n      ...dupNameResults,\r\n      ...invalidTypes,\r\n      ...missingPropResults,\r\n      ...invalidMins,\r\n      ...invalidDefaults,\r\n      ...invalidSteps,\r\n      ...notEnoughOptions,\r\n      ...duplicateOptions,\r\n      ...badDefaults,\r\n    ];\r\n  }\r\n\r\n  private validateCapabilitiesForMinEngineVersionPlusPbr(\r\n    pack: PackDesc,\r\n    manifest: Manifest,\r\n    manifestItem: ProjectItem\r\n  ): ProjectInfoItem[] {\r\n    let results: ProjectInfoItem[] = [];\r\n\r\n    if (manifestItem.itemType !== ProjectItemType.resourcePackManifestJson) {\r\n      return results;\r\n    }\r\n\r\n    // Check for VV files scoped to THIS pack only, not the entire project.\r\n    // A project may have multiple resource packs where only some contain PBR content.\r\n    const owningPack = manifestItem.project.packs.find(\r\n      (p) => p.projectItem.projectPath && manifestItem.projectPath?.startsWith(p.projectItem.projectPath)\r\n    );\r\n\r\n    const hasVVFilesInPack = owningPack?.hasVibrantVisualsContent() ?? false;\r\n\r\n    const capabilities = manifest.capabilities;\r\n    let hasPbr = false;\r\n\r\n    if (capabilities) {\r\n      for (const cap of capabilities) {\r\n        if (cap.toLowerCase() === \"pbr\") {\r\n          hasPbr = true;\r\n\r\n          if (manifest.header?.minEngineVersion) {\r\n            const minVersion = SemanticVersion.parse(manifest.header.minEngineVersion);\r\n            if (minVersion && minVersion.compareTo(ValidationData.TargetMevForVV) < 0) {\r\n              results.push(\r\n                resultFromTest(Tests.MinEngineVersionForVV, {\r\n                  id: this.id,\r\n                  item: manifestItem,\r\n                  data: minVersion.asString(),\r\n                })\r\n              );\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (hasVVFilesInPack && !hasPbr && !manifestItem.project.isVanillaEditSession) {\r\n      results.push(\r\n        resultFromTest(Tests.HasPBRFilesButNoManifestCapability, {\r\n          id: this.id,\r\n          item: manifestItem,\r\n        })\r\n      );\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private validateCapabilities(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const capabilities = manifest.capabilities;\r\n    if (!capabilities) {\r\n      return [];\r\n    }\r\n\r\n    return capabilities\r\n      .filter((capability) => !ValidationData.AllowedCapabilities.has(capability.toLowerCase()))\r\n      .map((capability) => ({ id: this.id, item: manifestItem, data: capability }))\r\n      .map((data) => resultFromTest(Tests.InvalidCapability, data));\r\n  }\r\n\r\n  private validateSubpacks(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const subpacks = manifest.subpacks;\r\n    if (!subpacks) {\r\n      return [];\r\n    }\r\n\r\n    const dupFolderResults = findDuplicates(subpacks.map((subp) => subp.folderName))\r\n      .map((folder) => ({ id: this.id, item: manifestItem, data: folder }))\r\n      .map((data) => resultFromTest(Tests.DuplicateSubpackFolder, data));\r\n\r\n    const dupNameResults = findDuplicates(subpacks.map((subp) => subp.name))\r\n      .map((name) => ({ id: this.id, item: manifestItem, data: name }))\r\n      .map((data) => resultFromTest(Tests.DuplicateSubpackName, data));\r\n\r\n    /*\r\n    Disable name checks and .memory tier checks for \r\n    const validNames = new Set(Object.values(SubpackTypes).map((type) => type.name));\r\n\r\n    const invalidNameResults = subpacks\r\n      .filter((subp) => !validNames.has(subp.name))\r\n      .map((subp) => ({ id: this.id, item: manifestItem, data: subp.name }))\r\n      .map((data) => resultFromTest(Tests.InvalidSubpackName, data));\r\n    \r\n\r\n    const invalidMemoryTierResults = subpacks\r\n      .map((subp) => [subp, SubpackTypes[subp.name]?.minTier] as const)\r\n      .filter(([, minTier]) => !!minTier)\r\n      .filter(([subp, minTier]) => subp.memoryTier < minTier)\r\n      .map(([subp]) => ({ id: this.id, item: manifestItem, data: subp.memoryTier }))\r\n      .map((data) => resultFromTest(Tests.InvalidSubpackMemoryTier, data));\r\n    */\r\n\r\n    return [...dupFolderResults, ...dupNameResults]; //, ...invalidNameResults, ...invalidMemoryTierResults];\r\n  }\r\n\r\n  private validateDependencies(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const dependencies = manifest.dependencies;\r\n    if (!dependencies) {\r\n      return [];\r\n    }\r\n\r\n    const noIdResults = dependencies\r\n      .filter((dependency) => !dependency.uuid && !dependency.moduleName)\r\n      .map(() => resultFromTest(Tests.NoDependencyIdentifier, { id: this.id, item: manifestItem }));\r\n\r\n    const multipleIdResults = dependencies\r\n      .filter((dependency) => !!dependency.uuid && !!dependency.moduleName)\r\n      .map(() => resultFromTest(Tests.MultipleDependencyIdentifier, { id: this.id, item: manifestItem }));\r\n\r\n    const allowedDependencyModulesResults = dependencies\r\n      .filter(\r\n        (dependency) => !!dependency.moduleName && !ValidationData.AllowedDependencyModules[dependency.moduleName]\r\n      )\r\n      .map((dependency) => ({ id: this.id, item: manifestItem, data: dependency.moduleName }))\r\n      .map((data) => resultFromTest(Tests.ModuleNameNotAllowed, data));\r\n\r\n    const dependencyVersions = dependencies.map((dep) => [dep, SemanticVersion.parse(dep.version)] as const);\r\n    const invalidVersionResults = dependencyVersions\r\n      .filter(([, version]) => !version)\r\n      .map(([dep]) => ({ id: this.id, item: manifestItem, data: dep.version }))\r\n      .map((data) => resultFromTest(Tests.UnableToParseVersion, data));\r\n\r\n    const versionsBelowMinResults = dependencyVersions\r\n      // we only care about dependencies that use module name, non-allowed modules are handled by a different check\r\n      .filter(\r\n        ([dep, version]) => !!dep.moduleName && !!ValidationData.AllowedDependencyModules[dep.moduleName] && !!version\r\n      )\r\n      //  '!' is safe here, we've already filtered falsey moduleNames and versions\r\n      .filter(([dep, version]) => version!.compareTo(ValidationData.AllowedDependencyModules[dep.moduleName!]) <= 0)\r\n      .map(([dep]) => resultFromTest(Tests.BelowMinVersion, { id: this.id, item: manifestItem, data: dep.version }));\r\n\r\n    return [\r\n      ...noIdResults,\r\n      ...multipleIdResults,\r\n      ...allowedDependencyModulesResults,\r\n      ...invalidVersionResults,\r\n      ...versionsBelowMinResults,\r\n    ];\r\n  }\r\n\r\n  private validateModules(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const modules = manifest.modules;\r\n\r\n    if (!modules) {\r\n      return [];\r\n    }\r\n\r\n    if (modules.filter((module) => module.type === ValidationData.WorldTemplateModuleName).length > 1) {\r\n      return [resultFromTest(Tests.TooManyWorldTemplates, { id: this.id, item: manifestItem })];\r\n    }\r\n\r\n    return modules\r\n      .filter((module) => !ValidationData.KnownModuleTypes.has(module.type))\r\n      .map((module) => resultFromTest(Tests.InvalidModuleType, { id: this.id, item: manifestItem, data: module.type }));\r\n  }\r\n\r\n  private validateHeader(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem): ProjectInfoItem[] {\r\n    const header = manifest.header;\r\n\r\n    const results = [];\r\n    const isemptyDescriptionAllowed = pack.type === PackType.skin;\r\n    if (!header.description && !isemptyDescriptionAllowed) {\r\n      results.push(\r\n        resultFromTest(Tests.MissingHeaderProperty, { id: this.id, item: manifestItem, data: \"description\" })\r\n      );\r\n    }\r\n\r\n    if (pack.isWorld) {\r\n      if (!!header.baseGameVersion && manifest.formatVersion < ValidationData.FormatVersion2) {\r\n        const data = { id: this.id, item: manifestItem, data: header.baseGameVersion };\r\n        results.push(resultFromTest(Tests.InvalidBaseGameVersion, data));\r\n      }\r\n\r\n      if (header.baseGameVersion === \"*\") {\r\n        const data = { id: this.id, item: manifestItem, data: header.baseGameVersion };\r\n        results.push(resultFromTest(Tests.WildCardGameVersion, data));\r\n      }\r\n\r\n      if (manifest.formatVersion > ValidationData.FormatVersion1 && header.lockTemplateOptions === undefined) {\r\n        const data = { id: this.id, item: manifestItem, data: \"lock_template_options\" };\r\n        results.push(resultFromTest(Tests.HeaderPropertyRequiredV2, data));\r\n      }\r\n    }\r\n\r\n    if (pack.type === PackType.resource) {\r\n      const infoItem = this.validateMinEngineVersion(\r\n        header.minEngineVersion,\r\n        pack,\r\n        manifest.formatVersion,\r\n        manifestItem\r\n      );\r\n      if (infoItem) {\r\n        results.push(infoItem);\r\n      }\r\n    }\r\n\r\n    if (header.packscope && ValidationData.AllowedPackScopes.has(header.packscope)) {\r\n      results.push(resultFromTest(Tests.InvalidPackScope, { id: this.id, item: manifestItem, data: header.packscope }));\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  private validateMinEngineVersion(\r\n    mev: string | number[] | undefined,\r\n    pack: PackDesc,\r\n    formatVersion: number,\r\n    manifestItem: ProjectItem\r\n  ): ProjectInfoItem | null {\r\n    const minVersion = SemanticVersion.parse(mev);\r\n    if (!minVersion && formatVersion > ValidationData.FormatVersion1) {\r\n      const data = { id: this.id, item: manifestItem, data: \"min_engine_version\" };\r\n      return resultFromTest(Tests.HeaderPropertyRequiredV2, data);\r\n    }\r\n\r\n    const requiredVer = this.getMinimalVersionThatRequiresV2(pack.isEDUOffer === true);\r\n    if (minVersion && minVersion.compareTo(requiredVer) >= 0 && formatVersion < ValidationData.FormatVersion2) {\r\n      const data = { id: this.id, item: manifestItem, data: mev };\r\n      return resultFromTest(Tests.MinEngineVersionTooHigh, data);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private getMinimalVersionThatRequiresV2(isEDUOffer: boolean) {\r\n    return isEDUOffer ? Versioning.FirstMinEngineVersionForFormatV2EDU : Versioning.FirstMinEngineVersionForFormatV2;\r\n  }\r\n\r\n  private validateFormatVersion(pack: PackDesc, manifest: Manifest, manifestItem: ProjectItem) {\r\n    const format = manifest.formatVersion;\r\n\r\n    if (!ValidationData.ValidFormatVersions.has(format)) {\r\n      return [resultFromTest(Tests.InvalidFormatVersion, { id: this.id, data: format })];\r\n    }\r\n\r\n    if (\r\n      !(pack.type === PackType.skin || pack.type === PackType.persona) &&\r\n      manifest.formatVersion < ValidationData.FormatVersion2\r\n    ) {\r\n      return [\r\n        resultFromTest(Tests.InvalidFormatVersion, {\r\n          id: this.id,\r\n          data: format,\r\n          message: `All new content targeting published client version must conform to format version [${ValidationData.FormatVersion2}].`,\r\n        }),\r\n      ];\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  summarize() {}\r\n}\r\n", "import ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport ProjectInfoUtilities from \"../ProjectInfoUtilities\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport Utilities from \"../../core/Utilities\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport BehaviorManifestDefinition from \"../../minecraft/BehaviorManifestDefinition\";\r\nimport ResourceManifestDefinition from \"../../minecraft/ResourceManifestDefinition\";\r\n\r\nexport enum CheckResourcePackDependenciesGeneratorTest {\r\n  invalidManifestJson = 101,\r\n  missingResourcePackDependency = 102,\r\n  internalProcessingError = 103,\r\n}\r\n\r\n/**\r\n * Validates resource pack dependencies in behavior pack manifests.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/rpdepends.form.json} for topic definitions\r\n */\r\nexport default class CheckResourcePackDependenciesGenerator implements IProjectInfoGenerator {\r\n  id = \"RPDEPENDS\";\r\n  title = \"Resource Pack Dependencies\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.invalidManifestJson = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckResourcePackDependenciesGeneratorTest.invalidManifestJson\r\n    );\r\n\r\n    info.missingResourcePackDependencies = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckResourcePackDependenciesGeneratorTest.missingResourcePackDependency\r\n    );\r\n\r\n    info.internalProcessingErrors = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckResourcePackDependenciesGeneratorTest.internalProcessingError\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n    const manifestDependencies: { uuid: string; manifestItem: ProjectItem }[] = [];\r\n    const availablePacks: { uuid: string; manifestItem: ProjectItem }[] = [];\r\n\r\n    // Loop through once to find and store all uuids of various packs\r\n    for (const item of projItems) {\r\n      if (\r\n        item.itemType !== ProjectItemType.resourcePackManifestJson &&\r\n        item.itemType !== ProjectItemType.behaviorPackManifestJson\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      try {\r\n        if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const resourceManifest = await ResourceManifestDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (!resourceManifest || !resourceManifest.isLoaded) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CheckResourcePackDependenciesGeneratorTest.invalidManifestJson,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  CheckResourcePackDependenciesGeneratorTest,\r\n                  CheckResourcePackDependenciesGeneratorTest.invalidManifestJson\r\n                ),\r\n                item\r\n              )\r\n            );\r\n            continue;\r\n          }\r\n\r\n          if (resourceManifest.id && Utilities.isValidUuid(resourceManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: resourceManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n\r\n          if (resourceManifest.dependencies) {\r\n            for (const dependency of resourceManifest.dependencies) {\r\n              if (dependency.uuid && typeof dependency.uuid === \"string\" && Utilities.isValidUuid(dependency.uuid)) {\r\n                manifestDependencies.push({\r\n                  uuid: dependency.uuid,\r\n                  manifestItem: item,\r\n                });\r\n              }\r\n            }\r\n          }\r\n        } else if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const behaviorManifest = await BehaviorManifestDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (!behaviorManifest || !behaviorManifest.isLoaded) {\r\n            items.push(\r\n              new ProjectInfoItem(\r\n                InfoItemType.error,\r\n                this.id,\r\n                CheckResourcePackDependenciesGeneratorTest.invalidManifestJson,\r\n                ProjectInfoUtilities.getTitleFromEnum(\r\n                  CheckResourcePackDependenciesGeneratorTest,\r\n                  CheckResourcePackDependenciesGeneratorTest.invalidManifestJson\r\n                ),\r\n                item\r\n              )\r\n            );\r\n            continue;\r\n          }\r\n\r\n          if (behaviorManifest.id && Utilities.isValidUuid(behaviorManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: behaviorManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n        }\r\n      } catch (error) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckResourcePackDependenciesGeneratorTest.internalProcessingError,\r\n            `Error processing manifest ${item.name}: ${error}`,\r\n            item\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    // Loop through again to check if each dependency exists in available packs\r\n    for (const dependency of manifestDependencies) {\r\n      const foundPack = availablePacks.find((pack) => pack.uuid === dependency.uuid);\r\n\r\n      if (!foundPack) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckResourcePackDependenciesGeneratorTest.missingResourcePackDependency,\r\n            `Dependency with uuid [${dependency.uuid}] specified but uuid is not located in any included resource or behavior packs.`,\r\n            dependency.manifestItem\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "import ProjectInfoItem from \"../ProjectInfoItem\";\r\nimport Project from \"../../app/Project\";\r\nimport ProjectInfoSet from \"../ProjectInfoSet\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport { InfoItemType } from \"../IInfoItemData\";\r\nimport { ProjectItemType } from \"../../app/IProjectItemData\";\r\nimport StorageUtilities from \"../../storage/StorageUtilities\";\r\nimport Utilities from \"../../core/Utilities\";\r\nimport ProjectItem from \"../../app/ProjectItem\";\r\nimport ResourceManifestDefinition from \"../../minecraft/ResourceManifestDefinition\";\r\nimport BehaviorManifestDefinition from \"../../minecraft/BehaviorManifestDefinition\";\r\n\r\nexport enum CheckWorldPackReferencesGeneratorTest {\r\n  invalidWorldPackReferencesJson = 201,\r\n  missingWorldPackReferencesFile = 202,\r\n  invalidPackId = 203,\r\n  missingManifestVersion = 204,\r\n  invalidManifestVersion = 205,\r\n  packReferenceNotFound = 206,\r\n  internalProcessingError = 207,\r\n}\r\n\r\n/**\r\n * Validates world pack references including world_behavior_packs.json and world_resource_packs.json.\r\n *\r\n * @see {@link ../../../public/data/forms/mctoolsval/wpackrefs.form.json} for topic definitions\r\n */\r\nexport default class CheckWorldPackReferencesGenerator implements IProjectInfoGenerator {\r\n  id = \"WPACKREFS\";\r\n  title = \"World Pack References\";\r\n  canAlwaysProcess = true;\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    info.invalidWorldPackReferencesJson = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.invalidWorldPackReferencesJson\r\n    );\r\n\r\n    info.missingWorldPackReferencesFile = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.missingWorldPackReferencesFile\r\n    );\r\n\r\n    info.invalidPackIds = infoSet.getSummedDataValue(this.id, CheckWorldPackReferencesGeneratorTest.invalidPackId);\r\n\r\n    info.missingManifestVersion = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.missingManifestVersion\r\n    );\r\n\r\n    info.invalidManifestVersion = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.invalidManifestVersion\r\n    );\r\n\r\n    info.packReferencesNotFound = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.packReferenceNotFound\r\n    );\r\n\r\n    info.internalProcessingErrors = infoSet.getSummedDataValue(\r\n      this.id,\r\n      CheckWorldPackReferencesGeneratorTest.internalProcessingError\r\n    );\r\n  }\r\n\r\n  async generate(project: Project): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n    const projItems = project.getItemsCopy();\r\n    const availablePacks: { uuid: string; manifestItem: ProjectItem }[] = [];\r\n\r\n    try {\r\n      // First, collect all available pack UUIDs from manifests\r\n      await this.collectAvailablePacks(projItems, availablePacks, items);\r\n\r\n      // Check for pack reference files\r\n      for (const item of projItems) {\r\n        if (item.itemType === ProjectItemType.resourcePackListJson) {\r\n          await this.checkPackReferences(item, availablePacks, items);\r\n        } else if (item.itemType === ProjectItemType.behaviorPackListJson) {\r\n          await this.checkPackReferences(item, availablePacks, items);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CheckWorldPackReferencesGeneratorTest.internalProcessingError,\r\n          `Internal processing error: ${error}`,\r\n          undefined\r\n        )\r\n      );\r\n    }\r\n\r\n    return items;\r\n  }\r\n\r\n  private async collectAvailablePacks(\r\n    projItems: ProjectItem[],\r\n    availablePacks: { uuid: string; manifestItem: ProjectItem }[],\r\n    items: ProjectInfoItem[]\r\n  ): Promise<void> {\r\n    for (const item of projItems) {\r\n      if (\r\n        item.itemType !== ProjectItemType.resourcePackManifestJson &&\r\n        item.itemType !== ProjectItemType.behaviorPackManifestJson\r\n      ) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (!item.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      try {\r\n        if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const resourceManifest = await ResourceManifestDefinition.ensureOnFile(item.primaryFile);\r\n          if (resourceManifest && resourceManifest.id && Utilities.isValidUuid(resourceManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: resourceManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n        } else if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const behaviorManifest = await BehaviorManifestDefinition.ensureOnFile(item.primaryFile);\r\n          if (behaviorManifest && behaviorManifest.id && Utilities.isValidUuid(behaviorManifest.id)) {\r\n            availablePacks.push({\r\n              uuid: behaviorManifest.id,\r\n              manifestItem: item,\r\n            });\r\n          }\r\n        }\r\n      } catch (error) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.internalProcessingError,\r\n            `Error processing manifest ${item.name}: ${error}`,\r\n            item\r\n          )\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private async checkPackReferences(\r\n    packReferencesFile: ProjectItem,\r\n    availablePacks: { uuid: string; manifestItem: ProjectItem }[],\r\n    items: ProjectInfoItem[]\r\n  ): Promise<void> {\r\n    if (!packReferencesFile.isContentLoaded) {\r\n      await packReferencesFile.loadContent();\r\n    }\r\n\r\n    if (!packReferencesFile.primaryFile) {\r\n      return;\r\n    }\r\n\r\n    if (!packReferencesFile.primaryFile.isContentLoaded) {\r\n      await packReferencesFile.primaryFile.loadContent();\r\n    }\r\n\r\n    const parsedContent = StorageUtilities.getJsonObject(packReferencesFile.primaryFile);\r\n\r\n    if (!parsedContent || !Array.isArray(parsedContent)) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CheckWorldPackReferencesGeneratorTest.invalidWorldPackReferencesJson,\r\n          `Invalid JSON format in ${packReferencesFile.name}. Expected an array of pack references.`,\r\n          packReferencesFile\r\n        )\r\n      );\r\n      return;\r\n    }\r\n\r\n    const packRefsFoundInJson: string[] = [];\r\n\r\n    // Validate each pack reference object\r\n    for (let i = 0; i < parsedContent.length; i++) {\r\n      const packRef = parsedContent[i];\r\n\r\n      if (typeof packRef !== \"object\" || packRef === null) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidWorldPackReferencesJson,\r\n            `Invalid pack reference object at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      // Validate pack_id\r\n      if (!packRef.pack_id || typeof packRef.pack_id !== \"string\") {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidPackId,\r\n            `Missing or invalid pack_id at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      if (!Utilities.isValidUuid(packRef.pack_id)) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidPackId,\r\n            `Invalid UUID format for pack_id [${packRef.pack_id}] at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n\r\n      // Valid pack_id found, add to list\r\n      packRefsFoundInJson.push(packRef.pack_id);\r\n\r\n      // Validate version\r\n      const versionValidation = ResourceManifestDefinition.validatePackReferenceVersion(packRef.version);\r\n      if (!versionValidation.isValid) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.invalidManifestVersion,\r\n            `${versionValidation.errorMessage} for pack_id [${packRef.pack_id}] at index ${i} in ${packReferencesFile.name}`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n        continue;\r\n      }\r\n    }\r\n\r\n    // Check if each referenced pack exists in the available packs\r\n    for (const packRef of packRefsFoundInJson) {\r\n      const foundPack = availablePacks.find((pack) => pack.uuid === packRef);\r\n\r\n      if (!foundPack) {\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CheckWorldPackReferencesGeneratorTest.packReferenceNotFound,\r\n            `Pack reference [${packRef}] not found in project.`,\r\n            packReferencesFile\r\n          )\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"./ProjectInfoItem\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport IProjectInfoItemGenerator from \"./IProjectItemInfoGenerator\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport { InfoItemType } from \"./IInfoItemData\";\r\nimport ProjectInfoSet from \"./ProjectInfoSet\";\r\nimport ContentIndex from \"../core/ContentIndex\";\r\nimport { IGeneratorOptions } from \"./ProjectInfoSet\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectUtilities, { ProjectMetaCategory } from \"../app/ProjectUtilities\";\r\n\r\nconst CUSTOM_DIMENSION_ID_START = 1000;\r\n\r\nconst VanillaIdToString: Record<number, string> = {\r\n  0: \"Overworld\",\r\n  1: \"Nether\",\r\n  2: \"The End\",\r\n};\r\n\r\nexport enum CustomDimensionWorldDataTest {\r\n  nameIdMappingTableMissing = 101,\r\n  vanillaDimensionChunkData = 102,\r\n  unclaimedDimensionMappings = 103,\r\n}\r\n\r\nexport default class CustomDimensionWorldDataInfoGenerator implements IProjectInfoItemGenerator {\r\n  id = \"CDWORLDDATA\";\r\n  title = \"Custom Dimension World Data Validation\";\r\n\r\n  /**\r\n   * Per-project cache for {@link isAddOnContextForWorld}. Avoids re-running\r\n   * the (manifest-reading) meta-category detection on every world item in a\r\n   * multi-world project.\r\n   */\r\n  #addOnContextCache: WeakMap<Project, Promise<boolean>> = new WeakMap();\r\n\r\n  /**\r\n   * Rule 102 (\"Vanilla Dimension Chunk Data\") is meaningful only when the\r\n   * surrounding project is shaped like an add-on. For a standalone world\r\n   * template \u2014 or any \"general world data\" project \u2014 Overworld/Nether/End\r\n   * chunk data is normal and expected, not a defect.\r\n   *\r\n   * Delegates to the canonical {@link ProjectUtilities.getMetaCategory}, the\r\n   * shared classifier used elsewhere (e.g. {@link TextureImageInfoGenerator})\r\n   * to gate add-on-only validations. We use `getMetaCategory` rather than\r\n   * `getIsAddon` because the latter excludes any project containing world\r\n   * items \u2014 but this generator only ever runs on world items, so that check\r\n   * would always fail. `getMetaCategory` evaluates pack shape independently\r\n   * and returns `worldTemplate` (not `addOn`) when a template manifest is\r\n   * present, which gives us the correct gating for free.\r\n   *\r\n   * Result is cached per Project for the lifetime of the generator instance.\r\n   */\r\n  private async isAddOnContextForWorld(project: Project | undefined): Promise<boolean> {\r\n    if (!project) {\r\n      return false;\r\n    }\r\n\r\n    const cached = this.#addOnContextCache.get(project);\r\n    if (cached) {\r\n      return cached;\r\n    }\r\n\r\n    const promise = ProjectUtilities.getMetaCategory(project).then((cat) => cat === ProjectMetaCategory.addOn);\r\n    this.#addOnContextCache.set(project, promise);\r\n    return promise;\r\n  }\r\n\r\n  getTopicData(topicId: number) {\r\n    switch (topicId) {\r\n      case CustomDimensionWorldDataTest.nameIdMappingTableMissing:\r\n        return {\r\n          title: \"Name-ID Mapping Table Missing\",\r\n          description:\r\n            \"The LevelDB contains custom dimension chunk data but is missing the required DimensionNameIdTable key. \" +\r\n            \"This table is needed to map dimension names to IDs for correct chunk data association on load.\",\r\n        };\r\n      case CustomDimensionWorldDataTest.vanillaDimensionChunkData:\r\n        return {\r\n          title: \"Vanilla Dimension Chunk Data\",\r\n          description:\r\n            \"The LevelDB contains chunk data for vanilla dimensions (Overworld, Nether, or The End). \" +\r\n            \"Creator content must only include chunk data for custom dimensions (ID >= 1000).\",\r\n        };\r\n      case CustomDimensionWorldDataTest.unclaimedDimensionMappings:\r\n        return {\r\n          title: \"Unclaimed Dimension Mappings\",\r\n          description:\r\n            \"The DimensionNameIdTable contains name-ID mappings for dimensions that have no corresponding \" +\r\n            \"chunk data in the LevelDB. This may indicate incomplete cleanup or leftover development data.\",\r\n        };\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  summarize(info: any, infoSet: ProjectInfoSet) {\r\n    const customDimensionErrors = infoSet.getCount(this.id, CustomDimensionWorldDataTest.vanillaDimensionChunkData);\r\n    const nameIdTableMissing = infoSet.getCount(this.id, CustomDimensionWorldDataTest.nameIdMappingTableMissing);\r\n    const unclaimedMappings = infoSet.getCount(this.id, CustomDimensionWorldDataTest.unclaimedDimensionMappings);\r\n\r\n    // Only add summary fields when there are actual findings.\r\n    // This avoids adding zero-value fields to validation output for content\r\n    // that has no world data (e.g., add-on packs), keeping existing baselines stable.\r\n    if (customDimensionErrors > 0 || nameIdTableMissing > 0 || unclaimedMappings > 0) {\r\n      info.customDimensionErrors = customDimensionErrors;\r\n      info.nameIdTableMissing = nameIdTableMissing;\r\n      info.unclaimedMappings = unclaimedMappings;\r\n    }\r\n  }\r\n\r\n  async generate(\r\n    projectItem: ProjectItem,\r\n    contentIndex: ContentIndex,\r\n    options?: IGeneratorOptions\r\n  ): Promise<ProjectInfoItem[]> {\r\n    const items: ProjectInfoItem[] = [];\r\n\r\n    if (\r\n      projectItem.itemType !== ProjectItemType.MCWorld &&\r\n      projectItem.itemType !== ProjectItemType.MCTemplate &&\r\n      projectItem.itemType !== ProjectItemType.worldFolder\r\n    ) {\r\n      return items;\r\n    }\r\n\r\n    const mcworld: MCWorld | undefined = await MCWorld.ensureOnItem(projectItem);\r\n\r\n    if (!mcworld) {\r\n      return items;\r\n    }\r\n\r\n    await mcworld.loadLevelDb(false);\r\n\r\n    if (!mcworld.levelDb) {\r\n      return items;\r\n    }\r\n\r\n    const dimensionIds = mcworld.dimensionIdsInChunks;\r\n\r\n    // No chunk data at all \u2014 nothing to validate\r\n    if (dimensionIds.size === 0) {\r\n      return items;\r\n    }\r\n\r\n    const hasCustomDimChunks = Array.from(dimensionIds).some((id) => id >= CUSTOM_DIMENSION_ID_START);\r\n    const vanillaDimIds = Array.from(dimensionIds).filter((id) => id < CUSTOM_DIMENSION_ID_START);\r\n\r\n    // Rule 102: Vanilla dimension chunk data found in LevelDB.\r\n    // Only meaningful when this project is shaped like an add-on that bundles\r\n    // a starter world. World templates and \"general world data\" projects are\r\n    // expected to contain vanilla chunk data \u2014 emitting an error there is a\r\n    // false positive.\r\n    const inAddOnContext = vanillaDimIds.length > 0 ? await this.isAddOnContextForWorld(projectItem.project) : false;\r\n\r\n    if (inAddOnContext) {\r\n      for (const dimId of vanillaDimIds) {\r\n        const dimName = VanillaIdToString[dimId] ?? `ID ${dimId}`;\r\n\r\n        items.push(\r\n          new ProjectInfoItem(\r\n            InfoItemType.error,\r\n            this.id,\r\n            CustomDimensionWorldDataTest.vanillaDimensionChunkData,\r\n            `LevelDB contains chunk data for vanilla dimension '${dimName}' (ID ${dimId}). ` +\r\n              \"Creator content must only include chunk data for custom dimensions (ID >= 1000).\",\r\n            projectItem,\r\n            dimId\r\n          )\r\n        );\r\n      }\r\n    }\r\n\r\n    // Rule 101: DimensionNameIdTable required when custom dimension chunk data is present\r\n    if (hasCustomDimChunks && !mcworld.hasDimensionNameIdTable) {\r\n      items.push(\r\n        new ProjectInfoItem(\r\n          InfoItemType.error,\r\n          this.id,\r\n          CustomDimensionWorldDataTest.nameIdMappingTableMissing,\r\n          \"LevelDB contains custom dimension chunk data but is missing the required DimensionNameIdTable key. \" +\r\n            \"This table is needed by Chunker to correctly associate dimension names with their chunk data.\",\r\n          projectItem\r\n        )\r\n      );\r\n    }\r\n\r\n    // Rule 103: Unclaimed dimension mappings (name-ID entries with no corresponding chunk data)\r\n    const nameIdTable = mcworld.dimensionNameIdTable;\r\n\r\n    if (nameIdTable && nameIdTable.size > 0) {\r\n      for (const [dimName, dimId] of nameIdTable) {\r\n        if (!dimensionIds.has(dimId)) {\r\n          items.push(\r\n            new ProjectInfoItem(\r\n              InfoItemType.warning,\r\n              this.id,\r\n              CustomDimensionWorldDataTest.unclaimedDimensionMappings,\r\n              `DimensionNameIdTable contains mapping '${dimName}' -> ID ${dimId} ` +\r\n                \"but no corresponding chunk data exists in the LevelDB.\",\r\n              projectItem,\r\n              dimName\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n\r\n    return items;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ScriptModuleManager from \"../../manager/ScriptModuleManager\";\r\nimport VsCodeFileManager from \"../../manager/VsCodeFileManager\";\r\nimport MinEngineVersionManager from \"../../manager/MinEngineVersionManager\";\r\nimport BaseGameVersionManager from \"../../manager/BaseGameVersionManager\";\r\nimport PackMetaDataInformationGenerator from \"../PackMetaDataInfoGenerator\";\r\nimport CooperativeAddOnRequirementsGenerator from \"../CooperativeAddOnRequirementsGenerator\";\r\nimport StrictPlatformInfoGenerator from \"../StrictPlatformInfoGenerator\";\r\nimport CooperativeAddOnItemRequirementsGenerator from \"../CooperativeAddOnItemRequirementsGenerator\";\r\nimport PathLengthFileGenerator from \"../PathLengthFileGenerator\";\r\nimport ItemCountsInfoGenerator from \"../ItemCountsInfoGenerator\";\r\nimport PackInfoGenerator from \"../PackInfoGenerator\";\r\nimport LineSizeInfoGenerator from \"../LineSizeInfoGenerator\";\r\nimport FormSchemaItemInfoGenerator from \"../FormSchemaItemInfoGenerator\";\r\nimport UnknownItemGenerator from \"../UnknownItemGenerator\";\r\nimport UnknownFileGenerator from \"../UnknownFileGenerator\";\r\nimport WorldItemInfoGenerator from \"../WorldItemInfoGenerator\";\r\nimport JsonFileTagsInfoGenerator from \"../JsonFileTagsInfoGenerator\";\r\nimport WorldDataInfoGenerator from \"../WorldDataInfoGenerator\";\r\nimport { ProjectInfoSuite } from \"../IProjectInfoData\";\r\nimport IProjectFileInfoGenerator from \"../IProjectFileInfoGenerator\";\r\nimport IProjectInfoGenerator from \"../IProjectInfoGenerator\";\r\nimport IProjectItemInfoGenerator from \"../IProjectItemInfoGenerator\";\r\nimport IProjectInfoGeneratorBase from \"../IProjectInfoGeneratorBase\";\r\nimport TextureInfoGenerator from \"../TextureInfoGenerator\";\r\nimport PackSizeInfoGenerator from \"../PackSizeInfoGenerator\";\r\nimport TextureImageInfoGenerator from \"../TextureImageInfoGenerator\";\r\nimport FormatVersionManager from \"../../manager/FormatVersionManager\";\r\nimport AnimationResourceInfoGenerator from \"../AnimationResourceInfoGenerator\";\r\nimport UnlinkedItemInfoGenerator from \"../UnlinkedItemInfoGenerator\";\r\nimport GeometryInfoGenerator from \"../GeometryInfoGenerator\";\r\nimport TextureReferenceInfoGenerator from \"../TextureReferenceInfoGenerator\";\r\nimport TypesInfoGenerator from \"../TypesInfoGenerator\";\r\nimport ValidFileGenerator from \"../ValidFileGenerator\";\r\nimport BlocksCatalogManager from \"../../manager/BlocksCatalogManager\";\r\nimport EntityTypeManager from \"../../manager/EntityTypeManager\";\r\nimport ItemTypeManager from \"../../manager/ItemTypeManager\";\r\nimport SharingInfoGenerator from \"../SharingInfoGenerator\";\r\nimport CheckVanillaDuplicatesInfoGenerator from \"../projectGenerators/CheckVanillaDuplicatesInfoGenerator\";\r\nimport CheckNoBOMGenerator from \"../fileGenerators/CheckNoBOMGenerator\";\r\nimport MCFunctionInfoGenerator from \"../MCFunctionInfoGenerator\";\r\nimport CheckPackIconsGenerator from \"../projectGenerators/CheckPackIconsGenerator\";\r\nimport CheckWorldIconsGenerator from \"../projectGenerators/CheckWorldIconsGenerator\";\r\nimport SoundsDefinitionInfoGenerator from \"../projectGenerators/SoundDefinitionsInfoGenerator\";\r\nimport SummaryInfoGenerator from \"../SummaryInfoGenerator\";\r\nimport ScriptInfoGenerator from \"../ScriptInfoGenerator\";\r\nimport CheckParticleIdentifierGenerator from \"../projectGenerators/CheckParticleIdentifierGenerator\";\r\nimport CheckSkinPackJsonGenerator from \"../projectGenerators/CheckSkinPackJsonGenerator\";\r\nimport CommunitySchemaItemInfoGenerator from \"../CommunitySchemaItemInfoGenerator\";\r\nimport JsonSchemaItemInfoGenerator from \"../JsonSchemaItemInfoGenerator\";\r\nimport CheckForbiddenFilesGenerator from \"../projectGenerators/CheckForbiddenFiles\";\r\nimport CheckProjectIntegrityGenerator from \"../projectGenerators/CheckProjectIntegrityGenerator\";\r\nimport CheckBetaFeaturesGenerator from \"../projectGenerators/CheckBetaFeaturesGenerator\";\r\nimport CheckExperimentalFlagInfoGenerator from \"../projectGenerators/CheckExperimentalFlagInfoGenerator\";\r\nimport CheckFeatureDeprecationInfoGenerator from \"../projectGenerators/CheckFeatureDeprecationInfoGenerator\";\r\nimport CheckGeometryFormatInfoGenerator from \"../projectGenerators/CheckGeometryFormatInfoGenerator\";\r\nimport CheckLangFilesGenerator from \"../projectGenerators/CheckLangFilesGenerator\";\r\nimport { SuiteConfigs } from \"./RegistrationData\";\r\nimport CheckManifestGenerator from \"../projectGenerators/checkManifest/CheckManifestGenerator\";\r\nimport CheckResourcePackDependenciesGenerator from \"../projectGenerators/CheckResourcePackDependenciesGenerator\";\r\nimport CheckWorldPackReferencesGenerator from \"../projectGenerators/CheckWorldPackReferencesGenerator\";\r\nimport CrossReferenceIndexGenerator from \"../CrossReferenceIndexGenerator\";\r\nimport CustomDimensionWorldDataInfoGenerator from \"../CustomDimensionWorldDataInfoGenerator\";\r\n\r\nexport const TestsToExcludeFromDefaultSuite = [\"CADDONREQ\", \"CADDONIREQ\", \"LANGFILES\", \"SHARING\", \"VANDUPES\"];\r\n\r\nexport default class GeneratorRegistrations {\r\n  static managers = [\r\n    new ScriptModuleManager(),\r\n    new VsCodeFileManager(),\r\n    new MinEngineVersionManager(),\r\n    new BaseGameVersionManager(),\r\n    new BlocksCatalogManager(),\r\n    new EntityTypeManager(),\r\n    new ItemTypeManager(),\r\n  ];\r\n\r\n  static projectGenerators = [\r\n    new ItemCountsInfoGenerator(),\r\n    new LineSizeInfoGenerator(),\r\n    new PackSizeInfoGenerator(),\r\n    new PackInfoGenerator(),\r\n    new JsonFileTagsInfoGenerator(),\r\n    new FormatVersionManager(),\r\n    new ScriptInfoGenerator(),\r\n    new SharingInfoGenerator(),\r\n    new SummaryInfoGenerator(),\r\n    new CheckVanillaDuplicatesInfoGenerator(),\r\n    new PackMetaDataInformationGenerator(),\r\n    new AnimationResourceInfoGenerator(),\r\n    new CooperativeAddOnRequirementsGenerator(),\r\n    new StrictPlatformInfoGenerator(),\r\n    new TextureInfoGenerator(),\r\n    new TextureReferenceInfoGenerator(),\r\n    new TypesInfoGenerator(),\r\n    new TextureImageInfoGenerator(),\r\n    new GeometryInfoGenerator(),\r\n    new MCFunctionInfoGenerator(),\r\n    new CheckPackIconsGenerator(),\r\n    new CheckWorldIconsGenerator(),\r\n    new SoundsDefinitionInfoGenerator(),\r\n    new CheckParticleIdentifierGenerator(),\r\n    new CheckSkinPackJsonGenerator(),\r\n    new CheckExperimentalFlagInfoGenerator(),\r\n    new CheckFeatureDeprecationInfoGenerator(),\r\n    new CheckForbiddenFilesGenerator(),\r\n    new CheckProjectIntegrityGenerator(),\r\n    new CheckBetaFeaturesGenerator(),\r\n    new CheckManifestGenerator(),\r\n    new CheckGeometryFormatInfoGenerator(),\r\n    new CheckLangFilesGenerator(),\r\n    new CheckResourcePackDependenciesGenerator(),\r\n    new CheckWorldPackReferencesGenerator(),\r\n    new CrossReferenceIndexGenerator(),\r\n    ...this.managers,\r\n  ];\r\n\r\n  static updaters = this.managers;\r\n\r\n  static itemGenerators = [\r\n    new UnknownItemGenerator(),\r\n    new FormSchemaItemInfoGenerator(),\r\n    new JsonSchemaItemInfoGenerator(),\r\n    new CommunitySchemaItemInfoGenerator(),\r\n    new WorldItemInfoGenerator(),\r\n    new WorldDataInfoGenerator(),\r\n    new CustomDimensionWorldDataInfoGenerator(),\r\n    new CooperativeAddOnItemRequirementsGenerator(),\r\n    new UnlinkedItemInfoGenerator(),\r\n  ];\r\n\r\n  static fileGenerators = [\r\n    new UnknownFileGenerator(),\r\n    new ValidFileGenerator(),\r\n    new PathLengthFileGenerator(),\r\n    new CheckNoBOMGenerator(),\r\n  ];\r\n\r\n  static configureForSuite(\r\n    generator:\r\n      | IProjectFileInfoGenerator\r\n      | IProjectInfoGenerator\r\n      | IProjectItemInfoGenerator\r\n      | IProjectInfoGeneratorBase,\r\n    suite: ProjectInfoSuite\r\n  ) {\r\n    const config = SuiteConfigs[suite];\r\n\r\n    if (\"performAddOnValidations\" in generator) {\r\n      generator.performAddOnValidations = config.performAddOnValidations;\r\n    }\r\n    if (\"performPlatformVersionValidations\" in generator) {\r\n      generator.performPlatformVersionValidations = config.performPlatformVersionValidations;\r\n    }\r\n\r\n    if (\"identifierOverridesAreErrors\" in generator) {\r\n      generator.identifierOverridesAreErrors = config.identifierOverridesAreErrors;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project from \"../app/Project\";\r\nimport IProjectUpdater from \"./IProjectUpdater\";\r\nimport Log from \"../core/Log\";\r\nimport ProjectUpdateResult from \"./ProjectUpdateResult\";\r\nimport GeneratorRegistrations from \"../info/registration/GeneratorRegistrations\";\r\n\r\nexport default class ProjectUpdateRunner {\r\n  project?: Project;\r\n\r\n  constructor(project: Project) {\r\n    this.project = project;\r\n  }\r\n\r\n  async updateProject(includeUpdaters?: string[], excludeUpdaters?: string[]) {\r\n    const updaters: IProjectUpdater[] = GeneratorRegistrations.updaters;\r\n\r\n    const results: ProjectUpdateResult[] = [];\r\n\r\n    if (!this.project) {\r\n      Log.throwUnexpectedUndefined(\"PURUP\");\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < updaters.length; i++) {\r\n      const updater = updaters[i];\r\n\r\n      const updaterIds = updater.getUpdateIds();\r\n\r\n      for (let j = 0; j < updaterIds.length; j++) {\r\n        if (\r\n          (!includeUpdaters || includeUpdaters.includes(updater.id)) &&\r\n          (!excludeUpdaters || !excludeUpdaters.includes(updater.id))\r\n        ) {\r\n          const localResults = await updater.update(this.project, updaterIds[j]);\r\n\r\n          results.push(...localResults);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  async update(updaterId: string, updaterIndex: number): Promise<ProjectUpdateResult[]> {\r\n    const updaters: IProjectUpdater[] = GeneratorRegistrations.updaters;\r\n    const allResults: ProjectUpdateResult[] = [];\r\n\r\n    if (!this.project) {\r\n      Log.throwUnexpectedUndefined(\"PURU\");\r\n      return [];\r\n    }\r\n\r\n    for (let i = 0; i < updaters.length; i++) {\r\n      const updater = updaters[i];\r\n\r\n      if (updater.id === updaterId) {\r\n        const results = await updater.update(this.project, updaterIndex);\r\n\r\n        for (const result of results) {\r\n          allResults.push(result);\r\n        }\r\n      }\r\n    }\r\n\r\n    return allResults;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Project from \"../app/Project\";\r\n\r\nconst EslintDefaultConfig = [\r\n  \"import minecraftLinting from 'eslint-plugin-minecraft-linting';\",\r\n  \"import tsParser from '@typescript-eslint/parser';\",\r\n  \"import ts from '@typescript-eslint/eslint-plugin';\",\r\n  \"export default [\",\r\n  \"  {\",\r\n  \"    files: ['scripts/**/*.ts'],\",\r\n  \"    languageOptions: {\",\r\n  \"      parser: tsParser,\",\r\n  \"      ecmaVersion: 'latest',\",\r\n  \"    },\",\r\n  \"    plugins: {\",\r\n  \"      ts,\",\r\n  \"      'minecraft-linting': minecraftLinting,\",\r\n  \"    },\",\r\n  \"    rules: {\",\r\n  \"      'minecraft-linting/avoid-unnecessary-command': 'error',\",\r\n  \"    },\",\r\n  \"  },\",\r\n  \"];\",\r\n];\r\n\r\nexport default class EslintConfig {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<EslintConfig, EslintConfig>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<EslintConfig, EslintConfig>) {\r\n    let justf: EslintConfig | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      justf = new EslintConfig();\r\n\r\n      justf.file = file;\r\n\r\n      file.manager = justf;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof EslintConfig) {\r\n      justf = file.manager as EslintConfig;\r\n\r\n      if (!justf.isLoaded && loadHandler) {\r\n        justf.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await justf.load();\r\n\r\n      return justf;\r\n    }\r\n\r\n    return justf;\r\n  }\r\n\r\n  async ensureDefault() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    this._file.setContent(EslintConfig.getDefaultContent());\r\n  }\r\n\r\n  async ensureMin() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    if (!this._file.content || typeof this._file.content !== \"string\") {\r\n      this._file.setContent(EslintConfig.getDefaultContent());\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent(true);\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  static getDefaultContent() {\r\n    return EslintDefaultConfig.join(\"\\n\").replace(/'/gi, '\"');\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport Project from \"../app/Project\";\r\n\r\nconst JustDefaultConfig = [\r\n  \"import { argv, parallel, series, task, tscTask } from 'just-scripts';\",\r\n  \"import {\",\r\n  \"  BundleTaskParameters,\",\r\n  \"  CopyTaskParameters,\",\r\n  \"  bundleTask,\",\r\n  \"  cleanTask,\",\r\n  \"  cleanCollateralTask,\",\r\n  \"  copyTask,\",\r\n  \"  coreLint,\",\r\n  \"  mcaddonTask,\",\r\n  \"  setupEnvironment,\",\r\n  \"  ZipTaskParameters,\",\r\n  \"  STANDARD_CLEAN_PATHS,\",\r\n  \"  DEFAULT_CLEAN_DIRECTORIES,\",\r\n  \"  getOrThrowFromProcess,\",\r\n  \"  watchTask,\",\r\n  \"} from '@minecraft/core-build-tasks';\",\r\n  \"import path from 'path';\",\r\n  \"setupEnvironment(path.resolve(__dirname, '.env'));\",\r\n  \"const projectName = getOrThrowFromProcess('PROJECT_NAME');\",\r\n  \"const bundleTaskOptions: BundleTaskParameters = {\",\r\n  \"  entryPoint: path.join(__dirname, './scripts/main.ts'),\",\r\n  \"  external: ['@minecraft/server', '@minecraft/server-ui'],\",\r\n  \"  outfile: path.resolve(__dirname, './dist/scripts/main.js'),\",\r\n  \"  minifyWhitespace: false,\",\r\n  \"  sourcemap: true,\",\r\n  \"  outputSourcemapPath: path.resolve(__dirname, './dist/debug'),\",\r\n  \"};\",\r\n  \"const copyTaskOptions: CopyTaskParameters = {\",\r\n  \"  copyToBehaviorPacks: [`./behavior_packs/$_{projectName}`],\",\r\n  \"  copyToScripts: ['./dist/scripts'],\",\r\n  \"  copyToResourcePacks: [`./resource_packs/$_{projectName}`],\",\r\n  \"};\",\r\n  \"const mcaddonTaskOptions: ZipTaskParameters = {\",\r\n  \"  ...copyTaskOptions,\",\r\n  \"  outputFile: `./dist/packages/$_{projectName}.mcaddon`,\",\r\n  \"};\",\r\n  \"task('lint', coreLint(['scripts/**/*.ts'], argv().fix));\",\r\n  \"task('typescript', tscTask());\",\r\n  \"task('bundle', bundleTask(bundleTaskOptions));\",\r\n  \"task('build', series('typescript', 'bundle'));\",\r\n  \"task('clean-local', cleanTask(DEFAULT_CLEAN_DIRECTORIES));\",\r\n  \"task('clean-collateral', cleanCollateralTask(STANDARD_CLEAN_PATHS));\",\r\n  \"task('clean', parallel('clean-local', 'clean-collateral'));\",\r\n  \"task('copyArtifacts', copyTask(copyTaskOptions));\",\r\n  \"task('package', series('clean-collateral', 'copyArtifacts'));\",\r\n  \"task(\",\r\n  \"  'local-deploy',\",\r\n  \"  watchTask(\",\r\n  \"    ['scripts/**/*.ts', 'behavior_packs/**/*.{json,lang,tga,ogg,png}', 'resource_packs/**/*.{json,lang,tga,ogg,png}'],\",\r\n  \"    series('clean-local', 'build', 'package')\",\r\n  \"  )\",\r\n  \");\",\r\n  \"task('createMcaddonFile', mcaddonTask(mcaddonTaskOptions));\",\r\n  \"task('mcaddon', series('clean-local', 'build', 'createMcaddonFile'));\",\r\n];\r\n\r\nexport default class JustConfig {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<JustConfig, JustConfig>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<JustConfig, JustConfig>) {\r\n    let justf: JustConfig | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      justf = new JustConfig();\r\n\r\n      justf.file = file;\r\n\r\n      file.manager = justf;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof JustConfig) {\r\n      justf = file.manager as JustConfig;\r\n\r\n      if (!justf.isLoaded && loadHandler) {\r\n        justf.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await justf.load();\r\n\r\n      return justf;\r\n    }\r\n\r\n    return justf;\r\n  }\r\n\r\n  async ensureDefault() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    this._file.setContent(JustConfig.getDefaultContent());\r\n  }\r\n\r\n  async ensureMin() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.load();\r\n\r\n    if (!this._file.content || typeof this._file.content !== \"string\") {\r\n      this._file.setContent(JustConfig.getDefaultContent());\r\n    }\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    return false;\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent(true);\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  static getDefaultContent() {\r\n    return JustDefaultConfig.join(\"\\n\").replace(/'/gi, '\"').replace(/\\$_{/gi, \"${\");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport EslintConfig from \"../devproject/EslintConfig\";\r\nimport JustConfig from \"../devproject/JustConfig\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { FolderContext } from \"./Project\";\r\n\r\nexport default class ProjectStandard {\r\n  static async ensureIsStandard(project: Project) {\r\n    await project.ensureProjectFolder();\r\n\r\n    if (project.projectFolder) {\r\n      const justFile = await project.projectFolder.getFileFromRelativePath(\"/just.config.ts\");\r\n\r\n      if (justFile && (await justFile.exists())) {\r\n        justFile.setContent(JustConfig.getDefaultContent());\r\n        justFile.saveContent();\r\n      }\r\n\r\n      const eslintFile = await project.projectFolder.getFileFromRelativePath(\"/eslint.config.mjs\");\r\n\r\n      if (eslintFile && (await eslintFile.exists())) {\r\n        eslintFile.setContent(EslintConfig.getDefaultContent());\r\n        eslintFile.saveContent();\r\n      }\r\n\r\n      const packageJson = await project.projectFolder.getFileFromRelativePath(\"/package.json\");\r\n\r\n      if (packageJson && (await packageJson.exists())) {\r\n        project.ensureItemByProjectPath(\r\n          \"/package.json\",\r\n          ProjectItemStorageType.singleFile,\r\n          \"package.json\",\r\n          ProjectItemType.packageJson,\r\n          FolderContext.unknown,\r\n          undefined,\r\n          ProjectItemCreationType.generated\r\n        );\r\n      }\r\n    }\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const item = itemsCopy[i];\r\n\r\n      if (item.itemType === ProjectItemType.justConfigTs && item.primaryFile) {\r\n        item.creationType = ProjectItemCreationType.generated;\r\n\r\n        const justConfig = await JustConfig.ensureOnFile(item.primaryFile);\r\n\r\n        if (justConfig) {\r\n          justConfig.ensureDefault();\r\n          await justConfig.save();\r\n        }\r\n      } else if (item.itemType === ProjectItemType.esLintConfigMjs && item.primaryFile) {\r\n        item.creationType = ProjectItemCreationType.generated;\r\n\r\n        const eslintConfig = await EslintConfig.ensureOnFile(item.primaryFile);\r\n\r\n        if (eslintConfig) {\r\n          eslintConfig.ensureDefault();\r\n          await eslintConfig.save();\r\n        }\r\n      } else if (item.itemType === ProjectItemType.packageJson && item.primaryFile) {\r\n        item.creationType = ProjectItemCreationType.generated;\r\n\r\n        const packageJson = await NpmPackageDefinition.ensureOnFile(item.primaryFile);\r\n\r\n        if (packageJson) {\r\n          await packageJson.ensureStandardContent();\r\n          await packageJson.save();\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "import IActionGroup from \"./IActionGroup.js\";\r\n\r\nexport enum ActionSetTarget {\r\n  general = 0,\r\n  script = 1,\r\n  mcfunction = 2,\r\n  entityEvent = 3,\r\n  gameTest = 4,\r\n  worldTest = 5,\r\n}\r\n\r\nexport default interface IActionSetData extends IActionGroup {\r\n  name: string;\r\n  targetType: ActionSetTarget;\r\n}\r\n", "import Action from \"./Action\";\r\n\r\nexport default class ActionError {\r\n  action: Action;\r\n  message: string;\r\n\r\n  constructor(action: Action, message: string) {\r\n    this.action = action;\r\n    this.message = message;\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport Test from \"../gameTest/Test\";\r\nimport IWorld from \"../minecraft/IWorld\";\r\nimport Action from \"./Action\";\r\nimport ActionError from \"./ActionError\";\r\n\r\nexport default class ActionSetScope {\r\n  parent: ActionSetScope | undefined;\r\n\r\n  test: Test | undefined;\r\n  world: IWorld | undefined;\r\n  errors: ActionError[] = [];\r\n\r\n  state: { [name: string]: object } = {};\r\n\r\n  getState(name: string): object | undefined {\r\n    const result = this.state[name];\r\n\r\n    if (!result && this.parent) {\r\n      return this.parent.getState(name);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  setState(name: string, val: object) {\r\n    if (Utilities.isUsableAsObjectKey(name)) {\r\n      this.state[name] = val;\r\n    }\r\n  }\r\n\r\n  addError(action: Action, message: string) {\r\n    const error = new ActionError(action, message);\r\n\r\n    this.addErrorDirect(error);\r\n  }\r\n\r\n  addErrorDirect(error: ActionError) {\r\n    this.errors.push(error);\r\n\r\n    if (this.parent) {\r\n      this.parent.addErrorDirect(error);\r\n    }\r\n  }\r\n\r\n  createBlockLocation(name: string) {\r\n    const val = this.getState(name);\r\n\r\n    if (val instanceof Array) {\r\n    }\r\n  }\r\n}\r\n", "import IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IFormDefinition from \"./IFormDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class DataFormFile {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _title?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public formDefinition?: IFormDefinition;\r\n\r\n  private _onLoaded = new EventDispatcher<DataFormFile, DataFormFile>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get title() {\r\n    if (this.formDefinition) {\r\n      return this.formDefinition.title;\r\n    }\r\n\r\n    return this._title;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n\r\n    if (newId) {\r\n      const underscore = newId.lastIndexOf(\"_\");\r\n\r\n      if (underscore >= 0 && underscore < newId.length - 2) {\r\n        this._title = newId.substring(0, underscore);\r\n      } else {\r\n        this._title = newId;\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<DataFormFile, DataFormFile>) {\r\n    let dff: DataFormFile | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dff = new DataFormFile();\r\n\r\n      dff.file = file;\r\n\r\n      file.manager = dff;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof DataFormFile) {\r\n      dff = file.manager as DataFormFile;\r\n\r\n      if (!dff.isLoaded && loadHandler) {\r\n        dff.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dff.load();\r\n    }\r\n\r\n    return dff;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.formDefinition !== null, \"DFFP\");\r\n\r\n    if (this.formDefinition) {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this.formDefinition);\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.formDefinition = StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "import ActionSet from \"./ActionSet\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IAction from \"./IAction\";\r\nimport Location from \"../minecraft/Location\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IGetSetPropertyObject from \"../dataform/IGetSetPropertyObject\";\r\nimport ActionSetScope from \"./ActionSetScope\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport { IActionable } from \"./IActionable\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport enum ActionType {\r\n  simulatedPlayerSpawn = \"test_simulated_player_spawn\",\r\n  simulatedPlayerMove = \"test_simulated_player_move\",\r\n  simulatedPlayerInteract = \"test_simulated_player_interact\",\r\n  entitySpawn = \"entity_spawn\",\r\n  idle = \"test_idle\",\r\n}\r\n\r\nexport default abstract class Action implements IGetSetPropertyObject, IActionable {\r\n  data: IAction;\r\n  group: ActionGroup;\r\n  typeForm?: IFormDefinition;\r\n  actionSet: ActionSet;\r\n\r\n  get id() {\r\n    return this.data.id;\r\n  }\r\n\r\n  set id(newId: string | undefined) {\r\n    this.data.id = newId;\r\n  }\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Action, string>();\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get typeId() {\r\n    return \"action\";\r\n  }\r\n\r\n  get shortSubjectId() {\r\n    return \"obj\";\r\n  }\r\n\r\n  get withId() {\r\n    const withId = this.data.withId;\r\n\r\n    if (withId) {\r\n      return withId;\r\n    }\r\n\r\n    return this.shortSubjectId;\r\n  }\r\n\r\n  get setId() {\r\n    const setId = this.data.setId;\r\n\r\n    if (setId) {\r\n      return setId;\r\n    }\r\n\r\n    return this.shortSubjectId;\r\n  }\r\n\r\n  get type(): string {\r\n    return this.data.type;\r\n  }\r\n\r\n  getDataCopy() {\r\n    const result: { [propName: string]: any } = {};\r\n\r\n    if (this.data) {\r\n      for (const propName in this.data) {\r\n        let val = (this.data as any)[propName];\r\n\r\n        if (val) {\r\n          result[propName] = val;\r\n        }\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  constructor(group: ActionGroup, data: IAction) {\r\n    this.group = group;\r\n\r\n    if (!this.group._actionSet) {\r\n      throw new Error(\"Cannot add action to unattached group\");\r\n    }\r\n\r\n    this.actionSet = this.group._actionSet;\r\n\r\n    this.data = data;\r\n  }\r\n\r\n  abstract validate(): boolean;\r\n\r\n  run(scope: ActionSetScope) {}\r\n\r\n  getProperty(id: string) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    return (this.data as any)[id] as any;\r\n  }\r\n\r\n  setProperty(id: string, value: any) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    (this.data as any)[id] = value;\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    return this.data as any;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    (this.data as any) = value;\r\n  }\r\n\r\n  getArgumentAsLocation(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (val instanceof Array && val.length >= 3) {\r\n      const loc = new Location(val[0], val[1], val[2]);\r\n\r\n      return loc;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getArgumentAsBlockLocation(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (val instanceof Array && val.length >= 3) {\r\n      const loc = new BlockLocation(val[0], val[1], val[2]);\r\n\r\n      return loc;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  _notifyPropertyChanged(propertyName: string) {\r\n    this._onPropertyChanged.dispatch(this, propertyName);\r\n  }\r\n\r\n  abstract getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements;\r\n  abstract getCommandRequirements(options: ICommandOptions): ICommandRequirements;\r\n  abstract addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ): void;\r\n  abstract addCommandLines(lines: string[], indent: number, options: ICommandOptions): void;\r\n\r\n  getScriptTest() {\r\n    return \"test\";\r\n  }\r\n\r\n  getScriptWith() {\r\n    if (!this.data.withId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.withId;\r\n  }\r\n\r\n  getScriptSet() {\r\n    if (!this.data.setId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.setId;\r\n  }\r\n\r\n  getCommandWith() {\r\n    if (!this.data.withId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.withId;\r\n  }\r\n\r\n  getCommandSet() {\r\n    if (!this.data.setId) {\r\n      return \"obj\";\r\n    }\r\n\r\n    return this.data.setId;\r\n  }\r\n\r\n  getArgumentAsNumber(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (typeof val === \"number\") {\r\n      return val;\r\n    } else if (typeof val === \"string\") {\r\n      return parseFloat(val);\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  getArgumentAsString(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    return val;\r\n  }\r\n\r\n  validateArgumentIsEntityType(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (!val || typeof val !== \"string\") {\r\n      throw new Error(\"Argument '\" + name + \"' is not defined.\");\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  absolutizeLocation(location: Location) {\r\n    if (!this.actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      this.actionSet.locationRoot.x + location.x,\r\n      this.actionSet.locationRoot.y + location.y,\r\n      this.actionSet.locationRoot.z + location.z\r\n    );\r\n  }\r\n\r\n  absolutizeBlockLocation(location: BlockLocation) {\r\n    if (!this.actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(this.actionSet.locationRoot.x + location.x),\r\n      Math.round(this.actionSet.locationRoot.y + location.y),\r\n      Math.round(this.actionSet.locationRoot.z + location.z)\r\n    );\r\n  }\r\n\r\n  validateArgumentIsType(name: string, type: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    const typestr = typeof val;\r\n\r\n    switch (type) {\r\n      case \"BlockLocation\":\r\n      case \"Location\":\r\n        if (!(val instanceof Array) || val.length !== 3) {\r\n          throw new Error(\"Expected an array of 3 numbers for parameter '\" + name + \"'\");\r\n        }\r\n        break;\r\n\r\n      case \"boolean\":\r\n      case \"number\":\r\n      case \"string\":\r\n        if (typestr !== type) {\r\n          throw new Error(\"Unexpected type mismatch: \" + name + \" is \" + typestr + \" (expected \" + type + \")\");\r\n        }\r\n        break;\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport SimulatedPlayer from \"../gameTest/SimulatedPlayer\";\r\nimport ActionSetScope from \"./ActionSetScope\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class BlockBreakAction extends Action {\r\n  get shortSubjectId() {\r\n    return \"blockBreak\";\r\n  }\r\n\r\n  get typeTitle() {\r\n    return \"Block Break Action\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"block_break\";\r\n  }\r\n\r\n  get title() {\r\n    let title = this.typeTitle;\r\n\r\n    if (this.location) {\r\n      title += \" \" + this.location.toSummary();\r\n    }\r\n\r\n    return title;\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsBlockLocation(\"location\");\r\n  }\r\n\r\n  set location(location: BlockLocation | undefined) {\r\n    if (!location) {\r\n      (this.data as any)[\"location\"] = undefined;\r\n    } else {\r\n      (this.data as any)[\"location\"] = [location.x, location.y, location.z];\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"BlockLocation\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new BlockLocation(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"tag @p[l=1] add \" + this.getCommandSet());\r\n  }\r\n\r\n  run(scope: ActionSetScope) {\r\n    if (!scope.test) {\r\n      scope.addError(this, \"Test is not specified\");\r\n      return;\r\n    }\r\n\r\n    if (!this.location) {\r\n      scope.addError(this, \"Location is not specified\");\r\n      return;\r\n    }\r\n\r\n    //const simPlayer = scope.test.spawnSimulatedPlayer(this.location);\r\n\r\n    const simPlayer = scope.getState(this.setId) as SimulatedPlayer;\r\n\r\n    if (simPlayer) {\r\n      simPlayer.interact();\r\n    }\r\n    //scope.setState(this.setId, simPlayer);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    /*    if (!this.location) {\r\n      throw new Error();\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, this.getScriptSet() + \".interact();\");*/\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\n\r\nexport default abstract class GroupAction extends Action {}\r\n", "export enum ScriptGenerationPlacement {\r\n  initInSequence = 5,\r\n  beforeBlockStart = 9,\r\n  blockStart = 10,\r\n  afterBlockStart = 11,\r\n  inSequence = 20,\r\n  beforeBlockEnd = 29,\r\n  blockEnd = 30,\r\n  afterBlockEnd = 31,\r\n}\r\n\r\nexport default interface IScriptGenerationContext {\r\n  topLevelFunction?: boolean;\r\n  indent: number;\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class BlockExplodeAction extends GroupAction {\r\n  get typeId() {\r\n    return \"block_explode\";\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      lines.push(\"export function \" + this.group.name + \"(event: mc.BlockExplodeAfterEventSignal) {\");\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        \"mc.world.afterEvents.blockExplode.subscribe(\" + this.group.name + \");\"\r\n      );\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class BlockSetAction extends Action {\r\n  get typeId() {\r\n    return \"block_set\";\r\n  }\r\n\r\n  get blockType() {\r\n    return this.getArgumentAsString(\"blockType\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.blockType) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"setblock \" + this.blockType + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.blockType) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        \"overworld.setlockType({ x: \" + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + '}, \"' + this.blockType + '\",);'\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n\r\n    return true;\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class EntityDieAction extends GroupAction {\r\n  get typeId() {\r\n    return \"entity_die\";\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      lines.push(\"export function \" + this.group.name + \"(event: mc.EntityDieAfterEventSignal) {\");\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      ActionGroup.addLine(lines, context.indent, \"mc.world.afterEvents.entityDie.subscribe(\" + this.group.name + \");\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class EntitySpawnAction extends Action {\r\n  get typeTitle() {\r\n    return \"Spawn Entity\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"entity_spawn\";\r\n  }\r\n\r\n  get title() {\r\n    if (!this.entityType) {\r\n      return this.typeTitle;\r\n    }\r\n\r\n    return this.typeTitle + \" \" + this.entityType;\r\n  }\r\n\r\n  get entityType() {\r\n    return this.getArgumentAsString(\"entityType\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.entityType) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"summon \" + this.entityType + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.entityType) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        Log.debugAlert(\"Action does not have a defined location.\");\r\n      } else {\r\n        if (options.useGameTestApis) {\r\n          ActionGroup.addLine(\r\n            lines,\r\n            context.indent,\r\n            'test.spawnEntity(\"' + this.entityType + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n          );\r\n        } else {\r\n          ActionGroup.addLine(\r\n            lines,\r\n            context.indent,\r\n            'overworld.spawnEntity(\"' + this.entityType + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n    this.validateArgumentIsEntityType(\"entityType\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getCommand() {\r\n    return \"\";\r\n  }\r\n\r\n  getJavaScript() {\r\n    return \"\";\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Action from \"./Action\";\r\n\r\nexport default class GeneralAction extends Action {\r\n  _typeId = \"general\";\r\n\r\n  get typeId() {\r\n    return this._typeId;\r\n  }\r\n\r\n  set typeId(newTypeId: string) {\r\n    this._typeId = newTypeId;\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {}\r\n}\r\n", "import IConditionClause from \"./IConditionClause\";\r\n\r\nexport enum ActionContextType {\r\n  general = 0,\r\n  entity = 1,\r\n  block = 2,\r\n  item = 3,\r\n  gameTest = 4,\r\n  dimensionLocation = 5,\r\n}\r\n\r\nexport default interface IAction {\r\n  id?: string;\r\n  type: string;\r\n  args?: object;\r\n  condition?: IConditionClause[];\r\n  actions?: IAction[];\r\n  value?: string;\r\n  withId?: string;\r\n  setId?: string;\r\n\r\n  name?: string;\r\n  location?: number[];\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class ItemSpawnAction extends Action {\r\n  get typeId() {\r\n    return \"item_spawn\";\r\n  }\r\n\r\n  get itemType() {\r\n    return this.getArgumentAsString(\"itemType\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.itemType) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"particle \" + this.itemType + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.itemType) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        'overworld.spawnItem(\"' + this.itemType + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class ParticleSpawnAction extends Action {\r\n  get typeId() {\r\n    return \"particle_spawn\";\r\n  }\r\n\r\n  get particleName() {\r\n    return this.getArgumentAsString(\"particleName\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.particleName) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"particle \" + this.particleName + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.particleName) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        'overworld.spawnParticle(\"' + this.particleName + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class PlayerJoinAction extends GroupAction {\r\n  get typeId() {\r\n    return \"player_join\";\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      lines.push(\"export function \" + this.group.name + \"(event: mc.PLayerJoinAfterEventSignal) {\");\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      ActionGroup.addLine(lines, context.indent, \"mc.world.afterEvents.playerJoin.subscribe(\" + this.group.name + \");\");\r\n    }\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class RandomizeGroupAction extends GroupAction {\r\n  get typeTitle() {\r\n    return \"Randomize\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"randomize\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      let functionLine = \"export function \" + this.group.name + \"() {\";\r\n      lines.push(functionLine);\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class SequenceGroupAction extends GroupAction {\r\n  get typeTitle() {\r\n    return \"Sequence\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"sequence\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      let functionLine = \"export function \" + this.group.name + \"() {\";\r\n      lines.push(functionLine);\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext from \"./IScriptGenerationContext\";\r\n\r\nexport default class PlaySoundAction extends Action {\r\n  get typeId() {\r\n    return \"sound_play\";\r\n  }\r\n\r\n  get soundName() {\r\n    return this.getArgumentAsString(\"soundName\");\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.soundName) {\r\n      return;\r\n    }\r\n\r\n    let loc = this.location;\r\n\r\n    if (!loc) {\r\n      loc = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"playsound \" + this.soundName + \" \" + loc.x + \" \" + loc.y + \" \" + loc.z);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.soundName) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let loc = this.location;\r\n\r\n      if (!loc) {\r\n        loc = new Location(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        'overworld.playSound(\"' + this.soundName + '\", { x: ' + loc.x + \", y: \" + loc.y + \", z: \" + loc.z + \"});\"\r\n      );\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements.js\";\r\nimport ICommandOptions from \"./ICommandOptions.js\";\r\nimport ICommandRequirements from \"./ICommandRequirements.js\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class TestIdleAction extends Action {\r\n  get typeTitle() {\r\n    return \"Idle\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  get ticks() {\r\n    return this.getArgumentAsNumber(\"ticks\");\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"ticks\", \"number\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      ActionGroup.addLine(lines, context.indent, \"await \" + this.getScriptTest() + \".idle(\" + this.ticks + \");\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport Location from \"../minecraft/Location\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class TestSimulatedPlayerMoveAction extends Action {\r\n  get typeTitle() {\r\n    return \"Move Simulated Player\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"test_simulated_player_move\";\r\n  }\r\n\r\n  get shortSubjectId() {\r\n    return \"simplayer\";\r\n  }\r\n\r\n  get title() {\r\n    if (!this.location) {\r\n      return this.typeTitle;\r\n    }\r\n\r\n    return this.typeTitle + \" \" + this.location.toSummary();\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsLocation(\"location\");\r\n  }\r\n\r\n  set location(location: Location | undefined) {\r\n    if (!location) {\r\n      (this.data as any)[\"location\"] = undefined;\r\n    } else {\r\n      (this.data as any)[\"location\"] = [location.x, location.y, location.z];\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new Location(0, 0, 0);\r\n    }\r\n\r\n    location = this.absolutizeLocation(location);\r\n\r\n    ActionGroup.addLine(\r\n      lines,\r\n      indent,\r\n      \"tp @p[tag=\" + this.getCommandWith() + \"]\" + location.x + \" \" + location.y + \" \" + location.z\r\n    );\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new Location(0, 0, 0);\r\n    }\r\n\r\n    ActionGroup.addLine(\r\n      lines,\r\n      context.indent,\r\n      this.getScriptWith() +\r\n        \".moveToLocation(new Location(\" +\r\n        location.x +\r\n        \", \" +\r\n        location.y +\r\n        \", \" +\r\n        location.z +\r\n        \"));\"\r\n    );\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements.js\";\r\nimport ICommandOptions from \"./ICommandOptions.js\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport ICommandRequirements from \"./ICommandRequirements.js\";\r\nimport ActionSetScope from \"./ActionSetScope.js\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class SimulatedPlayerSpawnAction extends Action {\r\n  get shortSubjectId() {\r\n    return \"simplayer\";\r\n  }\r\n\r\n  get typeTitle() {\r\n    return \"Spawn Simulated Player\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"test_simulated_player_spawn\";\r\n  }\r\n\r\n  get title() {\r\n    let title = this.typeTitle;\r\n\r\n    if (this.location) {\r\n      title += \" \" + this.location.toSummary();\r\n    }\r\n\r\n    return title;\r\n  }\r\n\r\n  get location() {\r\n    return this.getArgumentAsBlockLocation(\"location\");\r\n  }\r\n\r\n  set location(location: BlockLocation | undefined) {\r\n    if (!location) {\r\n      (this.data as any)[\"location\"] = undefined;\r\n    } else {\r\n      (this.data as any)[\"location\"] = [location.x, location.y, location.z];\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"location\", \"Location\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    let location = this.location;\r\n\r\n    if (!location) {\r\n      location = new BlockLocation(0, 0, 0);\r\n    }\r\n\r\n    location = this.absolutizeBlockLocation(location);\r\n\r\n    ActionGroup.addLine(lines, indent, \"tag @p[l=1] add \" + this.getCommandSet());\r\n  }\r\n\r\n  run(scope: ActionSetScope) {\r\n    if (!scope.test) {\r\n      scope.addError(this, \"Test is not specified\");\r\n      return;\r\n    }\r\n\r\n    if (!this.location) {\r\n      scope.addError(this, \"Location is not specified\");\r\n      return;\r\n    }\r\n\r\n    const simPlayer = scope.test.spawnSimulatedPlayer(this.location);\r\n\r\n    scope.setState(this.setId, simPlayer);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      let location = this.location;\r\n\r\n      if (!location) {\r\n        location = new BlockLocation(0, 0, 0);\r\n      }\r\n\r\n      ActionGroup.addLine(\r\n        lines,\r\n        context.indent,\r\n        \"const \" +\r\n          this.getScriptSet() +\r\n          \" = \" +\r\n          this.getScriptTest() +\r\n          \".spawnSimulatedPlayer(new BlockLocation(\" +\r\n          location.x +\r\n          \", \" +\r\n          location.y +\r\n          \", \" +\r\n          location.z +\r\n          '), \"' +\r\n          this.getScriptSet() +\r\n          '\");'\r\n      );\r\n    }\r\n  }\r\n}\r\n", "import IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport GroupAction from \"./GroupAction\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class TickGroupAction extends GroupAction {\r\n  get typeTitle() {\r\n    return \"Tick\";\r\n  }\r\n\r\n  get typeId() {\r\n    return \"tick\";\r\n  }\r\n\r\n  get title() {\r\n    return this.typeTitle;\r\n  }\r\n\r\n  get ticks() {\r\n    return this.getArgumentAsNumber(\"ticks\");\r\n  }\r\n\r\n  validate() {\r\n    this.validateArgumentIsType(\"ticks\", \"number\");\r\n\r\n    return true;\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions): IScriptRequirements {\r\n    return {\r\n      needsTest: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, optons: ICommandOptions) {}\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (placement === ScriptGenerationPlacement.blockStart) {\r\n      let functionLine = \"export function \" + this.group.name + \"() {\";\r\n      lines.push(functionLine);\r\n    } else if (placement === ScriptGenerationPlacement.blockEnd) {\r\n      lines.push(\"}\");\r\n    }\r\n\r\n    if (placement === ScriptGenerationPlacement.initInSequence) {\r\n      let ticks = this.getProperty(\"everyNTicks\");\r\n\r\n      if (!ticks) {\r\n        ticks = 1;\r\n      }\r\n      ActionGroup.addLine(lines, context.indent, \"mc.system.runInterval(\" + this.group.name + \", \" + ticks + \");\");\r\n    }\r\n  }\r\n}\r\n", "import Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class WorldSendMessageAction extends Action {\r\n  get typeId() {\r\n    return \"world_send_message\";\r\n  }\r\n\r\n  get message() {\r\n    return this.getArgumentAsString(\"message\");\r\n  }\r\n\r\n  getScriptRequirements(): IScriptRequirements {\r\n    return {\r\n      needsLocalOverworld: true,\r\n    };\r\n  }\r\n\r\n  getCommandRequirements(): ICommandRequirements {\r\n    return {};\r\n  }\r\n\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions) {\r\n    if (!this.message) {\r\n      return;\r\n    }\r\n\r\n    ActionGroup.addLine(lines, indent, \"say \" + this.message);\r\n  }\r\n\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    if (!this.message) {\r\n      return;\r\n    }\r\n    if (placement === ScriptGenerationPlacement.inSequence) {\r\n      ActionGroup.addLine(lines, context.indent, 'mc.world.sendMessage(\"' + this.message + '\");');\r\n    }\r\n  }\r\n\r\n  validate() {\r\n    return true;\r\n  }\r\n}\r\n", "import Utilities from \"../core/Utilities\";\r\nimport DataFormFile from \"../dataform/DataFormFile\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Action from \"./Action\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport BlockBreakAction from \"./BlockBreakAction\";\r\nimport BlockExplodeAction from \"./BlockExplodeAction\";\r\nimport BlockSetAction from \"./BlockSetAction\";\r\nimport EntityDieAction from \"./EntityDieAction\";\r\nimport EntitySpawnAction from \"./EntitySpawnAction\";\r\nimport GeneralAction from \"./GeneralAction\";\r\nimport IAction, { ActionContextType } from \"./IAction\";\r\nimport IActionGroup from \"./IActionGroup\";\r\nimport { ActionSetTarget } from \"./IActionSetData\";\r\nimport ItemSpawnAction from \"./ItemSpawnAction\";\r\nimport ParticleSpawnAction from \"./ParticleSpawnAction\";\r\nimport PlayerJoinAction from \"./PlayerJoinAction\";\r\nimport RandomizeGroupAction from \"./RandomizeGroupAction\";\r\nimport SequenceGroupAction from \"./SequenceGroupAction\";\r\nimport SoundPlayAction from \"./SoundPlayAction\";\r\nimport TestIdleAction from \"./TestIdleAction\";\r\nimport TestSimulatedPlayerMoveAction from \"./TestSimulatedPlayerMoveAction\";\r\nimport TestSimulatedPlayerSpawnAction from \"./TestSimulatedPlayerSpawnAction\";\r\nimport TickGroupAction from \"./TickGroupAction\";\r\nimport WorldSendMessageAction from \"./WorldSendMessageAction\";\r\n\r\nexport interface IActionSetActionType {\r\n  id: string;\r\n  title: string;\r\n  requiredContextType: ActionContextType;\r\n}\r\n\r\nexport interface IActionType {\r\n  id: string;\r\n  title: string;\r\n  form: IFormDefinition;\r\n}\r\n\r\nconst EntitySpawnActionType: IActionSetActionType = {\r\n  id: \"entity_spawn\",\r\n  title: \"Entity Spawn\",\r\n  requiredContextType: ActionContextType.dimensionLocation,\r\n};\r\n\r\nconst BlockBreakActionType: IActionSetActionType = {\r\n  id: \"block_break\",\r\n  title: \"Block Break\",\r\n  requiredContextType: ActionContextType.dimensionLocation,\r\n};\r\n\r\nexport const GroupActions = [\"tick\", \"entity_die\", \"block_explode\", \"player_join\", \"randomize\", \"sequence\"];\r\n\r\nexport class ActionSetCatalog {\r\n  static async getEntityLegacyFiltersSet() {\r\n    const legacyFilterTypes: IActionType[] = [];\r\n\r\n    await ActionSetCatalog.addTypesFromFormFolder(legacyFilterTypes, \"entityfilters\", ActionSetTarget.entityEvent);\r\n\r\n    return legacyFilterTypes;\r\n  }\r\n\r\n  static async getScriptSet() {\r\n    const scriptFilterTypes: IActionType[] = [];\r\n\r\n    await ActionSetCatalog.addTypesFromFormFolder(scriptFilterTypes, \"scriptfilters\", ActionSetTarget.script);\r\n\r\n    return scriptFilterTypes;\r\n  }\r\n\r\n  static async addTypesFromFormFolder(actionList: IActionType[], folderName: string, actionSetTarget: ActionSetTarget) {\r\n    const formsFolder = await Database.getFormsFolder(folderName);\r\n\r\n    if (!formsFolder) {\r\n      return;\r\n    }\r\n\r\n    await formsFolder.load();\r\n\r\n    for (const fileName in formsFolder.files) {\r\n      const file = formsFolder.files[fileName];\r\n\r\n      if (file) {\r\n        if (!file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n\r\n        const form = await DataFormFile.ensureOnFile(file);\r\n\r\n        if (form && form.formDefinition) {\r\n          let shouldAddItem = true;\r\n\r\n          if (form.formDefinition.tags) {\r\n            if (actionSetTarget === ActionSetTarget.entityEvent && !form.formDefinition.tags.includes(\"entityevent\")) {\r\n              shouldAddItem = false;\r\n            }\r\n            if (actionSetTarget === ActionSetTarget.script && !form.formDefinition.tags.includes(\"script\")) {\r\n              shouldAddItem = false;\r\n            }\r\n            if (actionSetTarget === ActionSetTarget.mcfunction && !form.formDefinition.tags.includes(\"commands\")) {\r\n              shouldAddItem = false;\r\n            }\r\n            if (actionSetTarget === ActionSetTarget.gameTest && !form.formDefinition.tags.includes(\"test\")) {\r\n              shouldAddItem = false;\r\n            }\r\n          } else {\r\n            shouldAddItem = false;\r\n          }\r\n\r\n          if (shouldAddItem) {\r\n            actionList.push({\r\n              id: StorageUtilities.getCoreBaseFromName(fileName),\r\n              title: form.title\r\n                ? form.title\r\n                : Utilities.humanify(form.id ? form.id : StorageUtilities.getCoreBaseFromName(fileName)),\r\n              form: form.formDefinition,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  getDefaultContextForTarget(actionSetTarget: ActionSetTarget) {\r\n    if (actionSetTarget === ActionSetTarget.entityEvent) {\r\n      return ActionContextType.entity;\r\n    }\r\n\r\n    return ActionContextType.general;\r\n  }\r\n\r\n  static async getActionCatalog(actionSetTarget: ActionSetTarget): Promise<IActionType[]> {\r\n    const actionTypes: IActionType[] = [];\r\n\r\n    if (actionSetTarget === ActionSetTarget.entityEvent) {\r\n      await ActionSetCatalog.addTypesFromFormFolder(actionTypes, \"entityevents\", actionSetTarget);\r\n    } else {\r\n      await ActionSetCatalog.addTypesFromFormFolder(actionTypes, \"action\", actionSetTarget);\r\n    }\r\n\r\n    return actionTypes;\r\n  }\r\n\r\n  static createActionGroup(parent: ActionGroup, data: IActionGroup, id?: string): ActionGroup {\r\n    const ag = new ActionGroup(\r\n      data\r\n        ? data\r\n        : {\r\n            id: id ? id : Utilities.createRandomId(10),\r\n            actions: [],\r\n          },\r\n      parent.actionSet\r\n    );\r\n\r\n    return ag;\r\n  }\r\n\r\n  static createActionOrGroup(\r\n    parent: ActionGroup,\r\n    type: string,\r\n    data?: IAction | ActionGroup,\r\n    id?: string\r\n  ): Action | ActionGroup {\r\n    if (GroupActions.includes(type)) {\r\n      const ag = this.createActionGroup(parent, data as IActionGroup, id);\r\n\r\n      ag.groupActionType = type;\r\n\r\n      return ag;\r\n    }\r\n\r\n    return this.createAction(parent, type, data as IAction, id);\r\n  }\r\n\r\n  static createAction(parent: ActionGroup, type: string, data?: IAction, id?: string): Action {\r\n    let action = undefined;\r\n\r\n    if (!data) {\r\n      data = {\r\n        type: type,\r\n      };\r\n    }\r\n\r\n    switch (type) {\r\n      case EntitySpawnActionType.id:\r\n        action = new EntitySpawnAction(parent, data as IAction);\r\n        break;\r\n      case BlockBreakActionType.id:\r\n        action = new BlockBreakAction(parent, data as IAction);\r\n        break;\r\n      case \"test_simulated_player_spawn\":\r\n        action = new TestSimulatedPlayerSpawnAction(parent, data as IAction);\r\n        break;\r\n      case \"test_simulated_player_move\":\r\n        action = new TestSimulatedPlayerMoveAction(parent, data as IAction);\r\n        break;\r\n      case \"test_idle\":\r\n        action = new TestIdleAction(parent, data as IAction);\r\n        break;\r\n      case \"tick\":\r\n        action = new TickGroupAction(parent, data);\r\n        break;\r\n      case \"randomize\":\r\n        action = new RandomizeGroupAction(parent, data);\r\n        break;\r\n      case \"sequence\":\r\n        action = new SequenceGroupAction(parent, data);\r\n        break;\r\n      case \"world_send_message\":\r\n        action = new WorldSendMessageAction(parent, data);\r\n        break;\r\n      case \"entity_die\":\r\n        action = new EntityDieAction(parent, data);\r\n        break;\r\n      case \"player_join\":\r\n        action = new PlayerJoinAction(parent, data);\r\n        break;\r\n      case \"block_set\":\r\n        action = new BlockSetAction(parent, data);\r\n        break;\r\n      case \"particle_spawn\":\r\n        action = new ParticleSpawnAction(parent, data);\r\n        break;\r\n      case \"item_spawn\":\r\n        action = new ItemSpawnAction(parent, data);\r\n        break;\r\n      case \"block_explode\":\r\n        action = new BlockExplodeAction(parent, data);\r\n        break;\r\n      case \"sound_play\":\r\n        action = new SoundPlayAction(parent, data);\r\n        break;\r\n      default:\r\n        action = new GeneralAction(parent, data);\r\n        action.typeId = type;\r\n        break;\r\n    }\r\n\r\n    if (id) {\r\n      action.id = id;\r\n    }\r\n\r\n    return action;\r\n  }\r\n}\r\n", "import ActionSet from \"./ActionSet\";\r\nimport Action from \"./Action\";\r\nimport IActionGroup from \"./IActionGroup\";\r\nimport IScriptRequirements from \"./IScriptRequirements\";\r\nimport ICommandRequirements from \"./ICommandRequirements\";\r\nimport Test from \"../gameTest/Test\";\r\nimport ActionSetScope from \"./ActionSetScope\";\r\n\r\nimport Location from \"../minecraft/Location\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport IWorld from \"../minecraft/IWorld\";\r\nimport { ActionSetCatalog } from \"./ActionSetCatalog\";\r\nimport IAction, { ActionContextType } from \"./IAction\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport IGetSetPropertyObject from \"../dataform/IGetSetPropertyObject\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { IActionable } from \"./IActionable\";\r\nimport ICommandOptions from \"./ICommandOptions\";\r\nimport { IScriptGenerationOptions } from \"../script/ActionSetScriptGenerator\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"./IScriptGenerationContext\";\r\n\r\nexport default class ActionGroup implements IGetSetPropertyObject, IActionable {\r\n  data: IActionGroup;\r\n  _actionSet?: ActionSet;\r\n  actions: (Action | ActionGroup)[];\r\n  expectedContext: ActionContextType = ActionContextType.general;\r\n  _groupAction?: Action;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Action, string>();\r\n\r\n  public get groupActionType() {\r\n    return this.data?.groupActionType;\r\n  }\r\n\r\n  public set groupActionType(newGat: string | undefined) {\r\n    if (!this.data) {\r\n      this.data = {\r\n        actions: [],\r\n      };\r\n    }\r\n\r\n    if (newGat !== this.data.groupActionType) {\r\n      this._groupAction = undefined;\r\n      this.data.groupActionType = newGat;\r\n      this.ensureGroupAction();\r\n    }\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get actionSet() {\r\n    return this._actionSet;\r\n  }\r\n\r\n  set actionSet(newActionSet: ActionSet | undefined) {\r\n    this._actionSet = newActionSet;\r\n  }\r\n\r\n  get id() {\r\n    return this.data.id;\r\n  }\r\n\r\n  set id(newId: string | undefined) {\r\n    this.data.id = newId;\r\n  }\r\n\r\n  get name() {\r\n    return this.data.name;\r\n  }\r\n\r\n  set name(newName: string | undefined) {\r\n    this.data.name = newName;\r\n  }\r\n\r\n  get typeId() {\r\n    if (this.data.groupActionType) {\r\n      return this.data.groupActionType;\r\n    }\r\n\r\n    return \"group\";\r\n  }\r\n\r\n  get canvasX() {\r\n    return this.data.canvasX;\r\n  }\r\n\r\n  set canvasX(inboundX: number | undefined) {\r\n    this.data.canvasX = inboundX;\r\n  }\r\n\r\n  get canvasY() {\r\n    return this.data.canvasY;\r\n  }\r\n\r\n  set canvasY(inboundY: number | undefined) {\r\n    this.data.canvasY = inboundY;\r\n  }\r\n\r\n  constructor(data: IActionGroup, actionSet?: ActionSet, doNotHydrate?: boolean) {\r\n    this.data = data;\r\n    this._actionSet = actionSet;\r\n    this.actions = [];\r\n\r\n    if (!doNotHydrate) {\r\n      this._hydrate();\r\n    }\r\n  }\r\n\r\n  getScriptRequirements(options: IScriptGenerationOptions) {\r\n    return {};\r\n  }\r\n\r\n  getCommandRequirements(options: ICommandOptions) {\r\n    return {};\r\n  }\r\n  addScriptLines(\r\n    lines: string[],\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ): void {}\r\n  addCommandLines(lines: string[], indent: number, options: ICommandOptions): void {}\r\n\r\n  getProperty(id: string) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this.data.groupActionData) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._groupAction) {\r\n      return this._groupAction.getProperty(id);\r\n    }\r\n\r\n    return (this.data.groupActionData as any)[id] as any;\r\n  }\r\n\r\n  setProperty(id: string, value: any) {\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n    if (!this.data.groupActionData && this.data.groupActionType) {\r\n      this.data.groupActionData = {\r\n        type: this.data.groupActionType,\r\n      };\r\n    }\r\n\r\n    if (this.groupAction) {\r\n      this.groupAction.setProperty(id, value);\r\n    }\r\n  }\r\n\r\n  ensureGroupAction() {\r\n    if (!this._groupAction && this.data && this.data.groupActionType) {\r\n      this._hydrateGroupAction();\r\n    }\r\n  }\r\n\r\n  get groupAction() {\r\n    if (this._groupAction) {\r\n      return this._groupAction;\r\n    }\r\n\r\n    this.ensureGroupAction();\r\n\r\n    return this._groupAction;\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    return this.data as any;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    (this.data as any) = value;\r\n  }\r\n\r\n  getArgumentAsNumber(name: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    if (typeof val === \"number\") {\r\n      return val;\r\n    } else if (typeof val === \"string\") {\r\n      return parseFloat(val);\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  validateArgumentIsType(name: string, type: string) {\r\n    const val = (this.data as any)[name];\r\n\r\n    const typestr = typeof val;\r\n\r\n    switch (type) {\r\n      case \"BlockLocation\":\r\n      case \"Location\":\r\n        if (!(val instanceof Array) || val.length !== 3) {\r\n          throw new Error(\"Expected an array of 3 numbers for parameter '\" + name + \"'\");\r\n        }\r\n        break;\r\n\r\n      case \"boolean\":\r\n      case \"number\":\r\n      case \"string\":\r\n        if (typestr !== type) {\r\n          throw new Error(\"Unexpected type mismatch: \" + name + \" is \" + typestr + \" (expected \" + type + \")\");\r\n        }\r\n        break;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  _hydrate() {\r\n    this.actions = [];\r\n\r\n    if (this.data.actions && Array.isArray(this.data.actions)) {\r\n      for (const dataAction of this.data.actions) {\r\n        if (dataAction.actions) {\r\n          const newActionGroup = ActionSetCatalog.createActionGroup(this, dataAction as IActionGroup);\r\n          this.actions.push(newActionGroup);\r\n        } else if ((dataAction as IAction).type) {\r\n          const newAction = ActionSetCatalog.createAction(this, (dataAction as IAction).type, dataAction as IAction);\r\n          this.actions.push(newAction);\r\n        }\r\n      }\r\n    }\r\n\r\n    this._hydrateGroupAction();\r\n  }\r\n\r\n  _hydrateGroupAction() {\r\n    if (this.data && this.data.groupActionType) {\r\n      if (!this.data.groupActionData) {\r\n        this.data.groupActionData = { type: this.data.groupActionType };\r\n      }\r\n\r\n      const act = ActionSetCatalog.createAction(this, this.data.groupActionType, this.data.groupActionData);\r\n\r\n      this._groupAction = act;\r\n    }\r\n  }\r\n\r\n  startRun(world?: IWorld, test?: Test) {\r\n    const scope = new ActionSetScope();\r\n\r\n    scope.test = test;\r\n    scope.world = world;\r\n\r\n    this.run(scope);\r\n  }\r\n\r\n  run(parentScope: ActionSetScope) {\r\n    for (let i = 0; i < this.actions.length; i++) {\r\n      const action = this.actions[i];\r\n\r\n      action.run(parentScope);\r\n    }\r\n  }\r\n\r\n  setActions(newActionList: (Action | ActionSet)[]) {\r\n    this.actions = newActionList;\r\n    const dataArr: (IAction | IActionGroup)[] = [];\r\n\r\n    for (const actionOrGroup of newActionList) {\r\n      actionOrGroup.actionSet = this.actionSet;\r\n\r\n      dataArr.push(actionOrGroup.data);\r\n    }\r\n\r\n    this.data.actions = dataArr;\r\n  }\r\n\r\n  absolutizeLocation(location: Location) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      this._actionSet.locationRoot.x + location.x,\r\n      this._actionSet.locationRoot.y + location.y,\r\n      this._actionSet.locationRoot.z + location.z\r\n    );\r\n  }\r\n\r\n  absolutizeBlockLocation(location: BlockLocation) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(this._actionSet.locationRoot.x + location.x),\r\n      Math.round(this._actionSet.locationRoot.y + location.y),\r\n      Math.round(this._actionSet.locationRoot.z + location.z)\r\n    );\r\n  }\r\n\r\n  relativizeLocation(location: Location) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      location.x - this._actionSet.locationRoot.x,\r\n      location.y - this._actionSet.locationRoot.y,\r\n      location.z - this._actionSet.locationRoot.z\r\n    );\r\n  }\r\n\r\n  relativizeBlockLocation(location: BlockLocation) {\r\n    if (!this._actionSet || !this._actionSet.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(location.x - this._actionSet.locationRoot.x),\r\n      Math.round(location.y - this._actionSet.locationRoot.y),\r\n      Math.round(location.z - this._actionSet.locationRoot.z)\r\n    );\r\n  }\r\n\r\n  addAction(action: Action | ActionGroup) {\r\n    this.actions.push(action);\r\n\r\n    if (!this.data.actions) {\r\n      this.data.actions = [];\r\n    }\r\n\r\n    this.data.actions.push(action.data);\r\n  }\r\n\r\n  static mergeScriptOptions(source: IScriptGenerationOptions, add: IScriptGenerationOptions) {\r\n    source.isFunction = source.isFunction || add.isFunction;\r\n  }\r\n\r\n  static mergeScriptRequirements(source: IScriptRequirements, add: IScriptRequirements) {\r\n    source.needsLocalOverworld = source.needsLocalOverworld || add.needsLocalOverworld;\r\n  }\r\n\r\n  static mergeCommandRequirements(source: ICommandRequirements, add: ICommandRequirements) {}\r\n\r\n  static addLine(lines: string[], indent: number, line: string) {\r\n    lines.push(this.getIndentSpaces(indent) + line);\r\n  }\r\n\r\n  static getIndentSpaces(indent: number) {\r\n    let result = \"\";\r\n\r\n    for (let i = 0; i < indent; i++) {\r\n      result += \" \";\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  ensureLoaded() {\r\n    if (this.data.actions) {\r\n      for (const actionData of this.data.actions) {\r\n        if ((actionData as IAction).type) {\r\n          const action = ActionSetCatalog.createAction(this, (actionData as IAction).type, actionData as IAction);\r\n\r\n          this.actions.push(action);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  removeAction(removeAction: Action) {\r\n    const newActionArr: (Action | ActionGroup)[] = [];\r\n\r\n    for (const action of this.actions) {\r\n      if (action !== removeAction) {\r\n        newActionArr.push(action);\r\n      }\r\n    }\r\n\r\n    this.actions = newActionArr;\r\n  }\r\n}\r\n", "import IActionSetData, { ActionSetTarget } from \"./IActionSetData\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport Test from \"../gameTest/Test\";\r\nimport Location from \"../minecraft/Location\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\n\r\nexport default class ActionSet extends ActionGroup {\r\n  actionSetData: IActionSetData;\r\n  _test: Test | undefined;\r\n  _locationRoot: Location | undefined;\r\n\r\n  get targetType() {\r\n    if (!this.actionSetData || !this.actionSetData.targetType) {\r\n      return ActionSetTarget.general;\r\n    }\r\n\r\n    return this.actionSetData.targetType;\r\n  }\r\n\r\n  set targetType(newTargetType: ActionSetTarget) {\r\n    this.actionSetData.targetType = newTargetType;\r\n  }\r\n\r\n  get locationRoot() {\r\n    return this._locationRoot;\r\n  }\r\n\r\n  set locationRoot(newRoot: Location | undefined) {\r\n    this._locationRoot = newRoot;\r\n  }\r\n\r\n  absolutizeLocation(location: Location) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      this.locationRoot.x + location.x,\r\n      this.locationRoot.y + location.y,\r\n      this.locationRoot.z + location.z\r\n    );\r\n  }\r\n\r\n  absolutizeBlockLocation(location: BlockLocation) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(this.locationRoot.x + location.x),\r\n      Math.round(this.locationRoot.y + location.y),\r\n      Math.round(this.locationRoot.z + location.z)\r\n    );\r\n  }\r\n\r\n  relativizeLocation(location: Location) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new Location(\r\n      location.x - this.locationRoot.x,\r\n      location.y - this.locationRoot.y,\r\n      location.z - this.locationRoot.z\r\n    );\r\n  }\r\n\r\n  relativizeBlockLocation(location: BlockLocation) {\r\n    if (!this.locationRoot) {\r\n      return location;\r\n    }\r\n\r\n    return new BlockLocation(\r\n      Math.round(location.x - this.locationRoot.x),\r\n      Math.round(location.y - this.locationRoot.y),\r\n      Math.round(location.z - this.locationRoot.z)\r\n    );\r\n  }\r\n\r\n  get test() {\r\n    return this._test;\r\n  }\r\n\r\n  get name() {\r\n    return this.actionSetData.name;\r\n  }\r\n\r\n  set name(newValue: string) {\r\n    this.actionSetData.name = newValue;\r\n  }\r\n\r\n  constructor(data: IActionSetData) {\r\n    super(data, undefined, true);\r\n    this.actionSetData = data;\r\n    this._actionSet = this;\r\n\r\n    this._hydrate();\r\n  }\r\n}\r\n", "import Action from \"../actions/Action\";\r\nimport ActionGroup from \"../actions/ActionGroup\";\r\nimport ActionSet from \"../actions/ActionSet\";\r\nimport { ActionContextType } from \"../actions/IAction\";\r\nimport IScriptGenerationContext, { ScriptGenerationPlacement } from \"../actions/IScriptGenerationContext\";\r\nimport IScriptRequirements from \"../actions/IScriptRequirements\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport const AUTOGENERATED_WHOLEFILE_SCRIPT_SEPARATOR =\r\n  \"// ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\n\r\nexport interface IScriptGenerationOptions {\r\n  typeScript: boolean;\r\n  isFunction?: boolean;\r\n  addTestIdlePause?: boolean;\r\n  useGameTestApis?: boolean;\r\n}\r\n\r\nexport default class ActionSetScriptGenerator {\r\n  static generateScript(actionSet: ActionSet, options?: IScriptGenerationOptions): string {\r\n    const lines: string[] = [];\r\n\r\n    if (!options) {\r\n      options = {\r\n        typeScript: true,\r\n      };\r\n    }\r\n\r\n    this.addScriptLines(lines, actionSet, options);\r\n\r\n    return lines.join(\"\\n\");\r\n  }\r\n\r\n  static generateGameTestJavaScript(\r\n    actionSet: ActionSet,\r\n    groupName: string,\r\n    nameSuffix: string,\r\n    structureName: string\r\n  ) {\r\n    const lines: string[] = [];\r\n\r\n    let name = actionSet.name ?? \"action_set\";\r\n\r\n    if (nameSuffix) {\r\n      name += nameSuffix;\r\n    }\r\n\r\n    name = Utilities.getSimpleString(name);\r\n    groupName = Utilities.getSimpleString(groupName);\r\n\r\n    lines.push(\"async function gt_\" + name + \"(test) {\");\r\n    this.addScriptGroupLines(\r\n      lines,\r\n      actionSet,\r\n      {\r\n        isFunction: true,\r\n        addTestIdlePause: true,\r\n        useGameTestApis: true,\r\n        typeScript: false,\r\n      },\r\n      { indent: 2 },\r\n      ScriptGenerationPlacement.inSequence\r\n    );\r\n    lines.push(\"}\");\r\n    lines.push(\r\n      'registerAsync(\"' +\r\n        groupName +\r\n        '\", \"' +\r\n        name +\r\n        '\", gt_' +\r\n        name +\r\n        ').maxTicks(4000).structureName(\"gametest:' +\r\n        structureName +\r\n        'empty\");'\r\n    );\r\n\r\n    return lines.join(\"\\n\");\r\n  }\r\n\r\n  static addScriptGroupLinesForFunction(\r\n    lines: string[],\r\n    actionGroup: ActionGroup,\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext\r\n  ) {\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.beforeBlockStart);\r\n    if (actionGroup.groupAction) {\r\n      actionGroup.groupAction.addScriptLines(lines, options, { indent: 2 }, ScriptGenerationPlacement.blockStart);\r\n    } else {\r\n      let functionLine = \"export function \" + actionGroup.name + \"(\";\r\n      let args = \"\";\r\n\r\n      if (actionGroup.expectedContext === ActionContextType.dimensionLocation) {\r\n        args += \"location: mc.DimensionLocation\";\r\n      }\r\n\r\n      functionLine += args + \") {\";\r\n\r\n      options.isFunction = true;\r\n\r\n      lines.push(functionLine);\r\n    }\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.afterBlockStart);\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.inSequence);\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.beforeBlockEnd);\r\n    if (actionGroup.groupAction) {\r\n      actionGroup.groupAction.addScriptLines(lines, options, { indent: 2 }, ScriptGenerationPlacement.blockEnd);\r\n    } else {\r\n      lines.push(\"}\");\r\n    }\r\n    this.addScriptGroupLines(lines, actionGroup, options, { indent: 2 }, ScriptGenerationPlacement.afterBlockEnd);\r\n  }\r\n\r\n  static addInitGroupLines(\r\n    lines: string[],\r\n    actionSet: ActionSet,\r\n    options: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext\r\n  ) {\r\n    lines.push(\"export function init() {\");\r\n\r\n    this.addScriptGroupLines(lines, actionSet, options, { indent: 2 }, ScriptGenerationPlacement.initInSequence);\r\n\r\n    lines.push(\"}\");\r\n  }\r\n\r\n  static addScriptGroupLines(\r\n    lines: string[],\r\n    actionGroup: ActionGroup,\r\n    scriptGenOptions: IScriptGenerationOptions,\r\n    context: IScriptGenerationContext,\r\n    placement: ScriptGenerationPlacement\r\n  ) {\r\n    const req: IScriptRequirements = {};\r\n\r\n    for (const action of actionGroup.actions) {\r\n      if (action instanceof Action) {\r\n        ActionGroup.mergeScriptRequirements(req, action.getScriptRequirements(scriptGenOptions));\r\n      }\r\n    }\r\n\r\n    if (req.needsLocalOverworld && placement === ScriptGenerationPlacement.inSequence) {\r\n      ActionGroup.addLine(lines, context.indent, 'const overworld = mc.world.getDimension(\"overworld\");');\r\n    }\r\n\r\n    if (\r\n      actionGroup.groupAction &&\r\n      (placement === ScriptGenerationPlacement.initInSequence || placement === ScriptGenerationPlacement.inSequence)\r\n    ) {\r\n      actionGroup.groupAction.addScriptLines(lines, scriptGenOptions, context, placement);\r\n    }\r\n\r\n    for (const action of actionGroup.actions) {\r\n      if (action instanceof ActionGroup) {\r\n        this.addScriptGroupLines(lines, action, scriptGenOptions, context, placement);\r\n      } else if (action instanceof Action) {\r\n        action.addScriptLines(lines, scriptGenOptions, context, placement);\r\n      }\r\n      if (scriptGenOptions.addTestIdlePause) {\r\n        ActionGroup.addLine(lines, context.indent, \"await test.idle(15);\");\r\n      }\r\n    }\r\n  }\r\n\r\n  static addScriptLines(lines: string[], actionSet: ActionSet, options: IScriptGenerationOptions) {\r\n    lines.push(AUTOGENERATED_WHOLEFILE_SCRIPT_SEPARATOR);\r\n\r\n    lines.push('import * as mc from \"@minecraft/server\";');\r\n\r\n    let subGroupCount = 0;\r\n    let subActionCount = 0;\r\n\r\n    for (const childAction of actionSet.actions) {\r\n      if (childAction instanceof ActionGroup) {\r\n        subGroupCount++;\r\n      } else if (childAction instanceof Action) {\r\n        subActionCount++;\r\n      }\r\n    }\r\n\r\n    let actionGroupCount = 0;\r\n    if (subGroupCount > 0 && subActionCount === 0) {\r\n      for (const childAction of actionSet.actions) {\r\n        if (childAction instanceof ActionGroup) {\r\n          if (!childAction.name) {\r\n            childAction.name = (actionSet.name ?? \"action\") + \"_\" + String(actionGroupCount + 1);\r\n          }\r\n\r\n          this.addScriptGroupLinesForFunction(lines, childAction, options, { indent: 2 });\r\n          actionGroupCount++;\r\n        }\r\n      }\r\n    } else {\r\n      this.addScriptGroupLinesForFunction(lines, actionSet, options, { indent: 2 });\r\n    }\r\n\r\n    this.addInitGroupLines(lines, actionSet, options, { indent: 2 });\r\n  }\r\n}\r\n", "import IWorldTestArea from \"./IWorldTestArea\";\r\nimport WorldTest from \"./WorldTest.js\";\r\nimport BlockLocation from \"./../minecraft/BlockLocation\";\r\nimport ActionSet from \"../actions/ActionSet\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport ActionSetScriptGenerator from \"../script/ActionSetScriptGenerator\";\r\nimport { ActionSetTarget } from \"../actions/IActionSetData\";\r\n\r\nexport default class WorldTestArea {\r\n  private _test: WorldTest;\r\n  data: IWorldTestArea;\r\n  public scripts: ActionSet[];\r\n  private _location: BlockLocation | undefined;\r\n  private _onPropertyChanged = new EventDispatcher<WorldTestArea, string>();\r\n\r\n  getProperty(id: string): any {\r\n    switch (id) {\r\n      case \"location\":\r\n        return this.location.toArray();\r\n    }\r\n  }\r\n\r\n  setProperty(id: string, value: any): void {\r\n    switch (id) {\r\n      case \"location\":\r\n        this.location = BlockLocation.from(value);\r\n    }\r\n  }\r\n\r\n  getBaseValue(): any {\r\n    return this.data;\r\n  }\r\n\r\n  setBaseValue(value: any): void {\r\n    this.data = value;\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  get location(): BlockLocation {\r\n    if (!this._location) {\r\n      let x = 0;\r\n      let y = 0;\r\n      let z = 0;\r\n\r\n      if (this.data.location && this.data.location.length && this.data.location.length === 3) {\r\n        x = this.data.location[0];\r\n        y = this.data.location[1];\r\n        z = this.data.location[2];\r\n      }\r\n      this._location = new BlockLocation(x, y, z);\r\n    }\r\n\r\n    return this._location;\r\n  }\r\n\r\n  set location(location: BlockLocation) {\r\n    if (\r\n      (!this._location && location) ||\r\n      (this._location &&\r\n        (this._location.x !== location.x || this._location.y !== location.y || this._location.z !== location.z))\r\n    ) {\r\n      this._location = location;\r\n\r\n      for (let i = 0; i < this.scripts.length; i++) {\r\n        this.scripts[i].locationRoot = this._location.toLocation();\r\n      }\r\n\r\n      this._onPropertyChanged.dispatch(this, \"location\");\r\n    }\r\n  }\r\n\r\n  get title(): string {\r\n    const loc = this.location;\r\n\r\n    return \"test\" + loc.title;\r\n  }\r\n\r\n  constructor(test: WorldTest, data: IWorldTestArea) {\r\n    this.scripts = [];\r\n    this.data = data;\r\n    this._test = test;\r\n  }\r\n\r\n  generateGameTestJavaScript(groupName: string) {\r\n    const scripts: string[] = [];\r\n\r\n    for (let i = 0; i < this.scripts.length; i++) {\r\n      const script = this.scripts[i];\r\n\r\n      let scriptName = groupName;\r\n      if (this.scripts.length > 1) {\r\n        scriptName += (i + 1).toString();\r\n      }\r\n      scripts.push(\r\n        ActionSetScriptGenerator.generateGameTestJavaScript(script, scriptName, (i + 1).toString(), this._test.name)\r\n      );\r\n    }\r\n\r\n    return scripts.join(\"\\n\");\r\n  }\r\n\r\n  createScript(type: string) {\r\n    const as = new ActionSet({\r\n      name: \"Area Script\",\r\n      targetType: ActionSetTarget.worldTest,\r\n      actions: [],\r\n    });\r\n\r\n    if (as) {\r\n      if (this._location) {\r\n        as.locationRoot = this._location.toLocation();\r\n      }\r\n\r\n      this.scripts.push(as);\r\n\r\n      if (!this.data.scripts) {\r\n        this.data.scripts = [];\r\n      }\r\n\r\n      this.data.scripts.push(as.actionSetData);\r\n    }\r\n  }\r\n}\r\n", "import IWorldTestDefinition from \"./IWorldTestDefinition\";\r\nimport WorldTestArea from \"./WorldTestArea\";\r\n\r\nexport default class WorldTest {\r\n  public data: IWorldTestDefinition;\r\n  public areas: WorldTestArea[];\r\n\r\n  #isLoaded: boolean;\r\n\r\n  constructor(data: IWorldTestDefinition) {\r\n    this.#isLoaded = false;\r\n    this.areas = [];\r\n    this.data = data;\r\n  }\r\n\r\n  public ensureLoaded() {\r\n    if (this.data.areas) {\r\n      for (const area of this.data.areas) {\r\n        const areaWrap = new WorldTestArea(this, area);\r\n        this.areas.push(areaWrap);\r\n      }\r\n    }\r\n\r\n    this.#isLoaded = true;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this.#isLoaded;\r\n  }\r\n\r\n  public get worldId() {\r\n    return this.data.worldId;\r\n  }\r\n\r\n  public set worldId(newWorldId: string | undefined) {\r\n    this.data.worldId = newWorldId;\r\n  }\r\n\r\n  public get name() {\r\n    if (this.data === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this.data.name;\r\n  }\r\n\r\n  public set name(newName: string) {\r\n    if (this.data === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.data.name = newName;\r\n  }\r\n\r\n  generateJavaScript() {\r\n    return \"\";\r\n  }\r\n\r\n  generateGameTestJavaScript(name: string) {\r\n    const scripts: string[] = [];\r\n\r\n    scripts.push('import { register, registerAsync, Test, SimulatedPlayer } from \"@minecraft/server-gametest\";');\r\n    scripts.push('import { BlockLocation, Location, world } from \"@minecraft/server\";');\r\n\r\n    for (let i = 0; i < this.areas.length; i++) {\r\n      const area = this.areas[i];\r\n\r\n      scripts.push(area.generateGameTestJavaScript(area.title));\r\n    }\r\n\r\n    return scripts.join(\"\\n\");\r\n  }\r\n\r\n  generateCommandLine() {\r\n    return \"\";\r\n  }\r\n\r\n  createArea(type: string) {\r\n    const area = new WorldTestArea(this, { location: [], scripts: [] });\r\n\r\n    if (area) {\r\n      this.areas.push(area);\r\n\r\n      if (!this.data.areas) {\r\n        this.data.areas = [];\r\n      }\r\n\r\n      this.data.areas.push(area.data);\r\n    }\r\n  }\r\n}\r\n", "import IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IWorldTestDefinition from \"../worldtest/IWorldTestDefinition\";\r\nimport WorldTest from \"./../worldtest/WorldTest\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"./../app/Project\";\r\nimport Structure from \"../minecraft/Structure\";\r\nimport BlockVolume from \"../minecraft/BlockVolume\";\r\nimport BlockLocation from \"../minecraft/BlockLocation\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class WorldTestManager {\r\n  private _jsonFile?: IFile;\r\n  private _jsFile?: IFile;\r\n  private _functionFile?: IFile;\r\n  private _structureFile?: IFile;\r\n  private _isLoaded: boolean;\r\n  private _worldTest?: WorldTest;\r\n  private _worldTestData?: IWorldTestDefinition;\r\n\r\n  get worldTest() {\r\n    return this._worldTest;\r\n  }\r\n\r\n  private _onLoaded = new EventDispatcher<WorldTestManager, WorldTestManager>();\r\n\r\n  constructor() {\r\n    this._isLoaded = false;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get jsonFile() {\r\n    return this._jsonFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get name() {\r\n    if (this._worldTestData === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._worldTestData.name;\r\n  }\r\n\r\n  public set name(newName: string) {\r\n    if (this._worldTestData === undefined) {\r\n      return;\r\n    }\r\n\r\n    this._worldTestData.name = newName;\r\n  }\r\n\r\n  public set jsonFile(newFile: IFile | undefined) {\r\n    this._jsonFile = newFile;\r\n  }\r\n\r\n  public async load() {\r\n    if (this._jsonFile === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._jsonFile.loadContent();\r\n\r\n    if (!this._jsonFile.content || this._jsonFile.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._jsonFile.content);\r\n\r\n      this._worldTestData = data;\r\n\r\n      if (data) {\r\n        this._worldTest = new WorldTest(data);\r\n\r\n        this._worldTest.ensureLoaded();\r\n        this._worldTest.name = StorageUtilities.getBaseFromName(this._jsonFile.name);\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse world test JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  private async ensureFunctionFile() {\r\n    if (this._jsonFile === undefined || this._functionFile !== undefined) {\r\n      return;\r\n    }\r\n\r\n    const newFileName = StorageUtilities.getBaseFromName(this._jsonFile.name) + \".mcfunction\";\r\n\r\n    let functionFolder = this._jsonFile.parentFolder;\r\n\r\n    if (functionFolder.name === \"scripts\" && functionFolder.parentFolder) {\r\n      functionFolder = functionFolder.parentFolder.ensureFolder(\"functions\");\r\n    }\r\n\r\n    await functionFolder.ensureExists();\r\n\r\n    this._functionFile = functionFolder.ensureFile(newFileName);\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._jsonFile === undefined || this._worldTest === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._worldTest?.data) {\r\n      return false;\r\n    }\r\n\r\n    this.ensureFunctionFile();\r\n\r\n    return this._jsonFile.setObjectContentIfSemanticallyDifferent(this._worldTest.data);\r\n  }\r\n\r\n  async persistSideFiles(project: Project) {\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (!bpFolder || this._jsonFile === undefined) {\r\n      Log.unexpectedUndefined(\"WTM\");\r\n      return;\r\n    }\r\n\r\n    if (this._jsFile === undefined) {\r\n      const scriptsFolder = await project.ensureBehaviorPackScriptsFolder();\r\n\r\n      const newFileName = StorageUtilities.getBaseFromName(this._jsonFile.name) + \".gen.js\";\r\n\r\n      this._jsFile = scriptsFolder.ensureFile(newFileName);\r\n    }\r\n\r\n    if (this._structureFile === undefined) {\r\n      const structuresFolder = bpFolder.ensureFolder(\"structures\");\r\n\r\n      await structuresFolder.ensureExists();\r\n\r\n      const structuresSubFolder = structuresFolder.ensureFolder(\"gametest\");\r\n\r\n      await structuresSubFolder.ensureExists();\r\n\r\n      const newFileName = StorageUtilities.getBaseFromName(this._jsonFile.name) + \"empty.mcstructure\";\r\n\r\n      this._structureFile = structuresSubFolder.ensureFile(newFileName);\r\n    }\r\n\r\n    if (this.worldTest && this._jsFile) {\r\n      const jsString = this.worldTest.generateGameTestJavaScript(this._jsonFile.name);\r\n      this._jsFile.setContent(jsString);\r\n    }\r\n\r\n    if (this.worldTest) {\r\n      const functionsFolder = bpFolder.ensureFolder(\"functions\");\r\n\r\n      await functionsFolder.ensureExists();\r\n\r\n      for (let i = 0; i < this.worldTest.areas.length; i++) {\r\n        const area = this.worldTest.areas[i];\r\n\r\n        for (let j = 0; j < area.scripts.length; j++) {\r\n          const script = area.scripts[j];\r\n\r\n          const functionFile = functionsFolder.ensureFile(\r\n            Utilities.getSimpleString(area.title + (i + 1).toString() + script.name + (j + 1).toString()) +\r\n              \".mcfunction\"\r\n          );\r\n\r\n          const functionString = \"tp \" + area.location.x + \" \" + area.location.y + \" \" + area.location.z;\r\n          /*\"\\ngametest run \" +\r\n            Utilities.getSimpleString(area.title) +\r\n            \":\" +\r\n            Utilities.getSimpleString(script.name + (j + 1).toString());*/\r\n\r\n          functionFile.setContent(functionString);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.worldTest && this._structureFile) {\r\n      const structure = new Structure();\r\n      const cube = new BlockVolume();\r\n\r\n      cube.setMaxDimensions(8, 8, 8);\r\n\r\n      structure.cube = cube;\r\n\r\n      cube.getBlock(new BlockLocation(0, 0, 0)).typeName = \"minecraft:dirt\";\r\n\r\n      const bytes = structure.getMCStructureBytes();\r\n\r\n      if (bytes) {\r\n        this._structureFile.setContent(bytes);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<WorldTestManager, WorldTestManager>) {\r\n    let wtm = undefined;\r\n    if (file.manager === undefined) {\r\n      const wtm = new WorldTestManager();\r\n\r\n      wtm.jsonFile = file;\r\n\r\n      file.manager = wtm;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof WorldTestManager) {\r\n      wtm = file.manager as WorldTestManager;\r\n\r\n      if (!wtm.isLoaded) {\r\n        if (loadHandler) {\r\n          wtm.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await wtm.load();\r\n      }\r\n    }\r\n\r\n    return wtm;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport { IVsCodeExtensions } from \"./IVsCodeExtensions\";\r\n\r\nexport const VsCodeRecommendations = [\r\n  \"esbenp.prettier-vscode\",\r\n  \"blockceptionltd.blockceptionvscodeminecraftbedrockdevelopmentextension\",\r\n  \"mojang-studios.minecraft-debugger\",\r\n];\r\n\r\nexport default class VsCodeExtensionsDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: IVsCodeExtensions;\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeExtensionsDefinition, VsCodeExtensionsDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<VsCodeExtensionsDefinition, VsCodeExtensionsDefinition>\r\n  ) {\r\n    let dt: VsCodeExtensionsDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeExtensionsDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeExtensionsDefinition) {\r\n      dt = file.manager as VsCodeExtensionsDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VSED\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition || !this.definition.recommendations) {\r\n      return false;\r\n    }\r\n\r\n    for (const reco of VsCodeRecommendations) {\r\n      if (!this.definition.recommendations.includes(reco)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasRecos = await this.hasMinContent();\r\n\r\n    if (hasRecos) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = { recommendations: [] };\r\n    }\r\n\r\n    if (!this.definition.recommendations) {\r\n      this.definition.recommendations = [];\r\n    }\r\n\r\n    for (const reco of VsCodeRecommendations) {\r\n      if (!this.definition.recommendations.includes(reco)) {\r\n        this.definition.recommendations.push(reco);\r\n      }\r\n    }\r\n\r\n    return this.definition;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\n\r\nexport const VsCodeDefaultSettings: { [name: string]: any } = {\r\n  \"[javascript]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"[typescript]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"[typescriptreact]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"[json]\": {\r\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\r\n  },\r\n  \"git.ignoreLimitWarning\": true,\r\n  \"editor.formatOnSave\": true,\r\n  \"search.exclude\": {\r\n    \"**/.git\": true,\r\n    \"**/node_modules\": true,\r\n    \"**/dist\": true,\r\n    \"**/lib\": true,\r\n  },\r\n  \"files.exclude\": {\r\n    \"**/.git\": true,\r\n    \"**/.DS_Store\": true,\r\n    \"**/node_modules\": true,\r\n  },\r\n  \"cSpell.words\": [\"gametest\", \"gametests\", \"mcaddon\"],\r\n  \"editor.tabSize\": 2,\r\n  \"eslint.experimental.useFlatConfig\": true,\r\n};\r\n\r\nexport default class VsCodeSettingsDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: { [name: string]: any };\r\n\r\n  private _onLoaded = new EventDispatcher<VsCodeSettingsDefinition, VsCodeSettingsDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<VsCodeSettingsDefinition, VsCodeSettingsDefinition>\r\n  ) {\r\n    let dt: VsCodeSettingsDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new VsCodeSettingsDefinition();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof VsCodeSettingsDefinition) {\r\n      dt = file.manager as VsCodeSettingsDefinition;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"VCSP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    for (const settingName in VsCodeDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasSettings = await this.hasMinContent();\r\n\r\n    if (hasSettings) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = VsCodeDefaultSettings;\r\n    }\r\n\r\n    for (const settingName in VsCodeDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        this.definition[settingName] = VsCodeDefaultSettings[settingName];\r\n      }\r\n    }\r\n\r\n    return this.definition;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    await this._file.loadContent();\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\n\r\nexport const PrettierRcDefaultSettings: { [name: string]: any } = {\r\n  trailingComma: \"es5\",\r\n  tabWidth: 2,\r\n  semi: true,\r\n  singleQuote: false,\r\n  bracketSpacing: true,\r\n  arrowParens: \"always\",\r\n  printWidth: 120,\r\n  endOfLine: \"auto\",\r\n};\r\n\r\nexport default class PrettierRcConfig {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public definition?: { [name: string]: any };\r\n\r\n  private _onLoaded = new EventDispatcher<PrettierRcConfig, PrettierRcConfig>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<PrettierRcConfig, PrettierRcConfig>) {\r\n    let dt: PrettierRcConfig | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      dt = new PrettierRcConfig();\r\n\r\n      dt.file = file;\r\n\r\n      file.manager = dt;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof PrettierRcConfig) {\r\n      dt = file.manager as PrettierRcConfig;\r\n\r\n      if (!dt.isLoaded && loadHandler) {\r\n        dt.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await dt.load();\r\n\r\n      return dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this.definition !== null, \"PRCP\");\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.definition);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (await this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async hasMinContent() {\r\n    await this.load();\r\n\r\n    if (!this.definition) {\r\n      return false;\r\n    }\r\n\r\n    for (const settingName in PrettierRcDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async ensureMinContent() {\r\n    const hasSettings = await this.hasMinContent();\r\n\r\n    if (hasSettings) {\r\n      return true;\r\n    }\r\n\r\n    if (!this.definition) {\r\n      this.definition = PrettierRcDefaultSettings;\r\n    }\r\n\r\n    for (const settingName in PrettierRcDefaultSettings) {\r\n      if (this.definition[settingName] === undefined) {\r\n        this.definition[settingName] = PrettierRcDefaultSettings[settingName];\r\n      }\r\n    }\r\n\r\n    return this.definition;\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    try {\r\n      const data: any = JSON.parse(this._file.content);\r\n\r\n      this.definition = data;\r\n    } catch (e) {\r\n      Log.fail(\"Could not parse vscode launch JSON \" + e);\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport WorldTestManager from \"../script/WorldTestManager\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { AUTOGENERATED_CONTENT_TOKEN, AUTOGENERATED_JS_SEPARATOR, FolderContext } from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport Log from \"../core/Log\";\r\nimport { ProjectScriptLanguage } from \"./IProjectData\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport EnvSettings from \"../devproject/EnvSettings\";\r\nimport VsCodeLaunchDefinition from \"../devproject/VsCodeLaunchDefinition\";\r\nimport VsCodeTasksDefinition from \"../devproject/VsCodeTasksDefinition\";\r\nimport VsCodeExtensionsDefinition from \"../devproject/VsCodeExtensionsDefinition\";\r\nimport VsCodeSettingsDefinition from \"../devproject/VsCodeSettingsDefinition\";\r\nimport PrettierRcConfig from \"../devproject/PrettierRcConfig\";\r\nimport JustConfig from \"../devproject/JustConfig\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport { FileUpdateType } from \"../storage/IFile\";\r\n\r\nexport default class ProjectAutogeneration {\r\n  static async updateProjectAutogeneration(project: Project, createNewArtifacts: boolean) {\r\n    let packageItems = 0;\r\n    let envItems = 0;\r\n    let justConfigItems = 0;\r\n    let needsJustConfig = false;\r\n    let needsEslintConfig = false;\r\n    let eslintConfigItems = 0;\r\n    let vsCodeLaunchItems = 0;\r\n    let vsCodeExtensionsItems = 0;\r\n    let vsCodeSettingsItems = 0;\r\n    let vsCodeTasksItems = 0;\r\n    let prettierRcItems = 0;\r\n\r\n    const items = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const item = items[i];\r\n\r\n      if (item.itemType === ProjectItemType.packageJson) {\r\n        packageItems++;\r\n\r\n        const itemFile = item.primaryFile;\r\n        if (itemFile) {\r\n          if (!itemFile.isContentLoaded) {\r\n            await itemFile.loadContent();\r\n          }\r\n\r\n          if (itemFile.content && typeof itemFile.content === \"string\") {\r\n            if (itemFile.content.indexOf(\"just-scripts\") > 0) {\r\n              needsJustConfig = true;\r\n            }\r\n            if (itemFile.content.indexOf(\"eslint\") > 0) {\r\n              needsEslintConfig = true;\r\n            }\r\n          }\r\n        }\r\n      } else if (item.itemType === ProjectItemType.env) {\r\n        envItems++;\r\n      } else if (item.itemType === ProjectItemType.vsCodeLaunchJson) {\r\n        vsCodeLaunchItems++;\r\n      } else if (item.itemType === ProjectItemType.prettierRcJson) {\r\n        prettierRcItems++;\r\n      } else if (item.itemType === ProjectItemType.esLintConfigMjs) {\r\n        eslintConfigItems++;\r\n      } else if (item.itemType === ProjectItemType.justConfigTs) {\r\n        justConfigItems++;\r\n      }\r\n    }\r\n\r\n    if (envItems === 0 && (justConfigItems > 0 || needsJustConfig) && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.env\",\r\n        ProjectItemStorageType.singleFile,\r\n        \".env\",\r\n        ProjectItemType.env,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (prettierRcItems === 0 && packageItems > 0 && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.prettierrc.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \".prettierrc.json\",\r\n        ProjectItemType.prettierRcJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (justConfigItems === 0 && needsJustConfig && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/just.config.ts\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"just.config.ts\",\r\n        ProjectItemType.justConfigTs,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (eslintConfigItems === 0 && needsEslintConfig && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/eslint.config.mjs\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"eslint.config.mjs\",\r\n        ProjectItemType.esLintConfigMjs,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeLaunchItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/launch.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"launch.json\",\r\n        ProjectItemType.vsCodeLaunchJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeSettingsItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/settings.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"settings.json\",\r\n        ProjectItemType.vsCodeSettingsJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeTasksItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/tasks.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"tasks.json\",\r\n        ProjectItemType.vsCodeTasksJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    if (vsCodeExtensionsItems === 0 && packageItems > 0 && project.projectFolder && createNewArtifacts) {\r\n      project.ensureItemByProjectPath(\r\n        \"/.vscode/extensions.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        \"extensions.json\",\r\n        ProjectItemType.vsCodeExtensionsJson,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.generated\r\n      );\r\n    }\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const item = items[i];\r\n\r\n      if (item.creationType === ProjectItemCreationType.generated) {\r\n        await ProjectAutogeneration.updateItemAutogeneration(item);\r\n      }\r\n\r\n      await ProjectAutogeneration.updateItemAutogeneratedSideFiles(item);\r\n    }\r\n  }\r\n\r\n  static async updateItemAutogeneratedSideFiles(item: ProjectItem) {\r\n    if (!item.primaryFile || !item.project) {\r\n      return;\r\n    }\r\n\r\n    if (item.itemType === ProjectItemType.worldTest) {\r\n      const worldTestManager = await WorldTestManager.ensureOnFile(item.primaryFile);\r\n\r\n      if (worldTestManager) {\r\n        await worldTestManager.persistSideFiles(item.project);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async updateItemAutogeneration(item: ProjectItem, contentOnlyUpdate?: boolean) {\r\n    if (!contentOnlyUpdate && !item.isContentLoaded) {\r\n      await item.loadContent();\r\n    }\r\n\r\n    if (item.primaryFile == null || item.creationType !== ProjectItemCreationType.generated) {\r\n      return;\r\n    }\r\n\r\n    if (item.itemType === ProjectItemType.catalogIndexJs) {\r\n      if (!item.primaryFile.isContentLoaded) {\r\n        await item.primaryFile.loadContent();\r\n      }\r\n\r\n      ProjectAutogeneration.updateCatalogJsContent(item, await ProjectAutogeneration.getCatalogJsContent(item.project));\r\n    } else if (item.itemType === ProjectItemType.env) {\r\n      item.primaryFile.setContentIfSemanticallyDifferent(\r\n        await EnvSettings.getContent(\r\n          item.project,\r\n          typeof item.primaryFile.content === \"string\" ? item.primaryFile.content : undefined\r\n        ),\r\n        FileUpdateType.versionlessEdit\r\n      );\r\n    } else if (item.itemType === ProjectItemType.justConfigTs) {\r\n      const justConfigTs = await JustConfig.ensureOnFile(item.primaryFile);\r\n\r\n      if (justConfigTs) {\r\n        await justConfigTs.ensureDefault();\r\n        await justConfigTs.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeLaunchJson) {\r\n      const vscodelaunch = await VsCodeLaunchDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodelaunch) {\r\n        await vscodelaunch.ensureMinContent();\r\n        await vscodelaunch.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeTasksJson) {\r\n      const vscodetasks = await VsCodeTasksDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodetasks) {\r\n        await vscodetasks.ensureMinContent();\r\n        await vscodetasks.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeExtensionsJson) {\r\n      const vscodeextensions = await VsCodeExtensionsDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodeextensions) {\r\n        await vscodeextensions.ensureMinContent();\r\n        await vscodeextensions.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.vsCodeSettingsJson) {\r\n      const vscodesettings = await VsCodeSettingsDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (vscodesettings) {\r\n        await vscodesettings.ensureMinContent();\r\n        await vscodesettings.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.prettierRcJson) {\r\n      const prettierrc = await PrettierRcConfig.ensureOnFile(item.primaryFile);\r\n\r\n      if (prettierrc) {\r\n        await prettierrc.ensureMinContent();\r\n        await prettierrc.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.packageJson) {\r\n      const packageJson = await NpmPackageDefinition.ensureOnFile(item.primaryFile);\r\n\r\n      if (packageJson) {\r\n        await packageJson.ensureMinContent(item.project);\r\n        await packageJson.save();\r\n      }\r\n    } else if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n      // Only generate initial content \u2014 don't overwrite user edits on save.\r\n      // Updates via the form editor use BehaviorManifestDefinition.persist() instead.\r\n      if (!item.primaryFile.isContentLoaded || !item.primaryFile.content) {\r\n        item.primaryFile.setContent(await BehaviorManifestDefinition.getContent(item.project, contentOnlyUpdate));\r\n      }\r\n    } else if (item.itemType === ProjectItemType.entityTypeBaseJs) {\r\n      const content = await ProjectAutogeneration.getGeneratedEntityTypeScript(item);\r\n\r\n      if (content.javaScript !== undefined) {\r\n        item.primaryFile.setContent(content.javaScript, FileUpdateType.versionlessEdit);\r\n      }\r\n      if (\r\n        item.project.preferredScriptLanguage === ProjectScriptLanguage.typeScript &&\r\n        content.typeScript !== undefined\r\n      ) {\r\n        const file = item.primaryFile.parentFolder.ensureFile(\r\n          StorageUtilities.getBaseFromName(item.primaryFile.name) + \".ts\"\r\n        );\r\n\r\n        file.setContent(content.typeScript, FileUpdateType.versionlessEdit);\r\n      }\r\n\r\n      if (\r\n        item.project.preferredScriptLanguage === ProjectScriptLanguage.typeScript &&\r\n        content.typeScript !== undefined\r\n      ) {\r\n        const file = item.primaryFile.parentFolder.ensureFile(\r\n          StorageUtilities.getBaseFromName(item.primaryFile.name) + \".ts\"\r\n        );\r\n\r\n        file.setContent(content.typeScript, FileUpdateType.versionlessEdit);\r\n      }\r\n    } else if (item.itemType === ProjectItemType.entityTypeBaseTs) {\r\n      const content = await ProjectAutogeneration.getGeneratedEntityTypeScript(item);\r\n\r\n      if (content.typeScript !== undefined) {\r\n        item.primaryFile.setContent(content.typeScript, FileUpdateType.versionlessEdit);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getCatalogJsContent(project: Project) {\r\n    const content: string[] = [];\r\n\r\n    const behaviorPackRootFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    const items = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const projectItem = items[i];\r\n\r\n      if (projectItem.itemType === ProjectItemType.worldTest) {\r\n        const file = await projectItem.loadFileContent();\r\n\r\n        if (file) {\r\n          const newFileName = StorageUtilities.getBaseFromName(file.name) + \".gen.js\";\r\n\r\n          content.push('import \"scripts/' + newFileName + '\";');\r\n        }\r\n      } else if (\r\n        projectItem.itemType === ProjectItemType.js ||\r\n        projectItem.itemType === ProjectItemType.buildProcessedJs ||\r\n        projectItem.itemType === ProjectItemType.entityTypeBaseJs ||\r\n        projectItem.itemType === ProjectItemType.testJs\r\n      ) {\r\n        const file = await projectItem.loadFileContent();\r\n\r\n        if (file) {\r\n          let filePath = file.getFolderRelativePath(behaviorPackRootFolder);\r\n\r\n          if (!file.isContentLoaded) {\r\n            await file.loadContent(false);\r\n          }\r\n\r\n          if ((file.content !== null || filePath !== null) && filePath !== undefined) {\r\n            if (filePath.startsWith(\"/scripts/\")) {\r\n              filePath = filePath.substring(9, filePath.length);\r\n            }\r\n\r\n            if (filePath.startsWith(\"/\")) {\r\n              filePath = filePath.substring(1, filePath.length);\r\n            }\r\n\r\n            content.push('import \"' + filePath + '\";');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return AUTOGENERATED_JS_SEPARATOR + \"\\n\\n\" + content.join(\"\\n\");\r\n  }\r\n\r\n  static async updateCatalogJsContent(item: ProjectItem, newContent: string) {\r\n    if (item.primaryFile == null || item.primaryFile.content instanceof Uint8Array) {\r\n      Log.unexpectedContentState();\r\n      return;\r\n    }\r\n\r\n    if (\r\n      item.primaryFile.content === undefined ||\r\n      item.primaryFile.content === null ||\r\n      item.primaryFile.content.trim() === \"\"\r\n    ) {\r\n      item.primaryFile.setContent(newContent, FileUpdateType.versionlessEdit);\r\n      return;\r\n    }\r\n\r\n    let updatedContent = item.primaryFile.content;\r\n\r\n    const autogenToken = updatedContent.indexOf(AUTOGENERATED_CONTENT_TOKEN);\r\n\r\n    if (autogenToken >= 0) {\r\n      let previous = updatedContent.lastIndexOf(\"\\r\", autogenToken);\r\n\r\n      if (previous < 0) {\r\n        previous = updatedContent.lastIndexOf(\"\\n\", autogenToken);\r\n\r\n        if (previous < 0) {\r\n          previous = 0;\r\n        }\r\n      }\r\n\r\n      const previousComment = updatedContent.lastIndexOf(\"//\", autogenToken);\r\n\r\n      // we expect \\n//, but if for some reason the comment has moved, let's only strip from the comment forward.\r\n      if (previousComment > previous + 2) {\r\n        previous = previousComment;\r\n      }\r\n\r\n      if (previous >= 0) {\r\n        updatedContent = updatedContent.substring(0, previous);\r\n      }\r\n    }\r\n\r\n    updatedContent += newContent;\r\n\r\n    item.primaryFile.setContent(updatedContent, FileUpdateType.versionlessEdit);\r\n  }\r\n\r\n  static async getGeneratedEntityTypeScript(item: ProjectItem) {\r\n    if (item.projectPath === null || item.projectPath === undefined) {\r\n      return { javaScript: \"\", typeScript: undefined };\r\n    }\r\n\r\n    let typeName = StorageUtilities.getBaseFromName(StorageUtilities.getLeafName(item.projectPath));\r\n\r\n    if (typeName.endsWith(\".base\")) {\r\n      typeName = typeName.substring(0, typeName.length - 5);\r\n    }\r\n\r\n    const items = item.project.getItemsCopy();\r\n\r\n    for (let i = 0; i < items.length; i++) {\r\n      const candItem = items[i];\r\n\r\n      if (\r\n        candItem.itemType === ProjectItemType.entityTypeBehavior &&\r\n        candItem.projectPath !== null &&\r\n        candItem.projectPath !== undefined\r\n      ) {\r\n        const jsonName = StorageUtilities.getBaseFromName(StorageUtilities.getLeafName(candItem.projectPath));\r\n\r\n        if (jsonName === typeName) {\r\n          const jsonFile = await candItem.loadFileContent();\r\n\r\n          if (jsonFile !== undefined && jsonFile !== null) {\r\n            if (jsonFile.manager === undefined) {\r\n              await EntityTypeDefinition.ensureOnFile(jsonFile);\r\n            }\r\n\r\n            if (jsonFile.manager) {\r\n              const et = jsonFile.manager as EntityTypeDefinition;\r\n\r\n              const js = et.getScript(false);\r\n              let ts = undefined;\r\n\r\n              if (item.project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n                ts = et.getScript(true);\r\n              }\r\n\r\n              return { javaScript: js, typeScript: ts };\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return { javaScript: \"\", typeScript: undefined };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport Project, { FolderContext } from \"./Project\";\r\nimport { ProjectItemType, ProjectItemStorageType, ProjectItemCreationType } from \"./IProjectItemData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { ProjectEditPreference, ProjectFocus, ProjectScriptLanguage } from \"./IProjectData\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport NpmPackageDefinition from \"../devproject/NpmPackageDefinition\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ISnippet from \"./ISnippet\";\r\nimport IGalleryItem from \"./IGalleryItem\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport { IAnnotatedValue } from \"../core/AnnotatedValue\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectUpdateRunner from \"../updates/ProjectUpdateRunner\";\r\nimport ProjectStandard from \"./ProjectStandard\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport TypeScriptDefinition from \"../minecraft/TypeScriptDefinition\";\r\nimport { constants } from \"../core/Constants\";\r\nimport ProjectContent from \"./ProjectContent\";\r\n\r\nconst behaviorPackFolderHints = [\"behavior_pack\", \"/bp/\", \"/bps/\"];\r\n\r\nconst resourcePackFolderHints = [\"resource_pack\", \"/rp/\", \"/rps/\"];\r\n\r\nexport enum NewEntityTypeAddMode {\r\n  baseId,\r\n}\r\n\r\nexport enum NewItemTypeAddMode {\r\n  baseId,\r\n}\r\n\r\nexport enum ProjectMetaCategory {\r\n  mix = 0,\r\n  worldTemplate = 1,\r\n  texturePack = 2,\r\n  addOn = 3,\r\n  skinPack = 4,\r\n  persona = 5,\r\n}\r\n\r\nexport default class ProjectUtilities {\r\n  static async ensureContentInDefaultScriptFile(\r\n    project: Project,\r\n    signatureToken: string,\r\n    content: string,\r\n    placeAtBottom?: boolean\r\n  ) {\r\n    const defaultScriptFile = await project.getDefaultScriptsFile();\r\n\r\n    if (defaultScriptFile) {\r\n      if (!defaultScriptFile.isContentLoaded) {\r\n        await defaultScriptFile.loadContent();\r\n      }\r\n\r\n      if (typeof defaultScriptFile.content === \"string\" && defaultScriptFile.content.length > 0) {\r\n        if (defaultScriptFile.content.indexOf(signatureToken) < 0) {\r\n          let newContent = defaultScriptFile.content;\r\n\r\n          if (!placeAtBottom) {\r\n            newContent = content + newContent;\r\n          } else {\r\n            newContent = newContent + content;\r\n          }\r\n\r\n          defaultScriptFile.setContent(newContent);\r\n\r\n          await defaultScriptFile.saveContent();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getDefaultFolderForPack(project: Project, packType: PackType) {\r\n    if (packType === PackType.behavior) {\r\n      return await project.getDefaultBehaviorPackFolder();\r\n    } else if (packType === PackType.resource) {\r\n      return await project.getDefaultResourcePackFolder();\r\n    } else if (packType === PackType.skin) {\r\n      return await project.getDefaultSkinPackFolder();\r\n    } else if (packType === PackType.design) {\r\n      return await project.getDefaultSkinPackFolder();\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  static getSimplifiedProjectName(projectName: string) {\r\n    // strip out a trailing -xxxxxx (dash + 6 chars) that is used in Electron file-system based project names\r\n    let lastDash = projectName.lastIndexOf(\"-\");\r\n\r\n    if (lastDash >= 2 && lastDash === projectName.length - 7) {\r\n      return projectName.substring(0, projectName.length - 7);\r\n    }\r\n\r\n    return projectName;\r\n  }\r\n\r\n  static getPackTypeName(packType: PackType) {\r\n    switch (packType) {\r\n      case PackType.behavior:\r\n        return \"Behavior\";\r\n      case PackType.resource:\r\n        return \"Resource\";\r\n      case PackType.skin:\r\n        return \"Skin\";\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  static async ensureJsonItem(project: Project, jsonContent: string, fileName: string) {\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const typeInfo = ProjectItemUtilities.inferTypeFromJsonContent(jsonContent, fileName);\r\n\r\n    let packType = typeInfo.packType;\r\n\r\n    if (packType === undefined) {\r\n      packType = PackType.behavior;\r\n    }\r\n\r\n    const baseFolder = await ProjectItemUtilities.getDefaultFolderForType(project, typeInfo.itemType);\r\n\r\n    if (!baseFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    let folderPath = baseFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    if (folderPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    fileName = StorageUtilities.getUniqueChildFolderName(fileName, baseFolder);\r\n\r\n    const contentFile = baseFolder.ensureFile(fileName);\r\n    contentFile.setContent(jsonContent);\r\n    contentFile.saveContent();\r\n\r\n    const relPath = contentFile.getFolderRelativePath(project.projectFolder as IFolder);\r\n\r\n    if (relPath !== undefined) {\r\n      return project.ensureItemByProjectPath(\r\n        relPath,\r\n        ProjectItemStorageType.singleFile,\r\n        fileName,\r\n        typeInfo.itemType,\r\n        FolderContext.unknown,\r\n        undefined,\r\n        ProjectItemCreationType.normal\r\n      );\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getItemsFromSearch(project: Project, searchResults: IAnnotatedValue[] | undefined) {\r\n    if (searchResults === undefined) {\r\n      return [];\r\n    }\r\n\r\n    const searchItems: ProjectItem[] = [];\r\n\r\n    for (const val of searchResults) {\r\n      for (const item of project.items) {\r\n        if (item.projectPath && val.value === item.projectPath) {\r\n          searchItems.push(item);\r\n        }\r\n      }\r\n    }\r\n\r\n    return searchItems;\r\n  }\r\n\r\n  static isBehaviorPackRelated(folderName: string) {\r\n    for (const hint of behaviorPackFolderHints) {\r\n      if (folderName.toLowerCase().indexOf(hint) >= 0) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isResourcePackRelated(folderName: string) {\r\n    for (const hint of resourcePackFolderHints) {\r\n      if (folderName.toLowerCase().indexOf(hint) >= 0) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static inferJsonProjectItemTypeFromExtension(path: string): ProjectItemType {\r\n    const extension = StorageUtilities.getTypeFromName(path).toLowerCase();\r\n\r\n    switch (extension) {\r\n      case \"json\":\r\n        return ProjectItemType.unknownJson;\r\n      case \"mcaddon\":\r\n        return ProjectItemType.MCAddon;\r\n      case \"mcpack\":\r\n        return ProjectItemType.MCPack;\r\n      case \"mcworld\":\r\n        return ProjectItemType.MCWorld;\r\n      case \"mctemplate\":\r\n        return ProjectItemType.MCTemplate;\r\n      case \"mcproject\":\r\n        return ProjectItemType.MCProject;\r\n      case \"tga\":\r\n      case \"png\":\r\n      case \"jpg\":\r\n        return ProjectItemType.texture;\r\n      case \"ogg\":\r\n      case \"fsb\":\r\n      case \"mp3\":\r\n        return ProjectItemType.audio;\r\n    }\r\n\r\n    return ProjectItemType.unknown;\r\n  }\r\n\r\n  static inferJsonProjectItemTypeFromPath(path: string): ProjectItemType {\r\n    const lowerPath = path.toLowerCase();\r\n\r\n    if (this.isBehaviorPackRelated(lowerPath)) {\r\n      if (lowerPath.indexOf(\"/biomes/\") >= 0) {\r\n        return ProjectItemType.biomeBehavior;\r\n      }\r\n      if (lowerPath.indexOf(\"/entities/\") >= 0) {\r\n        return ProjectItemType.entityTypeBehavior;\r\n      }\r\n      if (lowerPath.indexOf(\"/items/\") >= 0) {\r\n        return ProjectItemType.itemTypeBehavior;\r\n      }\r\n      if (lowerPath.indexOf(\"/animation_controllers/\") >= 0) {\r\n        return ProjectItemType.animationControllerBehaviorJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/animations/\") >= 0) {\r\n        return ProjectItemType.animationBehaviorJson;\r\n      }\r\n    }\r\n\r\n    if (this.isResourcePackRelated(lowerPath)) {\r\n      if (lowerPath.indexOf(\"/animation_controllers/\") >= 0) {\r\n        return ProjectItemType.animationControllerResourceJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/animations/\") >= 0) {\r\n        return ProjectItemType.animationResourceJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/attachables/\") >= 0) {\r\n        return ProjectItemType.attachableResourceJson;\r\n      }\r\n      if (lowerPath.indexOf(\"/biomes/\") >= 0) {\r\n        return ProjectItemType.biomeResource;\r\n      }\r\n      if (lowerPath.indexOf(\"/entity/\") >= 0) {\r\n        return ProjectItemType.entityTypeResource;\r\n      }\r\n      if (lowerPath.indexOf(\"/entity/\") >= 0) {\r\n        return ProjectItemType.entityTypeResource;\r\n      }\r\n\r\n      if (lowerPath.endsWith(\"/blocks.json\")) {\r\n        return ProjectItemType.blocksCatalogResourceJson;\r\n      }\r\n      if (lowerPath.endsWith(\"/sounds.json\")) {\r\n        return ProjectItemType.soundDefinitionCatalog;\r\n      }\r\n      if (lowerPath.endsWith(\"/biomes_client.json\")) {\r\n        return ProjectItemType.biomesClientCatalogResource;\r\n      }\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/fogs/\") >= 0) {\r\n      return ProjectItemType.fogResourceJson;\r\n    }\r\n\r\n    // Check for texture_set.json BEFORE /models/ check - texture_set files can exist in /models/ folders\r\n    // (e.g., /textures/models/armor/chain_1.texture_set.json)\r\n    if (lowerPath.indexOf(\".texture_set.json\") >= 0) {\r\n      return ProjectItemType.textureSetJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/models/\") >= 0) {\r\n      return ProjectItemType.modelGeometryJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/particles/\") >= 0) {\r\n      return ProjectItemType.particleJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/render_controllers/\") >= 0) {\r\n      return ProjectItemType.renderControllerJson;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/sounds/\") >= 0) {\r\n      if (lowerPath.indexOf(\"music_definitions.json\") >= 0) {\r\n        return ProjectItemType.musicDefinitionJson;\r\n      }\r\n      if (lowerPath.indexOf(\"sound_definitions.json\") >= 0) {\r\n        return ProjectItemType.soundDefinitionCatalog;\r\n      }\r\n\r\n      return this.inferJsonProjectItemTypeFromExtension(path);\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/textures/\") >= 0) {\r\n      if (lowerPath.indexOf(\"flipbook_textures.json\") >= 0) {\r\n        return ProjectItemType.flipbookTexturesJson;\r\n      }\r\n      if (lowerPath.indexOf(\"item_texture.json\") >= 0) {\r\n        return ProjectItemType.itemTextureJson;\r\n      }\r\n      if (lowerPath.indexOf(\"terrain_texture.json\") >= 0) {\r\n        return ProjectItemType.terrainTextureCatalogResourceJson;\r\n      }\r\n\r\n      if (lowerPath.indexOf(\"texture_list.json\") >= 0) {\r\n        return ProjectItemType.textureListJson;\r\n      }\r\n\r\n      if (lowerPath.indexOf(\".texture_set.json\") >= 0) {\r\n        return ProjectItemType.textureSetJson;\r\n      }\r\n\r\n      if (\r\n        lowerPath.indexOf(\"/ui/\") >= 0 &&\r\n        this.inferJsonProjectItemTypeFromExtension(path) === ProjectItemType.texture\r\n      ) {\r\n        return ProjectItemType.uiTexture;\r\n      }\r\n\r\n      return this.inferJsonProjectItemTypeFromExtension(path);\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/loot_tables/\") >= 0) {\r\n      return ProjectItemType.lootTableBehavior;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/recipes/\") >= 0) {\r\n      return ProjectItemType.recipeBehavior;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/spawn_rules/\") >= 0) {\r\n      return ProjectItemType.spawnRuleBehavior;\r\n    }\r\n\r\n    if (lowerPath.indexOf(\"/trading/\") >= 0) {\r\n      return ProjectItemType.tradingBehaviorJson;\r\n    }\r\n\r\n    return this.inferJsonProjectItemTypeFromExtension(path);\r\n  }\r\n\r\n  /**\r\n   * Attempts to infer a project item type using the top-level keys present in a JSON object.\r\n   * Falls back to unknown when no meaningful match is found.\r\n   */\r\n  static inferJsonProjectItemTypeFromContent(json: any): ProjectItemType {\r\n    if (!json || typeof json !== \"object\" || Array.isArray(json)) {\r\n      return ProjectItemType.unknownJson;\r\n    }\r\n\r\n    const metadataKeys = new Set([\"format_version\", \"minecraft:format_version\"]);\r\n    const rootKeys = Object.keys(json).filter((key) => !metadataKeys.has(key.toLowerCase()));\r\n\r\n    if (rootKeys.length === 0) {\r\n      return ProjectItemType.unknownJson;\r\n    }\r\n\r\n    const normalizedKeys = rootKeys.map((key) => key.toLowerCase());\r\n\r\n    const directMappings: { [key: string]: ProjectItemType } = {\r\n      \"minecraft:block\": ProjectItemType.blockTypeBehavior,\r\n      \"minecraft:item\": ProjectItemType.itemTypeBehavior,\r\n      \"minecraft:entity\": ProjectItemType.entityTypeBehavior,\r\n      \"minecraft:spawn_rules\": ProjectItemType.spawnRuleBehavior,\r\n      \"minecraft:spawn_groups\": ProjectItemType.spawnGroupJson,\r\n      \"minecraft:loot_table\": ProjectItemType.lootTableBehavior,\r\n      \"minecraft:feature\": ProjectItemType.featureBehavior,\r\n      \"minecraft:feature_rules\": ProjectItemType.featureRuleBehavior,\r\n      \"minecraft:trading\": ProjectItemType.tradingBehaviorJson,\r\n      \"minecraft:dialogue\": ProjectItemType.dialogueBehaviorJson,\r\n      \"minecraft:volume\": ProjectItemType.volumeBehaviorJson,\r\n      \"minecraft:behavior_tree\": ProjectItemType.behaviorTreeJson,\r\n      \"minecraft:aim_assist_category\": ProjectItemType.aimAssistCategoryJson,\r\n      \"minecraft:aim_assist_preset\": ProjectItemType.aimAssistPresetJson,\r\n      \"minecraft:dimension\": ProjectItemType.dimensionJson,\r\n      \"minecraft:structure\": ProjectItemType.jigsawStructure,\r\n      \"minecraft:structure_set\": ProjectItemType.jigsawStructureSet,\r\n      \"minecraft:template_pool\": ProjectItemType.jigsawTemplatePool,\r\n      \"minecraft:processor_list\": ProjectItemType.jigsawProcessorList,\r\n      \"minecraft:biome\": ProjectItemType.biomeBehavior,\r\n      \"minecraft:client_entity\": ProjectItemType.entityTypeResource,\r\n      \"minecraft:attachable\": ProjectItemType.attachableResourceJson,\r\n      \"minecraft:fog_settings\": ProjectItemType.fogResourceJson,\r\n      \"minecraft:geometry\": ProjectItemType.modelGeometryJson,\r\n      \"minecraft:block_culling\": ProjectItemType.blockCulling,\r\n      particle_effect: ProjectItemType.particleJson,\r\n      render_controllers: ProjectItemType.renderControllerJson,\r\n      \"minecraft:render_controller\": ProjectItemType.renderControllerJson,\r\n      \"minecraft:texture_set\": ProjectItemType.textureSetJson,\r\n      \"minecraft:atmospherics\": ProjectItemType.atmosphericsJson,\r\n      \"minecraft:pbr\": ProjectItemType.pbrJson,\r\n      \"minecraft:point_lights\": ProjectItemType.pointLightsJson,\r\n      \"minecraft:water\": ProjectItemType.waterJson,\r\n      \"minecraft:shadows\": ProjectItemType.shadowsJson,\r\n      \"minecraft:uniforms\": ProjectItemType.uniformsJson,\r\n      uniforms: ProjectItemType.uniformsJson,\r\n      \"minecraft:renderer\": ProjectItemType.rendererJson,\r\n      renderer: ProjectItemType.rendererJson,\r\n      lods: ProjectItemType.lodJson,\r\n      \"minecraft:lods\": ProjectItemType.lodJson,\r\n      loading_messages: ProjectItemType.loadingMessagesJson,\r\n      splashes: ProjectItemType.splashesJson,\r\n      \"minecraft:font\": ProjectItemType.fontMetadataJson,\r\n      font_metadata: ProjectItemType.fontMetadataJson,\r\n      emoticons: ProjectItemType.emoticonsJson,\r\n      \"minecraft:emoticons\": ProjectItemType.emoticonsJson,\r\n      contents: ProjectItemType.contentsJson,\r\n      \"minecraft:contents\": ProjectItemType.contentsJson,\r\n    };\r\n\r\n    for (const key of normalizedKeys) {\r\n      const direct = directMappings[key];\r\n      if (direct !== undefined) {\r\n        return direct;\r\n      }\r\n    }\r\n\r\n    // Check for legacy geometry format (format_version 1.8.0) where keys are like \"geometry.bat\", \"geometry.pig\"\r\n    for (const key of normalizedKeys) {\r\n      if (key.startsWith(\"geometry.\")) {\r\n        return ProjectItemType.modelGeometryJson;\r\n      }\r\n    }\r\n\r\n    return ProjectItemType.unknownJson;\r\n  }\r\n\r\n  static getItemFromAnnotatedValue(project: Project, value: IAnnotatedValue) {\r\n    for (const item of project.items) {\r\n      if (item.projectPath === value.value) {\r\n        return item;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async isVibrantVisualsCompatible(project: Project) {\r\n    for (const item of project.items) {\r\n      if (!item.isContentLoaded) {\r\n        await item.loadContent();\r\n      }\r\n\r\n      if (item.primaryFile) {\r\n        const manifestJson = await ResourceManifestDefinition.ensureOnFile(item.primaryFile);\r\n\r\n        if (manifestJson && manifestJson.capabilities && manifestJson.capabilities.includes(\"pbr\")) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isVibrantVisualsEnhanced(project: Project) {\r\n    for (const item of project.items) {\r\n      if (ProjectItemUtilities.isVibrantVisualsRelated(item)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async ensureDefaultItems(project: Project) {\r\n    if (project.focus === ProjectFocus.gameTests && project.projectFolder !== null) {\r\n      const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n      const defaultPath = bpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n      let pi = project.ensureItemByTag(\r\n        \"gametestjs\",\r\n        \"Test\",\r\n        ProjectItemType.testJs,\r\n        defaultPath + \"scripts/test.js\",\r\n        ProjectItemStorageType.singleFile\r\n      );\r\n\r\n      let file = await pi.loadFileContent();\r\n\r\n      if (file !== null) {\r\n        let content = \"\";\r\n        if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n          content = ProjectContent.getDefaultTestTypeScript(this.name, StorageUtilities.getBaseFromName(\"test\"));\r\n        } else {\r\n          content = ProjectContent.getDefaultTestJavaScript(this.name, StorageUtilities.getBaseFromName(\"test\"));\r\n        }\r\n\r\n        file.setContent(content);\r\n      }\r\n\r\n      await project.ensureJsIndexFile();\r\n\r\n      pi = project.ensureItemByTag(\r\n        \"manifestjson\",\r\n        \"manifest\",\r\n        ProjectItemType.behaviorPackManifestJson,\r\n        defaultPath + \"manifest.json\",\r\n        ProjectItemStorageType.singleFile,\r\n        ProjectItemCreationType.generated\r\n      );\r\n\r\n      pi = project.ensureItemByTag(\r\n        \"gameteststructure\",\r\n        \"Basic\",\r\n        ProjectItemType.structure,\r\n        defaultPath + \"structures/gametests/basic.mcstructure\",\r\n        ProjectItemStorageType.singleFile\r\n      );\r\n\r\n      file = await pi.loadFileContent();\r\n\r\n      if (file !== null) {\r\n        const result = ProjectContent.generateDefaultStructure();\r\n\r\n        if (result !== undefined) {\r\n          file.setContent(result);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static hasEntities(project: Project) {\r\n    const projectItems = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n    if (projectItems.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    const projectItemsResource = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    if (projectItemsResource.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static hasBlocks(project: Project) {\r\n    const projectItems = project.getItemsByType(ProjectItemType.blockTypeBehavior);\r\n    if (projectItems.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static hasItems(project: Project) {\r\n    const projectItems = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n    if (projectItems.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async hasDocumentationMetadata(folder: IFolder, depth?: number) {\r\n    await folder.load();\r\n\r\n    for (const folderName in folder.folders) {\r\n      if (\r\n        folderName === \"checkpoint_input\" ||\r\n        folderName === \"metadata\" ||\r\n        folderName === \"type_definitions\" ||\r\n        folderName === \"typedefs\"\r\n      ) {\r\n        return true;\r\n      }\r\n\r\n      if (depth === undefined || depth < 5) {\r\n        const isMetadata = await ProjectUtilities.hasDocumentationMetadata(folder, depth ? depth + 1 : 1);\r\n\r\n        if (isMetadata) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async prepareProjectForDocumentation(project: Project) {\r\n    await project.ensureProjectFolder();\r\n\r\n    if (!project.projectFolder) {\r\n      return;\r\n    }\r\n\r\n    const hasMetadata = await ProjectUtilities.hasDocumentationMetadata(project.projectFolder);\r\n\r\n    if (hasMetadata) {\r\n      return;\r\n    }\r\n\r\n    const result = await Database.loadPreviewMetadataFolder();\r\n\r\n    if (result) {\r\n      project.accessoryFolders = [result];\r\n    }\r\n  }\r\n\r\n  static async getBaseBehaviorPackPath(project: Project) {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = bpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  static async getBaseResourcePackPath(project: Project) {\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = rpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  static async applyScriptEntryPoint(project: Project, newScriptEntryPoint: string) {\r\n    project.scriptEntryPoint = newScriptEntryPoint;\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId)\r\n            ) {\r\n              const sm = manifestJson.ensureScriptModule(project.title, project.description);\r\n\r\n              sm.entry = project.scriptEntryPoint;\r\n\r\n              manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyDescription(project: Project, newDescription: string) {\r\n    project.description = newDescription;\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.packageJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const npmPackageJson = await NpmPackageDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (npmPackageJson && npmPackageJson.definition) {\r\n              npmPackageJson.definition.description = newDescription;\r\n\r\n              await npmPackageJson.save();\r\n            }\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.description = newDescription;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultResourcePackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.description = newDescription;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyCreator(project: Project, newCreator: string) {\r\n    project.creator = newCreator;\r\n  }\r\n\r\n  static async applyShortName(project: Project, newShortName: string) {\r\n    project.shortName = newShortName;\r\n  }\r\n\r\n  static async ensureGeneratedWith(project: Project, isToolWeb?: boolean) {\r\n    const appName = isToolWeb ? \"mctoolsweb\" : \"mctoolscli\";\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.primaryFile && projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (bpManifestJson && bpManifestJson.definition) {\r\n            bpManifestJson.ensureGeneratedWith(appName, constants.version);\r\n            await bpManifestJson.save();\r\n          }\r\n        } else if (projectItem.primaryFile && projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (rpManifestJson && rpManifestJson.definition) {\r\n            rpManifestJson.ensureGeneratedWith(appName, constants.version);\r\n            await rpManifestJson.save();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyTitle(project: Project, newTitle: string) {\r\n    project.title = newTitle;\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.primaryFile && projectItem.itemType === ProjectItemType.packageJson) {\r\n          const npmPackageJson = await NpmPackageDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (npmPackageJson && npmPackageJson.definition) {\r\n            npmPackageJson.definition.name = newTitle;\r\n            await npmPackageJson.save();\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.name = newTitle;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultResourcePackUniqueId)\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.name = newTitle;\r\n\r\n              await manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyBehaviorPackUniqueId(project: Project, newBehaviorPackId: string) {\r\n    const oldBehaviorPackId = project.defaultBehaviorPackUniqueId;\r\n\r\n    await project.setDefaultBehaviorPackUniqueIdAndUpdateDependencies(newBehaviorPackId);\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultBehaviorPackUniqueId) {\r\n      let bpackCount = 0;\r\n\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          bpackCount++;\r\n        }\r\n      }\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await BehaviorManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              (bpackCount <= 1 ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultBehaviorPackUniqueId) ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, oldBehaviorPackId))\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.uuid = newBehaviorPackId;\r\n\r\n              manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async applyResourcePackUniqueId(project: Project, newResourcePackId: string) {\r\n    const oldResourcePackId = project.defaultResourcePackUniqueId;\r\n\r\n    await project.setDefaultResourcePackUniqueIdAndUpdateDependencies(newResourcePackId);\r\n\r\n    if (project.effectiveEditPreference === ProjectEditPreference.summarized && project.defaultResourcePackUniqueId) {\r\n      let rpackCount = 0;\r\n\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          rpackCount++;\r\n        }\r\n      }\r\n\r\n      for (const projectItem of itemsCopy) {\r\n        if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          await projectItem.loadFileContent();\r\n\r\n          if (projectItem.primaryFile) {\r\n            const manifestJson = await ResourceManifestDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n            if (\r\n              manifestJson &&\r\n              manifestJson.definition &&\r\n              (rpackCount <= 1 ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, project.defaultResourcePackUniqueId) ||\r\n                Utilities.uuidEqual(manifestJson.definition.header.uuid, oldResourcePackId))\r\n            ) {\r\n              const header = manifestJson.ensureHeader(project.title, project.description);\r\n\r\n              header.uuid = newResourcePackId;\r\n\r\n              manifestJson.save();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static getSuggestedProjectShortName(creator: string, name: string) {\r\n    return this.getSuggestedShortName(creator) + \"_\" + this.getSuggestedShortName(name);\r\n  }\r\n\r\n  static getSuggestedShortName(caption: string) {\r\n    caption = caption.trim().replace(/-/g, \"\");\r\n    caption = caption.replace(/[_ :;=]/g, \"\");\r\n\r\n    let capitalStr = \"\";\r\n\r\n    for (let i = 0; i < caption.length; i++) {\r\n      if (caption[i] >= \"A\" && caption[i] <= \"Z\") {\r\n        capitalStr += caption[i].toLowerCase();\r\n      }\r\n    }\r\n\r\n    if (capitalStr.length > 1) {\r\n      return capitalStr;\r\n    }\r\n\r\n    if (caption.length <= 8) {\r\n      return caption.toLowerCase();\r\n    }\r\n\r\n    return caption.substring(0, 8).toLowerCase();\r\n  }\r\n\r\n  static getSuggestedProjectName(project: IGalleryItem) {\r\n    return this.getSuggestedProjectNameFromElements(project.id, project.gitHubFolder, project.gitHubRepoName);\r\n  }\r\n\r\n  static getSuggestedProjectNameFromElements(id?: string, gitHubFolder?: string, gitHubRepoName?: string) {\r\n    // Special case for addonStarter: use \"My Add-On\" (task 027)\r\n    if (id === \"addonStarter\") {\r\n      return \"My Add-On\";\r\n    }\r\n\r\n    let projName = \"my\";\r\n\r\n    if (id) {\r\n      projName += id;\r\n    } else if (gitHubFolder !== undefined) {\r\n      projName += gitHubFolder;\r\n      projName = projName.replace(\" behavior_packs\", \"\");\r\n    } else {\r\n      projName += gitHubRepoName;\r\n    }\r\n\r\n    projName = projName.replace(/_/gi, \"\");\r\n    projName = projName.replace(/\\//gi, \"\");\r\n    projName = projName.replace(/\\\\/gi, \"\");\r\n    projName = projName.replace(/ /gi, \"\");\r\n\r\n    return projName;\r\n  }\r\n\r\n  static async getBaseScriptsPath(project: Project) {\r\n    const scriptsFolder = await project.ensureDefaultScriptsFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return scriptsFolder.getFolderRelativePath(project.projectFolder);\r\n  }\r\n\r\n  static async renameDefaultFolders(project: Project, newTokenName: string) {\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder(true);\r\n    const rpFolder = await project.getDefaultResourcePackFolder(true);\r\n\r\n    newTokenName = MinecraftUtilities.makeNameFolderSafe(newTokenName);\r\n\r\n    if (bpFolder) {\r\n      await this._renameOrCopyFolder(bpFolder, newTokenName, \"behavior pack\");\r\n    }\r\n\r\n    if (rpFolder) {\r\n      await this._renameOrCopyFolder(rpFolder, newTokenName, \"resource pack\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Attempts to rename a pack folder. If the rename fails (e.g., OneDrive file locks),\r\n   * falls back to copying contents to a new folder and deleting the original.\r\n   */\r\n  private static async _renameOrCopyFolder(folder: IFolder, newName: string, label: string) {\r\n    try {\r\n      // First attempt: direct rename. This is fast but can fail on systems with\r\n      // file locks (OneDrive, antivirus, indexers) throwing EPERM/EACCES.\r\n      let renamed = false;\r\n      try {\r\n        renamed = await folder.rename(newName);\r\n      } catch (renameErr: any) {\r\n        // Rename threw (e.g., EPERM). In-memory state is still clean because\r\n        // NodeFolder.moveTo() performs the disk op before updating state.\r\n        // Fall through to copy+delete below.\r\n        Log.debug(\"Rename threw for \" + label + \" folder (\" + renameErr.message + \"); falling back to copy + delete.\");\r\n      }\r\n\r\n      if (renamed) {\r\n        return; // rename succeeded on disk and in-memory\r\n      }\r\n\r\n      // Disk rename failed or threw. Fall back to copy + delete.\r\n      Log.debug(\"Disk rename failed for \" + label + \" folder; falling back to copy + delete.\");\r\n\r\n      const parentFolder = folder.parentFolder;\r\n      if (!parentFolder) {\r\n        Log.error(\"Cannot copy \" + label + \" folder: no parent folder.\");\r\n        return;\r\n      }\r\n\r\n      const targetFolder = parentFolder.ensureFolder(newName);\r\n      await targetFolder.ensureExists();\r\n\r\n      await StorageUtilities.syncFolderTo(folder, targetFolder, true, true, false);\r\n\r\n      try {\r\n        await folder.deleteThisFolder();\r\n      } catch (deleteErr: any) {\r\n        // If delete fails, we still have the new folder with the correct content.\r\n        // The old template folder will remain but is not harmful \u2014 the project will use the new one.\r\n        Log.debug(\"Could not delete old \" + label + \" template folder: \" + deleteErr.toString());\r\n      }\r\n    } catch (e: any) {\r\n      // perhaps folder could not be renamed because a folder exists; continue in this case.\r\n      Log.error(\"Error renaming \" + label + \" folder: \" + e.toString());\r\n    }\r\n  }\r\n\r\n  static async processNewProject(\r\n    project: Project,\r\n    title: string,\r\n    description: string,\r\n    suggestedShortName?: string,\r\n    isWeb?: boolean\r\n  ) {\r\n    await project.inferProjectItemsFromFiles();\r\n\r\n    if (suggestedShortName) {\r\n      await ProjectUtilities.renameDefaultFolders(project, suggestedShortName);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, true);\r\n\r\n    await ProjectUtilities.randomizeAllUids(project);\r\n\r\n    // Friendly-name fallback for the addon starter (and similar gallery templates).\r\n    // The \"myaddonStarter\" string comes from `getSuggestedProjectNameFromElements`\r\n    // when callers ignore the `addonStarter` special case (line 947) and feed the\r\n    // raw \"my\" + galleryId derivation back into processNewProject. That string\r\n    // also leaks into the description because the New Project Dialog defaults\r\n    // description to the title. Substitute a friendlier title and a non-tautological\r\n    // description so first-time creators don't see \"myaddonStarter / myaddonStarter\"\r\n    // in their pack manifest.\r\n    const friendlyTitle = ProjectUtilities.makeFriendlyProjectTitle(title);\r\n    if (friendlyTitle !== title) {\r\n      title = friendlyTitle;\r\n      // If the description was just a copy of the auto-derived title, swap it out too.\r\n      if (\r\n        !description ||\r\n        description === title ||\r\n        ProjectUtilities.makeFriendlyProjectTitle(description) === friendlyTitle\r\n      ) {\r\n        description = \"An add-on starter project. Customize this in manifest.json or via the editor.\";\r\n      }\r\n    } else if (description && description === title) {\r\n      // Title was already friendly but description tautologically copies it. Provide a\r\n      // gentle nudge so the manifest isn't \"Foo / Foo\".\r\n      description = title + \" \u2014 customize this description in manifest.json or via the editor.\";\r\n    }\r\n\r\n    await ProjectUtilities.applyTitle(project, title);\r\n    await ProjectUtilities.applyDescription(project, description);\r\n    await ProjectUtilities.ensureGeneratedWith(project, isWeb);\r\n\r\n    await ProjectStandard.ensureIsStandard(project);\r\n\r\n    const pur = new ProjectUpdateRunner(project);\r\n\r\n    await pur.updateProject();\r\n\r\n    await project.save(true);\r\n  }\r\n\r\n  /**\r\n   * Detects the auto-derived \"my\" + galleryId pattern (e.g. \"myaddonStarter\")\r\n   * produced by `getSuggestedProjectNameFromElements` when the addonStarter\r\n   * special case is bypassed, and substitutes a human-readable title.\r\n   *\r\n   * Currently only normalises the addon starter family \u2014 extend with additional\r\n   * checks if more gallery templates start leaking technical ids into manifests.\r\n   */\r\n  static makeFriendlyProjectTitle(title: string): string {\r\n    if (!title) {\r\n      return title;\r\n    }\r\n    const lower = title.trim().toLowerCase();\r\n    if (lower === \"myaddonstarter\") {\r\n      return \"My Add-on Starter\";\r\n    }\r\n    return title;\r\n  }\r\n\r\n  static async setNewModuleId(project: Project, newModuleId: string, oldModuleId: string) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let setResourcePack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.resourcePackManifestJson && !setResourcePack) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (rpManifestJson.definition && rpManifestJson.definition.modules) {\r\n              const mods = rpManifestJson.definition.modules;\r\n\r\n              for (const mod of mods) {\r\n                if (mod.uuid === oldModuleId) {\r\n                  mod.uuid = newModuleId;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (bpManifestJson.definition && bpManifestJson.definition.modules) {\r\n              const mods = bpManifestJson.definition.modules;\r\n\r\n              for (const mod of mods) {\r\n                if (mod.uuid === oldModuleId) {\r\n                  mod.uuid = newModuleId;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getDefaultBehaviorPackFolder(project: Project, paths: string[]) {\r\n    const bpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n    if (!bpFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const srFolder = await bpFolder.ensureFolderFromRelativePath(paths.join(\"/\"));\r\n\r\n    await srFolder.ensureExists();\r\n\r\n    return srFolder;\r\n  }\r\n\r\n  static async getIsAddon(project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let rpCount = 0;\r\n    let bpCount = 0;\r\n    let hasThingsThatAreNotInAddons = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (\r\n          pi.itemType === ProjectItemType.worldFolder ||\r\n          pi.itemType === ProjectItemType.worldTemplateManifestJson ||\r\n          pi.itemType === ProjectItemType.levelDbLdb ||\r\n          pi.itemType === ProjectItemType.levelDbLog ||\r\n          pi.itemType === ProjectItemType.levelDbManifest ||\r\n          pi.itemType === ProjectItemType.MCWorld ||\r\n          pi.itemType === ProjectItemType.MCProject ||\r\n          pi.itemType === ProjectItemType.MCTemplate ||\r\n          pi.itemType === ProjectItemType.levelDat\r\n        ) {\r\n          hasThingsThatAreNotInAddons = true;\r\n        } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          rpCount++;\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            if (!rpManifestJson.hasAddonProperties()) {\r\n              return false;\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          bpCount++;\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            if (!bpManifestJson.hasAddonProperties()) {\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return !hasThingsThatAreNotInAddons && bpCount === 1 && rpCount === 1;\r\n  }\r\n\r\n  static async getMetaCategory(project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n    let rpCount = 0;\r\n    let bpCount = 0;\r\n    let spCount = 0;\r\n    let personaCount = 0;\r\n    let worldTemplateCount = 0;\r\n\r\n    let hasPacksWithAddOnProperties = false;\r\n    let hasPacksWithoutAddOnProperties = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (!pi.primaryFile) {\r\n        continue;\r\n      }\r\n\r\n      if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        rpCount++;\r\n        const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n        if (rpManifestJson) {\r\n          let hasAddonProperties = rpManifestJson.hasAddonProperties();\r\n\r\n          if (hasAddonProperties) {\r\n            hasPacksWithAddOnProperties = true;\r\n          } else {\r\n            hasPacksWithoutAddOnProperties = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        bpCount++;\r\n        const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n        if (bpManifestJson) {\r\n          let hasAddonProperties = bpManifestJson.hasAddonProperties();\r\n\r\n          if (hasAddonProperties) {\r\n            hasPacksWithAddOnProperties = true;\r\n          } else {\r\n            hasPacksWithoutAddOnProperties = true;\r\n          }\r\n        }\r\n      } else if (pi.itemType === ProjectItemType.skinPackManifestJson) {\r\n        spCount++;\r\n      } else if (pi.itemType === ProjectItemType.personaManifestJson) {\r\n        personaCount++;\r\n      } else if (pi.itemType === ProjectItemType.worldTemplateManifestJson) {\r\n        worldTemplateCount++;\r\n      }\r\n    }\r\n\r\n    if (personaCount > 0) {\r\n      return ProjectMetaCategory.persona;\r\n    }\r\n\r\n    if (worldTemplateCount > 0) {\r\n      return ProjectMetaCategory.worldTemplate;\r\n    }\r\n\r\n    if (\r\n      bpCount === 1 &&\r\n      rpCount === 1 &&\r\n      spCount === 0 &&\r\n      !hasPacksWithoutAddOnProperties &&\r\n      hasPacksWithAddOnProperties\r\n    ) {\r\n      return ProjectMetaCategory.addOn;\r\n    }\r\n\r\n    if (bpCount === 0 && rpCount >= 1 && !hasPacksWithAddOnProperties) {\r\n      return ProjectMetaCategory.texturePack;\r\n    }\r\n\r\n    if (spCount >= 0) {\r\n      return ProjectMetaCategory.skinPack;\r\n    }\r\n\r\n    return ProjectMetaCategory.mix;\r\n  }\r\n\r\n  static getMetaCategoryDescription(category: ProjectMetaCategory) {\r\n    switch (category) {\r\n      case ProjectMetaCategory.addOn:\r\n        return \"Add-On\";\r\n      case ProjectMetaCategory.worldTemplate:\r\n        return \"World Template\";\r\n      case ProjectMetaCategory.texturePack:\r\n        return \"Texture Pack\";\r\n      case ProjectMetaCategory.skinPack:\r\n        return \"Skin Pack\";\r\n      case ProjectMetaCategory.persona:\r\n        return \"Persona\";\r\n      default:\r\n        return \"Mix\";\r\n    }\r\n  }\r\n\r\n  static async setIsAddon(project: Project) {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            rpManifestJson.setAddonProperties();\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            bpManifestJson.setAddonProperties();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async randomizeAllUids(project: Project) {\r\n    const oldUids: { [name: string]: string } = {};\r\n\r\n    oldUids[\"defaultBehaviorPack\"] = project.defaultBehaviorPackUniqueId;\r\n    oldUids[\"defaultResourcePack\"] = project.defaultResourcePackUniqueId;\r\n    oldUids[\"defaultDataPack\"] = project.defaultDataUniqueId;\r\n    oldUids[\"defaultScriptModulePack\"] = project.defaultScriptModuleUniqueId;\r\n\r\n    await project.setDefaultResourcePackUniqueIdAndUpdateDependencies(Utilities.createUuid());\r\n    await project.setDefaultBehaviorPackUniqueIdAndUpdateDependencies(Utilities.createUuid());\r\n    project.defaultDataUniqueId = Utilities.createUuid();\r\n    project.defaultScriptModuleUniqueId = Utilities.createUuid();\r\n\r\n    const itemsCopy = project.getItemsCopy();\r\n    let assignedDefaultBehaviorPack = false;\r\n    let assignedDefaultResourcePack = false;\r\n\r\n    for (let i = 0; i < itemsCopy.length; i++) {\r\n      const pi = itemsCopy[i];\r\n\r\n      if (pi.primaryFile) {\r\n        if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const bpManifestJson = await BehaviorManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (bpManifestJson) {\r\n            bpManifestJson.randomizeModuleUuids(\r\n              project.defaultScriptModuleUniqueId,\r\n              oldUids[\"defaultScriptModulePack\"]\r\n            );\r\n\r\n            if (\r\n              bpManifestJson.id !== oldUids[\"defaultBehaviorPack\"] &&\r\n              bpManifestJson.id !== project.defaultBehaviorPackUniqueId\r\n            ) {\r\n              if (!assignedDefaultBehaviorPack) {\r\n                // Assign the project's default behavior pack UUID to the first unmatched manifest\r\n                // so that applyTitle/applyDescription can find it by UUID later.\r\n                await bpManifestJson.setUuid(project.defaultBehaviorPackUniqueId, project);\r\n                assignedDefaultBehaviorPack = true;\r\n              } else {\r\n                await bpManifestJson.setUuid(Utilities.createUuid(), project);\r\n              }\r\n            } else {\r\n              assignedDefaultBehaviorPack = true;\r\n            }\r\n          }\r\n        } else if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n          const rpManifestJson = await ResourceManifestDefinition.ensureOnFile(pi.primaryFile);\r\n\r\n          if (rpManifestJson) {\r\n            rpManifestJson.randomizeModuleUuids(project.defaultDataUniqueId, oldUids[\"defaultDataModulePack\"]);\r\n\r\n            if (\r\n              rpManifestJson.id !== oldUids[\"defaultResourcePack\"] &&\r\n              rpManifestJson.id !== project.defaultResourcePackUniqueId\r\n            ) {\r\n              if (!assignedDefaultResourcePack) {\r\n                // Assign the project's default resource pack UUID to the first unmatched manifest\r\n                // so that applyTitle/applyDescription can find it by UUID later.\r\n                await rpManifestJson.setUuid(project.defaultResourcePackUniqueId, project);\r\n                assignedDefaultResourcePack = true;\r\n              } else {\r\n                await rpManifestJson.setUuid(Utilities.createUuid(), project);\r\n              }\r\n            } else {\r\n              assignedDefaultResourcePack = true;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static sanitizeProjectName(name: string) {\r\n    const lastDash = name.lastIndexOf(\"-\");\r\n\r\n    // this is the token format of Electron Storage - remove the random token at the end\r\n    if (lastDash === name.length - 6) {\r\n      name = name.substring(0, name.length - 6);\r\n    }\r\n\r\n    return name;\r\n  }\r\n\r\n  static CodeReplaceTokens = [\"say Hello\", 'sendMessage(\"Hello world'];\r\n\r\n  static ImportTypes = {\r\n    vanilla: [\r\n      \"MinecraftDimensionTypes\",\r\n      \"MinecraftBlockTypes\",\r\n      \"MinecraftItemTypes\",\r\n      \"MinecraftEntityTypes\",\r\n      \"MinecraftEffectTypes\",\r\n      \"MinecraftEnchantmentTypes\",\r\n      \"MinecraftBiomeTypes\",\r\n      \"MinecraftFeatureTypes\",\r\n      \"MinecraftPotionEffectTypes\",\r\n      \"MinecraftPotionLiquidTypes\",\r\n      \"MinecraftPotionModifierTypes\",\r\n      \"MinecraftCooldownCategoryTypes\",\r\n    ],\r\n    math: [\"Vector3Utils\"],\r\n    mcui: [\r\n      \"MessageFormResponse\",\r\n      \"MessageFormData\",\r\n      \"ActionFormData\",\r\n      \"ActionFormResponse\",\r\n      \"ModalFormData\",\r\n      \"ModalFormResponse\",\r\n    ],\r\n    mc: [\r\n      \"system\",\r\n      \"BlockPermutation\",\r\n      \"BlockSignComponent\",\r\n      \"CompoundBlockVolume\",\r\n      \"SignSide\",\r\n      \"DyeColor\",\r\n      \"ItemDurabilityComponent\",\r\n      \"RawMessage\",\r\n      \"RawText\",\r\n      \"EntityProjectileComponent\",\r\n      \"EntityQueryOptions\",\r\n      \"ButtonPushAfterEvent\",\r\n      \"ItemStack\",\r\n      \"MolangVariableMap\",\r\n      \"EntityInventoryComponent\",\r\n      \"BlockInventoryComponent\",\r\n      \"Enchantment\",\r\n      \"ItemEnchantsComponent\",\r\n      \"EntityHealthComponent\",\r\n      \"EntityOnFireComponent\",\r\n      \"EntityEquippableComponent\",\r\n      \"EquipmentSlot\",\r\n      \"EntityItemComponent\",\r\n      \"EntitySpawnAfterEvent\",\r\n      \"PistonActivateBeforeEvent\",\r\n      \"PistonActivateAfterEvent\",\r\n      \"MusicOptions\",\r\n      \"WorldSoundOptions\",\r\n      \"PlayerSoundOptions\",\r\n      \"DisplaySlotId\",\r\n      \"ObjectiveSortOrder\",\r\n      \"TripWireTripAfterEvent\",\r\n      \"BlockComponentTypes\",\r\n      \"EntityComponentTypes\",\r\n      \"ItemComponentTypes\",\r\n      \"LeverActionAfterEvent\",\r\n      \"Vector3\",\r\n    ],\r\n    mced: [\r\n      \"IPlayerUISession\",\r\n      \"ExtensionContext\",\r\n      \"IModalToolContainer\",\r\n      \"registerEditorExtension\",\r\n      \"ActionManager\",\r\n      \"IModalTool\",\r\n      \"ActionTypes\",\r\n      \"MouseProps\",\r\n      \"MouseActionType\",\r\n      \"MouseInputType\",\r\n      \"KeyboardKey\",\r\n      \"InputModifier\",\r\n      \"EditorInputContext\",\r\n      \"IPropertyPane\",\r\n    ],\r\n  };\r\n\r\n  static getTopicUrl(topic: string) {\r\n    const tokens = topic.split(\".\");\r\n\r\n    if (tokens.length < 1) {\r\n      return undefined;\r\n    }\r\n\r\n    if (\r\n      this.ImportTypes.mc.includes(tokens[0]) ||\r\n      tokens[0] === \"World\" ||\r\n      tokens[0] === \"System\" ||\r\n      tokens[0] === \"Dimension\"\r\n    ) {\r\n      return (\r\n        \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/\" +\r\n        topic.toLowerCase().replace(\".\", \"#\")\r\n      );\r\n    }\r\n    if (this.ImportTypes.mcui.includes(tokens[0])) {\r\n      return (\r\n        \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/\" +\r\n        topic.toLowerCase().replace(\".\", \"#\")\r\n      );\r\n    }\r\n    if (this.ImportTypes.mced.includes(tokens[0])) {\r\n      return (\r\n        \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-editor/\" +\r\n        topic.toLowerCase().replace(\".\", \"#\")\r\n      );\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static adaptFullSample(content: string) {\r\n    const registerFunction = content.indexOf(\"export function register\");\r\n\r\n    if (registerFunction >= 0) {\r\n      let nextParen = content.indexOf(\"Extension(\", registerFunction);\r\n\r\n      if (nextParen > registerFunction) {\r\n        content = content.substring(0, registerFunction + 24) + content.substring(nextParen);\r\n      }\r\n    }\r\n\r\n    return content;\r\n  }\r\n\r\n  static adaptSample(sampleContent: string, fileContent: string) {\r\n    if (sampleContent.indexOf(\" mc.\") >= 0 && fileContent.indexOf(\" as mc\") <= 0) {\r\n      sampleContent = sampleContent.replace(/mc./gi, \"\");\r\n    }\r\n\r\n    if (sampleContent.indexOf(\" mcui.\") >= 0 && fileContent.indexOf(\" as mcui\") <= 0) {\r\n      sampleContent = sampleContent.replace(/mcui./gi, \"\");\r\n    }\r\n\r\n    return sampleContent;\r\n  }\r\n\r\n  static modifyImports(fileContent: string) {\r\n    let startOfCode = fileContent.indexOf(\"(\");\r\n    let nextStartOfCode = fileContent.indexOf(\"function\");\r\n\r\n    if (nextStartOfCode >= 0 && nextStartOfCode < startOfCode) {\r\n      startOfCode = nextStartOfCode;\r\n    }\r\n\r\n    nextStartOfCode = fileContent.indexOf(\"class\");\r\n\r\n    if (nextStartOfCode >= 0 && nextStartOfCode < startOfCode) {\r\n      startOfCode = nextStartOfCode;\r\n    }\r\n\r\n    const previousNewLine = fileContent.lastIndexOf(\"\\n\", startOfCode);\r\n\r\n    if (previousNewLine >= 0) {\r\n      startOfCode = previousNewLine;\r\n    }\r\n\r\n    if (startOfCode > 0) {\r\n      let introContent = fileContent.substring(0, startOfCode);\r\n      const restOfContent = fileContent.substring(startOfCode);\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/server\",\r\n        this.ImportTypes.mc\r\n      );\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/server-ui\",\r\n        this.ImportTypes.mcui\r\n      );\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/vanilla-data\",\r\n        this.ImportTypes.vanilla\r\n      );\r\n\r\n      introContent = ProjectUtilities.ensureImportLines(\r\n        introContent,\r\n        restOfContent,\r\n        \"@minecraft/math\",\r\n        this.ImportTypes.math\r\n      );\r\n\r\n      fileContent = introContent + restOfContent;\r\n    }\r\n\r\n    return fileContent;\r\n  }\r\n\r\n  static ensureImportLines(\r\n    introSection: string,\r\n    restOfContent: string,\r\n    moduleName: string,\r\n    importCollection: string[]\r\n  ) {\r\n    for (const importType of importCollection) {\r\n      if (restOfContent.indexOf(importType) >= 0) {\r\n        let importLineIndex = introSection.indexOf('from \"' + moduleName + '\";');\r\n\r\n        if (importLineIndex < 0) {\r\n          introSection = 'import {} from \"' + moduleName + '\";\\n' + introSection;\r\n          importLineIndex = 10;\r\n        }\r\n\r\n        let previousNewLine = introSection.lastIndexOf(\"\\n\", importLineIndex);\r\n\r\n        if (previousNewLine < 0) {\r\n          previousNewLine = 0;\r\n        }\r\n\r\n        let endNewLine = introSection.indexOf(\"\\n\", importLineIndex);\r\n\r\n        if (endNewLine > previousNewLine) {\r\n          let importLine = introSection.substring(previousNewLine, endNewLine);\r\n\r\n          const leftBracket = importLine.indexOf(\"{\");\r\n          const rightBracket = importLine.indexOf(\"}\");\r\n\r\n          if (leftBracket > 0 && rightBracket > leftBracket) {\r\n            const interior = importLine.substring(leftBracket + 1, rightBracket).trim();\r\n\r\n            let injectToken = importType;\r\n\r\n            // is there one token already in the import linte\r\n            if (interior.length > 0) {\r\n              injectToken = \", \" + injectToken;\r\n            }\r\n\r\n            importLine = importLine.substring(0, rightBracket) + injectToken + importLine.substring(rightBracket);\r\n          }\r\n\r\n          introSection = introSection.substring(0, previousNewLine) + importLine + introSection.substring(endNewLine);\r\n        }\r\n      }\r\n    }\r\n\r\n    return introSection;\r\n  }\r\n\r\n  static async ensureTypeScriptFileWith(\r\n    project: Project,\r\n    token: string,\r\n    templateSet: string,\r\n    templateName: string,\r\n    fileNameCore: string,\r\n    replacers: { [sourceString: string]: string }\r\n  ) {\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const projectItem of itemsCopy) {\r\n      if (projectItem.itemType === ProjectItemType.ts) {\r\n        await projectItem.loadFileContent();\r\n\r\n        if (projectItem.primaryFile) {\r\n          const tsJson = await TypeScriptDefinition.ensureOnFile(projectItem.primaryFile);\r\n\r\n          if (tsJson?.data && tsJson.data.indexOf(token) >= 0) {\r\n            return;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const snippet = await Database.getSnippet(templateSet, templateName);\r\n    const scriptFolder = await project.ensureDefaultScriptsFolder();\r\n\r\n    await scriptFolder.load();\r\n\r\n    if (!snippet) {\r\n      Log.error(\"Could not find template \" + templateSet, templateName);\r\n      return;\r\n    }\r\n\r\n    const file = scriptFolder.ensureFile(fileNameCore + \".ts\");\r\n\r\n    let snippetInjectContent = \"\\n\" + snippet.body.join(\"\\n\") + \"\\n\";\r\n\r\n    for (const replacerToken in replacers) {\r\n      const targetReplace = replacers[replacerToken];\r\n\r\n      if (targetReplace) {\r\n        // replace with something better.\r\n        while (snippetInjectContent.indexOf(replacerToken) >= 0) {\r\n          snippetInjectContent = snippetInjectContent.replace(replacerToken, replacers[replacerToken]);\r\n        }\r\n      }\r\n    }\r\n\r\n    file.setContent(snippetInjectContent);\r\n\r\n    await file.saveContent();\r\n\r\n    project.ensureItemFromFile(file, ProjectItemType.ts, FolderContext.behaviorPack);\r\n  }\r\n\r\n  static async injectSnippet(project: Project, snippet: ISnippet, fullScriptBoxReplace: boolean) {\r\n    let snippetInjectContent = \"\\n\" + snippet.body.join(\"\\n\") + \"\\n\";\r\n\r\n    const folder = await project.ensureDefaultScriptsFolder();\r\n\r\n    await folder.load();\r\n\r\n    // Log.debugAlert(\"Inject snippet considering folder: \" + folder.storageRelativePath + \"|\" + replaceContent);\r\n    for (const fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file !== undefined) {\r\n        if (fullScriptBoxReplace && fileName === \"ScriptBox.ts\") {\r\n          snippetInjectContent = ProjectUtilities.adaptFullSample(snippetInjectContent);\r\n\r\n          file.setContent(snippetInjectContent);\r\n        } else {\r\n          const type = StorageUtilities.getTypeFromName(file.name);\r\n\r\n          if (type === \"ts\" || type === \"js\") {\r\n            if (!file.isContentLoaded) {\r\n              await file.loadContent();\r\n            }\r\n\r\n            // Log.debugAlert(\"Inject snippet considering file: \" + file.storageRelativePath + \"|\" + file.content?.length);\r\n            if (file.content && typeof file.content === \"string\") {\r\n              let content = file.content;\r\n\r\n              for (let i = 0; i < this.CodeReplaceTokens.length; i++) {\r\n                const token = content.indexOf(this.CodeReplaceTokens[i]);\r\n\r\n                if (token >= 0) {\r\n                  const previousNewLine = content.lastIndexOf(\"\\n\", token);\r\n                  const nextNewLine = content.indexOf(\"\\n\", token);\r\n                  if (previousNewLine >= 0 && nextNewLine > previousNewLine) {\r\n                    snippetInjectContent = ProjectUtilities.adaptSample(snippetInjectContent, content);\r\n\r\n                    content =\r\n                      content.substring(0, previousNewLine) + snippetInjectContent + content.substring(nextNewLine + 1);\r\n\r\n                    if (\r\n                      snippetInjectContent.indexOf(\"overworld\") >= 0 &&\r\n                      snippetInjectContent.indexOf(\"const overworld\") <= 0\r\n                    ) {\r\n                      let firstComment = content.indexOf(\"//\");\r\n                      if (firstComment >= 0) {\r\n                        content =\r\n                          content.substring(0, firstComment) +\r\n                          '  const overworld = mc.world.getDimension(\"overworld\");\\n' +\r\n                          content.substring(firstComment, content.length);\r\n                      }\r\n                    }\r\n\r\n                    content = ProjectUtilities.modifyImports(content);\r\n\r\n                    file.setContent(content);\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async addBlockType(project: Project, blockTypeId?: string, blockTypeName?: string) {\r\n    const defaultBehaviorPackPath = await ProjectUtilities.getBaseBehaviorPackPath(project);\r\n    const defaultScriptsPath = await ProjectUtilities.getBaseScriptsPath(project);\r\n\r\n    if (defaultBehaviorPackPath === undefined || defaultScriptsPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    await Database.getReleaseVanillaBehaviorPackFolder();\r\n\r\n    if (Database.releaseVanillaBehaviorPackFolder === null) {\r\n      Log.fail(\"Could not find default behavior pack folder\");\r\n      return;\r\n    }\r\n\r\n    const sourceFile = Database.releaseVanillaBehaviorPackFolder\r\n      .ensureFolder(\"blocks\")\r\n      .ensureFile(blockTypeId + \".json\");\r\n\r\n    if (!sourceFile.isContentLoaded) {\r\n      await sourceFile.loadContent(true);\r\n    }\r\n\r\n    if (\r\n      !sourceFile.content ||\r\n      sourceFile.content === \"\" ||\r\n      sourceFile.content === \"null\" ||\r\n      sourceFile.content instanceof Uint8Array\r\n    ) {\r\n      Log.fail(\"Block at '\" + sourceFile.fullPath + \"' is empty.\");\r\n      return;\r\n    }\r\n\r\n    const name = blockTypeId ? MinecraftUtilities.canonicalizeName(blockTypeId) : \"block\";\r\n\r\n    const nextBlockTypeName = blockTypeName ? blockTypeName : name;\r\n\r\n    const candidateFilePath = await ProjectUtilities.getFileName(\r\n      project,\r\n      defaultBehaviorPackPath + \"blocks/\",\r\n      nextBlockTypeName,\r\n      \"json\",\r\n      true\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      nextBlockTypeName,\r\n      ProjectItemType.blockTypeBehavior,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const content = Utilities.fixJsonContent(sourceFile.content);\r\n\r\n      file.setContent(content);\r\n\r\n      const bt = await BlockTypeDefinition.ensureOnFile(file, undefined);\r\n\r\n      if (bt) {\r\n        bt.id =\r\n          nextBlockTypeName.indexOf(\":\") >= 0\r\n            ? nextBlockTypeName\r\n            : project.effectiveDefaultNamespace + \":\" + nextBlockTypeName;\r\n\r\n        bt.persist();\r\n      }\r\n\r\n      await file.saveContent(true);\r\n    }\r\n    /*\r\n    if (project.preferredScriptLanguage === ProjectScriptLanguage.javaScript) {\r\n      const candidateJsFilePath = await ProjectUtilities.getFileName(\r\n        project,\r\n        defaultScriptsPath + \"generated/\",\r\n        nextBlockTypeName + \".base\",\r\n        \"js\",\r\n        true\r\n      );\r\n\r\n      if (candidateJsFilePath) {\r\n        const piGenJs = project.ensureItemByProjectPath(\r\n          candidateJsFilePath,\r\n          ProjectItemStorageType.singleFile,\r\n          StorageUtilities.getLeafName(candidateJsFilePath),\r\n          ProjectItemType.blockTypeBaseJs,\r\n          undefined,\r\n          ProjectItemCreationType.generated\r\n        );\r\n\r\n        await ProjectAutogeneration.updateItemAutogeneration(piGenJs);\r\n      }\r\n    } else if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n      const candidateJsFilePath = await ProjectUtilities.getFileName(\r\n        project,\r\n        defaultScriptsPath + \"generated/\",\r\n        nextBlockTypeName + \".base\",\r\n        \"ts\",\r\n        true\r\n      );\r\n\r\n      if (candidateJsFilePath) {\r\n        const piGenJs = project.ensureItemByProjectPath(\r\n          candidateJsFilePath,\r\n          ProjectItemStorageType.singleFile,\r\n          StorageUtilities.getLeafName(candidateJsFilePath),\r\n          ProjectItemType.blockTypeBaseTs,\r\n          undefined,\r\n          ProjectItemCreationType.normal\r\n        );\r\n\r\n        await ProjectAutogeneration.updateItemAutogeneration(piGenJs);\r\n      }\r\n    }*/\r\n  }\r\n\r\n  static canonicalizeStoragePath(path: string | null | undefined) {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    path = path.toLowerCase();\r\n\r\n    return path;\r\n  }\r\n\r\n  static canonicalizeNamespace(path: string | null | undefined) {\r\n    if (!path) {\r\n      return \"\";\r\n    }\r\n\r\n    path = path.toLowerCase();\r\n    path = path.replace(/ /gi, \"\");\r\n    path = path.replace(/:/gi, \"\");\r\n\r\n    return path;\r\n  }\r\n\r\n  static async getFileName(\r\n    project: Project,\r\n    basePath: string,\r\n    baseName: string,\r\n    extension: string,\r\n    includeBase: boolean\r\n  ) {\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    if (includeBase) {\r\n      index = -1;\r\n    }\r\n\r\n    let candidateFilePath = \"\";\r\n    const projectFolder = project.projectFolder;\r\n    let candidateFile = null;\r\n\r\n    await projectFolder.ensureFolderFromRelativePath(basePath);\r\n    await projectFolder.ensureExists();\r\n\r\n    // find a filename not in use\r\n    do {\r\n      index++;\r\n\r\n      if (index === 0) {\r\n        candidateFilePath = basePath + baseName + \".\" + extension;\r\n      } else {\r\n        candidateFilePath = basePath + baseName + index + \".\" + extension;\r\n      }\r\n\r\n      candidateFile = await projectFolder.getFileFromRelativePath(candidateFilePath);\r\n    } while (candidateFile !== null && candidateFile !== undefined);\r\n\r\n    return candidateFilePath;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   PROJECT ITEM TYPE INFO - Semantic Color System & Categorization\r\n   \r\n   This module provides a unified system for categorizing, coloring, and\r\n   providing icons for all Minecraft project item types. The design uses\r\n   Minecraft-themed colors inspired by in-game materials and concepts.\r\n   \r\n   CATEGORY GROUPS (semantic groupings for UI display):\r\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n   1. Scripts/Logic (Emerald Green)    - TypeScript, JavaScript, functions\r\n   2. Entity Types (Minecraft Green)  - Entities, spawn rules, dialogues\r\n   3. Item Types (Gold/Amber)          - Items, loot tables, recipes, trading\r\n   4. Block Types (Stone Gray)         - Blocks, terrain, culling\r\n   5. World/Worldgen (Grass Lime)      - Biomes, features, dimensions, worlds\r\n   6. Models/Animations (Diamond Cyan) - Geometry, animations, render controllers\r\n   7. Textures/Audio (Minecraft Green) - Textures, sounds, particles\r\n   8. Vibrant Visuals (Minecraft Green) - Lighting, atmospherics, PBR\r\n   9. UI/UX (Pumpkin Orange)           - JSON UI, global variables\r\n   10. Config/Dev (Iron Slate)         - Package.json, tsconfig, VS Code\r\n   11. Design (Lapis Blue)             - Design pack content\r\n   12. Packaging (Redstone Red)        - MCAddon, MCPack, ZIP files\r\n   \r\n   See: docs/ux/ColorSystem.md for full color palette\r\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 */\r\n\r\nimport IColor from \"../core/IColor\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\n\r\n/**\r\n * Semantic category groups for project items.\r\n * These map to visual groupings in the UI item list.\r\n */\r\nexport enum ProjectItemTypeGroup {\r\n  design = \"design\",\r\n  scriptsLogic = \"scriptsLogic\",\r\n  entityTypes = \"entityTypes\",\r\n  itemTypes = \"itemTypes\",\r\n  blockTypes = \"blockTypes\",\r\n  worldWorldgen = \"worldWorldgen\",\r\n  modelsAnimations = \"modelsAnimations\",\r\n  texturesAudio = \"texturesAudio\",\r\n  vibrantVisuals = \"vibrantVisuals\",\r\n  uiUx = \"uiUx\",\r\n  configDev = \"configDev\",\r\n  packaging = \"packaging\",\r\n  skinPersona = \"skinPersona\",\r\n  meta = \"meta\",\r\n  unknown = \"unknown\",\r\n}\r\n\r\n/**\r\n * Color palette for project item type groups.\r\n * Colors are inspired by Minecraft materials and items.\r\n */\r\nexport const ProjectItemTypeGroupColors: Record<ProjectItemTypeGroup, IColor> = {\r\n  // Emerald Green - Scripts and logic\r\n  [ProjectItemTypeGroup.scriptsLogic]: { red: 16, green: 185, blue: 129 }, // #10b981\r\n\r\n  // Minecraft Green - Entity types\r\n  [ProjectItemTypeGroup.entityTypes]: { red: 82, green: 165, blue: 53 }, // #52a535\r\n\r\n  // Gold/Amber - Item types\r\n  [ProjectItemTypeGroup.itemTypes]: { red: 245, green: 158, blue: 11 }, // #f59e0b\r\n\r\n  // Stone Gray - Block types\r\n  [ProjectItemTypeGroup.blockTypes]: { red: 120, green: 113, blue: 108 }, // #78716c\r\n\r\n  // Grass Lime - World and worldgen\r\n  [ProjectItemTypeGroup.worldWorldgen]: { red: 132, green: 204, blue: 22 }, // #84cc16\r\n\r\n  // Diamond Cyan - Models and animations\r\n  [ProjectItemTypeGroup.modelsAnimations]: { red: 6, green: 182, blue: 212 }, // #06b6d4\r\n\r\n  // Minecraft Green - Textures and audio\r\n  [ProjectItemTypeGroup.texturesAudio]: { red: 82, green: 165, blue: 53 }, // #52a535\r\n\r\n  // Minecraft Green - Vibrant visuals\r\n  [ProjectItemTypeGroup.vibrantVisuals]: { red: 82, green: 165, blue: 53 }, // #52a535\r\n\r\n  // Pumpkin Orange - UI/UX\r\n  [ProjectItemTypeGroup.uiUx]: { red: 249, green: 115, blue: 22 }, // #f97316\r\n\r\n  // Iron Slate - Config and dev tools\r\n  [ProjectItemTypeGroup.configDev]: { red: 100, green: 116, blue: 139 }, // #64748b\r\n\r\n  // Lapis Blue - Design pack content\r\n  [ProjectItemTypeGroup.design]: { red: 59, green: 130, blue: 246 }, // #3b82f6\r\n\r\n  // Redstone Red - Packaging\r\n  [ProjectItemTypeGroup.packaging]: { red: 239, green: 68, blue: 68 }, // #ef4444\r\n\r\n  // Leather Brown - Skins and personas\r\n  [ProjectItemTypeGroup.skinPersona]: { red: 180, green: 128, blue: 90 }, // #b4805a\r\n\r\n  // Book Brown - Meta/documentation\r\n  [ProjectItemTypeGroup.meta]: { red: 146, green: 114, blue: 87 }, // #927257\r\n\r\n  // Coal Gray - Unknown\r\n  [ProjectItemTypeGroup.unknown]: { red: 82, green: 82, blue: 91 }, // #52525b\r\n};\r\n\r\n/**\r\n * Maps each ProjectItemType to its semantic group.\r\n */\r\nexport function getProjectItemTypeGroup(itemType: ProjectItemType): ProjectItemTypeGroup {\r\n  switch (itemType) {\r\n    // \u2550\u2550\u2550 Design Pack \u2550\u2550\u2550\r\n    case ProjectItemType.designTexture:\r\n    case ProjectItemType.designPackManifestJson:\r\n    case ProjectItemType.designPackFolder:\r\n    case ProjectItemType.actionSet:\r\n      return ProjectItemTypeGroup.design;\r\n\r\n    // \u2550\u2550\u2550 Scripts & Logic \u2550\u2550\u2550\r\n    case ProjectItemType.ts:\r\n    case ProjectItemType.js:\r\n    case ProjectItemType.MCFunction:\r\n    case ProjectItemType.testJs:\r\n    case ProjectItemType.buildProcessedJs:\r\n    case ProjectItemType.catalogIndexJs:\r\n    case ProjectItemType.entityTypeBaseJs:\r\n    case ProjectItemType.entityTypeBaseTs:\r\n    case ProjectItemType.blockTypeBaseJs:\r\n    case ProjectItemType.blockTypeBaseTs:\r\n    case ProjectItemType.tickJson:\r\n    case ProjectItemType.functionEventJson:\r\n    case ProjectItemType.animationBehaviorJson:\r\n    case ProjectItemType.animationControllerBehaviorJson:\r\n      return ProjectItemTypeGroup.scriptsLogic;\r\n\r\n    // \u2550\u2550\u2550 Entity Types \u2550\u2550\u2550\r\n    case ProjectItemType.entityTypeBehavior:\r\n    case ProjectItemType.entityTypeResource:\r\n    case ProjectItemType.spawnRuleBehavior:\r\n    case ProjectItemType.spawnGroupJson:\r\n    case ProjectItemType.dialogueBehaviorJson:\r\n    case ProjectItemType.behaviorTreeJson:\r\n      return ProjectItemTypeGroup.entityTypes;\r\n\r\n    // \u2550\u2550\u2550 Item Types \u2550\u2550\u2550\r\n    case ProjectItemType.itemTypeBehavior:\r\n    case ProjectItemType.itemTypeLegacyResource:\r\n    case ProjectItemType.attachableResourceJson:\r\n    case ProjectItemType.lootTableBehavior:\r\n    case ProjectItemType.recipeBehavior:\r\n    case ProjectItemType.tradingBehaviorJson:\r\n    case ProjectItemType.craftingItemCatalog:\r\n    case ProjectItemType.itemTextureJson:\r\n      return ProjectItemTypeGroup.itemTypes;\r\n\r\n    // \u2550\u2550\u2550 Block Types \u2550\u2550\u2550\r\n    case ProjectItemType.blockTypeBehavior:\r\n    case ProjectItemType.blocksCatalogResourceJson:\r\n    case ProjectItemType.blockTypeResourceJsonDoNotUse:\r\n    case ProjectItemType.blockCulling:\r\n    case ProjectItemType.blockMaterialsBehaviorJson:\r\n    case ProjectItemType.terrainTextureCatalogResourceJson:\r\n    case ProjectItemType.voxelShapeBehavior:\r\n      return ProjectItemTypeGroup.blockTypes;\r\n\r\n    // \u2550\u2550\u2550 World & Worldgen \u2550\u2550\u2550\r\n    case ProjectItemType.worldFolder:\r\n    case ProjectItemType.worldTemplateManifestJson:\r\n    case ProjectItemType.MCWorld:\r\n    case ProjectItemType.MCTemplate:\r\n    case ProjectItemType.MCProject:\r\n    case ProjectItemType.levelDat:\r\n    case ProjectItemType.levelDatOld:\r\n    case ProjectItemType.behaviorPackListJson:\r\n    case ProjectItemType.resourcePackListJson:\r\n    case ProjectItemType.behaviorPackHistoryListJson:\r\n    case ProjectItemType.resourcePackHistoryListJson:\r\n    case ProjectItemType.levelDbLdb:\r\n    case ProjectItemType.levelDbLog:\r\n    case ProjectItemType.levelDbCurrent:\r\n    case ProjectItemType.levelDbManifest:\r\n    case ProjectItemType.worldTest:\r\n    case ProjectItemType.biomeBehavior:\r\n    case ProjectItemType.biomeResource:\r\n    case ProjectItemType.biomesClientCatalogResource:\r\n    case ProjectItemType.featureRuleBehavior:\r\n    case ProjectItemType.featureBehavior:\r\n    case ProjectItemType.jigsawStructureSet:\r\n    case ProjectItemType.jigsawStructure:\r\n    case ProjectItemType.jigsawTemplatePool:\r\n    case ProjectItemType.jigsawProcessorList:\r\n    case ProjectItemType.dimensionJson:\r\n    case ProjectItemType.volumeBehaviorJson:\r\n    case ProjectItemType.structure:\r\n      return ProjectItemTypeGroup.worldWorldgen;\r\n\r\n    // \u2550\u2550\u2550 Models & Animations \u2550\u2550\u2550\r\n    case ProjectItemType.modelGeometryJson:\r\n    case ProjectItemType.animationResourceJson:\r\n    case ProjectItemType.animationControllerResourceJson:\r\n    case ProjectItemType.renderControllerJson:\r\n    case ProjectItemType.particleJson:\r\n      return ProjectItemTypeGroup.modelsAnimations;\r\n\r\n    // \u2550\u2550\u2550 Textures & Audio \u2550\u2550\u2550\r\n    case ProjectItemType.texture:\r\n    case ProjectItemType.image:\r\n    case ProjectItemType.packIconImage:\r\n    case ProjectItemType.marketingAssetImage:\r\n    case ProjectItemType.storeAssetImage:\r\n    case ProjectItemType.textureListJson:\r\n    case ProjectItemType.flipbookTexturesJson:\r\n    case ProjectItemType.audio:\r\n    case ProjectItemType.soundCatalog:\r\n    case ProjectItemType.soundDefinitionCatalog:\r\n    case ProjectItemType.musicDefinitionJson:\r\n    case ProjectItemType.fogResourceJson:\r\n      return ProjectItemTypeGroup.texturesAudio;\r\n\r\n    // \u2550\u2550\u2550 Vibrant Visuals \u2550\u2550\u2550\r\n    case ProjectItemType.lightingJson:\r\n    case ProjectItemType.colorGradingJson:\r\n    case ProjectItemType.atmosphericsJson:\r\n    case ProjectItemType.pbrJson:\r\n    case ProjectItemType.pointLightsJson:\r\n    case ProjectItemType.waterJson:\r\n    case ProjectItemType.shadowsJson:\r\n    case ProjectItemType.textureSetJson:\r\n      return ProjectItemTypeGroup.vibrantVisuals;\r\n\r\n    // \u2550\u2550\u2550 UI/UX \u2550\u2550\u2550\r\n    case ProjectItemType.uiJson:\r\n    case ProjectItemType.uiTexture:\r\n    case ProjectItemType.ninesliceJson:\r\n    case ProjectItemType.globalVariablesJson:\r\n    case ProjectItemType.lang:\r\n    case ProjectItemType.languagesCatalogJson:\r\n    case ProjectItemType.loadingMessagesJson:\r\n    case ProjectItemType.splashesJson:\r\n    case ProjectItemType.emoticonsJson:\r\n    case ProjectItemType.fontMetadataJson:\r\n      return ProjectItemTypeGroup.uiUx;\r\n\r\n    // \u2550\u2550\u2550 Config & Dev \u2550\u2550\u2550\r\n    case ProjectItemType.tsconfigJson:\r\n    case ProjectItemType.packageJson:\r\n    case ProjectItemType.packageLockJson:\r\n    case ProjectItemType.vsCodeLaunchJson:\r\n    case ProjectItemType.vsCodeTasksJson:\r\n    case ProjectItemType.vsCodeSettingsJson:\r\n    case ProjectItemType.vsCodeExtensionsJson:\r\n    case ProjectItemType.justConfigTs:\r\n    case ProjectItemType.jsMap:\r\n    case ProjectItemType.esLintConfigMjs:\r\n    case ProjectItemType.env:\r\n    case ProjectItemType.prettierRcJson:\r\n    case ProjectItemType.jsconfigJson:\r\n    case ProjectItemType.behaviorPackManifestJson:\r\n    case ProjectItemType.resourcePackManifestJson:\r\n    case ProjectItemType.behaviorPackFolder:\r\n    case ProjectItemType.resourcePackFolder:\r\n    case ProjectItemType.cameraBehaviorJson:\r\n    case ProjectItemType.cameraResourceJson:\r\n    case ProjectItemType.aimAssistPresetJson:\r\n    case ProjectItemType.aimAssistCategoryJson:\r\n    case ProjectItemType.educationJson:\r\n    case ProjectItemType.fileListArrayJson:\r\n    case ProjectItemType.sdlLayout:\r\n    case ProjectItemType.lodJson:\r\n    case ProjectItemType.rendererJson:\r\n    case ProjectItemType.uniformsJson:\r\n    case ProjectItemType.materialsResourceJson:\r\n    case ProjectItemType.material:\r\n    case ProjectItemType.materialSetJson:\r\n    case ProjectItemType.materialVertex:\r\n    case ProjectItemType.materialFragment:\r\n    case ProjectItemType.materialGeometry:\r\n      return ProjectItemTypeGroup.configDev;\r\n\r\n    // \u2550\u2550\u2550 Packaging \u2550\u2550\u2550\r\n    case ProjectItemType.MCAddon:\r\n    case ProjectItemType.MCPack:\r\n    case ProjectItemType.zip:\r\n    case ProjectItemType.contentsJson:\r\n      return ProjectItemTypeGroup.packaging;\r\n\r\n    // \u2550\u2550\u2550 Skins & Personas \u2550\u2550\u2550\r\n    case ProjectItemType.skinCatalogJson:\r\n    case ProjectItemType.skinPackGeometryJson:\r\n    case ProjectItemType.skinPackTextureBackCompatJson:\r\n    case ProjectItemType.skinPackManifestJson:\r\n    case ProjectItemType.skinPackFolder:\r\n    case ProjectItemType.personaJson:\r\n    case ProjectItemType.personaManifestJson:\r\n    case ProjectItemType.personaPackFolder:\r\n      return ProjectItemTypeGroup.skinPersona;\r\n\r\n    // \u2550\u2550\u2550 Meta/Documentation \u2550\u2550\u2550\r\n    case ProjectItemType.dataForm:\r\n    case ProjectItemType.docInfoJson:\r\n    case ProjectItemType.scriptTypesJson:\r\n    case ProjectItemType.commandSetDefinitionJson:\r\n    case ProjectItemType.docfxJson:\r\n    case ProjectItemType.jsdocJson:\r\n    case ProjectItemType.markdownDocumentation:\r\n    case ProjectItemType.documentedTypeFolder:\r\n    case ProjectItemType.documentedCommandFolder:\r\n    case ProjectItemType.contentIndexJson:\r\n    case ProjectItemType.contentReportJson:\r\n    case ProjectItemType.mcToolsProjectPreferences:\r\n    case ProjectItemType.projectSummaryMetadata:\r\n    case ProjectItemType.engineOrderingJson:\r\n    case ProjectItemType.vanillaDataJson:\r\n    case ProjectItemType.tagsMetadata:\r\n      return ProjectItemTypeGroup.meta;\r\n\r\n    // \u2550\u2550\u2550 Unknown \u2550\u2550\u2550\r\n    case ProjectItemType.unknown:\r\n    case ProjectItemType.unknownJson:\r\n    default:\r\n      return ProjectItemTypeGroup.unknown;\r\n  }\r\n}\r\n\r\n/**\r\n * Gets the semantic color for a project item type.\r\n */\r\nexport function getColorForProjectItemType(itemType: ProjectItemType): IColor {\r\n  const group = getProjectItemTypeGroup(itemType);\r\n  return { ...ProjectItemTypeGroupColors[group] };\r\n}\r\n\r\n/**\r\n * Gets the hex color string for a project item type.\r\n */\r\nexport function getHexColorForProjectItemType(itemType: ProjectItemType): string {\r\n  const color = getColorForProjectItemType(itemType);\r\n  return `#${color.red.toString(16).padStart(2, \"0\")}${color.green.toString(16).padStart(2, \"0\")}${color.blue\r\n    .toString(16)\r\n    .padStart(2, \"0\")}`;\r\n}\r\n\r\n/**\r\n * Display order for groups in the UI item list.\r\n * Order: Design \u2192 Scripts \u2192 Entities \u2192 Items \u2192 Blocks \u2192 World \u2192 Models \u2192 Textures \u2192 VV \u2192 UI \u2192 Config \u2192 Packaging \u2192 Skins \u2192 Meta \u2192 Unknown\r\n */\r\nexport const ProjectItemTypeGroupSortOrder: ProjectItemTypeGroup[] = [\r\n  ProjectItemTypeGroup.design,\r\n  ProjectItemTypeGroup.scriptsLogic,\r\n  ProjectItemTypeGroup.entityTypes,\r\n  ProjectItemTypeGroup.itemTypes,\r\n  ProjectItemTypeGroup.blockTypes,\r\n  ProjectItemTypeGroup.worldWorldgen,\r\n  ProjectItemTypeGroup.modelsAnimations,\r\n  ProjectItemTypeGroup.texturesAudio,\r\n  ProjectItemTypeGroup.vibrantVisuals,\r\n  ProjectItemTypeGroup.uiUx,\r\n  ProjectItemTypeGroup.skinPersona,\r\n  ProjectItemTypeGroup.configDev,\r\n  ProjectItemTypeGroup.packaging,\r\n  ProjectItemTypeGroup.meta,\r\n  ProjectItemTypeGroup.unknown,\r\n];\r\n\r\n/**\r\n * Gets the sort order index for a project item type group.\r\n */\r\nexport function getGroupSortOrder(group: ProjectItemTypeGroup): number {\r\n  const index = ProjectItemTypeGroupSortOrder.indexOf(group);\r\n  return index >= 0 ? index : ProjectItemTypeGroupSortOrder.length;\r\n}\r\n\r\n/**\r\n * Gets the sort order for a project item type based on its group.\r\n */\r\nexport function getSortOrderForProjectItemType(itemType: ProjectItemType): number {\r\n  const group = getProjectItemTypeGroup(itemType);\r\n  const groupOrder = getGroupSortOrder(group);\r\n  // Multiply by 1000 to leave room for sub-ordering within groups\r\n  // Add the item type number for stable ordering within groups\r\n  return groupOrder * 1000 + itemType;\r\n}\r\n\r\n/**\r\n * Display name for each group.\r\n */\r\nexport const ProjectItemTypeGroupNames: Record<ProjectItemTypeGroup, string> = {\r\n  [ProjectItemTypeGroup.design]: \"Design\",\r\n  [ProjectItemTypeGroup.scriptsLogic]: \"Scripts & Logic\",\r\n  [ProjectItemTypeGroup.entityTypes]: \"Entity Types\",\r\n  [ProjectItemTypeGroup.itemTypes]: \"Item Types\",\r\n  [ProjectItemTypeGroup.blockTypes]: \"Block Types\",\r\n  [ProjectItemTypeGroup.worldWorldgen]: \"World & Worldgen\",\r\n  [ProjectItemTypeGroup.modelsAnimations]: \"Models & Animations\",\r\n  [ProjectItemTypeGroup.texturesAudio]: \"Textures & Audio\",\r\n  [ProjectItemTypeGroup.vibrantVisuals]: \"Vibrant Visuals\",\r\n  [ProjectItemTypeGroup.uiUx]: \"UI & Localization\",\r\n  [ProjectItemTypeGroup.configDev]: \"Config & Dev\",\r\n  [ProjectItemTypeGroup.packaging]: \"Packages\",\r\n  [ProjectItemTypeGroup.skinPersona]: \"Skins & Personas\",\r\n  [ProjectItemTypeGroup.meta]: \"Documentation\",\r\n  [ProjectItemTypeGroup.unknown]: \"Other\",\r\n};\r\n\r\n/**\r\n * SVG path data for each project item type group icon.\r\n * Icons are designed on a 16x16 grid with a blocky Minecraft aesthetic.\r\n */\r\nexport const ProjectItemTypeGroupIcons: Record<ProjectItemTypeGroup, string> = {\r\n  // Design - Paintbrush/palette\r\n  [ProjectItemTypeGroup.design]: `M3 12L5 10L11 4L13 6L7 12L5 14L3 12ZM12 3L13 2L14 3L13 4L12 3ZM4 11L5 12L4 13L3 12L4 11Z`,\r\n\r\n  // Scripts/Logic - Code brackets with lightning bolt\r\n  [ProjectItemTypeGroup.scriptsLogic]: `M2 3H5L4 8H2L2 3ZM11 3H14V8H12L11 3ZM7 2L9 7H7L9 14H7L5 9H7L5 2H7Z`,\r\n\r\n  // Entity Types - Mob face (creeper-inspired)\r\n  [ProjectItemTypeGroup.entityTypes]: `M3 2H13V14H3V2ZM5 5H7V7H5V5ZM9 5H11V7H9V5ZM6 9H10V10H9V12H7V10H6V9Z`,\r\n\r\n  // Item Types - Diamond/gem shape\r\n  [ProjectItemTypeGroup.itemTypes]: `M8 1L14 7L8 15L2 7L8 1ZM8 4L5 7L8 12L11 7L8 4Z`,\r\n\r\n  // Block Types - 3D cube\r\n  [ProjectItemTypeGroup.blockTypes]: `M8 2L14 5V11L8 14L2 11V5L8 2ZM8 4L4 6.5V10.5L8 12L12 10.5V6.5L8 4Z`,\r\n\r\n  // World/Worldgen - Globe with terrain\r\n  [ProjectItemTypeGroup.worldWorldgen]: `M8 1A7 7 0 1 0 8 15A7 7 0 1 0 8 1ZM8 3A5 5 0 1 1 8 13A5 5 0 1 1 8 3ZM4 8H6L7 6H9L10 8H12M5 10L8 11L11 10`,\r\n\r\n  // Models/Animations - Bone/skeleton arm\r\n  [ProjectItemTypeGroup.modelsAnimations]: `M2 4H4V6H6V4H10V6H12V4H14V8H12V10H14V14H10V12H6V14H2V10H4V8H2V4ZM6 8V10H10V8H6Z`,\r\n\r\n  // Textures/Audio - Image frame with music note\r\n  [ProjectItemTypeGroup.texturesAudio]: `M2 2H11V3H3V11H2V2ZM5 5H14V14H5V5ZM7 7V12H12V7H7ZM11 8V10C11 11 10 11 10 10V8H11Z`,\r\n\r\n  // Vibrant Visuals - Sun/light rays\r\n  [ProjectItemTypeGroup.vibrantVisuals]: `M8 4A4 4 0 1 0 8 12A4 4 0 1 0 8 4ZM8 1V2M8 14V15M1 8H2M14 8H15M3 3L4 4M12 12L13 13M13 3L12 4M3 13L4 12`,\r\n\r\n  // UI/UX - Window with grid\r\n  [ProjectItemTypeGroup.uiUx]: `M2 2H14V14H2V2ZM3 3V5H13V3H3ZM3 6V13H7V6H3ZM8 6V13H13V6H8ZM4 4H5V4.5H4V4ZM6 4H7V4.5H6V4Z`,\r\n\r\n  // Config/Dev - Gear/cog\r\n  [ProjectItemTypeGroup.configDev]: `M7 1H9V3L10 3.5L11.5 2L13 3.5L11.5 5L12 6H14V8H12L11.5 9L13 10.5L11.5 12L10 10.5L9 11V13H7V11L6 10.5L4.5 12L3 10.5L4.5 9L4 8H2V6H4L4.5 5L3 3.5L4.5 2L6 3.5L7 3V1ZM8 5A3 3 0 1 0 8 11A3 3 0 1 0 8 5Z`,\r\n\r\n  // Packaging - Box/package\r\n  [ProjectItemTypeGroup.packaging]: `M2 4L8 1L14 4V12L8 15L2 12V4ZM8 3L4 5V7L8 9L12 7V5L8 3ZM3 8V11L8 13V10L3 8ZM13 8L8 10V13L13 11V8Z`,\r\n\r\n  // Skins/Personas - Player head\r\n  [ProjectItemTypeGroup.skinPersona]: `M4 2H12V10H10V12H12V14H4V12H6V10H4V2ZM6 4V8H10V4H6ZM7 5H8V6H7V5ZM9 5H10V6H9V5Z`,\r\n\r\n  // Meta/Documentation - Book\r\n  [ProjectItemTypeGroup.meta]: `M3 2C3 2 4 1 8 1C12 1 13 2 13 2V13C13 13 12 14 8 14C4 14 3 13 3 13V2ZM5 4H11V5H5V4ZM5 6H11V7H5V6ZM5 8H9V9H5V8Z`,\r\n\r\n  // Unknown - Question mark\r\n  [ProjectItemTypeGroup.unknown]: `M6 4C6 2 10 2 10 4C10 6 8 6 8 8V9H7V8C7 5.5 9 5.5 9 4C9 3 7 3 7 4H6ZM7 11H9V13H7V11Z`,\r\n};\r\n\r\n/**\r\n * Gets the SVG icon path for a project item type group.\r\n */\r\nexport function getIconPathForGroup(group: ProjectItemTypeGroup): string {\r\n  return ProjectItemTypeGroupIcons[group] || ProjectItemTypeGroupIcons[ProjectItemTypeGroup.unknown];\r\n}\r\n\r\n/**\r\n * Gets the SVG icon path for a project item type.\r\n */\r\nexport function getIconPathForProjectItemType(itemType: ProjectItemType): string {\r\n  const group = getProjectItemTypeGroup(itemType);\r\n  return getIconPathForGroup(group);\r\n}\r\n\r\n/**\r\n * Individual item type icons - more specific icons for commonly used types.\r\n * Falls back to group icon if not defined.\r\n */\r\nexport const ProjectItemTypeSpecificIcons: Partial<Record<ProjectItemType, string>> = {\r\n  // TypeScript - TS letters\r\n  [ProjectItemType.ts]: `M2 4H14V12H2V4ZM4 6V10H5V7.5H6.5V10H7.5V6H4ZM8 7H10V7.5H9V8H10V9.5H8V9H9V8.5H8V7Z`,\r\n\r\n  // JavaScript - JS letters\r\n  [ProjectItemType.js]: `M2 4H14V12H2V4ZM4 6V9.5H5V10H6V9H5V6H4ZM7 6V10H10V8.5H8V8H10V6H7ZM8 7H9V7.5H8V7Z`,\r\n\r\n  // MCFunction - Command block\r\n  [ProjectItemType.MCFunction]: `M3 3H13V13H3V3ZM5 5V11H11V5H5ZM6 7H10V9H6V7Z`,\r\n\r\n  // Entity behavior - Mob head with gear\r\n  [ProjectItemType.entityTypeBehavior]: `M3 2H13V11H11V13H5V11H3V2ZM5 4H7V6H5V4ZM9 4H11V6H9V4ZM6 8H10V9H6V8ZM12 11A2 2 0 1 0 12 15A2 2 0 1 0 12 11Z`,\r\n\r\n  // Entity resource - Mob head with paint\r\n  [ProjectItemType.entityTypeResource]: `M3 2H13V11H11V13H5V11H3V2ZM5 4H7V6H5V4ZM9 4H11V6H9V4ZM6 8H10V9H6V8ZM1 12L3 10L4 11L3 13L1 12Z`,\r\n\r\n  // Item behavior - Sword\r\n  [ProjectItemType.itemTypeBehavior]: `M12 1L14 3L6 11L4 13L3 12L5 10L13 2L12 1ZM2 14L4 12L5 13L3 15L2 14Z`,\r\n\r\n  // Block behavior - Cube with gear\r\n  [ProjectItemType.blockTypeBehavior]: `M8 2L13 5V10L8 13L3 10V5L8 2ZM8 4L5 5.5V9L8 11L11 9V5.5L8 4ZM12 12A2 2 0 1 0 12 16A2 2 0 1 0 12 12Z`,\r\n\r\n  // Loot table - Chest\r\n  [ProjectItemType.lootTableBehavior]: `M2 5H14V13H2V5ZM3 6V8H13V6H3ZM3 9V12H13V9H3ZM7 10H9V11H7V10ZM1 4H15V5H1V4Z`,\r\n\r\n  // Recipe - Crafting grid\r\n  [ProjectItemType.recipeBehavior]: `M3 3H13V13H3V3ZM4 4V6H6V4H4ZM7 4V6H9V4H7ZM10 4V6H12V4H10ZM4 7V9H6V7H4ZM7 7V9H9V7H7ZM10 7V9H12V7H10ZM4 10V12H6V10H4ZM7 10V12H9V10H7ZM10 10V12H12V10H10Z`,\r\n\r\n  // Spawn rule - Egg\r\n  [ProjectItemType.spawnRuleBehavior]: `M8 2C5 2 4 5 4 8C4 12 6 14 8 14C10 14 12 12 12 8C12 5 11 2 8 2ZM8 4C9.5 4 10 6 10 8C10 10.5 9 12 8 12C7 12 6 10.5 6 8C6 6 6.5 4 8 4Z`,\r\n\r\n  // Model geometry - Wireframe cube\r\n  [ProjectItemType.modelGeometryJson]: `M8 1L14 4V11L8 14L2 11V4L8 1ZM8 3L4 5L8 7L12 5L8 3ZM3 6V10L7 12V8L3 6ZM13 6L9 8V12L13 10V6Z`,\r\n\r\n  // Texture - Image\r\n  [ProjectItemType.texture]: `M2 3H14V13H2V3ZM3 4V12H13V4H3ZM5 6A1 1 0 1 0 5 8A1 1 0 1 0 5 6ZM4 11L6 8L8 10L10 7L12 11H4Z`,\r\n\r\n  // Audio - Speaker/sound waves\r\n  [ProjectItemType.audio]: `M3 5H5L9 2V14L5 11H3V5ZM11 5V6C12 6.5 12 9.5 11 10V11C13 10 13 6 11 5ZM11 3V4C14 5 14 11 11 12V13C15 11.5 15 4.5 11 3Z`,\r\n\r\n  // Biome - Mountain/tree\r\n  [ProjectItemType.biomeBehavior]: `M8 2L13 10H10L12 14H4L6 10H3L8 2ZM8 5L6 8H7L5.5 12H10.5L9 8H10L8 5Z`,\r\n\r\n  // Particle - Sparkle\r\n  [ProjectItemType.particleJson]: `M8 1V4M8 12V15M1 8H4M12 8H15M3 3L5 5M11 11L13 13M13 3L11 5M3 13L5 11M8 6A2 2 0 1 0 8 10A2 2 0 1 0 8 6Z`,\r\n\r\n  // Animation - Film strip\r\n  [ProjectItemType.animationResourceJson]: `M2 2H4V14H2V2ZM12 2H14V14H12V2ZM5 3H11V6H5V3ZM5 7H11V10H5V7ZM5 11H11V14H5V11ZM3 3V4M3 6V7M3 9V10M3 12V13M13 3V4M13 6V7M13 9V10M13 12V13`,\r\n\r\n  // Lighting - Light bulb\r\n  [ProjectItemType.lightingJson]: `M8 1C5 1 4 4 4 6C4 8 5 9 6 10V12H10V10C11 9 12 8 12 6C12 4 11 1 8 1ZM6 13H10V14H6V13ZM7 14H9V15H7V14Z`,\r\n\r\n  // UI JSON - Window\r\n  [ProjectItemType.uiJson]: `M2 2H14V14H2V2ZM3 3V4H13V3H3ZM3 5V13H13V5H3ZM4 6H8V8H4V6ZM9 6H12V12H9V6ZM4 9H8V12H4V9Z`,\r\n\r\n  // World folder - Globe\r\n  [ProjectItemType.worldFolder]: `M8 1A7 7 0 1 0 8 15A7 7 0 1 0 8 1ZM8 3C9 3 10 4 10.5 6H5.5C6 4 7 3 8 3ZM4 8C4 7.3 4.1 6.7 4.3 6H6C5.9 6.6 5.8 7.3 5.8 8C5.8 8.7 5.9 9.4 6 10H4.3C4.1 9.3 4 8.7 4 8ZM8 13C7 13 6 12 5.5 10H10.5C10 12 9 13 8 13ZM10 10C10.1 9.4 10.2 8.7 10.2 8C10.2 7.3 10.1 6.6 10 6H11.7C11.9 6.7 12 7.3 12 8C12 8.7 11.9 9.3 11.7 10H10Z`,\r\n\r\n  // Package JSON - NPM box\r\n  [ProjectItemType.packageJson]: `M2 4L8 1L14 4V12L8 15L2 12V4ZM3 5V11L8 13.5L13 11V5L8 2.5L3 5ZM5 6H11V10H9V7H7V10H5V6Z`,\r\n};\r\n\r\n/**\r\n * Gets the specific SVG icon path for a project item type.\r\n * Falls back to the group icon if no specific icon is defined.\r\n */\r\nexport function getSpecificIconPathForProjectItemType(itemType: ProjectItemType): string {\r\n  return ProjectItemTypeSpecificIcons[itemType] || getIconPathForProjectItemType(itemType);\r\n}\r\n", "import Log from \"../../../core/Log\";\r\nimport { ProjectItemType } from \"../../IProjectItemData\";\r\nimport { IProjectItemDefaults } from \"./IProjectItemDefaults\";\r\n\r\nconst ProjectItemValues = new Map<ProjectItemType, IProjectItemDefaults>([\r\n  [ProjectItemType.MCFunction, { folderRoots: [\"functions\"] }],\r\n  [ProjectItemType.featureRuleBehavior, { folderRoots: [\"feature_rules\"] }],\r\n  [ProjectItemType.actionSet, { folderRoots: [\"action_sets\"] }],\r\n  [ProjectItemType.designTexture, { folderRoots: [\"design_textures\"] }],\r\n  [ProjectItemType.featureBehavior, { folderRoots: [\"features\"] }],\r\n  [ProjectItemType.js, { folderRoots: [\"scripts\"] }],\r\n  [ProjectItemType.ts, { folderRoots: [\"scripts\"] }],\r\n  [ProjectItemType.image, { folderRoots: [\"subpacks\"] }],\r\n  [ProjectItemType.craftingItemCatalog, { folderRoots: [\"item_catalog\"] }],\r\n  [ProjectItemType.lightingJson, { folderRoots: [\"lighting\"] }],\r\n  [ProjectItemType.tickJson, { folderRoots: [\"functions\"] }],\r\n  [ProjectItemType.uiTexture, { folderRoots: [\"textures\", \"ui\"] }],\r\n  [ProjectItemType.jigsawProcessorList, { folderRoots: [\"worldgen\", \"processors\"] }],\r\n  [ProjectItemType.jigsawStructure, { folderRoots: [\"worldgen\", \"jigsaw_structures\"] }],\r\n  [ProjectItemType.jigsawTemplatePool, { folderRoots: [\"worldgen\", \"template_pools\"] }],\r\n  [ProjectItemType.jigsawStructureSet, { folderRoots: [\"worldgen\", \"structure_sets\"] }],\r\n  [ProjectItemType.biomeResource, { folderRoots: [\"biomes\"] }],\r\n  [ProjectItemType.biomeBehavior, { folderRoots: [\"biomes\"] }],\r\n  [ProjectItemType.texture, { folderRoots: [\"textures\"] }],\r\n  [ProjectItemType.terrainTextureCatalogResourceJson, { folderRoots: [\"textures\"] }],\r\n  [ProjectItemType.itemTextureJson, { folderRoots: [\"textures\"] }],\r\n  [ProjectItemType.flipbookTexturesJson, { folderRoots: [\"textures\"] }],\r\n  [\r\n    ProjectItemType.packIconImage,\r\n    {\r\n      folderRoots: [\r\n        \"resource_packs\",\r\n        \"rps\",\r\n        \"development_resource_packs\",\r\n        \"behavior_packs\",\r\n        \"bps\",\r\n        \"development_behavior_packs\",\r\n      ],\r\n    },\r\n  ],\r\n  [ProjectItemType.modelGeometryJson, { folderRoots: [\"models\"] }],\r\n  [ProjectItemType.soundCatalog, { folderRoots: [\"resource_packs\", \"rps\", \"development_resource_packs\"] }],\r\n  [ProjectItemType.soundDefinitionCatalog, { folderRoots: [\"sounds\"] }],\r\n  [ProjectItemType.entityTypeResource, { folderRoots: [\"entity\"] }],\r\n  [ProjectItemType.animationControllerResourceJson, { folderRoots: [\"animation_controllers\"] }],\r\n  [ProjectItemType.animationControllerBehaviorJson, { folderRoots: [\"animation_controllers\"] }],\r\n  [ProjectItemType.animationResourceJson, { folderRoots: [\"animations\"] }],\r\n  [ProjectItemType.animationBehaviorJson, { folderRoots: [\"animations\"] }],\r\n  [ProjectItemType.renderControllerJson, { folderRoots: [\"render_controllers\"] }],\r\n  [ProjectItemType.attachableResourceJson, { folderRoots: [\"attachables\"] }],\r\n  [ProjectItemType.entityTypeBehavior, { folderRoots: [\"entities\"] }],\r\n  [ProjectItemType.itemTypeBehavior, { folderRoots: [\"items\"] }],\r\n  [ProjectItemType.itemTypeLegacyResource, { folderRoots: [\"items\"] }],\r\n  [ProjectItemType.blockTypeBehavior, { folderRoots: [\"blocks\"] }],\r\n  [ProjectItemType.documentedTypeFolder, { folderRoots: [\"script_modules\"] }],\r\n  [ProjectItemType.commandSetDefinitionJson, { folderRoots: [\"command_modules\"] }],\r\n  [ProjectItemType.lootTableBehavior, { folderRoots: [\"loot_tables\"] }],\r\n  [ProjectItemType.recipeBehavior, { folderRoots: [\"recipes\"] }],\r\n  [ProjectItemType.spawnRuleBehavior, { folderRoots: [\"spawn_rules\"] }],\r\n  [ProjectItemType.particleJson, { folderRoots: [\"particles\"] }],\r\n  [ProjectItemType.structure, { folderRoots: [\"structures\"] }],\r\n  [ProjectItemType.worldFolder, { folderRoots: [\"worlds\"] }],\r\n  [ProjectItemType.MCWorld, { folderRoots: [\"worlds\"] }],\r\n  [ProjectItemType.colorGradingJson, { folderRoots: [\"color_grading\"] }],\r\n  [ProjectItemType.atmosphericsJson, { folderRoots: [\"atmospherics\"] }],\r\n  [ProjectItemType.pbrJson, { folderRoots: [\"pbr\"] }],\r\n  [ProjectItemType.pointLightsJson, { folderRoots: [\"point_lights\"] }],\r\n  [ProjectItemType.shadowsJson, { folderRoots: [\"shadows\"] }],\r\n  [ProjectItemType.waterJson, { folderRoots: [\"water\"] }],\r\n  [ProjectItemType.aimAssistPresetJson, { folderRoots: [\"cameras\"] }],\r\n  [ProjectItemType.dimensionJson, { folderRoots: [\"dimensions\"] }],\r\n  [ProjectItemType.fogResourceJson, { folderRoots: [\"fogs\"] }],\r\n  [ProjectItemType.dataForm, { folderRoots: [\"forms\"] }],\r\n  [ProjectItemType.scriptTypesJson, { folderRoots: [\"checkpoint_input\", \"script_modules\"] }],\r\n  [ProjectItemType.engineOrderingJson, { folderRoots: [\"checkpoint_input\", \"engine_modules\"] }],\r\n  [ProjectItemType.vanillaDataJson, { folderRoots: [\"checkpoint_input\", \"vanilladata_modules\"] }],\r\n  [ProjectItemType.marketingAssetImage, { folderRoots: [\"marketing art\"] }],\r\n  [ProjectItemType.storeAssetImage, { folderRoots: [\"store art\"] }],\r\n  [ProjectItemType.audio, { folderRoots: [\"sounds\"] }],\r\n  [ProjectItemType.voxelShapeBehavior, { folderRoots: [\"voxel_shapes\"] }],\r\n  [ProjectItemType.materialSetJson, { folderRoots: [\"materials\"] }],\r\n  [ProjectItemType.materialsResourceJson, { folderRoots: [\"materials\"] }],\r\n  [ProjectItemType.material, { folderRoots: [\"materials\"] }],\r\n  [ProjectItemType.tradingBehaviorJson, { folderRoots: [\"trading\"] }],\r\n  [ProjectItemType.blockCulling, { folderRoots: [\"block_culling\"] }],\r\n]);\r\n\r\nexport const getProjectItemDefaults = (itemType: ProjectItemType): IProjectItemDefaults => {\r\n  const defaults = ProjectItemValues.get(itemType);\r\n  if (!defaults) {\r\n    Log.verbose(\"No defaults found for item type: \" + itemType);\r\n    return { folderRoots: [] };\r\n  }\r\n\r\n  return defaults;\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IColor from \"../core/IColor\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport { VibrantVisualsFileExtensionVariants } from \"../minecraft/TextureDefinition\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectItemCategory, ProjectItemType } from \"./IProjectItemData\";\r\nimport IProjectItemRelationship from \"./IProjectItemRelationship\";\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport { getColorForProjectItemType, getProjectItemTypeGroup, ProjectItemTypeGroup } from \"./ProjectItemTypeInfo\";\r\nimport { getProjectItemDefaults } from \"./project/projectItems/ProjectItemValues\";\r\n\r\n// an attempt to group related things together via sort order. Used in the UI item list.\r\n// Order: Design \u2192 Scripts/Logic \u2192 Entity Types \u2192 Item Types \u2192 Block Types \u2192 World/Worldgen \u2192\r\n//        Models/Animations \u2192 Textures/Audio \u2192 Vibrant Visuals \u2192 UI/UX \u2192 Skins \u2192 Config/Dev \u2192 Packaging \u2192 Meta\r\n// This order keeps logical groupings together to make projects easier to navigate.\r\nexport const ProjectItemSortOrder = [\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // DESIGN - Design pack content for planning/iteration\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.designTexture,\r\n  ProjectItemType.designPackManifestJson,\r\n  ProjectItemType.designPackFolder,\r\n  ProjectItemType.actionSet,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // SCRIPTS & LOGIC - Code and command logic (Emerald Green)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.ts,\r\n  ProjectItemType.js,\r\n  ProjectItemType.MCFunction,\r\n  ProjectItemType.tickJson,\r\n  ProjectItemType.functionEventJson,\r\n  ProjectItemType.testJs,\r\n  ProjectItemType.entityTypeBaseJs,\r\n  ProjectItemType.entityTypeBaseTs,\r\n  ProjectItemType.blockTypeBaseJs,\r\n  ProjectItemType.blockTypeBaseTs,\r\n  ProjectItemType.catalogIndexJs,\r\n  ProjectItemType.buildProcessedJs,\r\n  ProjectItemType.animationBehaviorJson, // Behavior-side animations are logic\r\n  ProjectItemType.animationControllerBehaviorJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // ENTITY TYPES - Mobs, creatures, NPCs (Enderman Purple)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.entityTypeBehavior,\r\n  ProjectItemType.entityTypeResource,\r\n  ProjectItemType.spawnRuleBehavior,\r\n  ProjectItemType.spawnGroupJson,\r\n  ProjectItemType.dialogueBehaviorJson,\r\n  ProjectItemType.behaviorTreeJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // ITEM TYPES - Items, loot, recipes, trading (Gold/Amber)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.itemTypeBehavior,\r\n  ProjectItemType.itemTypeLegacyResource,\r\n  ProjectItemType.attachableResourceJson,\r\n  ProjectItemType.itemTextureJson,\r\n  ProjectItemType.lootTableBehavior,\r\n  ProjectItemType.recipeBehavior,\r\n  ProjectItemType.tradingBehaviorJson,\r\n  ProjectItemType.craftingItemCatalog,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // BLOCK TYPES - Blocks and terrain (Stone Gray)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.blockTypeBehavior,\r\n  ProjectItemType.blocksCatalogResourceJson,\r\n  ProjectItemType.blockTypeResourceJsonDoNotUse,\r\n  ProjectItemType.blockCulling,\r\n  ProjectItemType.blockMaterialsBehaviorJson,\r\n  ProjectItemType.terrainTextureCatalogResourceJson,\r\n  ProjectItemType.voxelShapeBehavior,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // WORLD & WORLDGEN - Worlds, biomes, features, dimensions (Grass Lime)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.worldFolder,\r\n  ProjectItemType.worldTemplateManifestJson,\r\n  ProjectItemType.MCWorld,\r\n  ProjectItemType.MCProject,\r\n  ProjectItemType.MCTemplate,\r\n  ProjectItemType.worldTest,\r\n  ProjectItemType.levelDat,\r\n  ProjectItemType.levelDatOld,\r\n  ProjectItemType.behaviorPackListJson,\r\n  ProjectItemType.resourcePackListJson,\r\n  ProjectItemType.behaviorPackHistoryListJson,\r\n  ProjectItemType.resourcePackHistoryListJson,\r\n  ProjectItemType.levelDbLdb,\r\n  ProjectItemType.levelDbLog,\r\n  ProjectItemType.levelDbCurrent,\r\n  ProjectItemType.levelDbManifest,\r\n  ProjectItemType.structure,\r\n  ProjectItemType.volumeBehaviorJson,\r\n  // Biomes\r\n  ProjectItemType.biomeBehavior,\r\n  ProjectItemType.biomeResource,\r\n  ProjectItemType.biomesClientCatalogResource,\r\n  // Features and jigsaw structures\r\n  ProjectItemType.featureRuleBehavior,\r\n  ProjectItemType.featureBehavior,\r\n  ProjectItemType.jigsawStructureSet,\r\n  ProjectItemType.jigsawStructure,\r\n  ProjectItemType.jigsawTemplatePool,\r\n  ProjectItemType.jigsawProcessorList,\r\n  ProjectItemType.dimensionJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // MODELS & ANIMATIONS - Geometry, animations, render controllers (Diamond Cyan)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.modelGeometryJson,\r\n  ProjectItemType.animationResourceJson,\r\n  ProjectItemType.animationControllerResourceJson,\r\n  ProjectItemType.renderControllerJson,\r\n  ProjectItemType.particleJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // TEXTURES & AUDIO - Visual and audio assets (Pink Dye)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.texture,\r\n  ProjectItemType.image,\r\n  ProjectItemType.packIconImage,\r\n  ProjectItemType.marketingAssetImage,\r\n  ProjectItemType.storeAssetImage,\r\n  ProjectItemType.textureListJson,\r\n  ProjectItemType.flipbookTexturesJson,\r\n  ProjectItemType.fogResourceJson,\r\n  // Audio\r\n  ProjectItemType.soundCatalog,\r\n  ProjectItemType.soundDefinitionCatalog,\r\n  ProjectItemType.musicDefinitionJson,\r\n  ProjectItemType.audio,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // VIBRANT VISUALS - Deferred rendering, PBR, lighting (Amethyst)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.lightingJson,\r\n  ProjectItemType.colorGradingJson,\r\n  ProjectItemType.atmosphericsJson,\r\n  ProjectItemType.pbrJson,\r\n  ProjectItemType.pointLightsJson,\r\n  ProjectItemType.waterJson,\r\n  ProjectItemType.shadowsJson,\r\n  ProjectItemType.textureSetJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // UI & LOCALIZATION - JSON UI, languages, dialogs (Pumpkin Orange)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.uiJson,\r\n  ProjectItemType.uiTexture,\r\n  ProjectItemType.ninesliceJson,\r\n  ProjectItemType.globalVariablesJson,\r\n  ProjectItemType.languagesCatalogJson,\r\n  ProjectItemType.lang,\r\n  ProjectItemType.loadingMessagesJson,\r\n  ProjectItemType.splashesJson,\r\n  ProjectItemType.emoticonsJson,\r\n  ProjectItemType.fontMetadataJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // SKINS & PERSONAS - Player customization (Leather Brown)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.skinCatalogJson,\r\n  ProjectItemType.skinPackGeometryJson,\r\n  ProjectItemType.skinPackTextureBackCompatJson,\r\n  ProjectItemType.skinPackManifestJson,\r\n  ProjectItemType.skinPackFolder,\r\n  ProjectItemType.personaJson,\r\n  ProjectItemType.personaManifestJson,\r\n  ProjectItemType.personaPackFolder,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // CONFIG & DEV - Build tools, manifests, VS Code (Iron Slate)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.behaviorPackManifestJson,\r\n  ProjectItemType.resourcePackManifestJson,\r\n  ProjectItemType.behaviorPackFolder,\r\n  ProjectItemType.resourcePackFolder,\r\n  ProjectItemType.tsconfigJson,\r\n  ProjectItemType.packageJson,\r\n  ProjectItemType.packageLockJson,\r\n  ProjectItemType.vsCodeLaunchJson,\r\n  ProjectItemType.vsCodeTasksJson,\r\n  ProjectItemType.vsCodeSettingsJson,\r\n  ProjectItemType.vsCodeExtensionsJson,\r\n  ProjectItemType.justConfigTs,\r\n  ProjectItemType.jsMap,\r\n  ProjectItemType.esLintConfigMjs,\r\n  ProjectItemType.env,\r\n  ProjectItemType.prettierRcJson,\r\n  ProjectItemType.jsconfigJson,\r\n  ProjectItemType.cameraBehaviorJson,\r\n  ProjectItemType.cameraResourceJson,\r\n  ProjectItemType.aimAssistPresetJson,\r\n  ProjectItemType.aimAssistCategoryJson,\r\n  ProjectItemType.sdlLayout,\r\n  ProjectItemType.lodJson,\r\n  ProjectItemType.rendererJson,\r\n  ProjectItemType.uniformsJson,\r\n  ProjectItemType.materialsResourceJson,\r\n  ProjectItemType.material,\r\n  ProjectItemType.materialSetJson,\r\n  ProjectItemType.materialVertex,\r\n  ProjectItemType.materialFragment,\r\n  ProjectItemType.materialGeometry,\r\n  ProjectItemType.fileListArrayJson,\r\n  ProjectItemType.educationJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // PACKAGING - Archives and packages (Redstone Red)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.MCAddon,\r\n  ProjectItemType.MCPack,\r\n  ProjectItemType.zip,\r\n  ProjectItemType.contentsJson,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // META & DOCUMENTATION - Docs, forms, metadata (Book Brown)\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.dataForm,\r\n  ProjectItemType.docInfoJson,\r\n  ProjectItemType.scriptTypesJson,\r\n  ProjectItemType.commandSetDefinitionJson,\r\n  ProjectItemType.docfxJson,\r\n  ProjectItemType.jsdocJson,\r\n  ProjectItemType.markdownDocumentation,\r\n  ProjectItemType.documentedTypeFolder,\r\n  ProjectItemType.documentedCommandFolder,\r\n  ProjectItemType.contentIndexJson,\r\n  ProjectItemType.contentReportJson,\r\n  ProjectItemType.mcToolsProjectPreferences,\r\n  ProjectItemType.projectSummaryMetadata,\r\n  ProjectItemType.engineOrderingJson,\r\n  ProjectItemType.vanillaDataJson,\r\n  ProjectItemType.tagsMetadata,\r\n\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  // UNKNOWN - Fallback for unrecognized types\r\n  // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n  ProjectItemType.unknownJson,\r\n  ProjectItemType.unknown,\r\n];\r\n\r\nexport const FormMappings: {\r\n  [typeIdAsString: string]: {\r\n    formCategory: string;\r\n    formName: string;\r\n    select?: string;\r\n  };\r\n} = {\r\n  /*  [\"\" + ProjectItemType.atmosphericsJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"atmosphericscattering_atmosphericscatteringconfigsettings\",\r\n    select: \"minecraft:atmosphere_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.colorGradingJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"colorgraderconfig_colorgradingparameterssrc\",\r\n    select: \"minecraft:color_grading_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.lightingJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"lightinggroup_lightingimpl_1_21_70\",\r\n    select: \"minecraft:lighting_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.pbrJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"pbrfallbackconfig_pbrfallbackconfigsettings\",\r\n    select: \"minecraft:pbr_fallback_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.waterJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"waterconfig_waterconfigsettingsv1\",\r\n    select: \"minecraft:water_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.shadowsJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"shadowstylizationconfig_shadowstylizationconfigsettings\",\r\n    select: \"minecraft:shadow_settings\",\r\n  },\r\n  [\"\" + ProjectItemType.pointLightsJson]: {\r\n    formCategory: \"client_deferred_rendering\",\r\n    formName: \"pointlightconfig_pointlightconfigsettings\",\r\n    select: \"minecraft:point_light_settings\",\r\n  },*/\r\n};\r\n\r\nexport default class ProjectItemUtilities {\r\n  static inferTypeFromContent(\r\n    content: Uint8Array | string,\r\n    fileName: string\r\n  ): { itemType: ProjectItemType; packType?: PackType; path?: string } {\r\n    const type = StorageUtilities.getTypeFromName(fileName);\r\n\r\n    if (typeof content === \"string\") {\r\n      switch (type) {\r\n        case \"json\":\r\n          return ProjectItemUtilities.inferTypeFromJsonContent(content, fileName);\r\n      }\r\n    } else {\r\n      switch (type) {\r\n        case \"png\":\r\n          return { itemType: ProjectItemType.texture, packType: PackType.resource, path: \"/textures/ \" };\r\n      }\r\n    }\r\n\r\n    return { itemType: ProjectItemType.unknown, packType: PackType.behavior, path: \"/\" };\r\n  }\r\n\r\n  static getFormPathForType(itemType: ProjectItemType) {\r\n    switch (itemType) {\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"entity/entity_behavior_document\";\r\n      case ProjectItemType.biomeBehavior:\r\n        return \"biome/biome_json_file\";\r\n      case ProjectItemType.blockCulling:\r\n        return \"block_culling/blockculling\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        // Note: This is the legacy biomes_client.json format, NOT the newer client_biome format\r\n        // which has format_version and minecraft:client_biome structure\r\n        return \"biomes_client/biomes_client\";\r\n      case ProjectItemType.atmosphericsJson:\r\n        return \"client_deferred_rendering/atmosphericscattering_atmosphericscatteringconfigsettings\";\r\n      case ProjectItemType.colorGradingJson:\r\n        return \"client_deferred_rendering/colorgraderconfig_colorgradingparameterssrc\";\r\n      case ProjectItemType.lightingJson:\r\n        return \"client_deferred_rendering/lightinggroup_lightingimpl_1_21_70\";\r\n      case ProjectItemType.pbrJson:\r\n        return \"client_deferred_rendering/pbrfallbackconfig_pbrfallbackconfigsettings\";\r\n      case ProjectItemType.pointLightsJson:\r\n        return \"client_deferred_rendering/pointlightconfig_pointlightconfigsettings\";\r\n      case ProjectItemType.shadowsJson:\r\n        return \"client_deferred_rendering/shadowstylizationconfig_shadowstylizationconfigsettings\";\r\n      case ProjectItemType.waterJson:\r\n        return \"client_deferred_rendering/waterconfig_waterconfigsettingsv1\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"client_item/resource\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"feature/feature_rule_definition\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"features/features\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"fogs/fogs\";\r\n      case ProjectItemType.jigsawStructure:\r\n        return \"jigsaw/minecraft_jigsaw_structure_metadata\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"spawn/spawn_rules_document\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"visual/geometry.v1.21.0\";\r\n      case ProjectItemType.textureSetJson:\r\n        return \"visual/texture_set.v1.21.30\";\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return \"voxel_shapes/voxel_shape_document\";\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the path to a community/Blockception JSON schema for the given item type.\r\n   * These schemas are located in public/res/latest/schemas/ and are loaded via Database.getCommunitySchema().\r\n   */\r\n  static getCommunitySchemaPathForType(itemType: ProjectItemType) {\r\n    switch (itemType) {\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return \"general/manifest.json\";\r\n      case ProjectItemType.behaviorPackListJson:\r\n        return \"general/world_x_packs.json\";\r\n      case ProjectItemType.resourcePackListJson:\r\n        return \"general/world_x_packs.json\";\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return \"behavior/animation_controllers/animation_controller.json\";\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return \"behavior/animations/animations.json\";\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return \"behavior/blocks/blocks.json\";\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return \"behavior/items/items.json\";\r\n      case ProjectItemType.lootTableBehavior:\r\n        return \"behavior/loot_tables/loot_tables.json\";\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n        return \"behavior/dialogue/dialogue.json\";\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"behavior/entities/entities.json\";\r\n      case ProjectItemType.atmosphericsJson:\r\n        return \"resource/atmospherics/atmospherics.json\";\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n        return \"resource/blocks.json\";\r\n      case ProjectItemType.soundCatalog:\r\n        return \"resource/sounds.json\";\r\n      case ProjectItemType.animationResourceJson:\r\n        return \"resource/animations/actor_animation.json\";\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return \"resource/animation_controllers/animation_controller.json\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"resource/entity/entity.json\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"resource/fog/fog.json\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"resource/models/entity/model_entity.json\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        return \"resource/biomes_client.json\";\r\n      case ProjectItemType.particleJson:\r\n        return \"resource/particles/particles.json\";\r\n      case ProjectItemType.renderControllerJson:\r\n        return \"resource/render_controllers/render_controllers.json\";\r\n      case ProjectItemType.blockCulling:\r\n        return \"resource/block_culling/block_culling.json\";\r\n      case ProjectItemType.craftingItemCatalog:\r\n        return \"behavior/item_catalog/crafting_item_catalog.json\";\r\n      //     case ProjectItemType.uiTextureJson:\r\n      //        return \"resource/textures/ui_texture_definition.json\";\r\n      case ProjectItemType.languagesCatalogJson:\r\n        return \"language/languages.json\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"behavior/features/features.json\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"behavior/feature_rules/feature_rules.json\";\r\n      case ProjectItemType.functionEventJson:\r\n        return \"behavior/functions/tick.json\";\r\n      case ProjectItemType.recipeBehavior:\r\n        return \"behavior/recipes/recipes.json\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"behavior/spawn_rules/spawn_rules.json\";\r\n      case ProjectItemType.tradingBehaviorJson:\r\n        return \"behavior/trading/trading.json\";\r\n      case ProjectItemType.attachableResourceJson:\r\n        return \"resource/attachables/attachables.json\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"resource/items/items.json\";\r\n      case ProjectItemType.materialsResourceJson:\r\n        return \"resource/materials/materials.json\";\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return \"resource/sounds/music_definitions.json\";\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return \"resource/sounds/sound_definitions.json\";\r\n      case ProjectItemType.blockTypeResourceJsonDoNotUse:\r\n        return \"resource/blocks.json\";\r\n      case ProjectItemType.uiJson:\r\n        return \"resource/ui/ui.json\";\r\n      case ProjectItemType.tickJson:\r\n        return \"behavior/functions/tick.json\";\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return \"resource/textures/flipbook_textures.json\";\r\n      case ProjectItemType.itemTextureJson:\r\n        return \"resource/textures/item_texture.json\";\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n        return \"resource/textures/terrain_texture.json\";\r\n      case ProjectItemType.globalVariablesJson:\r\n        return \"resource/ui/_global_variables.json\";\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the path to an official JSON schema for the given item type.\r\n   * These schemas are located in public/schemas/ and are loaded via Database.getOfficialSchema().\r\n   * The official schemas have different naming conventions than community schemas.\r\n   */\r\n  static getOfficialSchemaPathForType(itemType: ProjectItemType): string | undefined {\r\n    switch (itemType) {\r\n      // Behavior pack types\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"bp/entities/index.schema.json\";\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return \"bp/blocks/index.schema.json\";\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return \"bp/items/index.schema.json\";\r\n      case ProjectItemType.recipeBehavior:\r\n        return \"bp/recipes/index.schema.json\";\r\n      case ProjectItemType.lootTableBehavior:\r\n        return \"bp/loot_tables/index.schema.json\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"bp/spawn_rules/index.schema.json\";\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n        return \"bp/dialogue/index.schema.json\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"bp/features/index.schema.json\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"bp/feature_rules/index.schema.json\";\r\n      case ProjectItemType.tradingBehaviorJson:\r\n        return \"bp/trading/index.schema.json\";\r\n      case ProjectItemType.biomeBehavior:\r\n        return \"bp/biomes/index.schema.json\";\r\n\r\n      // Animation types\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return \"bp/animations/index.schema.json\";\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return \"bp/animation_controllers/index.schema.json\";\r\n      case ProjectItemType.animationResourceJson:\r\n        return \"bp/animations/index.schema.json\";\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return \"bp/animation_controllers/index.schema.json\";\r\n\r\n      // Resource pack types\r\n      case ProjectItemType.attachableResourceJson:\r\n        return \"rp/attachables/index.schema.json\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"rp/fogs/index.schema.json\";\r\n      case ProjectItemType.particleJson:\r\n        return \"rp/particles/index.schema.json\";\r\n      case ProjectItemType.renderControllerJson:\r\n        return \"rp/render_controllers/index.schema.json\";\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n        return \"rp/textures/blocks_resource.schema.json\";\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return \"rp/sounds/index.schema.json\";\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n        return \"rp/textures/terrain_texture.schema.json\";\r\n      case ProjectItemType.itemTextureJson:\r\n        return \"rp/textures/item_texture.schema.json\";\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return \"rp/textures/flipbook_textures.schema.json\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        return \"rp/biomes_client/index.schema.json\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"rp/entity/index.schema.json\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"rp/models/index.schema.json\";\r\n      case ProjectItemType.textureSetJson:\r\n        return \"rp/textures/texture_set.schema.json\";\r\n\r\n      // UI types\r\n      case ProjectItemType.uiJson:\r\n        return \"rp/ui/index.schema.json\";\r\n      case ProjectItemType.globalVariablesJson:\r\n        return \"rp/ui/global_variables.schema.json\";\r\n\r\n      // Manifest types\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return \"bp/manifest/index.schema.json\";\r\n      case ProjectItemType.resourcePackManifestJson:\r\n        return \"rp/manifest/index.schema.json\";\r\n\r\n      // Block culling\r\n      case ProjectItemType.blockCulling:\r\n        return \"rp/block_culling/index.schema.json\";\r\n\r\n      // Resource pack catalog types\r\n      case ProjectItemType.languagesCatalogJson:\r\n        return \"rp/texts/languages.schema.json\";\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return \"rp/sounds/music_definitions.schema.json\";\r\n\r\n      // Behavior pack types\r\n      case ProjectItemType.tickJson:\r\n        return \"bp/functions/tick.schema.json\";\r\n\r\n      // Voxel shapes\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return \"bp/voxel_shapes/index.schema.json\";\r\n\r\n      // World types\r\n      case ProjectItemType.behaviorPackListJson:\r\n      case ProjectItemType.resourcePackListJson:\r\n        return \"world/world_packs.schema.json\";\r\n\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  static inferTypeFromJsonContent(\r\n    jsonContent: string,\r\n    fileName: string\r\n  ): { itemType: ProjectItemType; packType?: PackType; path?: string } {\r\n    const fileBaseName = StorageUtilities.getBaseFromName(fileName);\r\n\r\n    if (fileBaseName) {\r\n      if (fileBaseName.endsWith(\".mci\")) {\r\n        return { itemType: ProjectItemType.contentIndexJson };\r\n      } else if (fileBaseName.endsWith(\".mcr\")) {\r\n        return { itemType: ProjectItemType.contentReportJson };\r\n      }\r\n    }\r\n\r\n    const firstHundred = jsonContent.substring(0, 100);\r\n\r\n    if (\r\n      firstHundred.indexOf('\"minecraft:recipe_shaped\"') >= 0 ||\r\n      firstHundred.indexOf('\"minecraft:recipe_shapeless\"') >= 0\r\n    ) {\r\n      return { itemType: ProjectItemType.recipeBehavior };\r\n    } else if (firstHundred.indexOf('\"minecraft:entity\"') >= 0) {\r\n      return { itemType: ProjectItemType.entityTypeBehavior };\r\n    } else if (firstHundred.indexOf('\"minecraft:item\"') >= 0) {\r\n      return { itemType: ProjectItemType.itemTypeBehavior };\r\n    } else if (firstHundred.indexOf('\"pools\"') >= 0) {\r\n      return { itemType: ProjectItemType.itemTypeBehavior };\r\n    } else if (firstHundred.indexOf('\"minecraft:spawn_rules\"') >= 0) {\r\n      return { itemType: ProjectItemType.spawnRuleBehavior };\r\n    } else if (firstHundred.indexOf('\"tiers\"') >= 0) {\r\n      return { itemType: ProjectItemType.tradingBehaviorJson };\r\n    } else if (firstHundred.indexOf('\"animation_controllers\"') >= 0) {\r\n      return { itemType: ProjectItemType.animationControllerResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"animations\"') >= 0) {\r\n      return { itemType: ProjectItemType.animationResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"animations\"') >= 0) {\r\n      return { itemType: ProjectItemType.animationResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:attachable\"') >= 0) {\r\n      return { itemType: ProjectItemType.attachableResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:client_entity\"') >= 0) {\r\n      return { itemType: ProjectItemType.entityTypeResource, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:fog_settings\"') >= 0) {\r\n      return { itemType: ProjectItemType.fogResourceJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"minecraft:geometry\"') >= 0) {\r\n      return { itemType: ProjectItemType.modelGeometryJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"particle_effect\"') >= 0) {\r\n      return { itemType: ProjectItemType.particleJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"render_controllers\"') >= 0) {\r\n      return { itemType: ProjectItemType.renderControllerJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"block_culling\"') >= 0) {\r\n      return { itemType: ProjectItemType.blockCulling, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"item_catalog\"') >= 0) {\r\n      return { itemType: ProjectItemType.craftingItemCatalog, packType: PackType.behavior };\r\n    } else if (firstHundred.indexOf('\"namespace\"') >= 0) {\r\n      return { itemType: ProjectItemType.uiJson, packType: PackType.resource };\r\n    } else if (firstHundred.indexOf('\"sound_definitions\"') >= 0) {\r\n      return { itemType: ProjectItemType.soundDefinitionCatalog, packType: PackType.resource };\r\n    } else if (fileBaseName === \"manifest\") {\r\n      const jsonO = Utilities.getJsonObject(jsonContent);\r\n\r\n      if (jsonO !== undefined && jsonO[\"modules\"]) {\r\n        for (const mod of jsonO[\"modules\"]) {\r\n          if (mod && mod[\"type\"]) {\r\n            switch (mod[\"type\"]) {\r\n              case \"script\":\r\n              case \"data\":\r\n                return { itemType: ProjectItemType.behaviorPackManifestJson };\r\n              case \"resources\":\r\n                return { itemType: ProjectItemType.resourcePackManifestJson };\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return { itemType: ProjectItemType.unknown };\r\n  }\r\n\r\n  static isDescendentOfPath(projectItem: ProjectItem, projectPath: string) {\r\n    if (projectItem.projectPath === projectPath) {\r\n      return true;\r\n    }\r\n\r\n    if (!projectItem.parentItems) {\r\n      return false;\r\n    }\r\n\r\n    for (const relationship of projectItem.parentItems) {\r\n      if (this.isDescendentOfPath(relationship.parentItem, projectPath)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getSortOrder(itemType: ProjectItemType): number {\r\n    for (let i = 0; i < ProjectItemSortOrder.length; i++) {\r\n      if (ProjectItemSortOrder[i] === itemType) {\r\n        return i;\r\n      }\r\n    }\r\n\r\n    return ProjectItemSortOrder.length + itemType;\r\n  }\r\n\r\n  static getItemByTypeAndName(project: Project, name: string, projectItemType: ProjectItemType) {\r\n    const itemsCopy = project.getItemsByType(projectItemType);\r\n\r\n    for (const item of itemsCopy) {\r\n      if (item.itemType === projectItemType && (item.name === name || item.name.startsWith(name.toLowerCase() + \".\"))) {\r\n        return item;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getAccessoryFolderPathFromFilePath(projectItem: ProjectItem): string {\r\n    let relativePath = projectItem.projectPath;\r\n\r\n    if (!relativePath) {\r\n      return projectItem.name + \" \" + ProjectItemUtilities.getDescriptionForType(projectItem.itemType);\r\n    }\r\n\r\n    relativePath = relativePath.replace(/\\./gi, \"_\");\r\n\r\n    return relativePath;\r\n  }\r\n\r\n  static getCategory(itemType: ProjectItemType) {\r\n    switch (itemType) {\r\n      case ProjectItemType.MCFunction:\r\n      case ProjectItemType.testJs:\r\n      case ProjectItemType.actionSet:\r\n      case ProjectItemType.animationBehaviorJson:\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n      case ProjectItemType.tickJson:\r\n      case ProjectItemType.js:\r\n      case ProjectItemType.ts:\r\n      case ProjectItemType.buildProcessedJs:\r\n      case ProjectItemType.catalogIndexJs:\r\n        return ProjectItemCategory.logic;\r\n\r\n      case ProjectItemType.image:\r\n      case ProjectItemType.texture:\r\n      case ProjectItemType.storeAssetImage:\r\n      case ProjectItemType.marketingAssetImage:\r\n      case ProjectItemType.designTexture:\r\n      case ProjectItemType.uiTexture:\r\n      case ProjectItemType.packIconImage:\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n      case ProjectItemType.soundCatalog:\r\n      case ProjectItemType.resourcePackManifestJson:\r\n      case ProjectItemType.resourcePackListJson:\r\n      case ProjectItemType.renderControllerJson:\r\n      case ProjectItemType.lightingJson:\r\n      case ProjectItemType.textureSetJson:\r\n      case ProjectItemType.modelGeometryJson:\r\n      case ProjectItemType.material:\r\n      case ProjectItemType.materialSetJson:\r\n      case ProjectItemType.animationControllerResourceJson:\r\n      case ProjectItemType.animationResourceJson:\r\n      case ProjectItemType.itemTextureJson:\r\n      case ProjectItemType.flipbookTexturesJson:\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n      case ProjectItemType.globalVariablesJson:\r\n      case ProjectItemType.uiJson:\r\n      case ProjectItemType.lang:\r\n      case ProjectItemType.languagesCatalogJson:\r\n      case ProjectItemType.ninesliceJson:\r\n      case ProjectItemType.attachableResourceJson:\r\n      case ProjectItemType.audio:\r\n      case ProjectItemType.designPackManifestJson:\r\n      case ProjectItemType.designPackFolder:\r\n        return ProjectItemCategory.assets;\r\n\r\n      case ProjectItemType.entityTypeBehavior:\r\n      case ProjectItemType.entityTypeResource:\r\n      case ProjectItemType.entityTypeBaseJs:\r\n      case ProjectItemType.entityTypeBaseTs:\r\n      case ProjectItemType.blockTypeBehavior:\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n      case ProjectItemType.blockTypeResourceJsonDoNotUse:\r\n      case ProjectItemType.itemTypeBehavior:\r\n      case ProjectItemType.fogResourceJson:\r\n      case ProjectItemType.tradingBehaviorJson:\r\n      case ProjectItemType.particleJson:\r\n      case ProjectItemType.structure:\r\n      case ProjectItemType.recipeBehavior:\r\n      case ProjectItemType.biomeBehavior:\r\n      case ProjectItemType.biomeResource:\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n      case ProjectItemType.lootTableBehavior:\r\n      case ProjectItemType.spawnRuleBehavior:\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n      case ProjectItemType.MCWorld:\r\n      case ProjectItemType.worldTemplateManifestJson:\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n      case ProjectItemType.featureBehavior:\r\n      case ProjectItemType.featureRuleBehavior:\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return ProjectItemCategory.types;\r\n\r\n      case ProjectItemType.esLintConfigMjs:\r\n      case ProjectItemType.env:\r\n      case ProjectItemType.justConfigTs:\r\n      case ProjectItemType.packageLockJson:\r\n      case ProjectItemType.jsconfigJson:\r\n      case ProjectItemType.prettierRcJson:\r\n      case ProjectItemType.tsconfigJson:\r\n      case ProjectItemType.docfxJson:\r\n      case ProjectItemType.jsMap:\r\n      case ProjectItemType.jsdocJson:\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n      case ProjectItemType.vsCodeLaunchJson:\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n      case ProjectItemType.vsCodeTasksJson:\r\n        return ProjectItemCategory.build;\r\n\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n        return ProjectItemCategory.mctools;\r\n\r\n      case ProjectItemType.zip:\r\n      case ProjectItemType.MCAddon:\r\n      case ProjectItemType.MCPack:\r\n      case ProjectItemType.MCTemplate:\r\n      case ProjectItemType.MCProject:\r\n      case ProjectItemType.personaPackFolder:\r\n      case ProjectItemType.behaviorPackFolder:\r\n      case ProjectItemType.resourcePackFolder:\r\n      case ProjectItemType.skinPackFolder:\r\n        return ProjectItemCategory.package;\r\n    }\r\n\r\n    return ProjectItemCategory.unknown;\r\n  }\r\n  static isTextureType(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.texture ||\r\n      itemType === ProjectItemType.designTexture ||\r\n      itemType === ProjectItemType.uiTexture\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isImageType(itemType: ProjectItemType) {\r\n    if (\r\n      ProjectItemUtilities.isTextureType(itemType) ||\r\n      itemType === ProjectItemType.image ||\r\n      itemType === ProjectItemType.storeAssetImage ||\r\n      itemType === ProjectItemType.marketingAssetImage ||\r\n      itemType === ProjectItemType.packIconImage\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isAudioType(itemType: ProjectItemType) {\r\n    if (itemType === ProjectItemType.audio) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isPackageType(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.zip ||\r\n      itemType === ProjectItemType.MCAddon ||\r\n      itemType === ProjectItemType.MCPack ||\r\n      itemType === ProjectItemType.MCProject ||\r\n      itemType === ProjectItemType.MCWorld ||\r\n      itemType === ProjectItemType.MCTemplate\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isBinaryType(itemType: ProjectItemType) {\r\n    if (this.isImageType(itemType) || this.isPackageType(itemType) || this.isAudioType(itemType)) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isVibrantVisualsTypeRelated(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.atmosphericsJson ||\r\n      itemType === ProjectItemType.colorGradingJson ||\r\n      itemType === ProjectItemType.lightingJson ||\r\n      itemType === ProjectItemType.shadowsJson ||\r\n      itemType === ProjectItemType.pbrJson ||\r\n      itemType === ProjectItemType.pointLightsJson ||\r\n      itemType === ProjectItemType.waterJson ||\r\n      itemType ===\r\n        ProjectItemType.textureSetJson /* not 100% sure there might not be some legit usages of this outside of VV */\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isVibrantVisualsRelated(item: ProjectItem) {\r\n    if (this.isVibrantVisualsTypeRelated(item.itemType)) {\r\n      return true;\r\n    }\r\n\r\n    if (item.itemType === ProjectItemType.texture) {\r\n      const fileName = item.name.toLowerCase();\r\n\r\n      for (const ext of VibrantVisualsFileExtensionVariants) {\r\n        if (fileName.endsWith(ext)) {\r\n          return true;\r\n        }\r\n      }\r\n\r\n      if (this.isTextureSetTexture(item)) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getMimeTypes(item: ProjectItem) {\r\n    switch (item.itemType) {\r\n      case ProjectItemType.js:\r\n      case ProjectItemType.testJs:\r\n      case ProjectItemType.entityTypeBaseJs:\r\n      case ProjectItemType.buildProcessedJs:\r\n      case ProjectItemType.catalogIndexJs:\r\n      case ProjectItemType.entityTypeBaseTs:\r\n      case ProjectItemType.esLintConfigMjs:\r\n      case ProjectItemType.blockTypeBaseJs:\r\n        return [\"application/javascript\"];\r\n\r\n      case ProjectItemType.justConfigTs:\r\n      case ProjectItemType.ts:\r\n      case ProjectItemType.blockTypeBaseTs:\r\n        return [\"application/typescript\"];\r\n\r\n      case ProjectItemType.personaJson:\r\n      case ProjectItemType.tsconfigJson:\r\n      case ProjectItemType.prettierRcJson:\r\n      case ProjectItemType.jsconfigJson:\r\n      case ProjectItemType.docfxJson:\r\n      case ProjectItemType.jsdocJson:\r\n      case ProjectItemType.packageJson:\r\n      case ProjectItemType.packageLockJson:\r\n      case ProjectItemType.docInfoJson:\r\n      case ProjectItemType.scriptTypesJson:\r\n      case ProjectItemType.vanillaDataJson:\r\n      case ProjectItemType.engineOrderingJson:\r\n      case ProjectItemType.commandSetDefinitionJson:\r\n      case ProjectItemType.skinPackManifestJson:\r\n      case ProjectItemType.blockCulling:\r\n      case ProjectItemType.craftingItemCatalog:\r\n      case ProjectItemType.personaManifestJson:\r\n      case ProjectItemType.vsCodeLaunchJson:\r\n      case ProjectItemType.vsCodeTasksJson:\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n      case ProjectItemType.designPackManifestJson:\r\n      case ProjectItemType.sdlLayout:\r\n      case ProjectItemType.splashesJson:\r\n      case ProjectItemType.loadingMessagesJson:\r\n      case ProjectItemType.fontMetadataJson:\r\n      case ProjectItemType.emoticonsJson:\r\n      case ProjectItemType.unknownJson:\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n      case ProjectItemType.resourcePackManifestJson:\r\n      case ProjectItemType.entityTypeBehavior:\r\n      case ProjectItemType.tickJson:\r\n      case ProjectItemType.aimAssistPresetJson:\r\n      case ProjectItemType.waterJson:\r\n      case ProjectItemType.shadowsJson:\r\n      case ProjectItemType.pbrJson:\r\n      case ProjectItemType.atmosphericsJson:\r\n      case ProjectItemType.pointLightsJson:\r\n      case ProjectItemType.colorGradingJson:\r\n      case ProjectItemType.cameraBehaviorJson:\r\n      case ProjectItemType.actionSet:\r\n      case ProjectItemType.worldTest:\r\n      case ProjectItemType.behaviorPackListJson:\r\n      case ProjectItemType.resourcePackListJson:\r\n      case ProjectItemType.animationBehaviorJson:\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n      case ProjectItemType.blockTypeBehavior:\r\n      case ProjectItemType.blockMaterialsBehaviorJson:\r\n      case ProjectItemType.itemTypeBehavior:\r\n      case ProjectItemType.lootTableBehavior:\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n      case ProjectItemType.fileListArrayJson:\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n      case ProjectItemType.soundCatalog:\r\n      case ProjectItemType.animationResourceJson:\r\n      case ProjectItemType.animationControllerResourceJson:\r\n      case ProjectItemType.entityTypeResource:\r\n      case ProjectItemType.fogResourceJson:\r\n      case ProjectItemType.modelGeometryJson:\r\n      case ProjectItemType.particleJson:\r\n      case ProjectItemType.renderControllerJson:\r\n      case ProjectItemType.ninesliceJson:\r\n      case ProjectItemType.uiJson:\r\n      case ProjectItemType.languagesCatalogJson:\r\n      case ProjectItemType.biomeBehavior:\r\n      case ProjectItemType.biomeResource:\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n      case ProjectItemType.featureRuleBehavior:\r\n      case ProjectItemType.featureBehavior:\r\n      case ProjectItemType.functionEventJson:\r\n      case ProjectItemType.recipeBehavior:\r\n      case ProjectItemType.spawnRuleBehavior:\r\n      case ProjectItemType.tradingBehaviorJson:\r\n      case ProjectItemType.volumeBehaviorJson:\r\n      case ProjectItemType.attachableResourceJson:\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n      case ProjectItemType.materialsResourceJson:\r\n      case ProjectItemType.musicDefinitionJson:\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n      case ProjectItemType.contentIndexJson:\r\n      case ProjectItemType.contentReportJson:\r\n      case ProjectItemType.worldTemplateManifestJson:\r\n      case ProjectItemType.textureSetJson:\r\n      case ProjectItemType.textureListJson:\r\n      case ProjectItemType.lightingJson:\r\n      case ProjectItemType.flipbookTexturesJson:\r\n      case ProjectItemType.itemTextureJson:\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n      case ProjectItemType.globalVariablesJson:\r\n      case ProjectItemType.dataForm:\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n      case ProjectItemType.dimensionJson:\r\n      case ProjectItemType.behaviorPackHistoryListJson:\r\n      case ProjectItemType.resourcePackHistoryListJson:\r\n      case ProjectItemType.contentsJson:\r\n      case ProjectItemType.jigsawProcessorList:\r\n      case ProjectItemType.jigsawStructure:\r\n      case ProjectItemType.jigsawTemplatePool:\r\n      case ProjectItemType.jigsawStructureSet:\r\n      case ProjectItemType.educationJson:\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return [\"application/json\"];\r\n\r\n      case ProjectItemType.MCWorld:\r\n      case ProjectItemType.MCTemplate:\r\n      case ProjectItemType.MCProject:\r\n      case ProjectItemType.MCAddon:\r\n      case ProjectItemType.MCPack:\r\n      case ProjectItemType.zip:\r\n        return [\"application/zip\"];\r\n\r\n      case ProjectItemType.structure:\r\n        return [\"application/octet-stream\"];\r\n\r\n      case ProjectItemType.MCFunction:\r\n      case ProjectItemType.material:\r\n      case ProjectItemType.materialGeometry:\r\n      case ProjectItemType.materialFragment:\r\n      case ProjectItemType.materialSetJson:\r\n      case ProjectItemType.materialVertex:\r\n      case ProjectItemType.env:\r\n      case ProjectItemType.lang:\r\n        return [\"text/plain\"];\r\n\r\n      case ProjectItemType.audio:\r\n        return [\"audio/wav\", \"audio/mp3\", \"audio/ogg\"];\r\n\r\n      case ProjectItemType.image:\r\n      case ProjectItemType.texture:\r\n      case ProjectItemType.uiTexture:\r\n      case ProjectItemType.designTexture:\r\n      case ProjectItemType.packIconImage:\r\n      case ProjectItemType.marketingAssetImage:\r\n      case ProjectItemType.storeAssetImage:\r\n        return [\"image/png\", \"image/tiff\"];\r\n\r\n      default:\r\n        return [\"application/octet-stream\"];\r\n    }\r\n  }\r\n\r\n  static getDescriptionForType(type: ProjectItemType) {\r\n    switch (type) {\r\n      case ProjectItemType.skinCatalogJson:\r\n        return \"Skins Catalog\";\r\n      case ProjectItemType.personaJson:\r\n        return \"Persona\";\r\n      case ProjectItemType.sdlLayout:\r\n        return \"SDL Layout\";\r\n      case ProjectItemType.rendererJson:\r\n        return \"Renderer\";\r\n      case ProjectItemType.splashesJson:\r\n        return \"Splashes\";\r\n      case ProjectItemType.loadingMessagesJson:\r\n        return \"Loading Messages\";\r\n      case ProjectItemType.fontMetadataJson:\r\n        return \"Font Metadata\";\r\n      case ProjectItemType.emoticonsJson:\r\n        return \"Emoticons\";\r\n      case ProjectItemType.js:\r\n        return \"JavaScript\";\r\n      case ProjectItemType.buildProcessedJs:\r\n        return \"Built JavaScript\";\r\n      case ProjectItemType.ts:\r\n        return \"TypeScript\";\r\n      case ProjectItemType.unknownJson:\r\n        return \"General json file\";\r\n      case ProjectItemType.designPackManifestJson:\r\n        return \"Design pack manifest\";\r\n      case ProjectItemType.behaviorPackManifestJson:\r\n        return \"Behavior pack manifest\";\r\n      case ProjectItemType.resourcePackManifestJson:\r\n        return \"Resource pack manifest\";\r\n      case ProjectItemType.testJs:\r\n        return \"Test JavaScript file\";\r\n      case ProjectItemType.entityTypeBaseJs:\r\n        return \"Entity type JavaScript\";\r\n      case ProjectItemType.entityTypeBaseTs:\r\n        return \"Entity type TypeScript\";\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return \"Entity type\";\r\n      case ProjectItemType.MCTemplate:\r\n        return \"Minecraft template\";\r\n      case ProjectItemType.MCWorld:\r\n        return \"Minecraft world\";\r\n      case ProjectItemType.MCProject:\r\n        return \"Minecraft project\";\r\n      case ProjectItemType.MCAddon:\r\n        return \"Minecraft addon\";\r\n      case ProjectItemType.MCPack:\r\n        return \"Minecraft pack\";\r\n      case ProjectItemType.zip:\r\n        return \"Minecraft zip\";\r\n      case ProjectItemType.worldFolder:\r\n        return \"Minecraft world\";\r\n      case ProjectItemType.structure:\r\n        return \"Structure\";\r\n      case ProjectItemType.MCFunction:\r\n        return \"Function\";\r\n      case ProjectItemType.tickJson:\r\n        return \"Tick\";\r\n      case ProjectItemType.material:\r\n        return \"Material\";\r\n      case ProjectItemType.materialSetJson:\r\n        return \"Material Set\";\r\n      case ProjectItemType.materialGeometry:\r\n        return \"Geometry\";\r\n      case ProjectItemType.materialFragment:\r\n        return \"Fragment\";\r\n      case ProjectItemType.materialVertex:\r\n        return \"Vertex\";\r\n      case ProjectItemType.shadowsJson:\r\n        return \"Shadow\";\r\n      case ProjectItemType.waterJson:\r\n        return \"Water\";\r\n      case ProjectItemType.jigsawProcessorList:\r\n        return \"Jigsaw Processor List\";\r\n      case ProjectItemType.jigsawStructure:\r\n        return \"Jigsaw Structure\";\r\n      case ProjectItemType.jigsawTemplatePool:\r\n        return \"Jigsaw Template Pool\";\r\n      case ProjectItemType.contentsJson:\r\n        return \"Contents Catalog\";\r\n      case ProjectItemType.jigsawStructureSet:\r\n        return \"Jigsaw Structure Set\";\r\n      case ProjectItemType.pbrJson:\r\n        return \"PBR\";\r\n      case ProjectItemType.atmosphericsJson:\r\n        return \"Atmospherics\";\r\n      case ProjectItemType.pointLightsJson:\r\n        return \"Point Light\";\r\n      case ProjectItemType.colorGradingJson:\r\n        return \"Color Grading\";\r\n      case ProjectItemType.cameraBehaviorJson:\r\n        return \"Camera\";\r\n      case ProjectItemType.aimAssistPresetJson:\r\n        return \"Aim Assist Preset\";\r\n      case ProjectItemType.aimAssistCategoryJson:\r\n        return \"Aim Assist Category\";\r\n      case ProjectItemType.behaviorTreeJson:\r\n        return \"Behavior Tree\";\r\n      case ProjectItemType.spawnGroupJson:\r\n        return \"Spawn Group\";\r\n      case ProjectItemType.catalogIndexJs:\r\n        return \"Catalog index\";\r\n      case ProjectItemType.personaPackFolder:\r\n        return \"Persona pack\";\r\n      case ProjectItemType.designPackFolder:\r\n        return \"Design pack\";\r\n      case ProjectItemType.behaviorPackFolder:\r\n        return \"Behavior pack folder\";\r\n      case ProjectItemType.resourcePackFolder:\r\n        return \"Resource pack folder\";\r\n      case ProjectItemType.skinPackFolder:\r\n        return \"Skin pack\";\r\n      case ProjectItemType.actionSet:\r\n        return \"Action Set\";\r\n      case ProjectItemType.worldTest:\r\n        return \"World test\";\r\n      case ProjectItemType.behaviorPackListJson:\r\n        return \"World behavior pack list\";\r\n      case ProjectItemType.resourcePackListJson:\r\n        return \"World resource pack list\";\r\n      case ProjectItemType.animationBehaviorJson:\r\n        return \"Behavior pack animation\";\r\n      case ProjectItemType.animationControllerBehaviorJson:\r\n        return \"Behavior pack animation controller\";\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return \"Block type\";\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return \"Item type\";\r\n      case ProjectItemType.lootTableBehavior:\r\n        return \"Loot table\";\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n        return \"Biome resources\";\r\n      case ProjectItemType.fileListArrayJson:\r\n        return \"File list\";\r\n      case ProjectItemType.craftingItemCatalog:\r\n        return \"Crafting Item catalog\";\r\n      case ProjectItemType.blocksCatalogResourceJson:\r\n        return \"Block resource catalog\";\r\n      case ProjectItemType.soundCatalog:\r\n        return \"Sound catalog\";\r\n      case ProjectItemType.animationResourceJson:\r\n        return \"Animation\";\r\n      case ProjectItemType.animationControllerResourceJson:\r\n        return \"Animation controller\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"Entity type visuals/audio\";\r\n      case ProjectItemType.fogResourceJson:\r\n        return \"Fog\";\r\n      case ProjectItemType.modelGeometryJson:\r\n        return \"Model\";\r\n      case ProjectItemType.particleJson:\r\n        return \"Particle\";\r\n      case ProjectItemType.renderControllerJson:\r\n        return \"Render controller\";\r\n      case ProjectItemType.blockCulling:\r\n        return \"Block culling\";\r\n      case ProjectItemType.uiJson:\r\n        return \"User interface\";\r\n      case ProjectItemType.languagesCatalogJson:\r\n        return \"Language catalog\";\r\n      case ProjectItemType.biomeBehavior:\r\n        return \"Biome\";\r\n      case ProjectItemType.biomeResource:\r\n        return \"Biome Resources\";\r\n      case ProjectItemType.dialogueBehaviorJson:\r\n        return \"Entity dialogue\";\r\n      case ProjectItemType.featureRuleBehavior:\r\n        return \"World feature rule\";\r\n      case ProjectItemType.featureBehavior:\r\n        return \"Feature\";\r\n      case ProjectItemType.functionEventJson:\r\n        return \"Function event\";\r\n      case ProjectItemType.recipeBehavior:\r\n        return \"Recipe\";\r\n      case ProjectItemType.spawnRuleBehavior:\r\n        return \"Spawn rule\";\r\n      case ProjectItemType.tradingBehaviorJson:\r\n        return \"Trading\";\r\n      case ProjectItemType.volumeBehaviorJson:\r\n        return \"Volume\";\r\n      case ProjectItemType.attachableResourceJson:\r\n        return \"Attachable\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"Item type resources\";\r\n      case ProjectItemType.materialsResourceJson:\r\n        return \"Materials\";\r\n      case ProjectItemType.musicDefinitionJson:\r\n        return \"Music catalog\";\r\n      case ProjectItemType.soundDefinitionCatalog:\r\n        return \"Sound catalog\";\r\n      case ProjectItemType.audio:\r\n        return \"Audio\";\r\n      case ProjectItemType.contentIndexJson:\r\n        return \"Content Description\";\r\n      case ProjectItemType.contentReportJson:\r\n        return \"Content Report\";\r\n      case ProjectItemType.tsconfigJson:\r\n        return \"TypeScript config\";\r\n      case ProjectItemType.prettierRcJson:\r\n        return \"Prettier JavaScript/JSON style config\";\r\n      case ProjectItemType.jsconfigJson:\r\n        return \"JavaScript config\";\r\n      case ProjectItemType.docfxJson:\r\n        return \"DocFX definition\";\r\n      case ProjectItemType.jsdocJson:\r\n        return \"JSDoc definition\";\r\n      case ProjectItemType.packageJson:\r\n        return \"NPM package definition\";\r\n      case ProjectItemType.packageLockJson:\r\n        return \"NPM package lock definition\";\r\n      case ProjectItemType.env:\r\n        return \"Environment File\";\r\n      case ProjectItemType.levelDatOld:\r\n        return \"Legacy Level Data\";\r\n      case ProjectItemType.levelDat:\r\n        return \"Level Data\";\r\n      case ProjectItemType.jsMap:\r\n        return \"JavaScript Map\";\r\n      case ProjectItemType.esLintConfigMjs:\r\n        return \"ESLint config\";\r\n      case ProjectItemType.justConfigTs:\r\n        return \"Just config\";\r\n      case ProjectItemType.docInfoJson:\r\n        return \"Doc info json\";\r\n      case ProjectItemType.ninesliceJson:\r\n        return \"Nine-slice scaling config\";\r\n      case ProjectItemType.scriptTypesJson:\r\n        return \"Script types definition\";\r\n      case ProjectItemType.vanillaDataJson:\r\n        return \"Vanilla data definition\";\r\n      case ProjectItemType.engineOrderingJson:\r\n        return \"Engine ordering definition\";\r\n      case ProjectItemType.commandSetDefinitionJson:\r\n        return \"Command definition\";\r\n      case ProjectItemType.skinPackManifestJson:\r\n        return \"Skin pack manifest\";\r\n      case ProjectItemType.personaManifestJson:\r\n        return \"Persona manifest\";\r\n      case ProjectItemType.blockTypeBaseJs:\r\n        return \"Block type base JavaScript\";\r\n      case ProjectItemType.blockTypeBaseTs:\r\n        return \"Block type base TypeScript\";\r\n      case ProjectItemType.image:\r\n        return \"Image\";\r\n      case ProjectItemType.texture:\r\n        return \"Texture\";\r\n      case ProjectItemType.uiTexture:\r\n        return \"UI texture\";\r\n      case ProjectItemType.designTexture:\r\n        return \"Design texture\";\r\n      case ProjectItemType.packIconImage:\r\n        return \"Icon\";\r\n      case ProjectItemType.marketingAssetImage:\r\n        return \"Marketing image\";\r\n      case ProjectItemType.storeAssetImage:\r\n        return \"Store image\";\r\n      case ProjectItemType.vsCodeLaunchJson:\r\n        return \"VS Code launch file\";\r\n      case ProjectItemType.vsCodeTasksJson:\r\n        return \"VS Code tasks\";\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n        return \"VS Code settings\";\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n        return \"VS Code extensions\";\r\n      case ProjectItemType.lang:\r\n        return \"Language translations\";\r\n      case ProjectItemType.worldTemplateManifestJson:\r\n        return \"World template manifest\";\r\n      case ProjectItemType.textureSetJson:\r\n        return \"Texture set\";\r\n      case ProjectItemType.textureListJson:\r\n        return \"Texture list\";\r\n      case ProjectItemType.lightingJson:\r\n        return \"Lighting\";\r\n      case ProjectItemType.flipbookTexturesJson:\r\n        return \"Flipbook texture set\";\r\n      case ProjectItemType.itemTextureJson:\r\n        return \"Item texture\";\r\n      case ProjectItemType.terrainTextureCatalogResourceJson:\r\n        return \"Terrain texture\";\r\n      case ProjectItemType.globalVariablesJson:\r\n        return \"UI global variables\";\r\n      case ProjectItemType.dataForm:\r\n        return \"Form\";\r\n      case ProjectItemType.dimensionJson:\r\n        return \"Dimension\";\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n        return \"MCTools preferences\";\r\n      case ProjectItemType.behaviorPackHistoryListJson:\r\n        return \"Behavior pack history\";\r\n      case ProjectItemType.resourcePackHistoryListJson:\r\n        return \"Resource pack history\";\r\n      case ProjectItemType.educationJson:\r\n        return \"Education manifest\";\r\n      case ProjectItemType.voxelShapeBehavior:\r\n        return \"Voxel shape\";\r\n      default:\r\n        return \"Unknown\";\r\n    }\r\n  }\r\n\r\n  static getTooltipForType(type: ProjectItemType): string {\r\n    const group = getProjectItemTypeGroup(type);\r\n\r\n    switch (group) {\r\n      case ProjectItemTypeGroup.design:\r\n        return \"Planning assets and placeholders used to prototype ideas.\";\r\n      case ProjectItemTypeGroup.scriptsLogic:\r\n        return \"Scripts and command logic that drive gameplay behavior.\";\r\n      case ProjectItemTypeGroup.entityTypes:\r\n        return \"Definitions for mobs and NPCs, including behavior and spawn rules.\";\r\n      case ProjectItemTypeGroup.itemTypes:\r\n        return \"Definitions for custom items, loot, recipes, and trading.\";\r\n      case ProjectItemTypeGroup.blockTypes:\r\n        return \"Definitions for blocks, materials, and terrain behavior.\";\r\n      case ProjectItemTypeGroup.worldWorldgen:\r\n        return \"World data, biomes, features, and structure generation settings.\";\r\n      case ProjectItemTypeGroup.modelsAnimations:\r\n        return \"3D models, animations, and render controllers for visuals.\";\r\n      case ProjectItemTypeGroup.texturesAudio:\r\n        return \"Textures, images, particles, and audio used by the pack.\";\r\n      case ProjectItemTypeGroup.vibrantVisuals:\r\n        return \"Lighting, PBR, and Vibrant Visuals rendering settings.\";\r\n      case ProjectItemTypeGroup.uiUx:\r\n        return \"UI layouts, localization strings, and UI textures.\";\r\n      case ProjectItemTypeGroup.configDev:\r\n        return \"Configuration and metadata files used by tools and Minecraft to load the pack.\";\r\n      case ProjectItemTypeGroup.packaging:\r\n        return \"Packaged outputs for exporting or sharing.\";\r\n      case ProjectItemTypeGroup.skinPersona:\r\n        return \"Player skins and persona customization data.\";\r\n      case ProjectItemTypeGroup.meta:\r\n        return \"Documentation, reports, and tool metadata.\";\r\n      default:\r\n        return \"Other files used by this project.\";\r\n    }\r\n  }\r\n\r\n  static wouldBeCircular(\r\n    candidate: ProjectItem,\r\n    considering?: ProjectItem,\r\n    visitedPaths?: Set<string>,\r\n    dontGoUpward?: boolean,\r\n    dontGoDownward?: boolean\r\n  ) {\r\n    if (!visitedPaths) {\r\n      visitedPaths = new Set<string>();\r\n    }\r\n\r\n    if (!candidate.projectPath) {\r\n      return false;\r\n    }\r\n\r\n    if (!considering) {\r\n      considering = candidate;\r\n    }\r\n\r\n    if (considering.projectPath) {\r\n      if (visitedPaths.has(considering.projectPath)) {\r\n        return true;\r\n      }\r\n\r\n      visitedPaths.add(considering.projectPath);\r\n    } else {\r\n      return false;\r\n    }\r\n\r\n    if (considering.parentItems && !dontGoUpward) {\r\n      for (const parentItem of considering.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.wouldBeCircular(candidate, parentItem.parentItem, visitedPaths, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (considering.childItems && !dontGoDownward) {\r\n      for (const childItem of considering.childItems) {\r\n        if (childItem.childItem) {\r\n          if (this.wouldBeCircular(candidate, childItem.childItem, visitedPaths, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Recursively collects all descendant items reachable via childItems relationships.\r\n   * Includes the starting item itself. Uses cycle detection to prevent infinite loops.\r\n   * This is used to discover the full \"tree\" of files that make up an entity/block/item\r\n   * (e.g., BP entity \u2192 RP entity \u2192 model, textures, animations, spawn rules, loot tables).\r\n   */\r\n  static collectAllDescendantItems(item: ProjectItem): ProjectItem[] {\r\n    const visited = new Set<string>();\r\n    const result: ProjectItem[] = [];\r\n\r\n    ProjectItemUtilities._collectDescendantsRecursive(item, visited, result);\r\n\r\n    return result;\r\n  }\r\n\r\n  private static _collectDescendantsRecursive(item: ProjectItem, visited: Set<string>, result: ProjectItem[]) {\r\n    const path = item.projectPath;\r\n    if (!path || visited.has(path)) {\r\n      return;\r\n    }\r\n\r\n    visited.add(path);\r\n    result.push(item);\r\n\r\n    if (item.childItems) {\r\n      for (const rel of item.childItems) {\r\n        if (rel.childItem) {\r\n          ProjectItemUtilities._collectDescendantsRecursive(rel.childItem, visited, result);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static isTextureSetTexture(projectItem: ProjectItem) {\r\n    if (projectItem.parentItems) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (parentItem.parentItem.itemType === ProjectItemType.textureSetJson) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isBlock(type: ProjectItemType) {\r\n    return (\r\n      type === ProjectItemType.blockCulling ||\r\n      type === ProjectItemType.terrainTextureCatalogResourceJson ||\r\n      type === ProjectItemType.blockTypeBehavior ||\r\n      type === ProjectItemType.blocksCatalogResourceJson ||\r\n      type === ProjectItemType.blockMaterialsBehaviorJson\r\n    );\r\n  }\r\n\r\n  static isBlockRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isBlock(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isBlockRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isBlock(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isBlockRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isUI(type: ProjectItemType) {\r\n    return type === ProjectItemType.uiJson || type === ProjectItemType.uiTexture;\r\n  }\r\n\r\n  static isUIRelated(\r\n    projectItem: ProjectItem,\r\n    goUpwardOnly?: boolean,\r\n    goDownwardOnly?: boolean,\r\n    visited?: Set<ProjectItem>\r\n  ) {\r\n    // Track visited items to prevent infinite recursion from circular dependencies\r\n    if (visited === undefined) {\r\n      visited = new Set<ProjectItem>();\r\n    }\r\n\r\n    if (visited.has(projectItem)) {\r\n      return false; // Already visited, avoid infinite loop\r\n    }\r\n    visited.add(projectItem);\r\n\r\n    if (projectItem.parentItems && (goUpwardOnly || goUpwardOnly === undefined)) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isUI(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isUIRelated(parentItem.parentItem, true, false, visited)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && (goDownwardOnly || goDownwardOnly === undefined)) {\r\n      for (const childItem of projectItem.childItems) {\r\n        if (childItem.childItem) {\r\n          if (this.isUI(childItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isUIRelated(childItem.childItem, false, true, visited)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isBehaviorRelated(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.entityTypeBehavior ||\r\n      itemType === ProjectItemType.blockTypeBehavior ||\r\n      itemType === ProjectItemType.itemTypeBehavior ||\r\n      itemType === ProjectItemType.spawnRuleBehavior ||\r\n      itemType === ProjectItemType.lootTableBehavior ||\r\n      itemType === ProjectItemType.tradingBehaviorJson ||\r\n      itemType === ProjectItemType.recipeBehavior ||\r\n      itemType === ProjectItemType.biomeBehavior ||\r\n      itemType === ProjectItemType.featureBehavior ||\r\n      itemType === ProjectItemType.featureRuleBehavior ||\r\n      itemType === ProjectItemType.jigsawProcessorList ||\r\n      itemType === ProjectItemType.jigsawStructure ||\r\n      itemType === ProjectItemType.jigsawStructureSet ||\r\n      itemType === ProjectItemType.jigsawTemplatePool ||\r\n      itemType === ProjectItemType.voxelShapeBehavior\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getRootAncestorItems(item: ProjectItem, ancestorList?: ProjectItem[]) {\r\n    if (ancestorList === undefined) {\r\n      ancestorList = [];\r\n    }\r\n\r\n    if (item.parentItems) {\r\n      for (const parentItem of item.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          this.getRootAncestorItems(parentItem.parentItem, ancestorList);\r\n        }\r\n      }\r\n    } else {\r\n      ancestorList.push(item);\r\n    }\r\n\r\n    return ancestorList;\r\n  }\r\n\r\n  static getRelationshipDescription(itemRel: IProjectItemRelationship) {\r\n    if (!itemRel.parentItem || !itemRel.childItem) {\r\n      return undefined;\r\n    }\r\n\r\n    if (\r\n      itemRel.parentItem.itemType === ProjectItemType.entityTypeBehavior &&\r\n      itemRel.childItem.itemType === ProjectItemType.entityTypeResource\r\n    ) {\r\n      return StorageUtilities.getBaseFromName(itemRel.parentItem.name) + \" visuals/audio\";\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static isDesignRelated(itemType: ProjectItemType) {\r\n    if (\r\n      itemType === ProjectItemType.designTexture ||\r\n      itemType === ProjectItemType.designPackFolder ||\r\n      itemType === ProjectItemType.actionSet ||\r\n      itemType === ProjectItemType.designPackManifestJson\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isResourceRelated(itemType: ProjectItemType) {\r\n    if (ProjectItemUtilities.isVibrantVisualsTypeRelated(itemType)) {\r\n      return true;\r\n    }\r\n\r\n    if (\r\n      itemType === ProjectItemType.attachableResourceJson ||\r\n      itemType === ProjectItemType.animationControllerResourceJson ||\r\n      itemType === ProjectItemType.animationResourceJson ||\r\n      itemType === ProjectItemType.entityTypeResource ||\r\n      itemType === ProjectItemType.renderControllerJson ||\r\n      itemType === ProjectItemType.modelGeometryJson ||\r\n      itemType === ProjectItemType.biomeResource ||\r\n      itemType === ProjectItemType.biomesClientCatalogResource ||\r\n      itemType === ProjectItemType.texture ||\r\n      itemType === ProjectItemType.uiJson ||\r\n      itemType === ProjectItemType.uiTexture ||\r\n      itemType === ProjectItemType.audio ||\r\n      itemType === ProjectItemType.itemTypeLegacyResource ||\r\n      itemType === ProjectItemType.blocksCatalogResourceJson ||\r\n      itemType === ProjectItemType.blockCulling\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isItem(type: ProjectItemType) {\r\n    return (\r\n      type === ProjectItemType.itemTextureJson ||\r\n      type === ProjectItemType.itemTypeBehavior ||\r\n      type === ProjectItemType.attachableResourceJson ||\r\n      type === ProjectItemType.itemTypeLegacyResource\r\n    );\r\n  }\r\n\r\n  static isItemRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isItem(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isItemRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isItem(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isItemRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isEntity(type: ProjectItemType) {\r\n    return (\r\n      type === ProjectItemType.entityTypeBehavior ||\r\n      type === ProjectItemType.entityTypeResource ||\r\n      type === ProjectItemType.renderControllerJson\r\n    );\r\n  }\r\n\r\n  static isEntityRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isEntity(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isEntityRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isEntity(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isEntityRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static isParticle(type: ProjectItemType) {\r\n    return type === ProjectItemType.particleJson;\r\n  }\r\n\r\n  static isParticleRelated(projectItem: ProjectItem, dontGoUpward?: boolean, dontGoDownward?: boolean) {\r\n    if (projectItem.parentItems && !dontGoUpward) {\r\n      for (const parentItem of projectItem.parentItems) {\r\n        if (parentItem.parentItem) {\r\n          if (this.isParticle(parentItem.parentItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isParticleRelated(parentItem.parentItem, false, true)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (projectItem.childItems && !dontGoDownward) {\r\n      for (const parentItem of projectItem.childItems) {\r\n        if (parentItem.childItem) {\r\n          if (this.isParticle(parentItem.childItem.itemType)) {\r\n            return true;\r\n          }\r\n\r\n          if (this.isParticleRelated(parentItem.childItem, true, false)) {\r\n            return true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static getNewItemName(type: ProjectItemType) {\r\n    return ProjectItemUtilities.getDescriptionForType(type).toLowerCase();\r\n  }\r\n\r\n  /**\r\n   * Gets the semantic color for a project item type based on its category group.\r\n   * Uses the Minecraft-themed color palette from ProjectItemTypeInfo.\r\n   */\r\n  static getColorForType(type: ProjectItemType): IColor {\r\n    return getColorForProjectItemType(type);\r\n  }\r\n\r\n  /**\r\n   * Gets the type group (semantic category) for a project item type.\r\n   */\r\n  static getTypeGroup(type: ProjectItemType): ProjectItemTypeGroup {\r\n    return getProjectItemTypeGroup(type);\r\n  }\r\n\r\n  static getPluralDescriptionForType(type: ProjectItemType) {\r\n    // override non-\"plus s\" plural-ifications here\r\n    switch (type) {\r\n      case ProjectItemType.audio:\r\n        return \"Audio\";\r\n      case ProjectItemType.ts:\r\n        return \"Scripts\";\r\n      case ProjectItemType.js:\r\n        return \"JavaScript files\";\r\n      case ProjectItemType.itemTypeLegacyResource:\r\n        return \"Item type visuals and audio\";\r\n      case ProjectItemType.entityTypeResource:\r\n        return \"Entity type visuals/audio\";\r\n      case ProjectItemType.catalogIndexJs:\r\n        return \"Catalog indexes\";\r\n      case ProjectItemType.behaviorPackHistoryListJson:\r\n        return \"Behavior pack histories\";\r\n      case ProjectItemType.resourcePackHistoryListJson:\r\n        return \"Resource pack histories\";\r\n      case ProjectItemType.globalVariablesJson:\r\n      case ProjectItemType.materialGeometry:\r\n      case ProjectItemType.atmosphericsJson:\r\n      case ProjectItemType.biomesClientCatalogResource:\r\n      case ProjectItemType.vsCodeTasksJson:\r\n      case ProjectItemType.vsCodeSettingsJson:\r\n      case ProjectItemType.vsCodeExtensionsJson:\r\n      case ProjectItemType.mcToolsProjectPreferences:\r\n      case ProjectItemType.materialsResourceJson:\r\n      case ProjectItemType.lang:\r\n      case ProjectItemType.levelDat:\r\n      case ProjectItemType.levelDatOld:\r\n        return this.getDescriptionForType(type);\r\n      default:\r\n        const str = this.getDescriptionForType(type);\r\n\r\n        if (!str.endsWith(\"s\")) {\r\n          return str + \"s\";\r\n        }\r\n\r\n        return str;\r\n    }\r\n  }\r\n\r\n  static getCousinOfType(projectItem: ProjectItem, itemType: ProjectItemType): ProjectItem | undefined {\r\n    if (!projectItem.parentItems) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const parentRel of projectItem.parentItems) {\r\n      const result = this.getFirstDescendentOfType(parentRel.parentItem, itemType);\r\n      if (result) {\r\n        return result;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getFirstDescendentOfType(projectItem: ProjectItem, itemType: ProjectItemType): ProjectItem | undefined {\r\n    if (!projectItem.childItems) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const rel of projectItem.childItems) {\r\n      if (rel.childItem.itemType === itemType) {\r\n        return rel.childItem;\r\n      }\r\n    }\r\n\r\n    for (const rel of projectItem.childItems) {\r\n      const found = this.getFirstDescendentOfType(rel.childItem, itemType);\r\n\r\n      if (found) {\r\n        return found;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getDefaultFolderForType(project: Project, itemType: ProjectItemType) {\r\n    const paths = [...ProjectItemUtilities.getFolderRootsForType(itemType)];\r\n\r\n    if (paths === undefined || paths.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    await project.ensureLoadedProjectFolder();\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    switch (itemType) {\r\n      case ProjectItemType.js:\r\n      case ProjectItemType.ts:\r\n        const scriptsFolder = await project.getMainScriptsFolder();\r\n\r\n        return scriptsFolder;\r\n\r\n      case ProjectItemType.entityTypeBehavior:\r\n      case ProjectItemType.MCFunction:\r\n        const defaultBpFolder = await project.getDefaultBehaviorPackFolder();\r\n\r\n        if (!defaultBpFolder) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultBpFolder.ensureFolderFromRelativePath(paths[0]);\r\n\r\n      case ProjectItemType.entityTypeResource:\r\n      case ProjectItemType.modelGeometryJson:\r\n        const defaultRpFolder = await project.getDefaultResourcePackFolder();\r\n\r\n        if (!defaultRpFolder) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultRpFolder.ensureFolderFromRelativePath(paths[0]);\r\n\r\n      case ProjectItemType.spawnRuleBehavior:\r\n      case ProjectItemType.lootTableBehavior:\r\n      case ProjectItemType.recipeBehavior:\r\n      case ProjectItemType.featureBehavior:\r\n      case ProjectItemType.featureRuleBehavior:\r\n      case ProjectItemType.jigsawProcessorList:\r\n      case ProjectItemType.jigsawStructure:\r\n      case ProjectItemType.jigsawTemplatePool:\r\n      case ProjectItemType.jigsawStructureSet:\r\n        return await ProjectUtilities.getDefaultBehaviorPackFolder(project, paths);\r\n\r\n      case ProjectItemType.designTexture:\r\n        const defaultDpFolder = await project.getDefaultDesignPackFolder();\r\n\r\n        if (!defaultDpFolder) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultDpFolder.ensureFolderFromRelativePath(StorageUtilities.ensureStartsWithDelimiter(paths[0]));\r\n\r\n      case ProjectItemType.uiTexture:\r\n        const defaultRpFolderA = await project.getDefaultResourcePackFolder();\r\n\r\n        if (!defaultRpFolderA) {\r\n          return undefined;\r\n        }\r\n\r\n        return defaultRpFolderA.ensureFolderFromRelativePath(paths.join(\"/\"));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getNewItemTechnicalName(type: ProjectItemType) {\r\n    const roots = this.getFolderRootsForType(type);\r\n\r\n    if (roots.length > 0) {\r\n      let str = roots[roots.length - 1];\r\n\r\n      if (str === \"entities\") {\r\n        str = \"entity\";\r\n      } else if (str.endsWith(\"s\")) {\r\n        str = str.substring(0, str.length - 1);\r\n      }\r\n\r\n      return str;\r\n    }\r\n\r\n    return \"item\";\r\n  }\r\n\r\n  static getFolderRootsForType(itemType: ProjectItemType): readonly string[] {\r\n    return getProjectItemDefaults(itemType).folderRoots;\r\n  }\r\n}\r\n\r\nexport function getEnsuredFile(items: readonly ProjectItem[], predicate: (item: ProjectItem) => boolean) {\r\n  const foundItem = items.find(predicate);\r\n\r\n  return foundItem ? foundItem.loadFileContent() : Promise.resolve(undefined);\r\n}\r\n\r\nexport const getEnsuredFileOfType = (items: readonly ProjectItem[], type: ProjectItemType) =>\r\n  getEnsuredFile(items, (item) => item.itemType === type);\r\n\r\nexport function findEnsuredFiles(items: readonly ProjectItem[], predicate: (item: ProjectItem) => boolean) {\r\n  const filteredItems = items.filter(predicate);\r\n\r\n  return Promise.all(filteredItems.map((item) => item.loadFileContent()));\r\n}\r\n\r\nexport const findEnsuredFilesOfType = (items: readonly ProjectItem[], type: ProjectItemType) =>\r\n  findEnsuredFiles(items, (item) => item.itemType === type);\r\n\r\nexport function getNeighborFiles(items: readonly ProjectItem[], subject: ProjectItem): ProjectItem[] {\r\n  const projectPath = subject.projectPath?.toLowerCase();\r\n  if (!projectPath) {\r\n    throw new Error(`No Project path found for project item: ${subject.name}`);\r\n  }\r\n  const folderProjectPath = projectPath.substring(0, projectPath.length - subject.name.length);\r\n\r\n  const neighbors =\r\n    folderProjectPath && items.filter((item) => item.projectPath?.toLocaleLowerCase().startsWith(folderProjectPath));\r\n  return neighbors || [];\r\n}\r\n\r\nexport function getWorldTemplates(items: readonly ProjectItem[]) {\r\n  return items\r\n    .filter((item) => item.itemType === ProjectItemType.worldTemplateManifestJson)\r\n    .map((worldManifest) => ({ name: worldManifest.name, items: getNeighborFiles(items, worldManifest) }));\r\n}\r\n\r\nexport function getMarketContent(items: readonly ProjectItem[]) {\r\n  const marketContentTypes = new Set([ProjectItemType.storeAssetImage, ProjectItemType.marketingAssetImage]);\r\n\r\n  return items.filter((item) => marketContentTypes.has(item.itemType));\r\n}\r\n\r\nexport async function tryEnsureFiles(items: ProjectItem[], predicate: (item: ProjectItem) => boolean = () => true) {\r\n  const filteredItems = items.filter(predicate);\r\n\r\n  const fileReads = await Promise.all(filteredItems.map(async (item) => [item, await item.loadFileContent()] as const));\r\n\r\n  const success: ProjectItem[] = [];\r\n  const failed: ProjectItem[] = [];\r\n\r\n  for (const [item, file] of fileReads) {\r\n    if (!file) {\r\n      failed.push(item);\r\n    } else {\r\n      success.push(item);\r\n    }\r\n  }\r\n\r\n  return [success, failed] as const;\r\n}\r\n", "import IColor from \"../core/IColor\";\r\n\r\nexport enum ImageItemType {\r\n  pixelSet = 0,\r\n  line = 1,\r\n  rectangle = 2,\r\n  circle = 3,\r\n  triangle = 4,\r\n  text = 5,\r\n  image = 6,\r\n}\r\n\r\nexport enum ImageOutputType {\r\n  blockTexture = 1,\r\n  itemTexture = 2,\r\n  painting = 3,\r\n  blockBillboard3x3 = 11,\r\n  blockBillboard4x6 = 12,\r\n  blockBillboard5x8 = 13,\r\n}\r\n\r\nexport enum PaintingSize {\r\n  oneBlock = 1,\r\n  threeByThree = 3,\r\n  threeByFourPortrait = 4,\r\n}\r\n\r\nexport default interface IImageEdits {\r\n  items: IImageItem[];\r\n  backgroundItem?: IImageItem;\r\n  stackPosition?: number;\r\n  width?: number;\r\n  height?: number;\r\n  outputs?: IImageOutput[];\r\n}\r\n\r\nexport interface IImageOutput {\r\n  type: ImageOutputType;\r\n  name: string;\r\n  paintingOverrideName: string;\r\n  paintingSize: PaintingSize;\r\n}\r\n\r\nexport interface IImageItem {\r\n  origin: IImageXY;\r\n  type: ImageItemType;\r\n  strokeColor?: IColor;\r\n  imageData?: string;\r\n  isFilled?: boolean;\r\n  fillColor?: IColor;\r\n  fixedWidth?: number;\r\n  fixedHeight?: number;\r\n  coords: IImageXY[];\r\n}\r\n\r\nexport interface IImageXY {\r\n  x: number;\r\n  y: number;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IColor from \"./IColor\";\r\n\r\nexport default class ColorUtilities {\r\n  static fromCss(colorStr: string): IColor {\r\n    if (colorStr.startsWith(\"#\") && colorStr.length === 7) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(1, 3)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(3, 5)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(5, 7)),\r\n      };\r\n    } else if (colorStr.startsWith(\"#\") && colorStr.length === 9) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(1, 3)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(3, 5)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(5, 7)),\r\n        alpha: ColorUtilities.fromTwoHexit(colorStr.substring(7, 9)),\r\n      };\r\n    } else if (colorStr.length === 6) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(0, 2)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(2, 4)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(4, 6)),\r\n      };\r\n    } else if (colorStr.length === 8) {\r\n      return {\r\n        red: ColorUtilities.fromTwoHexit(colorStr.substring(0, 2)),\r\n        green: ColorUtilities.fromTwoHexit(colorStr.substring(2, 4)),\r\n        blue: ColorUtilities.fromTwoHexit(colorStr.substring(4, 6)),\r\n        alpha: ColorUtilities.fromTwoHexit(colorStr.substring(6, 8)),\r\n      };\r\n    }\r\n\r\n    return {\r\n      red: 0,\r\n      green: 0,\r\n      blue: 0,\r\n    };\r\n  }\r\n\r\n  static fromTwoHexit(hexitChar: string) {\r\n    try {\r\n      return parseInt(hexitChar, 16);\r\n    } catch {\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  static toCss(color: IColor) {\r\n    if (color.alpha !== undefined) {\r\n      return `rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha})`;\r\n    }\r\n\r\n    return `rgb(${color.red}, ${color.green}, ${color.blue})`;\r\n  }\r\n\r\n  static lighter(color: IColor, multiplier: number): IColor {\r\n    return {\r\n      red: Math.min(255, color.red + color.red * multiplier),\r\n      green: Math.min(255, color.green + color.green * multiplier),\r\n      blue: Math.min(255, color.blue + color.blue * multiplier),\r\n      alpha: color.alpha,\r\n    };\r\n  }\r\n\r\n  static darker(color: IColor, multiplier: number): IColor {\r\n    return {\r\n      red: Math.max(0, color.red - color.red * multiplier),\r\n      green: Math.max(0, color.green - color.green * multiplier),\r\n      blue: Math.max(0, color.blue - color.blue * multiplier),\r\n      alpha: color.alpha,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Alpha-composite `foreground` over an opaque `background`, returning an\r\n   * opaque RGB color.\r\n   *\r\n   * Why not just rely on CSS `rgba(...)` backgrounds?\r\n   * Accessibility scanners (e.g. axe-core) cannot reliably compute contrast\r\n   * for translucent backgrounds. When the foreground sits over an `rgba(...)`\r\n   * fill, axe walks up the DOM looking for the next opaque ancestor and\r\n   * frequently falls back to the page default (white) \u2014 which produces false\r\n   * \"1.06:1\" contrast failures even when the rendered pixels look fine.\r\n   *\r\n   * Pre-compositing on our side gives the element a SOLID `rgb(...)`\r\n   * background that axe can evaluate directly, so contrast scoring matches\r\n   * what the user actually sees.\r\n   *\r\n   * @param foreground The translucent color (must define `alpha` 0..1).\r\n   *                   If `alpha` is undefined or 1, the foreground is returned unchanged.\r\n   * @param background The opaque background it sits over.\r\n   *                   If alpha is supplied here it is treated as 1.\r\n   */\r\n  static composite(foreground: IColor, background: IColor): IColor {\r\n    const alpha = foreground.alpha ?? 1;\r\n    if (alpha >= 1) {\r\n      return { red: foreground.red, green: foreground.green, blue: foreground.blue };\r\n    }\r\n    if (alpha <= 0) {\r\n      return { red: background.red, green: background.green, blue: background.blue };\r\n    }\r\n    return {\r\n      red: Math.round(foreground.red * alpha + background.red * (1 - alpha)),\r\n      green: Math.round(foreground.green * alpha + background.green * (1 - alpha)),\r\n      blue: Math.round(foreground.blue * alpha + background.blue * (1 - alpha)),\r\n    };\r\n  }\r\n}\r\n", "import ColorUtilities from \"../core/ColorUtilities\";\r\nimport { IImageItem, IImageXY, ImageItemType } from \"./IImageEdits\";\r\n\r\nexport class ImageItem {\r\n  data: IImageItem;\r\n  imageElement?: object;\r\n  isImageElementLoaded?: boolean;\r\n\r\n  constructor(_data: IImageItem) {\r\n    this.data = _data;\r\n  }\r\n\r\n  public get isFilled() {\r\n    if (!this.data || !this.data.isFilled) {\r\n      return false;\r\n    }\r\n\r\n    return this.data.isFilled;\r\n  }\r\n\r\n  public set isFilled(filled: boolean) {\r\n    this.data.isFilled = filled;\r\n  }\r\n\r\n  public get coords() {\r\n    return this.data.coords;\r\n  }\r\n\r\n  public get fixedWidth() {\r\n    if (this.data) {\r\n      return this.data.fixedWidth;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set fixedWidth(fixedWidth: number | undefined) {\r\n    this.data.fixedWidth = fixedWidth;\r\n  }\r\n\r\n  public get fixedHeight() {\r\n    if (this.data) {\r\n      return this.data.fixedHeight;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set fixedHeight(fixedHeight: number | undefined) {\r\n    this.data.fixedHeight = fixedHeight;\r\n  }\r\n\r\n  public get strokeColor() {\r\n    if (!this.data || !this.data.strokeColor) {\r\n      return {\r\n        red: 0,\r\n        green: 0,\r\n        blue: 0,\r\n      };\r\n    }\r\n\r\n    return this.data.strokeColor;\r\n  }\r\n\r\n  public get strokeColorCss() {\r\n    return ColorUtilities.toCss(this.strokeColor);\r\n  }\r\n\r\n  public get imageData() {\r\n    return this.data.imageData;\r\n  }\r\n\r\n  public set imageData(imageData: string | undefined) {\r\n    this.data.imageData = imageData;\r\n  }\r\n\r\n  public get x() {\r\n    return this.data.origin.x;\r\n  }\r\n\r\n  public get y() {\r\n    return this.data.origin.y;\r\n  }\r\n\r\n  public get coord0x() {\r\n    if (!this.data || !this.data.coords || this.data.coords.length <= 0) {\r\n      return this.x;\r\n    }\r\n\r\n    return this.data.coords[0].x;\r\n  }\r\n\r\n  public set coord0x(newX: number) {\r\n    if (!this.data.coords) {\r\n      this.data.coords = [];\r\n    }\r\n\r\n    if (this.data.coords.length < 1) {\r\n      this.data.coords.push({ x: newX, y: this.y });\r\n    } else {\r\n      this.data.coords[0].x = newX;\r\n    }\r\n  }\r\n\r\n  public get coord0y() {\r\n    if (!this.data || !this.data.coords || this.data.coords.length <= 0) {\r\n      return this.y;\r\n    }\r\n\r\n    return this.data.coords[0].y;\r\n  }\r\n\r\n  public set coord0y(newY: number) {\r\n    if (!this.data.coords) {\r\n      this.data.coords = [];\r\n    }\r\n\r\n    if (this.data.coords.length < 1) {\r\n      this.data.coords.push({ x: this.x, y: newY });\r\n    } else {\r\n      this.data.coords[0].y = newY;\r\n    }\r\n  }\r\n\r\n  public get type() {\r\n    return this.data.type;\r\n  }\r\n\r\n  public get allPixels() {\r\n    let pixels: IImageXY[] = [];\r\n\r\n    if (this.data.type === ImageItemType.pixelSet && this.data.coords.length === 1) {\r\n      pixels.push({ x: this.x, y: this.y });\r\n    } else if (this.data.type === ImageItemType.line && this.data.coords.length === 1) {\r\n      let x0 = this.x;\r\n      let y0 = this.y;\r\n      let x1 = this.data.coords[0].x;\r\n      let y1 = this.data.coords[0].y;\r\n\r\n      let dx: number = Math.abs(x1 - x0),\r\n        sx = x0 < x1 ? 1 : -1;\r\n\r\n      let dy: number = -Math.abs(y1 - y0),\r\n        sy = y0 < y1 ? 1 : -1;\r\n\r\n      let err: number = dx + dy,\r\n        e2;\r\n\r\n      while (true) {\r\n        pixels.push({ x: x0, y: y0 });\r\n\r\n        if (x0 === x1 && y0 === y1) {\r\n          break;\r\n        }\r\n\r\n        e2 = 2 * err;\r\n\r\n        if (e2 >= dy) {\r\n          err += dy;\r\n          x0 += sx;\r\n        }\r\n        if (e2 <= dx) {\r\n          err += dx;\r\n          y0 += sy;\r\n        }\r\n      }\r\n    }\r\n\r\n    return pixels;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport IImageEditor, { IImageItem, IImageOutput, ImageOutputType, PaintingSize } from \"./IImageEdits\";\r\nimport { ImageItem } from \"./ImageItem\";\r\nimport ProjectItemUtilities from \"../app/ProjectItemUtilities\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport ProjectItemCreateManager from \"../app/ProjectItemCreateManager\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IImageEdits from \"./IImageEdits\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\n\r\nexport default class ImageEditsDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public items: ImageItem[] = [];\r\n  public _backgroundItem?: ImageItem;\r\n  public data?: IImageEditor;\r\n\r\n  private _onLoaded = new EventDispatcher<ImageEditsDefinition, ImageEditsDefinition>();\r\n\r\n  public project: Project | undefined = undefined;\r\n\r\n  public get stackPosition() {\r\n    return this.data?.stackPosition;\r\n  }\r\n\r\n  public set stackPosition(newStackPosition: number | undefined) {\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.data.stackPosition = newStackPosition;\r\n  }\r\n\r\n  public get backgroundItem() {\r\n    let backgroundItem = this._backgroundItem;\r\n    if (backgroundItem) {\r\n      return backgroundItem;\r\n    }\r\n\r\n    if (!this.data) {\r\n      return undefined;\r\n    }\r\n\r\n    backgroundItem = new ImageItem({\r\n      origin: { x: 0, y: 0 },\r\n      type: 2,\r\n      coords: [],\r\n    });\r\n\r\n    this._backgroundItem = backgroundItem;\r\n\r\n    return backgroundItem;\r\n  }\r\n\r\n  public ensureBackgroundItem(imageData: IImageItem) {\r\n    if (!this._backgroundItem) {\r\n      this._backgroundItem = new ImageItem(imageData);\r\n    } else {\r\n      this._backgroundItem.data = imageData;\r\n    }\r\n\r\n    if (!this.data) {\r\n      this.data = {\r\n        items: [],\r\n      };\r\n    }\r\n\r\n    this.data.backgroundItem = this._backgroundItem.data;\r\n\r\n    return this._backgroundItem;\r\n  }\r\n\r\n  public get height() {\r\n    if (!this.data || !this.data.height) {\r\n      return 64;\r\n    }\r\n\r\n    return this.data.height;\r\n  }\r\n\r\n  public set height(height: number) {\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.data.height = height;\r\n  }\r\n\r\n  public get width() {\r\n    if (!this.data || !this.data.width) {\r\n      return 64;\r\n    }\r\n\r\n    return this.data.width;\r\n  }\r\n\r\n  public set width(width: number) {\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.data.width = width;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get outputs() {\r\n    if (!this.data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this.data.outputs;\r\n  }\r\n\r\n  private ensureData(): IImageEditor {\r\n    if (!this.data) {\r\n      this.data = {\r\n        items: [],\r\n      };\r\n    }\r\n\r\n    if (!this.data.items) {\r\n      this.data.items = [];\r\n    }\r\n\r\n    return this.data;\r\n  }\r\n\r\n  async updateOutputs(project: Project) {\r\n    if (!this.data?.outputs) {\r\n      return;\r\n    }\r\n\r\n    for (const output of this.data.outputs) {\r\n      await this.updateOutput(project, output);\r\n    }\r\n  }\r\n\r\n  async getCorrespondingResourcePackFolder() {\r\n    if (!this.project) {\r\n      return undefined;\r\n    }\r\n\r\n    let rpFolder = await this.project?.getDefaultResourcePackFolder();\r\n\r\n    return rpFolder;\r\n  }\r\n\r\n  async getPaintingOverrideFolder() {\r\n    let rpFolder = await this.getCorrespondingResourcePackFolder();\r\n\r\n    if (!rpFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._file) {\r\n      return undefined;\r\n    }\r\n\r\n    rpFolder = await rpFolder.ensureFolderFromRelativePath(\"/textures/painting/\");\r\n\r\n    return rpFolder;\r\n  }\r\n\r\n  async getCorrespondingBlockTextureFolder() {\r\n    let rpFolder = await this.getCorrespondingResourcePackFolder();\r\n\r\n    if (!rpFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!this._file) {\r\n      return undefined;\r\n    }\r\n\r\n    rpFolder = await rpFolder.ensureFolderFromRelativePath(\"/textures/blocks/\");\r\n\r\n    const subPath = StorageUtilities.getBaseFromName(this._file?.name);\r\n\r\n    rpFolder = rpFolder?.ensureFolder(subPath);\r\n\r\n    return rpFolder;\r\n  }\r\n\r\n  async updateOutput(project: Project, output: IImageOutput) {\r\n    if (output.name) {\r\n      if (output.type === ImageOutputType.blockBillboard3x3) {\r\n        await this.updateBlocks(project, output.name, 3, 3);\r\n      } else if (output.type === ImageOutputType.blockBillboard4x6) {\r\n        await this.updateBlocks(project, output.name, 6, 4);\r\n      } else if (output.type === ImageOutputType.blockBillboard5x8) {\r\n        await this.updateBlocks(project, output.name, 8, 5);\r\n      }\r\n    }\r\n  }\r\n\r\n  async setFromCreationData(creationData: IImageEdits) {\r\n    if (!this.data) {\r\n      if (creationData.items === undefined) {\r\n        creationData.items = [];\r\n      }\r\n\r\n      this.data = creationData;\r\n    }\r\n\r\n    if (creationData.outputs) {\r\n      this.data.outputs = creationData.outputs;\r\n    }\r\n\r\n    if (creationData.width) {\r\n      this.data.width = creationData.width;\r\n    }\r\n\r\n    if (creationData.height) {\r\n      this.data.height = creationData.height;\r\n    }\r\n\r\n    await this.persist();\r\n  }\r\n\r\n  static getPaintingWidth(paintingSize: PaintingSize) {\r\n    switch (paintingSize) {\r\n      case PaintingSize.threeByThree:\r\n      case PaintingSize.threeByFourPortrait:\r\n        return 48;\r\n    }\r\n\r\n    return 16;\r\n  }\r\n\r\n  static getPaintingHeight(paintingSize: PaintingSize) {\r\n    switch (paintingSize) {\r\n      case PaintingSize.oneBlock:\r\n        return 16;\r\n      case PaintingSize.threeByThree:\r\n        return 48;\r\n      case PaintingSize.threeByFourPortrait:\r\n        return 64;\r\n    }\r\n\r\n    return 16;\r\n  }\r\n\r\n  async updateBlocks(project: Project, name: string, width: number, height: number) {\r\n    const blockTextureFolder = await this.getCorrespondingBlockTextureFolder();\r\n\r\n    if (!blockTextureFolder) {\r\n      return;\r\n    }\r\n    for (let i = 0; i < height; i++) {\r\n      for (let j = 0; j < width; j++) {\r\n        const targetName = name + \"_r\" + String(i + 1) + \"c\" + String(j + 1);\r\n\r\n        let item = ProjectItemUtilities.getItemByTypeAndName(project, targetName, ProjectItemType.blockTypeBehavior);\r\n\r\n        if (!item) {\r\n          const galleryItem = await project.creatorTools.getGalleryProjectById(\"basicDieBlock\");\r\n\r\n          if (galleryItem) {\r\n            await ProjectItemCreateManager.addFromGallery(project, targetName, galleryItem);\r\n          }\r\n\r\n          item = ProjectItemUtilities.getItemByTypeAndName(project, targetName, ProjectItemType.blockTypeBehavior);\r\n        }\r\n\r\n        if (item) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (item.primaryFile) {\r\n            const blockType = await BlockTypeDefinition.ensureOnFile(item.primaryFile);\r\n\r\n            if (blockType && blockTextureFolder.parentFolder) {\r\n              const imageFile = blockTextureFolder.ensureFile(targetName + \".png\");\r\n\r\n              let parentFolder = blockTextureFolder;\r\n\r\n              while (\r\n                parentFolder.parentFolder !== undefined &&\r\n                parentFolder.parentFolder !== null &&\r\n                parentFolder.name.toLowerCase() !== \"textures\"\r\n              ) {\r\n                parentFolder = parentFolder.parentFolder;\r\n              }\r\n\r\n              // go one above textures if possible\r\n              if (parentFolder.parentFolder) {\r\n                parentFolder = parentFolder.parentFolder;\r\n              }\r\n\r\n              let frPath = imageFile.getFolderRelativePath(parentFolder);\r\n\r\n              if (frPath) {\r\n                await blockType.setBlockCatalogTexture(project, \"north\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"east\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"south\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"west\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"up\", targetName);\r\n                await blockType.setBlockCatalogTexture(project, \"down\", targetName);\r\n\r\n                if (frPath.endsWith(\".png\")) {\r\n                  frPath = frPath.substring(0, frPath.length - 4);\r\n                }\r\n\r\n                frPath = Utilities.ensureNotStartsWithSlash(frPath);\r\n\r\n                await blockType.setTerrainTexture(project, targetName, {\r\n                  textures: [{ path: frPath, overlay_color: \"#8ab689\" }],\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addNewDrawingItem(item: ImageItem) {\r\n    let data = this.data;\r\n\r\n    if (!data) {\r\n      data = this.ensureData();\r\n    }\r\n\r\n    if (data.stackPosition !== undefined) {\r\n      this.items = this.items.slice(0, data.stackPosition);\r\n      data.items = data.items.slice(0, data.stackPosition);\r\n\r\n      this.stackPosition = undefined;\r\n    }\r\n\r\n    data.items.push(item.data);\r\n    this.items.push(item);\r\n  }\r\n\r\n  static async ensureAsAccessoryOnImageProjectItem(projectItem: ProjectItem) {\r\n    const accessoryFolder = await projectItem.ensureAccessoryFolder();\r\n\r\n    const imageFile = accessoryFolder.ensureFile(\"image_edits.json\");\r\n\r\n    return await ImageEditsDefinition.ensureOnFile(imageFile, projectItem.project);\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    project: Project,\r\n    loadHandler?: IEventHandler<ImageEditsDefinition, ImageEditsDefinition>\r\n  ) {\r\n    let imageEdits: ImageEditsDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      imageEdits = new ImageEditsDefinition();\r\n\r\n      imageEdits.project = project;\r\n      imageEdits.file = file;\r\n\r\n      file.manager = imageEdits;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof ImageEditsDefinition) {\r\n      imageEdits = file.manager as ImageEditsDefinition;\r\n\r\n      if (!imageEdits.isLoaded && loadHandler) {\r\n        imageEdits.onLoaded.subscribe(loadHandler);\r\n      }\r\n\r\n      await imageEdits.load();\r\n\r\n      return imageEdits;\r\n    }\r\n\r\n    return imageEdits;\r\n  }\r\n\r\n  async persist(): Promise<boolean> {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    await this.persist();\r\n\r\n    await this._file.saveContent(false);\r\n  }\r\n\r\n  _loadFromItems() {\r\n    this.items = [];\r\n\r\n    if (this.data?.backgroundItem) {\r\n      this._backgroundItem = new ImageItem(this.data.backgroundItem);\r\n    }\r\n\r\n    if (this.data?.items) {\r\n      for (const dataItem of this.data?.items) {\r\n        this.items.push(new ImageItem(dataItem));\r\n      }\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      return;\r\n    }\r\n\r\n    this.id = this._file.name;\r\n\r\n    this.data = StorageUtilities.getJsonObject(this._file);\r\n    this._loadFromItems();\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport SemanticVersion from \"../core/versioning/SemanticVersion\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport DesignManifestDefinition from \"../minecraft/DesignManifestDefinition\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport SkinManifestDefinition from \"../minecraft/SkinManifestDefinition\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ProjectRole } from \"./IProjectData\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { AUTOGENERATED_CONTENT_TOKEN, FolderContext } from \"./Project\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\n\r\nexport default class ProjectItemInference {\r\n  static async inferProjectItemsFromFolder(\r\n    project: Project,\r\n    folder: IFolder,\r\n    fileSystemPrefix: string,\r\n    folderContext: FolderContext,\r\n    variantLabel: string | undefined,\r\n    isInWorld: boolean,\r\n    rootFolder: IFolder,\r\n    depth: number,\r\n    source?: string,\r\n    force?: boolean,\r\n    processingCallback?: (area: string) => void\r\n  ) {\r\n    if (\r\n      project.projectFolder === null ||\r\n      (folder.name.startsWith(\".\") && !folder.name.startsWith(\".vscode\") && !folder.name.startsWith(\".mct\"))\r\n    ) {\r\n      Log.debugAlert(\"Could not process folder: \" + folder.storageRelativePath);\r\n      return;\r\n    }\r\n\r\n    if (processingCallback) {\r\n      processingCallback(\"Scanning '\" + folder.storageRelativePath + \"' for Minecraft project items.\");\r\n    }\r\n\r\n    await folder.load(force ? force : false);\r\n\r\n    let parentFolder = folder.parentFolder;\r\n\r\n    if (parentFolder === project.projectFolder.parentFolder) {\r\n      parentFolder = null;\r\n    }\r\n\r\n    const folderPathCanon = StorageUtilities.canonicalizePath(\r\n      StorageUtilities.getFolderPath(folder.storageRelativePath)\r\n    );\r\n\r\n    // if we're inside of an MCPack or zip, the folder is \"/\" but the name of the mcpack file potentially\r\n    // provides hints, so scoop out the name of the parent zip\r\n    let basePathName = folderPathCanon;\r\n\r\n    if (basePathName === \"/\" && folder.extendedPath.length > 1) {\r\n      basePathName = StorageUtilities.getAvailableFolderName(folder);\r\n    }\r\n\r\n    const parentIsPacksRoot =\r\n      parentFolder !== null &&\r\n      parentFolder.name.indexOf(\"_packs\") >= 0 &&\r\n      (folderContext === FolderContext.behaviorPack ||\r\n        folderContext === FolderContext.resourcePack ||\r\n        folderContext === FolderContext.skinPack);\r\n\r\n    const lastUnderscore = folder.storageRelativePath.lastIndexOf(\"_\");\r\n\r\n    if (!variantLabel && lastUnderscore >= 0 && parentIsPacksRoot) {\r\n      // vanilla stores folders like:\r\n      // chemistry\r\n      // chemistry_1.20.50\r\n      // chemistry_1.20.60\r\n      // unify version variants with their parent\r\n\r\n      let potentialVersionSection = folder.storageRelativePath.substring(lastUnderscore + 1);\r\n\r\n      if (potentialVersionSection.endsWith(\"/\")) {\r\n        potentialVersionSection = potentialVersionSection.substring(0, potentialVersionSection.length - 1);\r\n      }\r\n\r\n      if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n        variantLabel = potentialVersionSection;\r\n      }\r\n    }\r\n\r\n    if (\r\n      folderPathCanon.indexOf(\"/checkpoint_input\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/metadata\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/type_definitions\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/typedefs\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/script_modules/\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/vanilladata_modules/\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/engine_modules/\") >= 0 ||\r\n      folderPathCanon.indexOf(\"/command_modules/\") >= 0\r\n    ) {\r\n      folderContext = FolderContext.typeDefs;\r\n    } else if (folderPathCanon.indexOf(\"/data/\") >= 0 || folderPathCanon.indexOf(\"/forms/\") >= 0) {\r\n      folderContext = FolderContext.metaData;\r\n    } else if (folderPathCanon.indexOf(\"/.vscode\") >= 0) {\r\n      folderContext = FolderContext.vscodeFolder;\r\n    } else if (folderPathCanon.indexOf(\"/.mct\") >= 0) {\r\n      folderContext = FolderContext.mctoolsWorkingFolder;\r\n    } else if (MinecraftUtilities.pathLooksLikeBehaviorPackName(basePathName)) {\r\n      folderContext = FolderContext.behaviorPack;\r\n    } else if (MinecraftUtilities.pathLooksLikeDesignPackName(basePathName)) {\r\n      folderContext = FolderContext.designPack;\r\n    } else if (MinecraftUtilities.pathLooksLikeSubPacksFolderName(basePathName)) {\r\n      // note this check must be above the .resourcePack check\r\n      folderContext = FolderContext.resourcePackSubPack;\r\n    } else if (MinecraftUtilities.pathLooksLikeResourcePackName(basePathName)) {\r\n      folderContext = FolderContext.resourcePack;\r\n    } else if (MinecraftUtilities.pathLooksLikeSkinPackName(basePathName) && folderContext === FolderContext.unknown) {\r\n      folderContext = FolderContext.skinPack;\r\n    } else if (\r\n      MinecraftUtilities.pathLooksLikePersonaPackName(basePathName) &&\r\n      folderContext === FolderContext.unknown\r\n    ) {\r\n      folderContext = FolderContext.persona;\r\n    } else if (\r\n      MinecraftUtilities.pathLooksLikeWorldFolderName(basePathName) &&\r\n      folderContext === FolderContext.unknown\r\n    ) {\r\n      folderContext = FolderContext.world;\r\n      isInWorld = true;\r\n    } else if (\r\n      (folderPathCanon.indexOf(\"/docs/\") >= 0 ||\r\n        folderPathCanon.indexOf(\"/@minecraft/\") >= 0 ||\r\n        folderPathCanon.indexOf(\"/mojang-commands\") >= 0) &&\r\n      folderContext === FolderContext.unknown\r\n    ) {\r\n      folderContext = FolderContext.docs;\r\n\r\n      if (project.docsContainer === null) {\r\n        project.docsContainer = folder.parentFolder;\r\n      }\r\n    }\r\n\r\n    if (\r\n      folderContext === FolderContext.unknown &&\r\n      (folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"]) &&\r\n      folder.files[\"skins.json\"]\r\n    ) {\r\n      folderContext = FolderContext.skinPack;\r\n    }\r\n\r\n    if (\r\n      folderContext === FolderContext.unknown &&\r\n      (folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"]) &&\r\n      !folder.files[\"level.dat\"] &&\r\n      !folder.files[\"levelname.txt\"]\r\n    ) {\r\n      for (const folderName in folder.folders) {\r\n        if (folderName) {\r\n          if (folderName.toLowerCase() === \"persona\" || folderName.toLowerCase().startsWith(\"persona_\")) {\r\n            folderContext = FolderContext.persona;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      folderContext === FolderContext.unknown &&\r\n      (folder.files[\"manifest.json\"] || folder.files[\"pack_manifest.json\"]) &&\r\n      !folder.files[\"level.dat\"] &&\r\n      !folder.files[\"levelname.txt\"]\r\n    ) {\r\n      if (\r\n        folder.folders[\"models\"] ||\r\n        folder.folders[\"textures\"] ||\r\n        folder.folders[\"lighting\"] ||\r\n        folder.folders[\"subpacks\"] ||\r\n        folder.folders[\"assets\"] ||\r\n        folder.folders[\"sounds\"] ||\r\n        folder.folders[\"texture_sets\"] ||\r\n        folder.folders[\"sounds\"] ||\r\n        folder.folders[\"ui\"]\r\n      ) {\r\n        folderContext = FolderContext.resourcePack;\r\n      } else if (\r\n        folder.folders[\"scripts\"] ||\r\n        folder.folders[\"features\"] ||\r\n        folder.folders[\"entities\"] ||\r\n        folder.folders[\"loot_tables\"] ||\r\n        folder.folders[\"spawn_rules\"] ||\r\n        folder.folders[\"functions\"] ||\r\n        folder.folders[\"structures\"] ||\r\n        folder.folders[\"recipes\"] ||\r\n        folder.folders[\"trading\"] ||\r\n        folder.folders[\"feature_rules\"] ||\r\n        MinecraftUtilities.pathLooksLikeBehaviorPackName(basePathName)\r\n      ) {\r\n        folderContext = FolderContext.behaviorPack;\r\n      } else if (MinecraftUtilities.pathLooksLikeResourcePackName(basePathName)) {\r\n        folderContext = FolderContext.resourcePack;\r\n      } else if (MinecraftUtilities.pathLooksLikeDesignPackName(basePathName)) {\r\n        folderContext = FolderContext.designPack;\r\n      } else {\r\n        const manifestFile = folder.files[\"manifest.json\"];\r\n\r\n        if (manifestFile) {\r\n          if (!manifestFile?.isContentLoaded) {\r\n            await manifestFile?.loadContent();\r\n          }\r\n\r\n          const obj = StorageUtilities.getJsonObject(manifestFile);\r\n\r\n          if (obj) {\r\n            let modules = obj[\"modules\"];\r\n\r\n            if (modules) {\r\n              for (const module of modules) {\r\n                if (module.type === \"resources\") {\r\n                  folderContext = FolderContext.resourcePack;\r\n                } else if (module.type === \"script\") {\r\n                  folderContext = FolderContext.behaviorPack;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (\r\n      folder.files[\"world_behavior_packs.json\"] ||\r\n      folder.files[\"world_resource_packs.json\"] ||\r\n      folder.files[\"levelname.txt\"]\r\n    ) {\r\n      if (folderContext === FolderContext.unknown) {\r\n        folderContext = FolderContext.world;\r\n      }\r\n\r\n      if (folder.parentFolder && !project.worldContainer) {\r\n        project.worldContainer = folder.parentFolder;\r\n      }\r\n    }\r\n\r\n    for (const fileName in folder.files) {\r\n      const canonFileName = StorageUtilities.canonicalizeName(fileName);\r\n      // console.log(\"Considering \" + canonFileName + \" in folder \" + folder.storageRelativePath);\r\n\r\n      if (canonFileName !== \"gulpfile.js\" && canonFileName !== \"package-lock.json\") {\r\n        const candidateFile = folder.files[fileName];\r\n\r\n        if (candidateFile !== undefined) {\r\n          let pi = null;\r\n          let projectPath = undefined;\r\n\r\n          if (fileSystemPrefix.length > 0) {\r\n            projectPath = fileSystemPrefix + candidateFile.fullPath;\r\n            pi = project.getItemByProjectPath(projectPath);\r\n          } else {\r\n            const frPath = candidateFile.getFolderRelativePath(rootFolder);\r\n\r\n            if (frPath !== undefined) {\r\n              projectPath = StorageUtilities.canonicalizePath(frPath);\r\n\r\n              pi = project.getItemByProjectPath(projectPath);\r\n            }\r\n          }\r\n\r\n          if ((pi === undefined || pi === null) && projectPath !== undefined) {\r\n            const fileExtension = candidateFile.type ? candidateFile.type.toLowerCase() : candidateFile.type;\r\n            const baseName = StorageUtilities.getBaseFromName(candidateFile.name);\r\n            const folderPath = StorageUtilities.canonicalizePath(StorageUtilities.getFolderPath(projectPath));\r\n            const folderPathLower = folderPath.toLowerCase();\r\n            const projectPathLower = projectPath.toLowerCase();\r\n            const isResourcePack =\r\n              folderContext === FolderContext.resourcePack || folderContext === FolderContext.resourcePackSubPack;\r\n\r\n            if (canonFileName === \"manifest.json\" || canonFileName === \"pack_manifest.json\") {\r\n              if (folderContext === FolderContext.world) {\r\n                project.defaultWorldFolder = folder;\r\n                project.worldContainer = parentFolder;\r\n              }\r\n\r\n              if (!candidateFile.isContentLoaded) {\r\n                await candidateFile.loadContent(false);\r\n              }\r\n\r\n              let newPiType = ProjectItemType.unknown;\r\n              let tag = \"\";\r\n\r\n              if (folderContext === FolderContext.behaviorPack) {\r\n                newPiType = ProjectItemType.behaviorPackManifestJson;\r\n                tag = \"behaviorpackmanifest\";\r\n              } else if (folderContext === FolderContext.resourcePack) {\r\n                newPiType = ProjectItemType.resourcePackManifestJson;\r\n                tag = \"resourcepackmanifest\";\r\n              } else if (folderContext === FolderContext.designPack) {\r\n                newPiType = ProjectItemType.designPackManifestJson;\r\n                tag = \"designpackmanifest\";\r\n              } else if (folderContext === FolderContext.skinPack) {\r\n                newPiType = ProjectItemType.skinPackManifestJson;\r\n                tag = \"skinpackmanifest\";\r\n              } else if (folderContext === FolderContext.persona) {\r\n                newPiType = ProjectItemType.personaManifestJson;\r\n                tag = \"personapackmanifest\";\r\n              } else if (folderContext === FolderContext.world) {\r\n                newPiType = ProjectItemType.worldTemplateManifestJson;\r\n                tag = \"worldtemplatemanifest\";\r\n              }\r\n\r\n              if (\r\n                candidateFile.content !== undefined &&\r\n                candidateFile.content !== \"\" &&\r\n                !variantLabel &&\r\n                typeof candidateFile.content === \"string\"\r\n              ) {\r\n                if (newPiType === ProjectItemType.behaviorPackManifestJson) {\r\n                  const bpManifest = await BehaviorManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (bpManifest && bpManifest.id) {\r\n                    project.defaultBehaviorPackUniqueId = bpManifest.id;\r\n\r\n                    if (bpManifest.name && !Utilities.isLikelyLocalizationKey(bpManifest.name)) {\r\n                      project.title = bpManifest.name;\r\n                    }\r\n\r\n                    if (bpManifest.description && !Utilities.isLikelyLocalizationKey(bpManifest.description)) {\r\n                      project.description = bpManifest.description;\r\n                    }\r\n\r\n                    if (bpManifest.version) {\r\n                      const sv = SemanticVersion.from(bpManifest.version);\r\n\r\n                      if (sv) {\r\n                        project.defaultBehaviorPackVersion = sv.asArray();\r\n\r\n                        if (\r\n                          project.defaultBehaviorPackVersion !== undefined &&\r\n                          project.defaultBehaviorPackVersion.length >= 3\r\n                        ) {\r\n                          project.versionMajor = project.defaultBehaviorPackVersion[0];\r\n                          project.versionMinor = project.defaultBehaviorPackVersion[1];\r\n                          project.versionPatch = project.defaultBehaviorPackVersion[2];\r\n                        }\r\n                      }\r\n                    }\r\n                    project.defaultBehaviorPackFolder = folder;\r\n                    project.behaviorPacksContainer = parentFolder;\r\n\r\n                    const scriptModuleId = bpManifest.getScriptModule()?.uuid;\r\n                    if (scriptModuleId) {\r\n                      project.defaultScriptModuleUniqueId = scriptModuleId;\r\n                    }\r\n\r\n                    project.ensurePackByFolder(folder, PackType.behavior, isInWorld);\r\n                  }\r\n                } else if (newPiType === ProjectItemType.resourcePackManifestJson) {\r\n                  const rpManifest = await ResourceManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (rpManifest && rpManifest.id) {\r\n                    project.defaultResourcePackUniqueId = rpManifest.id;\r\n\r\n                    if (rpManifest.name && !Utilities.isLikelyLocalizationKey(rpManifest.name)) {\r\n                      project.title = rpManifest.name;\r\n                    }\r\n\r\n                    if (rpManifest.description && !Utilities.isLikelyLocalizationKey(rpManifest.description)) {\r\n                      project.description = rpManifest.description;\r\n                    }\r\n\r\n                    if (rpManifest.version) {\r\n                      const sv = SemanticVersion.from(rpManifest.version);\r\n\r\n                      if (sv) {\r\n                        project.defaultResourcePackVersion = sv.asArray();\r\n\r\n                        if (\r\n                          project.defaultResourcePackVersion !== undefined &&\r\n                          project.defaultResourcePackVersion.length >= 3\r\n                        ) {\r\n                          project.versionMajor = project.defaultResourcePackVersion[0];\r\n                          project.versionMinor = project.defaultResourcePackVersion[1];\r\n                          project.versionPatch = project.defaultResourcePackVersion[2];\r\n                        }\r\n                      }\r\n                    }\r\n                    project.defaultResourcePackFolder = folder;\r\n                    project.resourcePacksContainer = parentFolder;\r\n\r\n                    const subpacks = rpManifest.subpacks;\r\n\r\n                    if (subpacks) {\r\n                      for (const subpack of subpacks) {\r\n                        if (subpack.folder_name) {\r\n                          const pv = project.ensureVariant(subpack.folder_name);\r\n\r\n                          if (subpack.memory_performance_tier !== undefined) {\r\n                            pv.memoryPerformanceTier = subpack.memory_performance_tier;\r\n                          }\r\n\r\n                          if (subpack.memory_tier !== undefined) {\r\n                            pv.memoryTier = subpack.memory_tier;\r\n                          }\r\n\r\n                          if (subpack.name) {\r\n                            pv.title = subpack.name;\r\n                          }\r\n                        }\r\n                      }\r\n                    }\r\n\r\n                    project.ensurePackByFolder(folder, PackType.resource, isInWorld);\r\n                  }\r\n                } else if (newPiType === ProjectItemType.skinPackManifestJson) {\r\n                  const spManifest = await SkinManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (spManifest) {\r\n                    if (spManifest.name && !Utilities.isLikelyLocalizationKey(spManifest.name)) {\r\n                      project.title = spManifest.name;\r\n                    }\r\n\r\n                    if (spManifest.description && !Utilities.isLikelyLocalizationKey(spManifest.description)) {\r\n                      project.description = spManifest.description;\r\n                    }\r\n\r\n                    project.defaultSkinPackFolder = folder;\r\n                    project.skinPacksContainer = parentFolder;\r\n\r\n                    project.ensurePackByFolder(folder, PackType.skin, isInWorld);\r\n                  }\r\n                } else if (newPiType === ProjectItemType.designPackManifestJson) {\r\n                  const dpManifest = await DesignManifestDefinition.ensureOnFile(candidateFile);\r\n                  if (dpManifest) {\r\n                    if (dpManifest.name && !Utilities.isLikelyLocalizationKey(dpManifest.name)) {\r\n                      project.title = dpManifest.name;\r\n                    }\r\n\r\n                    if (dpManifest.description && !Utilities.isLikelyLocalizationKey(dpManifest.description)) {\r\n                      project.description = dpManifest.description;\r\n                    }\r\n\r\n                    project.defaultDesignPackFolder = folder;\r\n                    project.designPacksContainer = parentFolder;\r\n\r\n                    project.ensurePackByFolder(folder, PackType.design, isInWorld);\r\n                  }\r\n                }\r\n              }\r\n\r\n              // Log.assert(newPiType !== ProjectItemType.unknown, \"Unknown manifest.json file found.\");\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                newPiType,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                tag,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"/scripts/index.js\")) {\r\n              if (!candidateFile.isContentLoaded) {\r\n                await candidateFile.loadContent();\r\n              }\r\n\r\n              let creationType = ProjectItemCreationType.normal;\r\n\r\n              if (\r\n                candidateFile.content === undefined ||\r\n                candidateFile.content === \"\" ||\r\n                (typeof candidateFile.content === \"string\" &&\r\n                  candidateFile.content.indexOf(AUTOGENERATED_CONTENT_TOKEN) >= 0)\r\n              ) {\r\n                creationType = ProjectItemCreationType.generated;\r\n              }\r\n\r\n              project.ensureItemByTag(\r\n                \"jsindex\",\r\n                \"index.js\",\r\n                ProjectItemType.catalogIndexJs,\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                creationType,\r\n                candidateFile,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              projectPathLower.endsWith(\".mctp.json\") &&\r\n              folderContext === FolderContext.mctoolsWorkingFolder\r\n            ) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.mcToolsProjectPreferences,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"tasks.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeTasksJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"launch.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeLaunchJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"settings.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeSettingsJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"extensions.json\") && folderContext === FolderContext.vscodeFolder) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.vsCodeExtensionsJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (projectPathLower.endsWith(\"/tick.json\")) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.tickJson,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              projectPathLower.endsWith(\"/levelname.txt\") ||\r\n              projectPathLower.endsWith(\"/current\") ||\r\n              projectPathLower.endsWith(\"/log\") ||\r\n              projectPathLower.endsWith(\"/log.old\") ||\r\n              projectPathLower.endsWith(\"/lock\") ||\r\n              projectPathLower.indexOf(\"/db/manifest\") >= 0 ||\r\n              projectPathLower.indexOf(\"/db/lost/manifest\") >= 0\r\n            ) {\r\n              // don't explicitly create an item for constituent world files at the moment\r\n            } else if (fileExtension === \"ldb\" || fileExtension === \"log\") {\r\n              // don't explicitly create an item for ldb or log files at the moment.\r\n            } else if (fileExtension === \"mcstructure\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.structure,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"mcfunction\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCFunction,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"material\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.material,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"vertex\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialVertex,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"md\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.markdownDocumentation,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"fragment\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialFragment,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"fragment\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialFragment,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"geometry\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.materialGeometry,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              canonFileName === \"level.dat\" &&\r\n              fileSystemPrefix.indexOf(\".mcworld\") < 0 && // don't create a project item if we're inside of a mcworld/mctemplate since that broader item has a link already\r\n              fileSystemPrefix.indexOf(\".mctemplate\") < 0 &&\r\n              folderContext !== FolderContext.behaviorPack\r\n            ) {\r\n              isInWorld = true;\r\n              project.ensureItemByProjectPath(\r\n                folderPath,\r\n                ProjectItemStorageType.folder,\r\n                candidateFile.name,\r\n                ProjectItemType.worldFolder,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName === \"level.dat_old\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.levelDatOld,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName.endsWith(\".js.map\")) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.jsMap,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName === \"just.config.ts\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.justConfigTs,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (canonFileName === \"eslint.config.mjs\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.esLintConfigMjs,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"js\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.js,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"ts\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.ts,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"mcworld\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCWorld,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mcproject\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCProject,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mctemplate\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCTemplate,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mcaddon\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCAddon,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"mcpack\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.MCPack,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (fileExtension === \"zip\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.zip,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            } else if (\r\n              fileExtension === \"png\" ||\r\n              fileExtension === \"jpg\" ||\r\n              fileExtension === \"gif\" ||\r\n              fileExtension === \"psd\" ||\r\n              fileExtension === \"hdr\" ||\r\n              fileExtension === \"jpeg\" ||\r\n              fileExtension === \"tga\"\r\n            ) {\r\n              let imageType = ProjectItemType.image;\r\n\r\n              if (folderPathLower.indexOf(\"/marketing art/\") >= 0) {\r\n                imageType = ProjectItemType.marketingAssetImage;\r\n              } else if (folderPathLower.indexOf(\"/store art/\") >= 0) {\r\n                imageType = ProjectItemType.storeAssetImage;\r\n              } else if (folderPathLower.indexOf(\"/textures/ui/\") >= 0) {\r\n                imageType = ProjectItemType.uiTexture;\r\n              } else if (folderPathLower.indexOf(\"/design_textures/\") >= 0) {\r\n                imageType = ProjectItemType.designTexture;\r\n              } else if (folderPathLower.indexOf(\"/textures/\") >= 0 || folderContext === FolderContext.skinPack) {\r\n                imageType = ProjectItemType.texture;\r\n              } else if (baseName === \"pack_icon\" || folder.files[\"manifest.json\"]) {\r\n                imageType = ProjectItemType.packIconImage;\r\n              }\r\n\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                imageType,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (\r\n              fileExtension === \"ogg\" ||\r\n              fileExtension === \"flac\" ||\r\n              fileExtension === \"fsb\" ||\r\n              fileExtension === \"mp3\" ||\r\n              fileExtension === \"wav\"\r\n            ) {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.audio,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"env\" && baseName === \"\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.env,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"lang\") {\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                candidateFile.name,\r\n                ProjectItemType.lang,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else if (fileExtension === \"json\") {\r\n              let newJsonType = ProjectItemType.unknownJson;\r\n              let itemName = candidateFile.name;\r\n\r\n              if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/loot_tables/\") >= 0) {\r\n                newJsonType = ProjectItemType.lootTableBehavior;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/dialogue/\") >= 0) {\r\n                newJsonType = ProjectItemType.dialogueBehaviorJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/recipes/\") >= 0) {\r\n                newJsonType = ProjectItemType.recipeBehavior;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/spawn_rules/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.spawnRuleBehavior;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/cameras/\") >= 0 &&\r\n                folderPathLower.indexOf(\"aim_assist_preset\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.aimAssistPresetJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/aim_assist/categories/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.aimAssistCategoryJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/aim_assist/presets/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.aimAssistPresetJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/behavior_trees/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.behaviorTreeJson;\r\n              } else if (folderPathLower.indexOf(\"/spawn_groups/\") >= 0) {\r\n                newJsonType = ProjectItemType.spawnGroupJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/atmospherics/\") >= 0) {\r\n                newJsonType = ProjectItemType.atmosphericsJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/point_lights/\") >= 0) {\r\n                newJsonType = ProjectItemType.pointLightsJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/color_grading/\") >= 0) {\r\n                newJsonType = ProjectItemType.colorGradingJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/cameras/\") >= 0) {\r\n                newJsonType = ProjectItemType.cameraBehaviorJson;\r\n              } else if (folderContext === FolderContext.resourcePack && folderPathLower.indexOf(\"/cameras/\") >= 0) {\r\n                newJsonType = ProjectItemType.cameraResourceJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/trading/\") >= 0) {\r\n                newJsonType = ProjectItemType.tradingBehaviorJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/animation_controllers/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.animationControllerBehaviorJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/animations/\") >= 0) {\r\n                newJsonType = ProjectItemType.animationBehaviorJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\".texture_set.json\")) {\r\n                // Check for texture_set.json BEFORE /models/ check - texture_set files can exist in /models/ folders\r\n                // (e.g., /textures/models/armor/chain_1.texture_set.json)\r\n                newJsonType = ProjectItemType.textureSetJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                !baseName.endsWith(\"index\") && // Skip index.json files - they're directory indices, not geometry\r\n                (folderPathLower.indexOf(\"/models/\") >= 0 ||\r\n                  baseName.endsWith(\".geo\") ||\r\n                  baseName.endsWith(\".geometry\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.modelGeometryJson;\r\n              } else if (baseName.endsWith(\".mci\")) {\r\n                newJsonType = ProjectItemType.contentIndexJson;\r\n              } else if (baseName.endsWith(\".mcr\")) {\r\n                newJsonType = ProjectItemType.contentReportJson;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/dimension/\") >= 0) {\r\n                newJsonType = ProjectItemType.dimensionJson;\r\n              } else if (\r\n                (folderContext === FolderContext.behaviorPack || folderContext === FolderContext.unknown) &&\r\n                folderPathLower.indexOf(\"/features/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.featureBehavior;\r\n              } else if (\r\n                (folderContext === FolderContext.behaviorPack || folderContext === FolderContext.unknown) &&\r\n                folderPathLower.indexOf(\"/feature_rules/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.featureRuleBehavior;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/shapes/\") >= 0) {\r\n                newJsonType = ProjectItemType.voxelShapeBehavior;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/animation_controllers/\") >= 0) {\r\n                newJsonType = ProjectItemType.animationControllerResourceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/animations/\") >= 0) {\r\n                newJsonType = ProjectItemType.animationResourceJson;\r\n              } else if (folderPathLower.indexOf(\"/attachables/\") >= 0) {\r\n                newJsonType = ProjectItemType.attachableResourceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/fogs/\") >= 0) {\r\n                newJsonType = ProjectItemType.fogResourceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/particles/\") >= 0) {\r\n                newJsonType = ProjectItemType.particleJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/render_controllers/\") >= 0) {\r\n                newJsonType = ProjectItemType.renderControllerJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/block_culling/\") >= 0) {\r\n                newJsonType = ProjectItemType.blockCulling;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                projectPathLower.indexOf(\"/item_catalog/crafting_item_catalog\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.craftingItemCatalog;\r\n              } else if (\r\n                isResourcePack &&\r\n                (projectPathLower.endsWith(\"terrain_texture.json\") ||\r\n                  projectPathLower.endsWith(\"terrain_textures.json\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.terrainTextureCatalogResourceJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\"_global_variables.json\")) {\r\n                newJsonType = ProjectItemType.globalVariablesJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\"flipbook_textures.json\")) {\r\n                newJsonType = ProjectItemType.flipbookTexturesJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                (projectPathLower.endsWith(\"item_texture.json\") || projectPathLower.endsWith(\"item_textures.json\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.itemTextureJson;\r\n              } else if (baseName === \"contents\") {\r\n                newJsonType = ProjectItemType.contentsJson;\r\n              } else if (folderContext === FolderContext.skinPack && projectPathLower.endsWith(\"skins.json\")) {\r\n                newJsonType = ProjectItemType.skinCatalogJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/materials/\") >= 0) {\r\n                newJsonType = ProjectItemType.materialSetJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                folderPathLower.indexOf(\"/sounds/\") >= 0 &&\r\n                baseName === \"sound_definitions\"\r\n              ) {\r\n                newJsonType = ProjectItemType.soundDefinitionCatalog;\r\n              } else if (\r\n                isResourcePack &&\r\n                folderPathLower.indexOf(\"/sounds/\") >= 0 &&\r\n                baseName === \"music_definitions\"\r\n              ) {\r\n                newJsonType = ProjectItemType.musicDefinitionJson;\r\n              } else if (folderPathLower.indexOf(\"/texts/\") >= 0 && baseName === \"languages\") {\r\n                newJsonType = ProjectItemType.languagesCatalogJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/textures/ui/\") >= 0) {\r\n                newJsonType = ProjectItemType.ninesliceJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/texture_sets/\") >= 0) {\r\n                newJsonType = ProjectItemType.textureSetJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/lighting/\") >= 0) {\r\n                newJsonType = ProjectItemType.lightingJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/point_lights/\") >= 0) {\r\n                newJsonType = ProjectItemType.lightingJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/pbr/\") >= 0) {\r\n                newJsonType = ProjectItemType.pbrJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/water/\") >= 0) {\r\n                newJsonType = ProjectItemType.waterJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/shadows/\") >= 0) {\r\n                newJsonType = ProjectItemType.shadowsJson;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/jigsaw_structures/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawStructure;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/structure_sets/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawStructureSet;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/template_pools/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawTemplatePool;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                folderPathLower.indexOf(\"/worldgen/processors/\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.jigsawProcessorList;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/ui/\") >= 0) {\r\n                newJsonType = ProjectItemType.uiJson;\r\n              } else if (folderContext === FolderContext.docs && baseName === \"example_files\") {\r\n                newJsonType = ProjectItemType.fileListArrayJson;\r\n              } else if (isResourcePack && baseName === \"biomes_client\") {\r\n                newJsonType = ProjectItemType.biomesClientCatalogResource;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/biomes/\") >= 0) {\r\n                newJsonType = ProjectItemType.biomeResource;\r\n              } else if (folderPathLower.indexOf(\"/biomes/\") >= 0) {\r\n                newJsonType = ProjectItemType.biomeBehavior;\r\n              } else if (isResourcePack && baseName === \"blocks\") {\r\n                newJsonType = ProjectItemType.blocksCatalogResourceJson;\r\n              } else if (\r\n                isResourcePack &&\r\n                (projectPathLower.endsWith(\"texture_list.json\") || projectPathLower.endsWith(\"textures_list.json\"))\r\n              ) {\r\n                newJsonType = ProjectItemType.textureListJson;\r\n              } else if (isResourcePack && projectPathLower.endsWith(\"texture_set.json\")) {\r\n                newJsonType = ProjectItemType.textureSetJson;\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/items/\") >= 0) {\r\n                newJsonType = ProjectItemType.itemTypeLegacyResource;\r\n              } else if (isResourcePack && baseName === \"sounds\") {\r\n                newJsonType = ProjectItemType.soundCatalog;\r\n              } else if (baseName === \"education\") {\r\n                newJsonType = ProjectItemType.educationJson;\r\n              } else if (baseName === \"world_behavior_packs\") {\r\n                newJsonType = ProjectItemType.behaviorPackListJson;\r\n              } else if (baseName === \"world_resource_packs\") {\r\n                newJsonType = ProjectItemType.resourcePackListJson;\r\n              } else if (baseName === \"world_behavior_pack_history\") {\r\n                newJsonType = ProjectItemType.behaviorPackHistoryListJson;\r\n              } else if (baseName === \"world_resource_pack_history\") {\r\n                newJsonType = ProjectItemType.resourcePackHistoryListJson;\r\n              } else if (baseName === \"tsconfig\") {\r\n                newJsonType = ProjectItemType.tsconfigJson;\r\n              } else if (baseName === \"docfx\") {\r\n                newJsonType = ProjectItemType.docfxJson;\r\n              } else if (baseName === \"jsdoc\") {\r\n                newJsonType = ProjectItemType.jsdocJson;\r\n              } else if (baseName === \"jsconfig\") {\r\n                newJsonType = ProjectItemType.jsconfigJson;\r\n              } else if (baseName === \"package\") {\r\n                newJsonType = ProjectItemType.packageJson;\r\n              } else if (baseName === \"package.lock\") {\r\n                newJsonType = ProjectItemType.packageLockJson;\r\n              } else if (baseName === \".prettierrc\") {\r\n                newJsonType = ProjectItemType.prettierRcJson;\r\n              } else if (folderPathLower.indexOf(\"/persona/\") >= 0) {\r\n                newJsonType = ProjectItemType.personaJson;\r\n              } else if (folderPathLower.indexOf(\"/sdl_layouts/\") >= 0) {\r\n                newJsonType = ProjectItemType.sdlLayout;\r\n              } else if (folderPathLower.indexOf(\"/renderer/\") >= 0) {\r\n                newJsonType = ProjectItemType.rendererJson;\r\n              } else if (folderPathLower.indexOf(\"/sdl_layouts/\") >= 0) {\r\n                newJsonType = ProjectItemType.sdlLayout;\r\n              } else if (baseName === \"splashes\") {\r\n                newJsonType = ProjectItemType.splashesJson;\r\n              } else if (baseName === \"loading_messages\") {\r\n                newJsonType = ProjectItemType.loadingMessagesJson;\r\n              } else if (isResourcePack && baseName === \"font_metadata\") {\r\n                newJsonType = ProjectItemType.fontMetadataJson;\r\n              } else if (isResourcePack && baseName === \"emoticons\") {\r\n                newJsonType = ProjectItemType.emoticonsJson;\r\n              } else if (folderContext === FolderContext.skinPack && baseName === \"geometry\") {\r\n                newJsonType = ProjectItemType.skinPackGeometryJson;\r\n              } else if (baseName === \"texture_backwards_compatibility_mapping\") {\r\n                newJsonType = ProjectItemType.skinPackTextureBackCompatJson;\r\n              } else if (baseName === \"uniforms\") {\r\n                newJsonType = ProjectItemType.uniformsJson;\r\n              } else if (folderContext === FolderContext.docs && baseName === \"info\") {\r\n                newJsonType = ProjectItemType.docInfoJson;\r\n                project.role = ProjectRole.documentation;\r\n\r\n                itemName = StorageUtilities.getLeafName(folderPath);\r\n              } else if (isResourcePack && folderPathLower.indexOf(\"/textures/\") >= 0) {\r\n                newJsonType = ProjectItemType.ninesliceJson;\r\n              } else if (\r\n                folderContext === FolderContext.docs &&\r\n                (baseName === \"_example_files\" || baseName === \"example_files\")\r\n              ) {\r\n                newJsonType = ProjectItemType.fileListArrayJson;\r\n                project.role = ProjectRole.documentation;\r\n\r\n                itemName = StorageUtilities.getLeafName(folderPath);\r\n              } else if (folderContext === FolderContext.typeDefs && folderPathLower.indexOf(\"/command_modules\") >= 0) {\r\n                newJsonType = ProjectItemType.commandSetDefinitionJson;\r\n                project.role = ProjectRole.documentation;\r\n              } else if (\r\n                (folderContext === FolderContext.metaData && folderPathLower.indexOf(\"/forms\") >= 0) ||\r\n                projectPathLower.endsWith(\".form.json\")\r\n              ) {\r\n                newJsonType = ProjectItemType.dataForm;\r\n                project.role = ProjectRole.meta;\r\n              } else if (folderContext === FolderContext.typeDefs && folderPathLower.indexOf(\"/script_modules\") >= 0) {\r\n                newJsonType = ProjectItemType.scriptTypesJson;\r\n                project.role = ProjectRole.documentation;\r\n              } else if (\r\n                folderContext === FolderContext.typeDefs &&\r\n                folderPathLower.indexOf(\"/vanilladata_modules\") >= 0\r\n              ) {\r\n                newJsonType = ProjectItemType.vanillaDataJson;\r\n                project.role = ProjectRole.documentation;\r\n              } else if (folderContext === FolderContext.typeDefs && folderPathLower.indexOf(\"/engine_modules\") >= 0) {\r\n                newJsonType = ProjectItemType.engineOrderingJson;\r\n                project.role = ProjectRole.documentation;\r\n              }\r\n              // these need to be near the bottom since URL segments like /items/, /blocks/, /entities etc. could theoretically be used in loot_tables, etc. and that should take precedence in detection\r\n              else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/items/\") >= 0) {\r\n                newJsonType = ProjectItemType.itemTypeBehavior;\r\n              } else if (folderContext === FolderContext.behaviorPack && folderPathLower.indexOf(\"/blocks/\") >= 0) {\r\n                newJsonType = ProjectItemType.blockTypeBehavior;\r\n              } else if (\r\n                isResourcePack &&\r\n                (folderPathLower.indexOf(\"/entities/\") >= 0 || folderPathLower.indexOf(\"/entity/\") >= 0)\r\n              ) {\r\n                newJsonType = ProjectItemType.entityTypeResource;\r\n              } else if (\r\n                folderContext === FolderContext.behaviorPack &&\r\n                (folderPathLower.indexOf(\"/entities/\") >= 0 || folderPathLower.indexOf(\"/entity/\") >= 0)\r\n              ) {\r\n                newJsonType = ProjectItemType.entityTypeBehavior;\r\n              }\r\n\r\n              if (newJsonType === ProjectItemType.unknownJson) {\r\n                await candidateFile.loadContent();\r\n\r\n                const storageObject = StorageUtilities.getJsonObject(candidateFile);\r\n\r\n                if (storageObject !== undefined) {\r\n                  const inferredType = ProjectUtilities.inferJsonProjectItemTypeFromContent(storageObject);\r\n\r\n                  if (inferredType !== ProjectItemType.unknownJson) {\r\n                    newJsonType = inferredType;\r\n                  }\r\n                }\r\n              }\r\n\r\n              project.ensureItemByProjectPath(\r\n                projectPath,\r\n                ProjectItemStorageType.singleFile,\r\n                itemName,\r\n                newJsonType,\r\n                folderContext,\r\n                source,\r\n                ProjectItemCreationType.normal,\r\n                candidateFile,\r\n                undefined,\r\n                isInWorld\r\n              );\r\n            } else {\r\n              project.addUnknownFile(candidateFile);\r\n            }\r\n          } else if (pi && projectPath !== undefined) {\r\n            if (\r\n              pi.itemType === ProjectItemType.MCWorld ||\r\n              pi.itemType === ProjectItemType.MCProject ||\r\n              pi.itemType === ProjectItemType.MCTemplate ||\r\n              pi.itemType === ProjectItemType.MCAddon ||\r\n              pi.itemType === ProjectItemType.MCPack ||\r\n              pi.itemType === ProjectItemType.zip\r\n            ) {\r\n              await project.inferProjectItemsFromZipFile(projectPath, candidateFile, force);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in folder.folders) {\r\n      const childFolder = folder.folders[folderName];\r\n\r\n      if (childFolder && !childFolder.errorStatus) {\r\n        const name = StorageUtilities.canonicalizeName(folderName);\r\n\r\n        if (name === \"build\" || name === \"out\" || name === \"dist\") {\r\n          project.distBuildFolder = folder;\r\n        } else if (name === \"lib\") {\r\n          project.libFolder = folder;\r\n        } else if (name === \"project_item_data\" && folderContext === FolderContext.designPack) {\r\n          if (!project.projectItemAccessoryFolder) {\r\n            project.projectItemAccessoryFolder = folder;\r\n          }\r\n        } else if (\r\n          (name.startsWith(\".mct\") || name.startsWith(\".vscode\") || !name.startsWith(\".\")) && // disallow any \".\" folders, except for .mct or .vscode\r\n          name !== \"project_item_data\" &&\r\n          name !== \"node_modules\" &&\r\n          !childFolder.canIgnore &&\r\n          (folderContext !== FolderContext.unknown || depth < 4) &&\r\n          depth < 10\r\n        ) {\r\n          if (childFolder !== undefined) {\r\n            await ProjectItemInference.inferProjectItemsFromFolder(\r\n              project,\r\n              childFolder,\r\n              fileSystemPrefix,\r\n              folderContext,\r\n              variantLabel,\r\n              isInWorld,\r\n              rootFolder,\r\n              depth + 1,\r\n              source,\r\n              force,\r\n              processingCallback\r\n            );\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport { MinecraftFeatureBase } from \"./jsoncommon\";\r\nimport Log from \"../core/Log\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport FeatureDefinition from \"./FeatureDefinition\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\n\r\nexport default class FeatureRuleDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  private _data?: MinecraftFeatureBase;\r\n\r\n  private _onLoaded = new EventDispatcher<FeatureRuleDefinition, FeatureRuleDefinition>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      if (this._id.startsWith(\"minecraft:\")) {\r\n        return this._id.substring(10, this._id.length);\r\n      }\r\n\r\n      return this._id;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersion();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersion(): number[] | undefined {\r\n    if (!this._data || !(this._data as MinecraftFeatureBase).format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom((this._data as MinecraftFeatureBase).format_version);\r\n  }\r\n\r\n  setResourcePackFormatVersion(versionStr: string) {\r\n    this._ensureDataInitialized();\r\n\r\n    if (this._data) {\r\n      (this._data as MinecraftFeatureBase).format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        format_version: \"1.21.0\",\r\n      };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<FeatureRuleDefinition, FeatureRuleDefinition>) {\r\n    let fd: FeatureRuleDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      fd = new FeatureRuleDefinition();\r\n\r\n      fd.file = file;\r\n\r\n      file.manager = fd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof FeatureRuleDefinition) {\r\n      fd = file.manager as FeatureRuleDefinition;\r\n\r\n      if (!fd.isLoaded) {\r\n        if (loadHandler) {\r\n          fd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await fd.load();\r\n      }\r\n    }\r\n\r\n    return fd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._data !== null, \"ITDP\");\r\n\r\n    if (!this._data) {\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this._data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    // Extract the identifier from the feature rule description\r\n    const featureRulesData = (this._data as any)?.[\"minecraft:feature_rules\"];\r\n    if (featureRulesData?.description?.identifier) {\r\n      this._id = featureRulesData.description.identifier;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Gets the feature identifier that this feature rule places.\r\n   * Feature rules reference their target feature via description.places_feature\r\n   */\r\n  getPlacesFeatureId(): string | undefined {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const featureRulesData = (this._data as any)?.[\"minecraft:feature_rules\"];\r\n    if (featureRulesData?.description?.places_feature) {\r\n      return featureRulesData.description.places_feature;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    const placesFeatureId = this.getPlacesFeatureId();\r\n\r\n    if (!placesFeatureId) {\r\n      return;\r\n    }\r\n\r\n    let foundMatch = false;\r\n\r\n    // Use index for O(1) lookup when available\r\n    if (index) {\r\n      const matchingItems = index.getItemsById(index.featureBehaviorsById, placesFeatureId);\r\n      if (matchingItems.length > 0) {\r\n        for (const matchItem of matchingItems) {\r\n          item.addChildItem(matchItem);\r\n        }\r\n        foundMatch = true;\r\n      }\r\n    } else {\r\n      const featureItems = project.getItemsByType(ProjectItemType.featureBehavior);\r\n\r\n      // Look for the matching feature item in the project\r\n      for (const candItem of featureItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const featureDef = await FeatureDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (featureDef) {\r\n            const candFeatureId = featureDef.id;\r\n\r\n            if (candFeatureId === placesFeatureId) {\r\n              item.addChildItem(candItem);\r\n              foundMatch = true;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // If no matching feature was found, add as unfulfilled relationship\r\n    if (!foundMatch) {\r\n      const isVanilla = await Database.isVanillaToken(placesFeatureId);\r\n      item.addUnfulfilledRelationship(placesFeatureId, ProjectItemType.featureBehavior, isVanilla);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ILootTableBehavior from \"./ILootTableBehavior\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport ItemTypeDefinition from \"./ItemTypeDefinition\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Database from \"./Database\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class LootTableBehaviorDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public data?: ILootTableBehavior;\r\n\r\n  private _onLoaded = new EventDispatcher<LootTableBehaviorDefinition, LootTableBehaviorDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  _ensureDataInitialized() {\r\n    if (this.data === undefined) {\r\n      this.data = { pools: [] };\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<LootTableBehaviorDefinition, LootTableBehaviorDefinition>\r\n  ) {\r\n    let ltb: LootTableBehaviorDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      ltb = new LootTableBehaviorDefinition();\r\n\r\n      ltb.file = file;\r\n\r\n      file.manager = ltb;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof LootTableBehaviorDefinition) {\r\n      ltb = file.manager as LootTableBehaviorDefinition;\r\n\r\n      if (!ltb.isLoaded) {\r\n        if (loadHandler) {\r\n          ltb.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await ltb.load();\r\n      }\r\n    }\r\n\r\n    return ltb;\r\n  }\r\n\r\n  getTargetItemTypeIdList() {\r\n    if (!this.data || !this.data.pools || !Array.isArray(this.data.pools)) {\r\n      return;\r\n    }\r\n\r\n    const targetItems: string[] = [];\r\n\r\n    for (const pool of this.data.pools) {\r\n      if (pool.entries && Array.isArray(pool.entries)) {\r\n        for (const entry of pool.entries) {\r\n          if (entry.type === \"item\" && entry.name) {\r\n            targetItems.push(entry.name);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return targetItems;\r\n  }\r\n\r\n  getTargetLootTablePathList() {\r\n    if (!this.data || !this.data.pools || !Array.isArray(this.data.pools)) {\r\n      return;\r\n    }\r\n\r\n    const targetLootTablePaths: string[] = [];\r\n\r\n    for (const pool of this.data.pools) {\r\n      if (pool.entries && Array.isArray(pool.entries)) {\r\n        for (const entry of pool.entries) {\r\n          if (entry.type === \"loot_table\" && entry.name) {\r\n            targetLootTablePaths.push(this.canonicalizeLootTablePath(entry.name));\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return targetLootTablePaths;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.data) {\r\n      Log.unexpectedUndefined(\"ITRDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this.data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    this.data = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  canonicalizeLootTablePath(lootTablePath: string) {\r\n    lootTablePath = Utilities.ensureNotStartsWithSlash(lootTablePath);\r\n\r\n    const lastPeriod = lootTablePath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod > 0) {\r\n      lootTablePath = lootTablePath.substring(0, lastPeriod);\r\n    }\r\n\r\n    return lootTablePath.toLowerCase();\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let itemList = this.getTargetItemTypeIdList();\r\n    let lootTableList = this.getTargetLootTablePathList();\r\n\r\n    if (index) {\r\n      // Use pre-built index for O(1) lookups\r\n      if (itemList) {\r\n        for (const itemTypeId of itemList) {\r\n          if (typeof itemTypeId === \"string\") {\r\n            const matchingItems = index.getItemsById(index.itemTypesById, itemTypeId);\r\n            if (matchingItems.length > 0) {\r\n              for (const candItem of matchingItems) {\r\n                item.addChildItem(candItem);\r\n              }\r\n              itemList = Utilities.removeItemInArray(itemTypeId, itemList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      // TODO: lootTablesByPath index stores by exact projectPath, but lookup needs\r\n      // endsWith() matching. Fall back to scanning for now until a suffix-based index is added.\r\n      if (lootTableList) {\r\n        const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n        for (const candItem of lootTableItems) {\r\n          if (candItem.primaryFile) {\r\n            let lootTablePath = await candItem.getPackRelativePath();\r\n\r\n            if (lootTablePath) {\r\n              lootTablePath = this.canonicalizeLootTablePath(lootTablePath);\r\n              if (lootTableList.includes(lootTablePath)) {\r\n                item.addChildItem(candItem);\r\n                lootTableList = Utilities.removeItemInArray(lootTablePath, lootTableList);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Fallback: scan all items\r\n      const itemsCopy = project.getItemsCopy();\r\n\r\n      for (const candItem of itemsCopy) {\r\n        if (candItem.itemType === ProjectItemType.itemTypeBehavior && itemList) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            const itemType = await ItemTypeDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n            if (itemType) {\r\n              if (itemList.includes(itemType.id)) {\r\n                item.addChildItem(candItem);\r\n                itemList = Utilities.removeItemInArray(itemType.id, itemList);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        } else if (candItem.itemType === ProjectItemType.lootTableBehavior && lootTableList) {\r\n          if (!candItem.isContentLoaded) {\r\n            await candItem.loadContent();\r\n          }\r\n\r\n          if (candItem.primaryFile) {\r\n            let lootTablePath = await candItem.getPackRelativePath();\r\n\r\n            if (lootTablePath) {\r\n              lootTablePath = this.canonicalizeLootTablePath(lootTablePath);\r\n              if (lootTableList.includes(lootTablePath)) {\r\n                item.addChildItem(candItem);\r\n                lootTableList = Utilities.removeItemInArray(lootTablePath, lootTableList);\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (itemList && Array.isArray(itemList)) {\r\n      for (const itemTypeId of itemList) {\r\n        if (typeof itemTypeId === \"string\") {\r\n          const isVanilla = await Database.isVanillaToken(itemTypeId);\r\n          item.addUnfulfilledRelationship(itemTypeId, ProjectItemType.itemTypeBehavior, isVanilla);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (lootTableList && Array.isArray(lootTableList)) {\r\n      for (const lootTablePath of lootTableList) {\r\n        const isVanilla = await Database.matchesVanillaPathFromIndex(lootTablePath);\r\n        item.addUnfulfilledRelationship(lootTablePath, ProjectItemType.lootTableBehavior, isVanilla);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport TextureDefinition from \"./TextureDefinition\";\r\nimport ISkinCatalog from \"./ISkinCatalog\";\r\n\r\nexport default class SkinCatalogDefinition {\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _data?: ISkinCatalog;\r\n\r\n  private _onLoaded = new EventDispatcher<SkinCatalogDefinition, SkinCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.serialize_name;\r\n  }\r\n\r\n  public get skins() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._data.skins === undefined) {\r\n      this._data.skins = [];\r\n    }\r\n\r\n    return this._data.skins;\r\n  }\r\n\r\n  public getCanonicalizedTexturesList() {\r\n    if (!this._data || !this._data.skins || !Array.isArray(this._data.skins)) {\r\n      return undefined;\r\n    }\r\n\r\n    const textureList = [];\r\n\r\n    for (const skin of this._data.skins) {\r\n      if (skin.texture) {\r\n        const texturePath = TextureDefinition.canonicalizeTexturePath(skin.texture);\r\n\r\n        if (texturePath) {\r\n          textureList.push(texturePath);\r\n        }\r\n      }\r\n    }\r\n\r\n    return textureList;\r\n  }\r\n\r\n  public get skinNameList() {\r\n    if (!this._data || !this._data.skins || !Array.isArray(this._data.skins)) {\r\n      return undefined;\r\n    }\r\n\r\n    const skinNameList = [];\r\n\r\n    for (const skin of this._data.skins) {\r\n      if (skin.localization_name) {\r\n        skinNameList.push(skin.localization_name);\r\n      }\r\n    }\r\n\r\n    return skinNameList;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<SkinCatalogDefinition, SkinCatalogDefinition>) {\r\n    let et: SkinCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new SkinCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SkinCatalogDefinition) {\r\n      et = file.manager as SkinCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  ensureData() {\r\n    if (this._data) {\r\n      return this._data;\r\n    }\r\n\r\n    this._data = {\r\n      skins: [],\r\n    };\r\n\r\n    return this._data;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"SKCDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"SSDL\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const textureItems = project.getItemsByType(ProjectItemType.texture);\r\n\r\n    const pack = await item.getPack();\r\n\r\n    if (!pack) {\r\n      return;\r\n    }\r\n\r\n    let packRootFolder = pack.folder;\r\n\r\n    let textureList = this.getCanonicalizedTexturesList();\r\n\r\n    for (const candItem of textureItems) {\r\n      if (packRootFolder && textureList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = TextureDefinition.canonicalizeTexturePath(\r\n            StorageUtilities.getBaseRelativePath(candItem.primaryFile, packRootFolder)\r\n          );\r\n\r\n          if (relativePath) {\r\n            if (textureList && textureList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              textureList = Utilities.removeItemInArray(relativePath, textureList);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (textureList) {\r\n      for (const texturePath of textureList) {\r\n        item.addUnfulfilledRelationship(texturePath, ProjectItemType.texture, false);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * RelationsIndex: Pre-built lookup indexes for fast project item relation resolution.\r\n *\r\n * ## Problem\r\n * Without an index, each definition's `addChildItems()` method iterates ALL items of\r\n * cross-referenced types (e.g., each entity behavior scans ALL entity resources to find\r\n * matching IDs). With ~500 entities and ~500 entity resources, this is 250K iterations\r\n * with file loading \u2014 O(n\u00B2) behavior that causes relations to take 4+ minutes on vanilla.\r\n *\r\n * ## Solution\r\n * Build ID\u2192ProjectItem[] maps in a single O(n) pass before processing relations.\r\n * Handlers then do O(1) lookups instead of O(n) scans.\r\n *\r\n * ## Indexed Types\r\n * - Entity type resources by ID (minecraft:pig \u2192 ProjectItem)\r\n * - Spawn rules by entity ID (minecraft:pig \u2192 ProjectItem)\r\n * - Entity behaviors by ID (minecraft:pig \u2192 ProjectItem)\r\n * - Attachable resources by ID\r\n * - Item types by ID\r\n * - Animations by animation ID (one file \u2192 multiple IDs)\r\n * - Animation controllers by controller ID\r\n * - Render controllers by controller ID\r\n * - Models by geometry identifier (one file \u2192 multiple identifiers)\r\n * - Loot tables by pack-relative path\r\n * - Textures by canonicalized relative path\r\n *\r\n * ## Usage\r\n * ```typescript\r\n * const index = new RelationsIndex();\r\n * await index.build(project);\r\n * // Then pass to calculateForItem\r\n * await handler.addChildItems(project, item, index);\r\n * ```\r\n */\r\n\r\nimport AnimationControllerResourceDefinition from \"../minecraft/AnimationControllerResourceDefinition\";\r\nimport AnimationResourceDefinition from \"../minecraft/AnimationResourceDefinition\";\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport ModelGeometryDefinition from \"../minecraft/ModelGeometryDefinition\";\r\nimport RenderControllerSetDefinition from \"../minecraft/RenderControllerSetDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\n\r\n/** Batch size for parallel content loading */\r\nconst PRELOAD_BATCH_SIZE = 100;\r\n\r\nexport default class RelationsIndex {\r\n  /** Entity type resources indexed by their definition ID (e.g., \"minecraft:pig\") */\r\n  entityResourcesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Spawn rules indexed by their entity ID (e.g., \"minecraft:pig\") */\r\n  spawnRulesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Entity type behaviors indexed by their definition ID */\r\n  entityBehaviorsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Attachable resources indexed by their ID */\r\n  attachablesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Item type behaviors indexed by their ID */\r\n  itemTypesById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Feature behaviors indexed by their ID */\r\n  featureBehaviorsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Animation resources indexed by individual animation IDs (one file can have multiple) */\r\n  animationsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Animation controller resources indexed by individual controller IDs */\r\n  animationControllersById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Render controllers indexed by individual controller IDs */\r\n  renderControllersById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Model geometry items indexed by individual geometry identifiers */\r\n  modelsById = new Map<string, ProjectItem[]>();\r\n\r\n  /** Loot tables indexed by canonicalized pack-relative path */\r\n  lootTablesByPath = new Map<string, ProjectItem>();\r\n\r\n  /** Whether the index has been built */\r\n  isBuilt = false;\r\n\r\n  /**\r\n   * Build all indexes from the project's items.\r\n   * Batch-loads content for all relatable item types, parses definitions,\r\n   * and populates lookup maps.\r\n   */\r\n  async build(project: Project, onProgress?: (message: string) => void): Promise<void> {\r\n    // Collect all item types that participate in relations\r\n    const typesToPreload: ProjectItemType[] = [\r\n      ProjectItemType.entityTypeBehavior,\r\n      ProjectItemType.entityTypeResource,\r\n      ProjectItemType.spawnRuleBehavior,\r\n      ProjectItemType.attachableResourceJson,\r\n      ProjectItemType.itemTypeBehavior,\r\n      ProjectItemType.featureBehavior,\r\n      ProjectItemType.animationResourceJson,\r\n      ProjectItemType.animationControllerResourceJson,\r\n      ProjectItemType.renderControllerJson,\r\n      ProjectItemType.modelGeometryJson,\r\n      ProjectItemType.lootTableBehavior,\r\n    ];\r\n\r\n    // Phase 1: Batch-load all file contents in parallel chunks\r\n    const allItems: ProjectItem[] = [];\r\n    for (const itemType of typesToPreload) {\r\n      const items = project.getItemsByType(itemType);\r\n      allItems.push(...items);\r\n    }\r\n\r\n    if (onProgress) {\r\n      onProgress(`Pre-loading ${allItems.length} items for relations...`);\r\n    }\r\n\r\n    // Load content in batches to avoid overwhelming I/O.\r\n    // PRELOAD_BATCH_SIZE is a fixed constant rather than dynamic based on hardware\r\n    // because the bottleneck is file I/O (disk and network storage), not CPU or memory.\r\n    // 100 concurrent loads is a reasonable ceiling for any system.\r\n    for (let i = 0; i < allItems.length; i += PRELOAD_BATCH_SIZE) {\r\n      const batch = allItems.slice(i, i + PRELOAD_BATCH_SIZE);\r\n\r\n      await Promise.all(\r\n        batch.map(async (item) => {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n          // Also resolve file storage for ensureOnFile\r\n          await item.ensureStorage();\r\n        })\r\n      );\r\n    }\r\n\r\n    if (onProgress) {\r\n      onProgress(`Building relation indexes...`);\r\n    }\r\n\r\n    // Phase 2: Parse definitions and build indexes.\r\n    // Each method reads from a distinct item type and writes to a distinct map,\r\n    // so they can safely run in parallel via Promise.all().\r\n    await Promise.all([\r\n      this._indexEntityResources(project),\r\n      this._indexSpawnRules(project),\r\n      this._indexEntityBehaviors(project),\r\n      this._indexAttachables(project),\r\n      this._indexItemTypes(project),\r\n      this._indexFeatureBehaviors(project),\r\n      this._indexAnimations(project),\r\n      this._indexAnimationControllers(project),\r\n      this._indexRenderControllers(project),\r\n      this._indexModels(project),\r\n      this._indexLootTables(project),\r\n    ]);\r\n    // Note: textures are not indexed here because they require pack-root-relative\r\n    // path resolution that varies per handler. Handlers fall back to getItemsByType().\r\n\r\n    this.isBuilt = true;\r\n  }\r\n\r\n  private static readonly EMPTY_ITEMS: ProjectItem[] = [];\r\n\r\n  /** Look up items in a map, returning empty array if not found */\r\n  getItemsById(map: Map<string, ProjectItem[]>, id: string): ProjectItem[] {\r\n    return map.get(id) || RelationsIndex.EMPTY_ITEMS;\r\n  }\r\n\r\n  /**\r\n   * Add unique child items from the index to a parent item.\r\n   * Deduplicates when multiple IDs in `idList` resolve to the same ProjectItem.\r\n   * Returns the set of IDs from `idList` that were successfully matched, so callers\r\n   * can determine which IDs remain unfulfilled.\r\n   */\r\n  addUniqueChildItems(parentItem: ProjectItem, indexMap: Map<string, ProjectItem[]>, idList: string[]): Set<string> {\r\n    const addedItems = new Set<ProjectItem>();\r\n    const matchedIds = new Set<string>();\r\n    for (const id of idList) {\r\n      const matchingItems = this.getItemsById(indexMap, id);\r\n      if (matchingItems.length > 0) {\r\n        matchedIds.add(id);\r\n      }\r\n      for (const candItem of matchingItems) {\r\n        if (!addedItems.has(candItem)) {\r\n          addedItems.add(candItem);\r\n          parentItem.addChildItem(candItem);\r\n        }\r\n      }\r\n    }\r\n    return matchedIds;\r\n  }\r\n\r\n  private _addToIndex(map: Map<string, ProjectItem[]>, key: string, item: ProjectItem): void {\r\n    let arr = map.get(key);\r\n    if (!arr) {\r\n      arr = [];\r\n      map.set(key, arr);\r\n    }\r\n    arr.push(item);\r\n  }\r\n\r\n  private async _indexEntityResources(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await EntityTypeResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.entityResourcesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexSpawnRules(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await SpawnRulesBehaviorDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.spawnRulesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexEntityBehaviors(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.entityTypeBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await EntityTypeDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.entityBehaviorsById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexAttachables(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.attachableResourceJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await AttachableResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.attachablesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexItemTypes(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.itemTypeBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await ItemTypeDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.itemTypesById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexAnimations(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.animationResourceJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await AnimationResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.idList) {\r\n          for (const id of def.idList) {\r\n            this._addToIndex(this.animationsById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexAnimationControllers(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.animationControllerResourceJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await AnimationControllerResourceDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.idList) {\r\n          for (const id of def.idList) {\r\n            this._addToIndex(this.animationControllersById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexRenderControllers(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.renderControllerJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await RenderControllerSetDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.idList) {\r\n          for (const id of def.idList) {\r\n            this._addToIndex(this.renderControllersById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexModels(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.modelGeometryJson);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await ModelGeometryDefinition.ensureOnFile(item.primaryFile);\r\n        if (def) {\r\n          for (const id of def.identifiers) {\r\n            this._addToIndex(this.modelsById, id, item);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexLootTables(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n    for (const item of items) {\r\n      if (item.projectPath) {\r\n        this.lootTablesByPath.set(item.projectPath, item);\r\n      }\r\n    }\r\n  }\r\n\r\n  private async _indexFeatureBehaviors(project: Project): Promise<void> {\r\n    const items = project.getItemsByType(ProjectItemType.featureBehavior);\r\n    for (const item of items) {\r\n      if (item.primaryFile) {\r\n        const def = await FeatureDefinition.ensureOnFile(item.primaryFile);\r\n        if (def?.id) {\r\n          this._addToIndex(this.featureBehaviorsById, def.id, item);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport AttachableResourceDefinition from \"../minecraft/AttachableResourceDefinition\";\r\nimport BiomeBehaviorDefinition from \"../minecraft/BiomeBehaviorDefinition\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport EntityTypeResourceDefinition from \"../minecraft/EntityTypeResourceDefinition\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\nimport FeatureRuleDefinition from \"../minecraft/FeatureRuleDefinition\";\r\nimport FlipbookTextureCatalogDefinition from \"../minecraft/FlipbookTextureCatalogDefinition\";\r\nimport ItemTextureCatalogDefinition from \"../minecraft/ItemTextureCatalogDefinition\";\r\nimport ItemTypeDefinition from \"../minecraft/ItemTypeDefinition\";\r\nimport JigsawProcessorListDefinition from \"../minecraft/JigsawProcessorListDefinition\";\r\nimport JigsawStructureDefinition from \"../minecraft/JigsawStructureDefinition\";\r\nimport JigsawStructureSetDefinition from \"../minecraft/JigsawStructureSetDefinition\";\r\nimport JigsawTemplatePoolDefinition from \"../minecraft/JigsawTemplatePoolDefinition\";\r\nimport JsonUIResourceDefinition from \"../minecraft/JsonUIResourceDefinition\";\r\nimport LootTableBehaviorDefinition from \"../minecraft/LootTableBehaviorDefinition\";\r\nimport MusicDefinitionCatalogDefinition from \"../minecraft/MusicDefinitionCatalogDefinition\";\r\nimport ParticleEffectResourceDefinition from \"../minecraft/ParticleEffectResourceDefinition\";\r\nimport RecipeBehaviorDefinition from \"../minecraft/RecipeBehaviorDefinition\";\r\nimport SkinCatalogDefinition from \"../minecraft/SkinCatalogDefinition\";\r\nimport SoundCatalogDefinition from \"../minecraft/SoundCatalogDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"../minecraft/SoundDefinitionCatalogDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"../minecraft/SpawnRulesBehaviorDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"../minecraft/TerrainTextureCatalogDefinition\";\r\nimport TextureDefinition from \"../minecraft/TextureDefinition\";\r\nimport TextureSetDefinition from \"../minecraft/TextureSetDefinition\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport RelationsIndex from \"./RelationsIndex\";\r\nimport Log from \"../core/Log\";\r\n\r\ninterface IDefinitionHandler {\r\n  addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex): Promise<void>;\r\n}\r\n\r\ntype EnsureOnFileMethod<T> = (file: any) => Promise<T | undefined>;\r\n\r\nconst ITEM_TYPE_CONFIG = new Map<ProjectItemType, { ensureOnFile: EnsureOnFileMethod<IDefinitionHandler> }>([\r\n  [ProjectItemType.entityTypeBehavior, EntityTypeDefinition],\r\n  [ProjectItemType.itemTypeBehavior, ItemTypeDefinition],\r\n  [ProjectItemType.blockTypeBehavior, BlockTypeDefinition],\r\n  [ProjectItemType.entityTypeResource, EntityTypeResourceDefinition],\r\n  [ProjectItemType.skinCatalogJson, SkinCatalogDefinition],\r\n  [ProjectItemType.lootTableBehavior, LootTableBehaviorDefinition],\r\n  [ProjectItemType.particleJson, ParticleEffectResourceDefinition],\r\n  [ProjectItemType.uiJson, JsonUIResourceDefinition],\r\n  [ProjectItemType.attachableResourceJson, AttachableResourceDefinition],\r\n  [ProjectItemType.itemTextureJson, ItemTextureCatalogDefinition],\r\n  [ProjectItemType.terrainTextureCatalogResourceJson, TerrainTextureCatalogDefinition],\r\n  [ProjectItemType.soundDefinitionCatalog, SoundDefinitionCatalogDefinition],\r\n  [ProjectItemType.musicDefinitionJson, MusicDefinitionCatalogDefinition],\r\n  [ProjectItemType.soundCatalog, SoundCatalogDefinition],\r\n  [ProjectItemType.recipeBehavior, RecipeBehaviorDefinition],\r\n  [ProjectItemType.spawnRuleBehavior, SpawnRulesBehaviorDefinition],\r\n  [ProjectItemType.jigsawStructureSet, JigsawStructureSetDefinition],\r\n  [ProjectItemType.jigsawStructure, JigsawStructureDefinition],\r\n  [ProjectItemType.jigsawTemplatePool, JigsawTemplatePoolDefinition],\r\n  [ProjectItemType.jigsawProcessorList, JigsawProcessorListDefinition],\r\n  [ProjectItemType.flipbookTexturesJson, FlipbookTextureCatalogDefinition],\r\n  [ProjectItemType.textureSetJson, TextureSetDefinition],\r\n  [ProjectItemType.texture, TextureDefinition],\r\n  [ProjectItemType.biomeBehavior, BiomeBehaviorDefinition],\r\n  [ProjectItemType.featureBehavior, FeatureDefinition],\r\n  [ProjectItemType.featureRuleBehavior, FeatureRuleDefinition],\r\n]);\r\n\r\nexport type RelationsProgressCallback = (message: string, percent?: number) => void;\r\n\r\nexport default class ProjectItemRelations {\r\n  static clearDependencies(project: Project) {\r\n    ProjectItemRelations.clearDependenciesForItems(project.getItemsCopy());\r\n  }\r\n\r\n  static clearDependenciesForItems(items: ProjectItem[]) {\r\n    // clear all existing relations\r\n    for (const item of items) {\r\n      item.childItems = undefined;\r\n      item.parentItems = undefined;\r\n    }\r\n  }\r\n\r\n  static async calculate(project: Project, onProgress?: RelationsProgressCallback) {\r\n    const items = project.getItemsCopy();\r\n\r\n    // clear all existing relations\r\n    for (const item of items) {\r\n      item.childItems = undefined;\r\n      item.parentItems = undefined;\r\n    }\r\n\r\n    // Only process items that have relation handlers - skip the rest\r\n    const itemsToProcess = items.filter((item) => ITEM_TYPE_CONFIG.has(item.itemType));\r\n    const totalItems = itemsToProcess.length;\r\n\r\n    if (totalItems === 0) {\r\n      return;\r\n    }\r\n\r\n    // Pre-build the relations index for O(1) lookups instead of O(n\u00B2) scanning\r\n    const index = new RelationsIndex();\r\n    if (onProgress) {\r\n      onProgress(\"Building relations index...\", 0);\r\n    }\r\n    const indexStartTime = Date.now();\r\n    await index.build(project);\r\n    const indexBuildTime = Date.now() - indexStartTime;\r\n    Log.verbose(\r\n      `[RelationsIndex] Index built in ${indexBuildTime}ms, isBuilt=${index.isBuilt}, entityResources=${index.entityResourcesById.size}, animations=${index.animationsById.size}, models=${index.modelsById.size}`\r\n    );\r\n\r\n    // Report progress at most ~20 times total (every 5% of progress)\r\n    const progressInterval = Math.max(100, Math.floor(totalItems / 20));\r\n    let lastReportedPercent = -1;\r\n\r\n    const processStartTime = Date.now();\r\n    for (let i = 0; i < itemsToProcess.length; i++) {\r\n      const item = itemsToProcess[i];\r\n      await this.calculateForItem(item, index);\r\n\r\n      // Report progress only when percent changes by at least 5%\r\n      if (onProgress && (i % progressInterval === 0 || i === totalItems - 1)) {\r\n        const percent = Math.floor((i / totalItems) * 100);\r\n        if (percent !== lastReportedPercent) {\r\n          lastReportedPercent = percent;\r\n          onProgress(`Calculating relations... (${percent}%)`, percent);\r\n        }\r\n      }\r\n    }\r\n    const processTime = Date.now() - processStartTime;\r\n    Log.verbose(\r\n      `[RelationsIndex] Relations processing completed in ${processTime}ms for ${itemsToProcess.length} items`\r\n    );\r\n\r\n    project.computeIsVanillaEditSession();\r\n  }\r\n\r\n  static async calculateForItems(items: ProjectItem[], onProgress?: RelationsProgressCallback) {\r\n    // Only process items that have relation handlers\r\n    const itemsToProcess = items.filter((item) => ITEM_TYPE_CONFIG.has(item.itemType));\r\n    const totalItems = itemsToProcess.length;\r\n\r\n    if (totalItems === 0) {\r\n      return;\r\n    }\r\n\r\n    // Pre-build the relations index if we have enough items to justify the overhead\r\n    let index: RelationsIndex | undefined;\r\n    if (itemsToProcess.length > 0 && itemsToProcess[0].project) {\r\n      index = new RelationsIndex();\r\n      if (onProgress) {\r\n        onProgress(\"Building relations index...\", 0);\r\n      }\r\n      await index.build(itemsToProcess[0].project);\r\n    }\r\n\r\n    // Report progress at most ~20 times total\r\n    const progressInterval = Math.max(100, Math.floor(totalItems / 20));\r\n    let lastReportedPercent = -1;\r\n\r\n    for (let i = 0; i < itemsToProcess.length; i++) {\r\n      const item = itemsToProcess[i];\r\n      await this.calculateForItem(item, index);\r\n\r\n      // Report progress only when percent changes\r\n      if (onProgress && (i % progressInterval === 0 || i === totalItems - 1)) {\r\n        const percent = Math.floor((i / totalItems) * 100);\r\n        if (percent !== lastReportedPercent) {\r\n          lastReportedPercent = percent;\r\n          onProgress(`Calculating relations... (${percent}%)`, percent);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async calculateForItem(item: ProjectItem, index?: RelationsIndex) {\r\n    const project = item.project;\r\n\r\n    const handlerClass = ITEM_TYPE_CONFIG.get(item.itemType);\r\n\r\n    if (handlerClass) {\r\n      await item.ensureStorage();\r\n\r\n      if (item.primaryFile) {\r\n        const handler = await handlerClass.ensureOnFile(item.primaryFile);\r\n\r\n        if (handler) {\r\n          await handler.addChildItems(project, item, index);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async deleteLinksFromParents(item: ProjectItem) {\r\n    if (!item.parentItems || item.parentItems.length === 0) {\r\n      return;\r\n    }\r\n\r\n    for (const rel of item.parentItems) {\r\n      if (rel.parentItem && rel.childItem) {\r\n        if (rel.parentItem.itemType === ProjectItemType.entityTypeResource) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const entityTypeResource = await EntityTypeResourceDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (entityTypeResource) {\r\n              await entityTypeResource.deleteLinkToChild(rel);\r\n            }\r\n          }\r\n        } else if (rel.parentItem.itemType === ProjectItemType.particleJson) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const particleResource = await ParticleEffectResourceDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (particleResource) {\r\n              await particleResource.deleteLinkToChild(rel);\r\n            }\r\n          }\r\n        } else if (rel.parentItem.itemType === ProjectItemType.attachableResourceJson) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const attachableResource = await AttachableResourceDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (attachableResource) {\r\n              await attachableResource.deleteLinkToChild(rel);\r\n            }\r\n          }\r\n        } else if (rel.parentItem.itemType === ProjectItemType.soundCatalog) {\r\n          if (!item.isContentLoaded) {\r\n            await item.loadContent();\r\n          }\r\n\r\n          if (rel.parentItem.primaryFile) {\r\n            const soundCat = await SoundDefinitionCatalogDefinition.ensureOnFile(rel.parentItem.primaryFile);\r\n\r\n            if (soundCat) {\r\n              await soundCat.deleteLinkToChild(rel.childItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    await this.calculate(item.project);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport BlockTypeDefinition from \"../minecraft/BlockTypeDefinition\";\r\nimport Database from \"../minecraft/Database\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport MinecraftDefinitions from \"../minecraft/MinecraftDefinitions\";\r\nimport ModelDesignUtilities from \"../minecraft/ModelDesignUtilities\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport CreatorToolsHost from \"./CreatorToolsHost\";\r\nimport IGalleryItem, { GalleryItemType } from \"./IGalleryItem\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project, { FolderContext } from \"./Project\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectItemInference from \"./ProjectItemInference\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport { NewEntityTypeAddMode } from \"./ProjectUtilities\";\r\n\r\nexport const STANDARD_NAME_TOKEN = \"_name_\";\r\n\r\nexport const MATERIAL_NAMES_TO_FIXUP = [\r\n  \"cold\",\r\n  \"warm\",\r\n  \"body\",\r\n  \"head\",\r\n  \"legs\",\r\n  \"eyes\",\r\n  \"flower\",\r\n  \"charging\",\r\n  \"masked\",\r\n  \"bioluminescent_layer\",\r\n  \"armor\",\r\n  \"charged\",\r\n  \"ghost\",\r\n  \"cape\",\r\n  \"body_layer\",\r\n  \"outer\",\r\n  \"animated\",\r\n  \"spectator\",\r\n  \"overlay\",\r\n  \"limbs\",\r\n  \"breeze_eyes\",\r\n  \"breeze_wind\",\r\n  \"invisible\",\r\n];\r\n\r\nexport default class ProjectCreateManager {\r\n  /**\r\n   * Checks whether a name already exists in the project for the given item type.\r\n   * Comparison is case-insensitive and normalizes underscores/spaces/hyphens.\r\n   * Also handles file extensions (e.g., \"frost_moose.behavior\" matches \"frost_moose\").\r\n   */\r\n  static nameExistsInProject(project: Project, name: string, itemType: ProjectItemType): boolean {\r\n    const normalized = name.toLowerCase().replace(/[- ]/g, \"_\");\r\n    const items = project.getItemsByType(itemType);\r\n\r\n    for (const item of items) {\r\n      const itemName = item.name.toLowerCase().replace(/[- ]/g, \"_\");\r\n      if (\r\n        itemName === normalized ||\r\n        itemName.startsWith(normalized + \".\") ||\r\n        itemName === normalized + \".json\" ||\r\n        itemName === normalized + \".behavior\"\r\n      ) {\r\n        return true;\r\n      }\r\n\r\n      // Also compare after stripping common extensions from item name\r\n      const dotIndex = itemName.indexOf(\".\");\r\n      if (dotIndex > 0) {\r\n        const baseName = itemName.substring(0, dotIndex);\r\n        if (baseName === normalized) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Generates a unique name for a new item by appending \" 2\", \" 3\", etc. if the\r\n   * base name already exists in the project.\r\n   */\r\n  static getUniqueName(project: Project, baseName: string, itemType: ProjectItemType): string {\r\n    if (!ProjectCreateManager.nameExistsInProject(project, baseName, itemType)) {\r\n      return baseName;\r\n    }\r\n\r\n    for (let i = 2; i < 100; i++) {\r\n      const candidate = baseName + \" \" + i;\r\n      if (!ProjectCreateManager.nameExistsInProject(project, candidate, itemType)) {\r\n        return candidate;\r\n      }\r\n    }\r\n\r\n    return baseName + \" \" + Date.now();\r\n  }\r\n\r\n  /**\r\n   * Maps a ProjectItemType to the corresponding GalleryItemType for entity/block/item.\r\n   */\r\n  static galleryItemTypeForProjectItemType(itemType: ProjectItemType): GalleryItemType | undefined {\r\n    switch (itemType) {\r\n      case ProjectItemType.entityTypeBehavior:\r\n        return GalleryItemType.entityType;\r\n      case ProjectItemType.blockTypeBehavior:\r\n        return GalleryItemType.blockType;\r\n      case ProjectItemType.itemTypeBehavior:\r\n        return GalleryItemType.itemType;\r\n      default:\r\n        return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Collects the file paths (project-relative) for all related files of a project item,\r\n   * using the relationship graph built by project.processRelations().\r\n   * Returns paths relative to the project root (e.g., \"behavior_packs/mypack_bp/entities/zombie.json\").\r\n   */\r\n  static collectRelatedFilePaths(item: ProjectItem): string[] {\r\n    const descendants = ProjectItemUtilities.collectAllDescendantItems(item);\r\n    const paths: string[] = [];\r\n\r\n    for (const descendant of descendants) {\r\n      if (descendant.projectPath) {\r\n        paths.push(descendant.projectPath);\r\n      }\r\n    }\r\n\r\n    Log.debug(\r\n      `[ProjectCreateManager] collectRelatedFilePaths for '${item.name}': ` +\r\n        `${descendants.length} descendants, ${paths.length} paths` +\r\n        (paths.length > 0 ? \": \" + paths.join(\", \") : \"\") +\r\n        ` (childItems: ${item.childItems ? item.childItems.length : \"undefined\"})`\r\n    );\r\n\r\n    return paths;\r\n  }\r\n\r\n  /**\r\n   * Extracts the short identifier from a project item's name. For entities/blocks/items,\r\n   * this is the base name without any file extensions or suffixes like .behavior, .entity, .geo.\r\n   * E.g., \"biceson.behavior.json\" \u2192 \"biceson\", \"frost_moose.json\" \u2192 \"frost_moose\".\r\n   */\r\n  static getShortIdFromProjectItem(item: ProjectItem): string {\r\n    if (item.projectPath) {\r\n      let leaf = StorageUtilities.getLeafName(item.projectPath);\r\n\r\n      // Strip ALL dot-suffixes to get the bare entity/block/item name.\r\n      // Entity files have compound extensions like .behavior.json, .entity.json, .geo.json.\r\n      // We want just the base name (e.g., \"biceson\" from \"biceson.behavior.json\").\r\n      const firstDot = leaf.indexOf(\".\");\r\n      if (firstDot > 0) {\r\n        leaf = leaf.substring(0, firstDot);\r\n      }\r\n\r\n      if (leaf) {\r\n        return leaf.toLowerCase().replace(/[- ]/g, \"_\");\r\n      }\r\n    }\r\n\r\n    const name = item.name;\r\n    // Also strip dot-suffixes from the name\r\n    const firstDot = name.indexOf(\".\");\r\n    if (firstDot > 0) {\r\n      return name.substring(0, firstDot).toLowerCase().replace(/[- ]/g, \"_\");\r\n    }\r\n\r\n    return name.toLowerCase().replace(/[- ]/g, \"_\");\r\n  }\r\n\r\n  /**\r\n   * Builds an IGalleryItem from an existing ProjectItem in the current project.\r\n   * This allows project items to be displayed in the same gallery UI as vanilla items\r\n   * and fed into the same copy pipeline.\r\n   */\r\n  static buildGalleryItemFromProjectItem(item: ProjectItem, project: Project): IGalleryItem {\r\n    const galleryType = ProjectCreateManager.galleryItemTypeForProjectItemType(item.itemType);\r\n    const shortId = ProjectCreateManager.getShortIdFromProjectItem(item);\r\n    const friendlyName = Utilities.humanifyMinecraftName(shortId) as string;\r\n\r\n    // Prefer the rendered 3D model snapshot (cachedThumbnail) which is propagated\r\n    // up from geometry items to entity RP and entity BP items by ProjectWorkerManager.\r\n    let thumbnailDataUrl: string | undefined = item.cachedThumbnail;\r\n\r\n    // Fall back to the item's own imageUrl (which also checks cachedThumbnail internally)\r\n    if (!thumbnailDataUrl) {\r\n      thumbnailDataUrl = item.imageUrl;\r\n    }\r\n\r\n    // Skip expensive descendant traversal at gallery-build time.\r\n    // The file list is rebuilt fresh at copy time via _resolveProjectItemFilePaths.\r\n\r\n    return {\r\n      gitHubOwner: \"\",\r\n      gitHubRepoName: \"\",\r\n      thumbnailImage: \"\",\r\n      localLogo: thumbnailDataUrl,\r\n      title: friendlyName,\r\n      description: \"Project \" + ProjectItemUtilities.getDescriptionForType(item.itemType).toLowerCase(),\r\n      type: galleryType ?? GalleryItemType.entityType,\r\n      id: shortId,\r\n      nameReplacers: [shortId],\r\n      fileList: [],\r\n      isProjectItem: true,\r\n      tags: [\"project\"],\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Returns an array of IGalleryItem adapters for all project items of a given gallery type.\r\n   * Used to populate the \"Your Project\" section in the template picker.\r\n   */\r\n  static getProjectItemsAsGalleryItems(project: Project, galleryType: GalleryItemType): IGalleryItem[] {\r\n    let projectItemType: ProjectItemType;\r\n\r\n    switch (galleryType) {\r\n      case GalleryItemType.entityType:\r\n        projectItemType = ProjectItemType.entityTypeBehavior;\r\n        break;\r\n      case GalleryItemType.blockType:\r\n        projectItemType = ProjectItemType.blockTypeBehavior;\r\n        break;\r\n      case GalleryItemType.itemType:\r\n        projectItemType = ProjectItemType.itemTypeBehavior;\r\n        break;\r\n      default:\r\n        return [];\r\n    }\r\n\r\n    const items = project.getItemsByType(projectItemType);\r\n    const galleryItems: IGalleryItem[] = [];\r\n\r\n    for (const item of items) {\r\n      // Skip vanilla/accessory items \u2014 only include items from the project's own packs.\r\n      // Items loaded from accessory folders have source starting with \"o.\"\r\n      if (item.source && item.source.startsWith(\"o.\")) {\r\n        continue;\r\n      }\r\n\r\n      galleryItems.push(ProjectCreateManager.buildGalleryItemFromProjectItem(item, project));\r\n    }\r\n\r\n    return galleryItems;\r\n  }\r\n\r\n  /**\r\n   * Discovers newly created files by re-scanning only the project's BP and RP folders,\r\n   * rather than the entire project tree. This prevents OOM on large projects (21K+ items).\r\n   */\r\n  private static async _inferNewItems(project: Project) {\r\n    const projectFolder = project.projectFolder;\r\n    if (!projectFolder) {\r\n      return;\r\n    }\r\n\r\n    const bpFolder = project.defaultBehaviorPackFolder;\r\n    const rpFolder = project.defaultResourcePackFolder;\r\n\r\n    if (bpFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        project,\r\n        bpFolder,\r\n        \"\",\r\n        FolderContext.behaviorPack,\r\n        undefined,\r\n        false,\r\n        projectFolder,\r\n        0,\r\n        undefined,\r\n        true // force re-scan this folder\r\n      );\r\n    }\r\n\r\n    if (rpFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        project,\r\n        rpFolder,\r\n        \"\",\r\n        FolderContext.resourcePack,\r\n        undefined,\r\n        false,\r\n        projectFolder,\r\n        0,\r\n        undefined,\r\n        true // force re-scan this folder\r\n      );\r\n    }\r\n  }\r\n\r\n  static async addEntityTypeFromGallery(\r\n    project: Project,\r\n    entityTypeProject: IGalleryItem,\r\n    entityTypeName?: string,\r\n    addMode?: NewEntityTypeAddMode,\r\n    messageUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ) {\r\n    await ProjectCreateManager.copyGalleryPackFilesAndFixupIds(\r\n      project,\r\n      entityTypeProject,\r\n      entityTypeName,\r\n      messageUpdater,\r\n      dontOverwriteExistingFiles\r\n    );\r\n\r\n    // Discover the newly created files without re-scanning the entire project\r\n    await ProjectCreateManager._inferNewItems(project);\r\n\r\n    // Set runtimeIdentifier on the newly created entity\r\n    if (!entityTypeProject.isProjectItem) {\r\n      // For vanilla gallery items, scan for the new entity and set its runtimeIdentifier\r\n      const items = project.getItemsCopy();\r\n\r\n      for (const item of items) {\r\n        if (item.itemType === ProjectItemType.entityTypeBehavior) {\r\n          let minecraftEntityType = (await MinecraftDefinitions.get(item)) as EntityTypeDefinition | undefined;\r\n\r\n          if (minecraftEntityType) {\r\n            const targetId = entityTypeName ? entityTypeName : entityTypeProject.id;\r\n\r\n            if (minecraftEntityType.id?.endsWith(targetId)) {\r\n              minecraftEntityType.runtimeIdentifier = entityTypeProject.targetRuntimeIdentifier\r\n                ? entityTypeProject.targetRuntimeIdentifier\r\n                : \"minecraft:\" + entityTypeProject.id;\r\n\r\n              minecraftEntityType.persist();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    // For project items, runtimeIdentifier is already correct from the content copy.\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static getReplacedCreationData(project: Project, galleryItem: IGalleryItem, newName: string) {\r\n    if (galleryItem.creationData === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      let creationDataStr = JSON.stringify(galleryItem.creationData);\r\n\r\n      creationDataStr = this.replaceNamesInContent(creationDataStr, project, galleryItem, newName, []);\r\n\r\n      return JSON.parse(creationDataStr);\r\n    } catch (e) {\r\n      return galleryItem.creationData;\r\n    }\r\n  }\r\n\r\n  static getReplacedCreationDataInObject(project: Project, creationObject: object, newName: string) {\r\n    if (creationObject === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    try {\r\n      let creationDataStr = JSON.stringify(creationObject);\r\n\r\n      creationDataStr = this.replaceNamesInContentFromReplacers(\r\n        creationDataStr,\r\n        project,\r\n        [STANDARD_NAME_TOKEN],\r\n        newName,\r\n        []\r\n      );\r\n\r\n      return JSON.parse(creationDataStr);\r\n    } catch (e) {\r\n      return creationObject;\r\n    }\r\n  }\r\n  static async addBlockTypeFromGallery(project: Project, blockTypeProject: IGalleryItem, blockTypeName?: string) {\r\n    blockTypeName = await ProjectCreateManager.copyGalleryPackFilesAndFixupIds(\r\n      project,\r\n      blockTypeProject,\r\n      blockTypeName\r\n    );\r\n\r\n    await ProjectCreateManager._inferNewItems(project);\r\n\r\n    const blockTypeItem = ProjectItemUtilities.getItemByTypeAndName(\r\n      project,\r\n      blockTypeName,\r\n      ProjectItemType.blockTypeBehavior\r\n    );\r\n\r\n    if (blockTypeItem) {\r\n      if (!blockTypeItem.isContentLoaded) {\r\n        await blockTypeItem.loadContent();\r\n      }\r\n\r\n      if (blockTypeItem.primaryFile) {\r\n        const blockType = await BlockTypeDefinition.ensureOnFile(blockTypeItem.primaryFile);\r\n\r\n        const creationData = this.getReplacedCreationData(project, blockTypeProject, blockTypeName);\r\n\r\n        if (blockType) {\r\n          await blockType.ensureBlockAndTerrainLinks(project, creationData);\r\n        }\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static async addItemTypeFromGallery(project: Project, itemTypeProject: IGalleryItem, itemTypeName?: string) {\r\n    await ProjectCreateManager.copyGalleryPackFilesAndFixupIds(project, itemTypeProject, itemTypeName);\r\n\r\n    await ProjectCreateManager._inferNewItems(project);\r\n\r\n    await project.save();\r\n  }\r\n\r\n  /**\r\n   * Adds a model design template to a project.\r\n   * Creates both a .model.json file and the exported .geo.json + texture.png in the resource pack.\r\n   * @param project The project to add the model design to\r\n   * @param modelDesignItem The gallery item containing the model design template info\r\n   * @param modelName The name for the new model\r\n   */\r\n  static async addModelDesignFromGallery(\r\n    project: Project,\r\n    modelDesignItem: IGalleryItem,\r\n    modelName?: string\r\n  ): Promise<void> {\r\n    if (!modelName) {\r\n      modelName = modelDesignItem.id;\r\n    }\r\n\r\n    // Get the model template from the gallery item\r\n    // The template ID is stored in the gallery item's id field\r\n    const templateId = modelDesignItem.id;\r\n    const modelDesign = await Database.ensureModelTemplateLoaded(templateId);\r\n\r\n    if (!modelDesign) {\r\n      Log.fail(`Could not load model template: ${templateId}`);\r\n      return;\r\n    }\r\n\r\n    // Clone the design and update the identifier with the new name\r\n    const designCopy = JSON.parse(JSON.stringify(modelDesign));\r\n    designCopy.identifier = modelName;\r\n\r\n    // Ensure we have a resource pack\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n    if (!rpFolder) {\r\n      Log.fail(\"Could not ensure resource pack folder for model design\");\r\n      return;\r\n    }\r\n\r\n    // Create the model templates folder and save the model design JSON\r\n    const modelTemplatesFolder = rpFolder.ensureFolder(\"model_templates\");\r\n    await modelTemplatesFolder.ensureExists();\r\n\r\n    const modelJsonFile = modelTemplatesFolder.ensureFile(modelName + \".model.json\");\r\n    modelJsonFile.setContent(JSON.stringify(designCopy, null, 2));\r\n    await modelJsonFile.saveContent();\r\n\r\n    // Convert to geometry\r\n    const conversionResult = ModelDesignUtilities.convertToGeometry(designCopy);\r\n\r\n    if (conversionResult.geometry) {\r\n      // Create the models folder and save geometry\r\n      const modelsFolder = rpFolder.ensureFolder(\"models\");\r\n      await modelsFolder.ensureExists();\r\n      const entitiesFolder = modelsFolder.ensureFolder(\"entities\");\r\n      await entitiesFolder.ensureExists();\r\n\r\n      const geoFile = entitiesFolder.ensureFile(modelName + \".geo.json\");\r\n      geoFile.setContent(JSON.stringify(conversionResult.geometry, null, 2));\r\n      await geoFile.saveContent();\r\n    }\r\n\r\n    // Note: Texture generation requires platform-specific code (ImageGenerationUtilities)\r\n    // The model design JSON file in model_templates/ contains all the texture info\r\n    // and can be used to regenerate textures using the MCP tools or export commands.\r\n\r\n    await project.inferProjectItemsFromFiles(true);\r\n    await project.save();\r\n  }\r\n\r\n  static async copyGalleryPackFilesAndFixupIds(\r\n    project: Project,\r\n    galleryProject: IGalleryItem,\r\n    newTypeName?: string,\r\n    messagerUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ): Promise<string> {\r\n    const files = galleryProject.fileList;\r\n\r\n    if (newTypeName === undefined) {\r\n      newTypeName = galleryProject.id;\r\n    }\r\n\r\n    if (files === undefined) {\r\n      Log.unexpectedUndefined(\"AETFLS\");\r\n      return newTypeName;\r\n    }\r\n\r\n    let sourceBpFolder = undefined;\r\n    let sourceRpFolder = undefined;\r\n\r\n    // Project-local source: filePaths are project-relative, read from project's own folders.\r\n    // Rebuild the file list fresh from the relationship graph since it may have been\r\n    // stale when the gallery item was constructed (processRelations uses setTimeout batching\r\n    // in the browser, so the fileList built at dialog-open time may be incomplete).\r\n    if (galleryProject.isProjectItem) {\r\n      // Find the source ProjectItem by matching the gallery item's id against project items\r\n      const freshFilePaths = await ProjectCreateManager._resolveProjectItemFilePaths(project, galleryProject);\r\n\r\n      return ProjectCreateManager._copyProjectItemFiles(\r\n        project,\r\n        galleryProject,\r\n        freshFilePaths.length > 0 ? freshFilePaths : files,\r\n        newTypeName,\r\n        messagerUpdater,\r\n        dontOverwriteExistingFiles\r\n      );\r\n    } else if (galleryProject.gitHubRepoName === \"bedrock-samples\") {\r\n      sourceBpFolder = await Database.getReleaseVanillaBehaviorPackFolder();\r\n      sourceRpFolder = await Database.getReleaseVanillaResourcePackFolder();\r\n    } else {\r\n      // Map GitHub repo names to local folder names. When samples are downloaded\r\n      // during preparedevenv, the zip's root folder is renamed via the\r\n      // \"replaceFirstFolderWith\" field in reslist/*.resources.json. The local\r\n      // folder name doesn't match the \"{repoName}-{branch}\" pattern that GitHub\r\n      // uses, so we need an explicit mapping here.\r\n      const repoFolderMap: Record<string, string> = {\r\n        \"minecraft-samples\": \"samples\",\r\n        \"minecraft-gametests\": \"gametests\",\r\n        \"minecraft-scripting-samples\": \"script-samples\",\r\n      };\r\n\r\n      const repoFolder =\r\n        repoFolderMap[galleryProject.gitHubRepoName] ||\r\n        galleryProject.gitHubRepoName + \"-\" + (galleryProject.gitHubBranch ? galleryProject.gitHubBranch : \"main\");\r\n\r\n      const relativePath =\r\n        \"res/samples/\" +\r\n        Utilities.ensureEndsWithSlash(galleryProject.gitHubOwner) +\r\n        Utilities.ensureEndsWithSlash(repoFolder) +\r\n        (galleryProject.gitHubFolder ? Utilities.ensureNotStartsWithSlash(galleryProject.gitHubFolder) : \"\");\r\n\r\n      let rootFolder: IFolder | undefined;\r\n\r\n      // Prefer local storage (CLI/Electron) over HTTP to avoid 404s on static hosts\r\n      // that don't serve directory indexes.\r\n      if (Database.local) {\r\n        const storage = Database.local.createStorage(relativePath);\r\n        if (storage) {\r\n          const candidateFolder = storage.rootFolder;\r\n          await candidateFolder.load();\r\n\r\n          // Only use local storage if it actually contains the expected content;\r\n          // otherwise fall back to HTTP.\r\n          if (candidateFolder.folders[\"behavior_packs\"] && candidateFolder.folders[\"resource_packs\"]) {\r\n            rootFolder = candidateFolder;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!rootFolder) {\r\n        const url = Utilities.ensureEndsWithSlash(CreatorToolsHost.getVanillaContentRoot()) + relativePath;\r\n        const gh = HttpStorage.get(url);\r\n        rootFolder = gh.rootFolder;\r\n      }\r\n\r\n      if (!rootFolder.isLoaded) {\r\n        await rootFolder.load();\r\n      }\r\n\r\n      const bps = rootFolder.folders[\"behavior_packs\"];\r\n      const rps = rootFolder.folders[\"resource_packs\"];\r\n\r\n      if (!bps || !rps) {\r\n        Log.unexpectedUndefined(\"AETFLT\");\r\n        return newTypeName;\r\n      }\r\n\r\n      if (!rps.isLoaded) {\r\n        await rps.load();\r\n      }\r\n\r\n      if (!bps.isLoaded) {\r\n        await bps.load();\r\n      }\r\n\r\n      if (rps.folderCount < 1 || bps.folderCount < 1) {\r\n        Log.unexpectedUndefined(\"AETFLY\");\r\n        return newTypeName;\r\n      }\r\n\r\n      sourceBpFolder = bps.getFolderByIndex(0);\r\n      sourceRpFolder = rps.getFolderByIndex(0);\r\n    }\r\n\r\n    const targetBpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n    const targetRpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (\r\n      !sourceBpFolder ||\r\n      !sourceRpFolder ||\r\n      !sourceBpFolder ||\r\n      !sourceRpFolder ||\r\n      !targetBpFolder ||\r\n      !targetRpFolder\r\n    ) {\r\n      Log.unexpectedUndefined(\"AETVA\");\r\n      return newTypeName;\r\n    }\r\n\r\n    // note: '\"identifier\"', was in this list for entity types, but was removed.\r\n    let contentReplacements = ['\"materials\"'];\r\n\r\n    for (const filePath of files) {\r\n      if (filePath.startsWith(\"/behavior_pack\")) {\r\n        let subPath = undefined;\r\n\r\n        if (filePath.startsWith(\"/behavior_pack/\")) {\r\n          subPath = filePath.substring(14);\r\n        } else {\r\n          const nextSlash = filePath.indexOf(\"/\", 16);\r\n\r\n          if (nextSlash < 0) {\r\n            Log.unexpectedUndefined(\"AETVB\");\r\n            return newTypeName;\r\n          }\r\n\r\n          subPath = filePath.substring(nextSlash);\r\n        }\r\n\r\n        const targetPath = ProjectCreateManager.replaceNamesInPath(subPath, project, galleryProject, newTypeName);\r\n\r\n        const sourceFile = await sourceBpFolder.getFileFromRelativePath(subPath);\r\n\r\n        if (!sourceFile) {\r\n          Log.debugAlert(\"Could not find file '\" + subPath + \"'  (GPFFIA)\");\r\n        } else {\r\n          const targetFile = await targetBpFolder.ensureFileFromRelativePath(targetPath);\r\n          let update = true;\r\n\r\n          if (dontOverwriteExistingFiles) {\r\n            const targetExists = await targetFile.exists();\r\n\r\n            if (targetExists) {\r\n              update = false;\r\n            }\r\n          }\r\n\r\n          if (update) {\r\n            if (!sourceFile.isContentLoaded) {\r\n              await sourceFile.loadContent();\r\n            }\r\n\r\n            let content = sourceFile.content;\r\n\r\n            if (typeof content === \"string\") {\r\n              content = ProjectCreateManager.replaceNamesInContent(\r\n                content,\r\n                project,\r\n                galleryProject,\r\n                newTypeName,\r\n                contentReplacements\r\n              );\r\n            }\r\n\r\n            if (content !== null) {\r\n              if (messagerUpdater) {\r\n                messagerUpdater(\"Updating '\" + targetFile.fullPath + \"'\");\r\n              }\r\n\r\n              targetFile.setContent(content);\r\n            }\r\n          }\r\n        }\r\n      } else if (filePath.startsWith(\"/resource_pack\")) {\r\n        let subPath = undefined;\r\n\r\n        if (filePath.startsWith(\"/resource_pack/\")) {\r\n          subPath = filePath.substring(14);\r\n        } else {\r\n          const nextSlash = filePath.indexOf(\"/\", 16);\r\n\r\n          if (nextSlash < 0) {\r\n            Log.unexpectedUndefined(\"AETVC\");\r\n            return newTypeName;\r\n          }\r\n\r\n          subPath = filePath.substring(nextSlash);\r\n        }\r\n\r\n        const targetPath = ProjectCreateManager.replaceNamesInPath(subPath, project, galleryProject, newTypeName);\r\n\r\n        if (subPath.indexOf(\"cow.v2.render_controllers\") >= 0) {\r\n          subPath = subPath.replace(\"cow.v2.render_controllers\", \"cow.v2.render_controllres\"); // misspelling in source\r\n        }\r\n\r\n        const sourceFile = await sourceRpFolder.getFileFromRelativePath(subPath);\r\n\r\n        if (!sourceFile) {\r\n          Log.debugAlert(\"Could not find file '\" + subPath + \"' (GPFFIB)\");\r\n        } else {\r\n          const targetFile = await targetRpFolder.ensureFileFromRelativePath(targetPath);\r\n          let update = true;\r\n\r\n          if (update) {\r\n            if (dontOverwriteExistingFiles) {\r\n              const targetExists = await targetFile.exists();\r\n\r\n              if (targetExists) {\r\n                update = false;\r\n              }\r\n            }\r\n\r\n            if (!sourceFile.isContentLoaded) {\r\n              await sourceFile.loadContent();\r\n            }\r\n\r\n            let content = sourceFile.content;\r\n\r\n            if (typeof content === \"string\") {\r\n              content = ProjectCreateManager.replaceNamesInContent(\r\n                content,\r\n                project,\r\n                galleryProject,\r\n                newTypeName,\r\n                contentReplacements\r\n              );\r\n            }\r\n\r\n            if (content !== null) {\r\n              if (messagerUpdater) {\r\n                messagerUpdater(\"Updating '\" + targetFile.fullPath + \"'\");\r\n              }\r\n\r\n              targetFile.setContent(content);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return newTypeName;\r\n  }\r\n\r\n  /**\r\n   * Resolves the complete file list for a project item at copy time by finding the\r\n   * source ProjectItem, ensuring its content and relations are loaded, and collecting\r\n   * all descendant file paths. This avoids stale file lists from dialog-open time.\r\n   */\r\n  private static async _resolveProjectItemFilePaths(project: Project, galleryProject: IGalleryItem): Promise<string[]> {\r\n    const sourceId = galleryProject.id;\r\n\r\n    // Map gallery type to project item type\r\n    let itemType: ProjectItemType;\r\n    switch (galleryProject.type) {\r\n      case GalleryItemType.entityType:\r\n        itemType = ProjectItemType.entityTypeBehavior;\r\n        break;\r\n      case GalleryItemType.blockType:\r\n        itemType = ProjectItemType.blockTypeBehavior;\r\n        break;\r\n      case GalleryItemType.itemType:\r\n        itemType = ProjectItemType.itemTypeBehavior;\r\n        break;\r\n      default:\r\n        return [];\r\n    }\r\n\r\n    // Find the source item by matching the short ID against project items\r\n    const candidates = project.getItemsByType(itemType);\r\n    let sourceItem: ProjectItem | undefined;\r\n\r\n    for (const item of candidates) {\r\n      const shortId = ProjectCreateManager.getShortIdFromProjectItem(item);\r\n      if (shortId === sourceId) {\r\n        sourceItem = item;\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!sourceItem) {\r\n      Log.debug(`[ProjectCreateManager] Could not find source project item for '${sourceId}'`);\r\n      return [];\r\n    }\r\n\r\n    // Check if relations are already built (from worker pipeline or previous processRelations call).\r\n    // If so, just traverse the existing relationship graph \u2014 no expensive rebuild needed.\r\n    if (sourceItem.childItems && sourceItem.childItems.length > 0) {\r\n      const filePaths = ProjectCreateManager.collectRelatedFilePaths(sourceItem);\r\n      Log.debug(`[ProjectCreateManager] Resolved ${filePaths.length} files using existing relations for '${sourceId}'`);\r\n      return filePaths;\r\n    }\r\n\r\n    // Do a targeted relations calculation for just the source item and its children.\r\n    // This is fast even for large projects since we only process a handful of items,\r\n    // rather than waiting for the full project processRelations (which can take minutes for 21K+ items).\r\n    Log.debug(`[ProjectCreateManager] Doing targeted relations calculation for '${sourceId}'`);\r\n\r\n    // Ensure content is loaded for the source item\r\n    if (!sourceItem.isContentLoaded) {\r\n      await sourceItem.loadContent();\r\n    }\r\n\r\n    const { default: ProjectItemRelations } = await import(\"./ProjectItemRelations\");\r\n    await ProjectItemRelations.calculateForItem(sourceItem);\r\n\r\n    // The entity BP's addChildItems finds entity RP items. Now process those children too.\r\n    if (sourceItem.childItems) {\r\n      for (const rel of sourceItem.childItems) {\r\n        if (rel.childItem) {\r\n          await ProjectItemRelations.calculateForItem(rel.childItem);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Now collect related file paths\r\n    const filePaths = ProjectCreateManager.collectRelatedFilePaths(sourceItem);\r\n\r\n    Log.debug(\r\n      `[ProjectCreateManager] Resolved ${filePaths.length} files via targeted calculation for '${sourceId}': ${filePaths.join(\", \")}`\r\n    );\r\n\r\n    return filePaths;\r\n  }\r\n\r\n  /**\r\n   * Copies files from the current project (project-item source) to new locations in the same project\r\n   * with renamed IDs. Used when creating a new entity/block/item based on an existing one in the project.\r\n   *\r\n   * filePaths are project-relative (e.g., \"behavior_packs/mypack_bp/entities/zombie.json\").\r\n   * For each file, we determine whether it's in a BP or RP folder, extract the sub-path within\r\n   * that pack, apply name replacements, and write to the project's default BP or RP folder.\r\n   */\r\n  private static async _copyProjectItemFiles(\r\n    project: Project,\r\n    galleryProject: IGalleryItem,\r\n    filePaths: string[],\r\n    newTypeName: string,\r\n    messagerUpdater?: (message: string) => Promise<void>,\r\n    dontOverwriteExistingFiles?: boolean\r\n  ): Promise<string> {\r\n    const projectFolder = project.projectFolder;\r\n\r\n    Log.debug(\r\n      `[ProjectCreateManager] _copyProjectItemFiles: copying ${filePaths.length} files for '${galleryProject.id}' \u2192 '${newTypeName}'`\r\n    );\r\n\r\n    if (!projectFolder) {\r\n      Log.unexpectedUndefined(\"CPIF_PF\");\r\n      return newTypeName;\r\n    }\r\n\r\n    const defaultBpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n    const defaultRpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (!defaultBpFolder || !defaultRpFolder) {\r\n      Log.unexpectedUndefined(\"CPIF_TR\");\r\n      return newTypeName;\r\n    }\r\n\r\n    const contentReplacements = ['\"materials\"'];\r\n\r\n    // Detect source pack folders from the file paths so we write to the same pack.\r\n    // If we can find the source BP/RP pack folder, use it as target; otherwise fall back to defaults.\r\n    let targetBpFolder = defaultBpFolder;\r\n    let targetRpFolder = defaultRpFolder;\r\n\r\n    for (const fp of filePaths) {\r\n      const norm = fp.replace(/\\\\/g, \"/\");\r\n      const bpFolderMatch = norm.match(/^\\/?(behavior_packs?)\\/([^/]+)\\//i);\r\n      const rpFolderMatch = norm.match(/^\\/?(resource_packs?)\\/([^/]+)\\//i);\r\n      // Also detect base-packs layout: /base-packs/vanilla/behavior/...\r\n      const altBpFolderMatch = !bpFolderMatch\r\n        ? norm.match(/^\\/?((?:base-packs|experimental-packs)\\/[^/]+)\\/behavior\\//i)\r\n        : null;\r\n      const altRpFolderMatch = !rpFolderMatch\r\n        ? norm.match(/^\\/?((?:base-packs|experimental-packs)\\/[^/]+)\\/resource\\//i)\r\n        : null;\r\n\r\n      if (bpFolderMatch && targetBpFolder === defaultBpFolder) {\r\n        const packName = bpFolderMatch[2];\r\n        const bpContainer = projectFolder.folders[\"behavior_packs\"] || projectFolder.folders[\"behavior_pack\"];\r\n        if (bpContainer) {\r\n          const packFolder = bpContainer.folders[packName];\r\n          if (packFolder) {\r\n            targetBpFolder = packFolder;\r\n            Log.debug(`[ProjectCreateManager] Using source BP pack folder: ${packName}`);\r\n          }\r\n        }\r\n      } else if (altBpFolderMatch && targetBpFolder === defaultBpFolder) {\r\n        // For base-packs layout, resolve the behavior subfolder as the BP target\r\n        const basePath = altBpFolderMatch[1]; // e.g., \"base-packs/vanilla\"\r\n        const behaviorFolder = await projectFolder.getFolderFromRelativePath(\"/\" + basePath + \"/behavior\");\r\n        if (behaviorFolder) {\r\n          targetBpFolder = behaviorFolder;\r\n          Log.debug(`[ProjectCreateManager] Using base-packs BP folder: ${basePath}/behavior`);\r\n        }\r\n      }\r\n\r\n      if (rpFolderMatch && targetRpFolder === defaultRpFolder) {\r\n        const packName = rpFolderMatch[2];\r\n        const rpContainer = projectFolder.folders[\"resource_packs\"] || projectFolder.folders[\"resource_pack\"];\r\n        if (rpContainer) {\r\n          const packFolder = rpContainer.folders[packName];\r\n          if (packFolder) {\r\n            targetRpFolder = packFolder;\r\n            Log.debug(`[ProjectCreateManager] Using source RP pack folder: ${packName}`);\r\n          }\r\n        }\r\n      } else if (altRpFolderMatch && targetRpFolder === defaultRpFolder) {\r\n        const basePath = altRpFolderMatch[1];\r\n        const resourceFolder = await projectFolder.getFolderFromRelativePath(\"/\" + basePath + \"/resource\");\r\n        if (resourceFolder) {\r\n          targetRpFolder = resourceFolder;\r\n          Log.debug(`[ProjectCreateManager] Using base-packs RP folder: ${basePath}/resource`);\r\n        }\r\n      }\r\n    }\r\n\r\n    // We need to classify each file path as BP or RP and extract its sub-path within the pack.\r\n    // Project-relative paths look like \"behavior_packs/mypack_bp/entities/zombie.json\"\r\n    // or \"resource_packs/mypack_rp/entity/zombie.entity.json\".\r\n    for (const filePath of filePaths) {\r\n      let normalizedPath = filePath.replace(/\\\\/g, \"/\");\r\n\r\n      // Ensure the path starts with / for getFileFromRelativePath\r\n      if (!normalizedPath.startsWith(\"/\")) {\r\n        normalizedPath = \"/\" + normalizedPath;\r\n      }\r\n\r\n      let isBp = false;\r\n      let isRp = false;\r\n      let subPath: string | undefined;\r\n\r\n      // Determine if this is a BP or RP file and extract the sub-path within the pack.\r\n      // Handles multiple path formats:\r\n      //   /behavior_packs/mypack_bp/entities/agent.json  (standard project layout)\r\n      //   /base-packs/vanilla/behavior/entities/agent.json  (vanilla/sample project layout)\r\n      //   /resource_packs/mypack_rp/entity/agent.entity.json\r\n      //   /base-packs/vanilla/resource/entity/agent.entity.json\r\n      const bpMatch = normalizedPath.match(/^\\/?(behavior_packs?)\\/[^/]+\\/(.*)/i);\r\n      const rpMatch = normalizedPath.match(/^\\/?(resource_packs?)\\/[^/]+\\/(.*)/i);\r\n      // Also match paths like /base-packs/vanilla/behavior/... or /experimental-packs/.../behavior/...\r\n      const altBpMatch = !bpMatch ? normalizedPath.match(/\\/behavior\\/(.*)/i) : null;\r\n      const altRpMatch = !rpMatch ? normalizedPath.match(/\\/resource\\/(.*)/i) : null;\r\n\r\n      if (bpMatch) {\r\n        isBp = true;\r\n        subPath = \"/\" + bpMatch[2];\r\n      } else if (rpMatch) {\r\n        isRp = true;\r\n        subPath = \"/\" + rpMatch[2];\r\n      } else if (altBpMatch) {\r\n        isBp = true;\r\n        subPath = \"/\" + altBpMatch[1];\r\n      } else if (altRpMatch) {\r\n        isRp = true;\r\n        subPath = \"/\" + altRpMatch[1];\r\n      }\r\n\r\n      if (!subPath || (!isBp && !isRp)) {\r\n        Log.debug(\"Skipping non-pack file in project item copy: \" + filePath);\r\n        continue;\r\n      }\r\n\r\n      const targetPath = ProjectCreateManager.replaceNamesInPath(subPath, project, galleryProject, newTypeName);\r\n      const targetFolder = isBp ? targetBpFolder : targetRpFolder;\r\n\r\n      const sourceFile = await projectFolder.getFileFromRelativePath(normalizedPath);\r\n\r\n      if (!sourceFile) {\r\n        Log.debugAlert(\"Could not find project file '\" + normalizedPath + \"' (CPIF_SF)\");\r\n        continue;\r\n      }\r\n\r\n      Log.debug(`[ProjectCreateManager] Copying: ${normalizedPath} \u2192 ${targetPath} (${isBp ? \"BP\" : \"RP\"})`);\r\n\r\n      const targetFile = await targetFolder.ensureFileFromRelativePath(targetPath);\r\n      let update = true;\r\n\r\n      if (dontOverwriteExistingFiles) {\r\n        const targetExists = await targetFile.exists();\r\n        if (targetExists) {\r\n          update = false;\r\n        }\r\n      }\r\n\r\n      if (update) {\r\n        if (!sourceFile.isContentLoaded) {\r\n          await sourceFile.loadContent();\r\n        }\r\n\r\n        let content = sourceFile.content;\r\n\r\n        if (typeof content === \"string\") {\r\n          content = ProjectCreateManager.replaceNamesInContent(\r\n            content,\r\n            project,\r\n            galleryProject,\r\n            newTypeName,\r\n            contentReplacements\r\n          );\r\n        }\r\n\r\n        if (content !== null) {\r\n          if (messagerUpdater) {\r\n            messagerUpdater(\"Updating '\" + targetFile.fullPath + \"'\");\r\n          }\r\n\r\n          targetFile.setContent(content);\r\n        }\r\n      }\r\n    }\r\n\r\n    return newTypeName;\r\n  }\r\n\r\n  static replaceNamesInPath(path: string, project: Project, galleryProject: IGalleryItem, newName: string) {\r\n    let pathReplacers = galleryProject.nameReplacers;\r\n\r\n    if (!pathReplacers) {\r\n      pathReplacers = [galleryProject.id];\r\n    }\r\n\r\n    newName = newName.toLowerCase();\r\n    newName = newName.replace(/[- ]/g, \"_\");\r\n\r\n    const tempName = Utilities.createRandomId(10);\r\n\r\n    for (const pathReplacer of pathReplacers) {\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \".\", \"/\" + tempName + \".\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \".\", \"\\\\\" + tempName + \".\");\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"/\", \"/\" + tempName + \"/\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"\\\\\", \"\\\\\" + tempName + \"\\\\\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"_\", \"\\\\\" + tempName + \"_\");\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"_\", \"/\" + tempName + \"_\");\r\n\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"_ico.\", \"/\" + tempName + \"_ico.\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"_ico.\", \"\\\\\" + tempName + \"_ico.\");\r\n      path = Utilities.replaceAll(path, \"/\" + pathReplacer + \"_ico/\", \"/\" + tempName + \"_ico/\");\r\n      path = Utilities.replaceAll(path, \"\\\\\" + pathReplacer + \"_ico\\\\\", \"\\\\\" + tempName + \"_ico\\\\\");\r\n    }\r\n\r\n    path = Utilities.replaceAll(path, tempName, newName);\r\n\r\n    return path;\r\n  }\r\n\r\n  static replaceNamesInContent(\r\n    content: string,\r\n    project: Project,\r\n    galleryProject: IGalleryItem,\r\n    newName: string,\r\n    replaceAllExclusions: string[]\r\n  ) {\r\n    let replacers = galleryProject.nameReplacers;\r\n\r\n    if (!replacers) {\r\n      replacers = [galleryProject.id];\r\n    }\r\n\r\n    // copy & extend\r\n    replacers = replacers.slice();\r\n    replacers.push(STANDARD_NAME_TOKEN);\r\n\r\n    return this.replaceNamesInContentFromReplacers(content, project, replacers, newName, replaceAllExclusions);\r\n  }\r\n\r\n  static replaceNamesInContentFromReplacers(\r\n    content: string,\r\n    project: Project,\r\n    replacers: string[],\r\n    newName: string,\r\n    replaceAllExclusions: string[]\r\n  ) {\r\n    newName = newName.toLowerCase();\r\n    newName = newName.replace(/-/g, \"_\");\r\n    newName = newName.replace(/ /g, \"_\");\r\n\r\n    const tempName = Utilities.createRandomLowerId(10);\r\n\r\n    for (const replacer of replacers) {\r\n      content = Utilities.replaceAll(\r\n        content,\r\n        \"minecraft:\" + replacer,\r\n        project.effectiveDefaultNamespace + \":\" + tempName\r\n      );\r\n\r\n      content = Utilities.replaceAll(content, \"demo:\" + replacer, project.effectiveDefaultNamespace + \":\" + tempName);\r\n      content = Utilities.replaceAll(\r\n        content,\r\n        \"starter:\" + replacer,\r\n        project.effectiveDefaultNamespace + \":\" + tempName\r\n      );\r\n      content = Utilities.replaceAll(content, \"sample:\" + replacer, project.effectiveDefaultNamespace + \":\" + tempName);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, \":\" + replacer, \":\" + tempName, replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, \"/\" + replacer, \"/\" + tempName, replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, \".\" + replacer, \".\" + tempName, replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(content, replacer + \"_\", tempName + \"_\", replaceAllExclusions);\r\n\r\n      content = Utilities.replaceAllExceptInLines(\r\n        content,\r\n        '\"' + replacer + '\"',\r\n        '\"' + tempName + '\"',\r\n        replaceAllExclusions\r\n      );\r\n\r\n      for (const materialName of MATERIAL_NAMES_TO_FIXUP) {\r\n        content = Utilities.replaceAll(content, materialName + '\": \"' + tempName, materialName + '\": \"' + replacer);\r\n      }\r\n    }\r\n\r\n    content = Utilities.replaceAll(content, tempName, newName);\r\n\r\n    return content;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Project, { FolderContext } from \"./Project\";\r\nimport ProjectContent from \"./ProjectContent\";\r\nimport { ProjectScriptLanguage } from \"./IProjectData\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport StorageUtilities from \"./../storage/StorageUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport IProjectItemSeed from \"./IProjectItemSeed\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport Database from \"../minecraft/Database\";\r\nimport Log from \"../core/Log\";\r\nimport SoundDefinitionCatalogDefinition from \"../minecraft/SoundDefinitionCatalogDefinition\";\r\nimport SoundCatalogDefinition from \"../minecraft/SoundCatalogDefinition\";\r\nimport IFile from \"../storage/IFile\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport IGalleryItem, { GalleryItemType } from \"./IGalleryItem\";\r\nimport { NewEntityTypeAddMode } from \"./ProjectUtilities\";\r\nimport ImageEditsDefinition from \"../design/ImageEditsDefinition\";\r\nimport IImageEdits from \"../design/IImageEdits\";\r\nimport ProjectCreateManager from \"./ProjectCreateManager\";\r\n\r\n/// Does create operations for project items.\r\n\r\nexport default class ProjectItemCreateManager {\r\n  private static async _getDefaultBehaviorPackPath(project: Project) {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = bpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultBehaviorPackFolderPath(project: Project, name: string) {\r\n    const bpFolder = await project.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const subfolder = bpFolder.ensureFolder(name);\r\n    await subfolder.ensureExists();\r\n\r\n    const defaultPath = subfolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultDesignPackFolderPath(project: Project, name: string) {\r\n    const dpFolder = await project.ensureDefaultDesignPackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const subfolder = dpFolder.ensureFolder(name);\r\n    await subfolder.ensureExists();\r\n\r\n    const defaultPath = subfolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultResourcePackPath(project: Project) {\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = rpFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultResourcePackFolderPath(project: Project, name: string) {\r\n    const rpFolder = await project.ensureDefaultResourcePackFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const subfolder = rpFolder.ensureFolder(name);\r\n    await subfolder.ensureExists();\r\n\r\n    const defaultPath = subfolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  private static async _getDefaultScriptsFolderPath(project: Project) {\r\n    const scriptsFolder = await project.ensureMainScriptsFolder();\r\n\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const defaultPath = scriptsFolder.getFolderRelativePath(project.projectFolder);\r\n\r\n    return defaultPath;\r\n  }\r\n\r\n  static async createNewItem(project: Project, itemSeed: IProjectItemSeed): Promise<ProjectItem | undefined> {\r\n    if (itemSeed.name === \"\" || itemSeed.name === undefined) {\r\n      itemSeed.name = ProjectItemUtilities.getNewItemName(itemSeed.itemType);\r\n    }\r\n    let creationData = itemSeed.creationData;\r\n\r\n    if (creationData) {\r\n      creationData = ProjectCreateManager.getReplacedCreationDataInObject(project, creationData, itemSeed.name);\r\n    }\r\n\r\n    if (itemSeed.itemType) {\r\n      switch (itemSeed.itemType) {\r\n        case ProjectItemType.js:\r\n        case ProjectItemType.ts:\r\n          return ProjectItemCreateManager.createNewScript(project, itemSeed.itemType, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.dataForm:\r\n          return ProjectItemCreateManager.createNewForm(project, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.audio:\r\n          return ProjectItemCreateManager.createNewAudio(project, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.texture:\r\n          return ProjectItemCreateManager.createNewTexture(project, itemSeed.name, itemSeed.folder);\r\n\r\n        case ProjectItemType.designTexture:\r\n          return ProjectItemCreateManager.createNewDesignTexture(project, itemSeed.name, itemSeed.folder, creationData);\r\n      }\r\n    }\r\n\r\n    if (ProjectItemUtilities.isBehaviorRelated(itemSeed.itemType)) {\r\n      return await ProjectItemCreateManager.createBehaviorPackJsonItem(project, itemSeed);\r\n    } else if (ProjectItemUtilities.isResourceRelated(itemSeed.itemType)) {\r\n      return await ProjectItemCreateManager.createResourcePackJsonItem(project, itemSeed);\r\n    } else if (ProjectItemUtilities.isDesignRelated(itemSeed.itemType)) {\r\n      return await ProjectItemCreateManager.createDesignPackJsonItem(project, itemSeed);\r\n    }\r\n\r\n    Log.error(\"No creation handler for item type: \" + itemSeed.itemType);\r\n    return undefined;\r\n  }\r\n\r\n  static async createNewScript(project: Project, itemType: ProjectItemType, name: string, folder: IFolder | undefined) {\r\n    let defaultPath = undefined;\r\n\r\n    if (folder && project.projectFolder) {\r\n      defaultPath = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      defaultPath = await ProjectItemCreateManager._getDefaultScriptsFolderPath(project);\r\n    }\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      name,\r\n      itemType === ProjectItemType.js ? \"js\" : \"ts\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemType === ProjectItemType.js ? ProjectItemType.js : ProjectItemType.ts,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n        file.setContent(ProjectContent.getEmptyTypeScript(project.name, baseName));\r\n      } else {\r\n        file.setContent(ProjectContent.getEmptyJavaScript(project.name, baseName));\r\n      }\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async _generateFolderNameForNewItem(project: Project, basePath: string, baseName: string) {\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    let candidateFolderPath = \"\";\r\n    let finalPathPrefix = \"\";\r\n    const projectFolder = project.projectFolder;\r\n    let candidateFolder = null;\r\n\r\n    let hash = basePath.indexOf(\"#\");\r\n    let targetFolder = projectFolder;\r\n\r\n    while (hash > 0) {\r\n      // dig into container files if needed.\r\n      let containerFilePath = basePath.substring(0, hash);\r\n      basePath = basePath.substring(hash + 1);\r\n      hash = basePath.indexOf(\"#\");\r\n\r\n      if (containerFilePath.startsWith(targetFolder.fullPath)) {\r\n        containerFilePath = containerFilePath.substring(targetFolder.fullPath.length);\r\n      }\r\n\r\n      finalPathPrefix += containerFilePath + \"#\";\r\n\r\n      const containerFile = await targetFolder.getFileFromRelativePath(containerFilePath);\r\n\r\n      if (!containerFile) {\r\n        return undefined;\r\n      }\r\n\r\n      const extension = containerFile.type;\r\n\r\n      if (extension !== \"zip\" && extension !== \"mcworld\" && extension !== \"mctemplate\") {\r\n        return undefined;\r\n      }\r\n\r\n      if (!containerFile.fileContainerStorage) {\r\n        const zipStorage = new ZipStorage();\r\n\r\n        if (!containerFile.isContentLoaded) {\r\n          await containerFile.loadContent();\r\n        }\r\n\r\n        if (!containerFile.content || !(containerFile.content instanceof Uint8Array)) {\r\n          return undefined;\r\n        }\r\n\r\n        await zipStorage.loadFromUint8Array(containerFile.content, containerFile.name);\r\n\r\n        zipStorage.containerFile = containerFile;\r\n        containerFile.fileContainerStorage = zipStorage;\r\n        containerFile.fileContainerStorage.storagePath = containerFilePath + \"#\";\r\n      }\r\n\r\n      targetFolder = containerFile.fileContainerStorage.rootFolder;\r\n    }\r\n\r\n    await targetFolder.ensureFolderFromRelativePath(basePath);\r\n    await targetFolder.ensureExists();\r\n\r\n    // find a folder name not in use\r\n    do {\r\n      index++;\r\n      candidateFolderPath = basePath + baseName + index;\r\n      candidateFolder = await targetFolder.getFolderFromRelativePath(candidateFolderPath);\r\n    } while (candidateFolder !== null && candidateFolder !== undefined);\r\n\r\n    return finalPathPrefix + candidateFolderPath;\r\n  }\r\n\r\n  static async _generateFileNameForNewItem(project: Project, basePath: string, baseName: string, extension: string) {\r\n    if (project.projectFolder === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let index = 0;\r\n\r\n    let candidateFilePath = \"\";\r\n    let finalPathPrefix = \"\";\r\n    const projectFolder = project.projectFolder;\r\n    let candidateFile = null;\r\n\r\n    let hash = basePath.indexOf(\"#\");\r\n    let targetFolder = projectFolder;\r\n\r\n    while (hash > 0) {\r\n      // dig into container files if needed.\r\n      let containerFilePath = basePath.substring(0, hash);\r\n      basePath = basePath.substring(hash + 1);\r\n      hash = basePath.indexOf(\"#\");\r\n\r\n      if (containerFilePath.startsWith(targetFolder.fullPath)) {\r\n        containerFilePath = containerFilePath.substring(targetFolder.fullPath.length);\r\n      }\r\n\r\n      finalPathPrefix += containerFilePath + \"#\";\r\n\r\n      const containerFile = await targetFolder.getFileFromRelativePath(containerFilePath);\r\n\r\n      if (!containerFile) {\r\n        return undefined;\r\n      }\r\n\r\n      const extension = containerFile.type;\r\n\r\n      if (extension !== \"zip\" && extension !== \"mcworld\" && extension !== \"mctemplate\") {\r\n        return undefined;\r\n      }\r\n\r\n      if (!containerFile.fileContainerStorage) {\r\n        const zipStorage = new ZipStorage();\r\n\r\n        if (!containerFile.isContentLoaded) {\r\n          await containerFile.loadContent();\r\n        }\r\n\r\n        if (!containerFile.content || !(containerFile.content instanceof Uint8Array)) {\r\n          return undefined;\r\n        }\r\n\r\n        await zipStorage.loadFromUint8Array(containerFile.content);\r\n\r\n        zipStorage.containerFile = containerFile;\r\n        containerFile.fileContainerStorage = zipStorage;\r\n        containerFile.fileContainerStorage.storagePath = containerFilePath + \"#\";\r\n      }\r\n\r\n      targetFolder = containerFile.fileContainerStorage.rootFolder;\r\n    }\r\n\r\n    await targetFolder.ensureFolderFromRelativePath(basePath);\r\n    await targetFolder.ensureExists();\r\n\r\n    candidateFilePath = basePath + baseName + \".\" + extension;\r\n    candidateFile = await targetFolder.getFileFromRelativePath(candidateFilePath);\r\n\r\n    if (candidateFile) {\r\n      // find a filename not in use\r\n      do {\r\n        index++;\r\n        candidateFilePath = basePath + baseName + index + \".\" + extension;\r\n        candidateFile = await targetFolder.getFileFromRelativePath(candidateFilePath);\r\n      } while (candidateFile !== null && candidateFile !== undefined);\r\n    }\r\n\r\n    return finalPathPrefix + candidateFilePath;\r\n  }\r\n\r\n  static async createNewGameTestScript(project: Project) {\r\n    const defaultPath = await ProjectItemCreateManager._getDefaultBehaviorPackFolderPath(project, \"scripts\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"test\",\r\n      \"js\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.testJs,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      if (project.preferredScriptLanguage === ProjectScriptLanguage.typeScript) {\r\n        const tsFile = file.parentFolder.ensureFile(baseName + \".ts\");\r\n\r\n        if (tsFile !== null) {\r\n          const content = ProjectContent.getEmptyTestTypeScript(project.name, baseName);\r\n\r\n          tsFile.setContent(content);\r\n        }\r\n      }\r\n\r\n      const content = ProjectContent.getEmptyTestJavaScript(project.name, baseName);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static async createNewFunction(project: Project) {\r\n    const defaultPath = await this._getDefaultBehaviorPackFolderPath(project, \"functions\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"action\",\r\n      \"mcfunction\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.MCFunction,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const content = \"say hello\";\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static async createNewStructure(project: Project) {\r\n    const defaultPath = await ProjectItemCreateManager._getDefaultBehaviorPackFolderPath(project, \"structures\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"structure\",\r\n      \"mcstructure\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.structure,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const structureBytes = ProjectContent.generateDefaultStructure();\r\n\r\n      if (structureBytes !== undefined) {\r\n        file.setContent(structureBytes);\r\n      }\r\n    }\r\n\r\n    await project.save();\r\n  }\r\n\r\n  /**\r\n   * \"Empty file\" / \"Open as Raw\" companion: drops a minimally-valid stub at the\r\n   * conventional sub-folder for `contentType` under the project's default\r\n   * behavior or resource pack. Used by the Add dialog's \"Empty File (advanced)\"\r\n   * path so power users can author files that don't fit an existing wizard.\r\n   *\r\n   * If `desiredName` is omitted or already taken, a numeric suffix is appended\r\n   * (handled by `_generateFileNameForNewItem`). Returns the created\r\n   * `ProjectItem` so callers can select/open it.\r\n   */\r\n  static async createNewEmptyStubFile(\r\n    project: Project,\r\n    contentType: ProjectItemType,\r\n    desiredName?: string\r\n  ): Promise<ProjectItem | undefined> {\r\n    const config = ProjectItemCreateManager._getEmptyStubConfig(contentType);\r\n    if (!config) {\r\n      Log.error(\"createNewEmptyStubFile: unsupported contentType \" + contentType);\r\n      return undefined;\r\n    }\r\n\r\n    const baseFileName = (desiredName && desiredName.trim()) || config.defaultBaseName;\r\n\r\n    let defaultPath: string | undefined;\r\n    if (config.folderContext === FolderContext.resourcePack) {\r\n      defaultPath = await ProjectItemCreateManager._getDefaultResourcePackFolderPath(project, config.subfolder);\r\n    } else {\r\n      defaultPath = await ProjectItemCreateManager._getDefaultBehaviorPackFolderPath(project, config.subfolder);\r\n    }\r\n\r\n    if (defaultPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      baseFileName,\r\n      config.extension\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      contentType,\r\n      config.folderContext,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null && config.stubContent !== undefined) {\r\n      file.setContent(config.stubContent);\r\n    }\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  /**\r\n   * Map a content type to the sub-folder, default file name, extension, and\r\n   * minimally-valid stub content used by `createNewEmptyStubFile`. Stubs are\r\n   * intentionally tiny \u2014 the goal is to land an editable file at the right\r\n   * path, not to template a fully-valid definition (the wizards do that).\r\n   *\r\n   * TODO: the `format_version` in JSON stubs is hardcoded to `STUB_FORMAT_VERSION`\r\n   * below. The rest of the codebase resolves the latest format version\r\n   * dynamically (see `FormatVersionManager` and `Database.getLatestVersionInfo`).\r\n   * When this method becomes async-friendly, pull the version from there so\r\n   * stubs don't go stale.\r\n   */\r\n  private static readonly STUB_FORMAT_VERSION = \"1.21.0\";\r\n\r\n  // Lazily built on first access. Building this eagerly via a static IIFE caused\r\n  // a \"Cannot read properties of undefined (reading 'behaviorPack')\" crash at\r\n  // module load when this file ended up earlier in a circular import chain than\r\n  // ./Project (which exports FolderContext).\r\n  private static _emptyStubConfigsCache:\r\n    | Partial<\r\n        Record<\r\n          ProjectItemType,\r\n          { subfolder: string; defaultBaseName: string; extension: string; folderContext: FolderContext; body: string }\r\n        >\r\n      >\r\n    | undefined;\r\n\r\n  private static get EMPTY_STUB_CONFIGS(): Partial<\r\n    Record<\r\n      ProjectItemType,\r\n      { subfolder: string; defaultBaseName: string; extension: string; folderContext: FolderContext; body: string }\r\n    >\r\n  > {\r\n    if (ProjectItemCreateManager._emptyStubConfigsCache) {\r\n      return ProjectItemCreateManager._emptyStubConfigsCache;\r\n    }\r\n    const v = ProjectItemCreateManager.STUB_FORMAT_VERSION;\r\n    const json = (body: string) => body;\r\n    const bp = FolderContext.behaviorPack;\r\n    ProjectItemCreateManager._emptyStubConfigsCache = {\r\n      [ProjectItemType.entityTypeBehavior]: {\r\n        subfolder: \"entities\",\r\n        defaultBaseName: \"entity\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:entity\": {\\n    \"description\": {},\\n    \"components\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.blockTypeBehavior]: {\r\n        subfolder: \"blocks\",\r\n        defaultBaseName: \"block\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:block\": {\\n    \"description\": {},\\n    \"components\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.itemTypeBehavior]: {\r\n        subfolder: \"items\",\r\n        defaultBaseName: \"item\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:item\": {\\n    \"description\": {},\\n    \"components\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.lootTableBehavior]: {\r\n        subfolder: \"loot_tables\",\r\n        defaultBaseName: \"loot_table\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: '{\\n  \"pools\": []\\n}\\n',\r\n      },\r\n      [ProjectItemType.recipeBehavior]: {\r\n        subfolder: \"recipes\",\r\n        defaultBaseName: \"recipe\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:recipe_shapeless\": {\\n    \"description\": {},\\n    \"tags\": [],\\n    \"ingredients\": [],\\n    \"result\": {}\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.spawnRuleBehavior]: {\r\n        subfolder: \"spawn_rules\",\r\n        defaultBaseName: \"spawn_rule\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: json(`{\\n  \"format_version\": \"${v}\",\\n  \"minecraft:spawn_rules\": {\\n    \"description\": {},\\n    \"conditions\": []\\n  }\\n}\\n`),\r\n      },\r\n      [ProjectItemType.MCFunction]: {\r\n        subfolder: \"functions\",\r\n        defaultBaseName: \"action\",\r\n        extension: \"mcfunction\",\r\n        folderContext: bp,\r\n        body: \"# New function \u2014 add commands below\\n\",\r\n      },\r\n      [ProjectItemType.unknownJson]: {\r\n        subfolder: \"\",\r\n        defaultBaseName: \"untitled\",\r\n        extension: \"json\",\r\n        folderContext: bp,\r\n        body: \"{}\\n\",\r\n      },\r\n    };\r\n    return ProjectItemCreateManager._emptyStubConfigsCache;\r\n  }\r\n\r\n  private static _getEmptyStubConfig(contentType: ProjectItemType):\r\n    | {\r\n        subfolder: string;\r\n        defaultBaseName: string;\r\n        extension: string;\r\n        folderContext: FolderContext;\r\n        stubContent?: string;\r\n      }\r\n    | undefined {\r\n    const entry = ProjectItemCreateManager.EMPTY_STUB_CONFIGS[contentType];\r\n    if (!entry) {\r\n      return undefined;\r\n    }\r\n    return {\r\n      subfolder: entry.subfolder,\r\n      defaultBaseName: entry.defaultBaseName,\r\n      extension: entry.extension,\r\n      folderContext: entry.folderContext,\r\n      stubContent: entry.body,\r\n    };\r\n  }\r\n\r\n  static async createNewActionSet(project: Project) {\r\n    const defaultPath = await this._getDefaultBehaviorPackFolderPath(project, \"actions\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"actionset\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.actionSet,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      const content = ProjectContent.getEmptyActionSet(project.name, baseName);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n  }\r\n\r\n  static async createNewDocumentedType(project: Project) {\r\n    const defaultPath = await this._getDefaultBehaviorPackFolderPath(project, \"docs\");\r\n\r\n    if (defaultPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const candidateFolderPath = await ProjectItemCreateManager._generateFolderNameForNewItem(\r\n      project,\r\n      defaultPath,\r\n      \"type\"\r\n    );\r\n\r\n    if (candidateFolderPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFolderPath,\r\n      ProjectItemStorageType.folder,\r\n      candidateFolderPath,\r\n      ProjectItemType.documentedTypeFolder,\r\n      FolderContext.metaData,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    await pi.loadFolder();\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n  }\r\n\r\n  static getExistingPath(project: Project, itemType: ProjectItemType) {\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const item of project.items) {\r\n      if (item.itemType === itemType && item.primaryFile) {\r\n        return item.primaryFile.parentFolder.getFolderRelativePath(project.projectFolder);\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async createNewForm(project: Project, name?: string, folder?: IFolder) {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, ProjectItemType.dataForm);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultBehaviorPackFolderPath(project, \"forms\");\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!name) {\r\n      name = \"form\";\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      name,\r\n      \"form.json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.dataForm,\r\n      FolderContext.metaData,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const content = \"{}\";\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async ensureSoundDefinitionCatalogDefinition(\r\n    project: Project\r\n  ): Promise<SoundDefinitionCatalogDefinition | undefined> {\r\n    const items = project.getItemsByType(ProjectItemType.soundDefinitionCatalog);\r\n\r\n    if (items.length > 0) {\r\n      if (!items[0].isContentLoaded) {\r\n        await items[0].loadContent();\r\n      }\r\n\r\n      const itemFile = items[0].primaryFile;\r\n\r\n      if (itemFile) {\r\n        if (!itemFile.isContentLoaded) {\r\n          await itemFile.loadContent();\r\n        }\r\n\r\n        if (!itemFile.content) {\r\n          this.setFileToDefaultContent(itemFile);\r\n        }\r\n\r\n        return await SoundDefinitionCatalogDefinition.ensureOnFile(itemFile);\r\n      }\r\n    }\r\n\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    path = await this._getDefaultResourcePackFolderPath(project, \"sounds\");\r\n\r\n    if (path === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      \"sound_definitions\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.soundDefinitionCatalog,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file === null) {\r\n      return undefined;\r\n    }\r\n\r\n    this.setFileToDefaultContent(file);\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return await SoundDefinitionCatalogDefinition.ensureOnFile(file);\r\n  }\r\n\r\n  static setFileToDefaultContent(file: IFile) {\r\n    const content = '{\\n   \"format_version\" : \"1.20.20\",\\n   \"sound_definitions\" : {}\\n}';\r\n\r\n    file.setContent(content);\r\n    file.saveContent();\r\n  }\r\n\r\n  static async addFromGallery(project: Project, newName: string, galleryItem: IGalleryItem) {\r\n    if (galleryItem.type === GalleryItemType.entityType) {\r\n      await ProjectCreateManager.addEntityTypeFromGallery(\r\n        project,\r\n        galleryItem,\r\n        newName,\r\n        NewEntityTypeAddMode.baseId,\r\n        async (message: string) => {\r\n          Log.message(message);\r\n        }\r\n      );\r\n    } else if (galleryItem.type === GalleryItemType.itemType) {\r\n      await ProjectCreateManager.addItemTypeFromGallery(project, galleryItem, newName);\r\n    } else if (galleryItem.type === GalleryItemType.blockType) {\r\n      await ProjectCreateManager.addBlockTypeFromGallery(project, galleryItem, newName);\r\n    } else if (galleryItem.type === GalleryItemType.modelDesign) {\r\n      await ProjectCreateManager.addModelDesignFromGallery(project, galleryItem, newName);\r\n    } else if (galleryItem.type >= GalleryItemType.spawnLootRecipes && galleryItem.targetType) {\r\n      await ProjectItemCreateManager.createNewItem(project, {\r\n        itemType: galleryItem.targetType,\r\n        contentTemplateName: galleryItem.id,\r\n        name: newName,\r\n        folder: undefined,\r\n      });\r\n    }\r\n  }\r\n\r\n  static async ensureSoundCatalogDefinition(project: Project): Promise<SoundCatalogDefinition | undefined> {\r\n    const items = project.getItemsByType(ProjectItemType.soundCatalog);\r\n\r\n    if (items.length > 0) {\r\n      if (!items[0].isContentLoaded) {\r\n        await items[0].loadContent();\r\n      }\r\n\r\n      if (items[0].primaryFile) {\r\n        return await SoundCatalogDefinition.ensureOnFile(items[0].primaryFile);\r\n      }\r\n    }\r\n\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    path = await this._getDefaultResourcePackFolderPath(project, \"sounds\");\r\n\r\n    if (path === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      \"sounds\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.soundCatalog,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const content = \"{\\n}\";\r\n\r\n    file.setContent(content);\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return await SoundCatalogDefinition.ensureOnFile(file);\r\n  }\r\n\r\n  static async createDesignPackJsonItem(\r\n    project: Project,\r\n    itemSeed: IProjectItemSeed\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRootsForType = ProjectItemUtilities.getFolderRootsForType(itemSeed.itemType);\r\n\r\n    Log.assert(folderRootsForType.length > 0, \"No folder roots for item type: \" + itemSeed.itemType);\r\n\r\n    if (itemSeed.folder) {\r\n      path = itemSeed.folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemSeed.itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultDesignPackFolderPath(project, folderRootsForType[0]);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    let namespacedId = itemSeed.name;\r\n    let name = namespacedId;\r\n\r\n    if (!namespacedId || !name) {\r\n      name = ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n      namespacedId = name;\r\n    }\r\n\r\n    name = MinecraftUtilities.getNamespacedIdName(name);\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(project, path, name, \"json\");\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemSeed.itemType,\r\n      FolderContext.designPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      let content = \"{}\";\r\n\r\n      await Database.loadContent();\r\n\r\n      if (Database.contentFolder !== null) {\r\n        const contentTemplate = itemSeed.contentTemplateName\r\n          ? itemSeed.contentTemplateName\r\n          : ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n\r\n        const sourceFile = await Database.contentFolder.getFileFromRelativePath(\r\n          \"/newitemjson/\" + contentTemplate + \".json\"\r\n        );\r\n\r\n        if (sourceFile) {\r\n          if (!sourceFile.isContentLoaded) {\r\n            await sourceFile.loadContent();\r\n          }\r\n\r\n          if (sourceFile.content) {\r\n            content = sourceFile.content.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      content = content.replace(/examplens:examplename/g, namespacedId);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createBehaviorPackJsonItem(\r\n    project: Project,\r\n    itemSeed: IProjectItemSeed\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRootsForType = ProjectItemUtilities.getFolderRootsForType(itemSeed.itemType);\r\n\r\n    Log.assert(folderRootsForType.length > 0, \"No folder roots for item type: \" + itemSeed.itemType);\r\n\r\n    if (itemSeed.folder) {\r\n      path = itemSeed.folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemSeed.itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultBehaviorPackFolderPath(project, folderRootsForType[0]);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    let namespacedId = itemSeed.name;\r\n    let name = namespacedId;\r\n\r\n    if (!namespacedId || !name) {\r\n      name = ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n      namespacedId = name;\r\n    }\r\n\r\n    name = MinecraftUtilities.getNamespacedIdName(name);\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(project, path, name, \"json\");\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemSeed.itemType,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      let content = \"{}\";\r\n\r\n      await Database.loadContent();\r\n\r\n      if (Database.contentFolder !== null) {\r\n        const contentTemplate = itemSeed.contentTemplateName\r\n          ? itemSeed.contentTemplateName\r\n          : ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n\r\n        const path = \"/newitemjson/\" + contentTemplate + \".json\";\r\n        const sourceFile = await Database.contentFolder.getFileFromRelativePath(path);\r\n\r\n        if (sourceFile) {\r\n          if (!sourceFile.isContentLoaded) {\r\n            await sourceFile.loadContent();\r\n          }\r\n\r\n          if (sourceFile.content) {\r\n            content = sourceFile.content.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      content = content.replace(/examplens:examplename/g, namespacedId);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createResourcePackJsonItem(\r\n    project: Project,\r\n    itemSeed: IProjectItemSeed\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    const folderRootsForType = ProjectItemUtilities.getFolderRootsForType(itemSeed.itemType);\r\n\r\n    Log.assert(folderRootsForType.length > 0, \"No folder roots for item type: \" + itemSeed.itemType);\r\n\r\n    if (itemSeed.folder) {\r\n      path = itemSeed.folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemSeed.itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultResourcePackFolderPath(project, folderRootsForType[0]);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    let namespacedId = itemSeed.name;\r\n    let name = namespacedId;\r\n\r\n    if (!namespacedId || !name) {\r\n      name = ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n      namespacedId = name;\r\n    }\r\n\r\n    name = MinecraftUtilities.getNamespacedIdName(name);\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(project, path, name, \"json\");\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemSeed.itemType,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      let content = \"{}\";\r\n\r\n      await Database.loadContent();\r\n\r\n      if (Database.contentFolder !== null) {\r\n        const contentTemplate = itemSeed.contentTemplateName\r\n          ? itemSeed.contentTemplateName\r\n          : ProjectItemUtilities.getNewItemTechnicalName(itemSeed.itemType);\r\n\r\n        const sourceFile = await Database.contentFolder.getFileFromRelativePath(\r\n          \"/newitemjson/\" + contentTemplate + \".json\"\r\n        );\r\n\r\n        if (sourceFile) {\r\n          if (!sourceFile.isContentLoaded) {\r\n            await sourceFile.loadContent();\r\n          }\r\n\r\n          if (sourceFile.content) {\r\n            content = sourceFile.content.toString();\r\n          }\r\n        }\r\n      }\r\n\r\n      content = content.replace(/examplens:examplename/g, namespacedId);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createNewResourcePackBinaryItem(\r\n    project: Project,\r\n    sourceFileName: string,\r\n    extension: string,\r\n    defaultFolderPath: string,\r\n    exampleName: string,\r\n    itemType: ProjectItemType,\r\n    name?: string,\r\n    folder?: IFolder\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const sourceFile = Database.contentFolder.ensureFile(sourceFileName);\r\n\r\n    if (!sourceFile.isContentLoaded) {\r\n      await sourceFile.loadContent();\r\n    }\r\n\r\n    if (!(sourceFile.content instanceof Uint8Array)) {\r\n      Log.error(\"Could not find source \" + extension + \" file content.\");\r\n      return;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultResourcePackFolderPath(project, defaultFolderPath);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!name) {\r\n      name = exampleName;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      name,\r\n      extension\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemType,\r\n      FolderContext.resourcePack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      file.setContent(sourceFile.content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createNewDesignPackBinaryItem(\r\n    project: Project,\r\n    sourceFileName: string,\r\n    extension: string,\r\n    defaultFolderPath: string,\r\n    exampleName: string,\r\n    itemType: ProjectItemType,\r\n    name?: string,\r\n    folder?: IFolder\r\n  ): Promise<ProjectItem | undefined> {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const sourceFile = Database.contentFolder.ensureFile(sourceFileName);\r\n\r\n    if (!sourceFile.isContentLoaded) {\r\n      await sourceFile.loadContent();\r\n    }\r\n\r\n    if (!(sourceFile.content instanceof Uint8Array)) {\r\n      Log.error(\"Could not find source \" + extension + \" file content.\");\r\n      return;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, itemType);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultDesignPackFolderPath(project, defaultFolderPath);\r\n\r\n        if (path === undefined) {\r\n          return undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!name) {\r\n      name = exampleName;\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path,\r\n      name,\r\n      extension\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      itemType,\r\n      FolderContext.designPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      file.setContent(sourceFile.content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n\r\n    return pi;\r\n  }\r\n\r\n  static async createNewDesignTexture(\r\n    project: Project,\r\n    name?: string,\r\n    folder?: IFolder,\r\n    creationData?: object\r\n  ): Promise<ProjectItem | undefined> {\r\n    const projectItem = await this.createNewDesignPackBinaryItem(\r\n      project,\r\n      \"blank64.png\",\r\n      \"png\",\r\n      \"design_textures\",\r\n      \"design_texture\",\r\n      ProjectItemType.designTexture,\r\n      name,\r\n      folder\r\n    );\r\n\r\n    if (projectItem && creationData) {\r\n      const imageEdits = await ImageEditsDefinition.ensureAsAccessoryOnImageProjectItem(projectItem);\r\n\r\n      if (imageEdits) {\r\n        await imageEdits.setFromCreationData(creationData as IImageEdits);\r\n      }\r\n    }\r\n\r\n    return projectItem;\r\n  }\r\n  static async createNewTexture(project: Project, name?: string, folder?: IFolder): Promise<ProjectItem | undefined> {\r\n    return await this.createNewResourcePackBinaryItem(\r\n      project,\r\n      \"blank64.png\",\r\n      \"png\",\r\n      \"textures\",\r\n      \"texture\",\r\n      ProjectItemType.texture,\r\n      name,\r\n      folder\r\n    );\r\n  }\r\n\r\n  static async createNewAudio(project: Project, name?: string, folder?: IFolder): Promise<ProjectItem | undefined> {\r\n    return await this.createNewResourcePackBinaryItem(\r\n      project,\r\n      \"blank.ogg\",\r\n      \"ogg\",\r\n      \"sounds\",\r\n      \"sound\",\r\n      ProjectItemType.audio,\r\n      name,\r\n      folder\r\n    );\r\n  }\r\n\r\n  static async createNewWorldTest(project: Project, name?: string, folder?: IFolder) {\r\n    let path: string | undefined = undefined;\r\n\r\n    if (!project.projectFolder) {\r\n      return;\r\n    }\r\n\r\n    if (folder) {\r\n      path = folder.getFolderRelativePath(project.projectFolder);\r\n    } else {\r\n      path = ProjectItemCreateManager.getExistingPath(project, ProjectItemType.dataForm);\r\n\r\n      if (path === undefined) {\r\n        path = await this._getDefaultBehaviorPackFolderPath(project, \"forms\");\r\n\r\n        if (path === undefined) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!path) {\r\n      return;\r\n    }\r\n\r\n    if (!name) {\r\n      name = \"form\";\r\n    }\r\n\r\n    const candidateFilePath = await ProjectItemCreateManager._generateFileNameForNewItem(\r\n      project,\r\n      path + \"tests/\",\r\n      \"worldtest\",\r\n      \"json\"\r\n    );\r\n\r\n    if (candidateFilePath === undefined) {\r\n      return;\r\n    }\r\n\r\n    const pi = project.ensureItemByProjectPath(\r\n      candidateFilePath,\r\n      ProjectItemStorageType.singleFile,\r\n      StorageUtilities.getLeafName(candidateFilePath),\r\n      ProjectItemType.worldTest,\r\n      FolderContext.behaviorPack,\r\n      undefined,\r\n      ProjectItemCreationType.normal\r\n    );\r\n\r\n    const file = await pi.loadFileContent();\r\n\r\n    if (file !== null) {\r\n      const baseName = StorageUtilities.getBaseFromName(file.name);\r\n\r\n      const content = ProjectContent.getEmptyWorldTest(project.name, baseName);\r\n\r\n      file.setContent(content);\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(project, false);\r\n\r\n    await project.save();\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItemCreateManager from \"../app/ProjectItemCreateManager\";\r\nimport { AllowedExtensionsSet } from \"../storage/StorageUtilities\";\r\n\r\nexport default class AudioDefinition implements IDefinition {\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  private _onLoaded = new EventDispatcher<AudioDefinition, AudioDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get id() {\r\n    if (this._file) {\r\n      return this._file.name;\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string | undefined) {\r\n    this._id = newId;\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<AudioDefinition, AudioDefinition>) {\r\n    let afd: AudioDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      afd = new AudioDefinition();\r\n\r\n      afd.file = file;\r\n\r\n      file.manager = afd;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof AudioDefinition) {\r\n      afd = file.manager as AudioDefinition;\r\n\r\n      if (!afd.isLoaded) {\r\n        if (loadHandler) {\r\n          afd.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await afd.load();\r\n      }\r\n    }\r\n\r\n    return afd;\r\n  }\r\n\r\n  persist(): boolean {\r\n    return false;\r\n  }\r\n\r\n  static canonicalizeAudioPath(projectPath: string | undefined) {\r\n    if (projectPath === undefined) {\r\n      return undefined;\r\n    }\r\n    projectPath = projectPath.toLowerCase();\r\n\r\n    const lastPeriod = projectPath.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      const removedPart = projectPath.substring(lastPeriod + 1);\r\n\r\n      if (AllowedExtensionsSet.has(removedPart)) {\r\n        projectPath = projectPath.substring(0, lastPeriod);\r\n      }\r\n    }\r\n    /*\r\n    Log.assert(\r\n      projectPath.startsWith(\"sounds/\") || projectPath.startsWith(\"music/\") || projectPath.startsWith(\"$\"),\r\n      \"Unexpected audio path: \" + projectPath\r\n    );*/\r\n\r\n    return projectPath;\r\n  }\r\n\r\n  async ensureSoundDefinitionsForFile(project: Project) {\r\n    if (!this._file) {\r\n      return;\r\n    }\r\n\r\n    let soundDefinitionCat = await ProjectItemCreateManager.ensureSoundDefinitionCatalogDefinition(project);\r\n\r\n    if (this._file && soundDefinitionCat) {\r\n      let matches = soundDefinitionCat.getSoundDefinitionMatchesByPath(this._file);\r\n\r\n      if (matches) {\r\n        let keyCount = 0;\r\n\r\n        for (const key in matches) {\r\n          if (key) {\r\n            keyCount++;\r\n          }\r\n        }\r\n\r\n        if (keyCount === 0) {\r\n          soundDefinitionCat.ensureDefintionForFile(project, this._file);\r\n        }\r\n      }\r\n\r\n      soundDefinitionCat.persist();\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { ISoundReference, ISoundDefinitionCatalog, ISoundDefinition } from \"./ISoundDefinitionCatalog\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Database from \"./Database\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport AudioDefinition from \"./AudioDefinition\";\r\n\r\nexport default class SoundDefinitionCatalogDefinition {\r\n  public _data?: ISoundDefinitionCatalog;\r\n  private _file?: IFile;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n\r\n  public id: string | undefined;\r\n\r\n  private _onLoaded = new EventDispatcher<SoundDefinitionCatalogDefinition, SoundDefinitionCatalogDefinition>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public getSoundDefinitionSoundInstanceList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundList = [];\r\n\r\n    if (this._data.sound_definitions) {\r\n      for (const key in this._data.sound_definitions) {\r\n        const soundDefSet = this._data.sound_definitions[key];\r\n\r\n        if (soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n          for (const sound of soundDefSet.sounds) {\r\n            soundList.push(sound);\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const key in this._data) {\r\n        if (key !== \"format_version\" && key !== \"sound_definitions\") {\r\n          const soundDefSet = (this._data as any)[key] as ISoundDefinition;\r\n\r\n          if (soundDefSet && soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n            for (const sound of soundDefSet.sounds) {\r\n              soundList.push(sound);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundList;\r\n  }\r\n\r\n  public getCanonincalizedSoundPathList() {\r\n    if (!this._data) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundList: string[] = [];\r\n\r\n    if (this._data.sound_definitions) {\r\n      for (const key in this._data.sound_definitions) {\r\n        const soundDefSet = this._data.sound_definitions[key];\r\n\r\n        if (soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n          for (const sound of soundDefSet.sounds) {\r\n            if (typeof sound === \"string\") {\r\n              let path = AudioDefinition.canonicalizeAudioPath(sound);\r\n\r\n              if (path) {\r\n                soundList.push(path);\r\n              }\r\n            } else if (typeof sound.name === \"string\") {\r\n              let path = AudioDefinition.canonicalizeAudioPath(sound.name);\r\n\r\n              if (path) {\r\n                soundList.push(path);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const key in this._data) {\r\n        if (key !== \"format_version\" && key !== \"sound_definitions\") {\r\n          const soundDefSet = (this._data as any)[key] as ISoundDefinition;\r\n\r\n          if (soundDefSet && soundDefSet.sounds && Array.isArray(soundDefSet.sounds)) {\r\n            for (const sound of soundDefSet.sounds) {\r\n              if (typeof sound === \"string\") {\r\n                let path = AudioDefinition.canonicalizeAudioPath(sound);\r\n\r\n                if (path) {\r\n                  soundList.push(path);\r\n                }\r\n              } else if (typeof sound.name === \"string\") {\r\n                let path = AudioDefinition.canonicalizeAudioPath(sound.name);\r\n\r\n                if (path) {\r\n                  soundList.push(path);\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundList;\r\n  }\r\n\r\n  public get soundDefinitionPathList() {\r\n    if (!this._data || !this._data.sound_definitions) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundDefPathList = [];\r\n\r\n    for (const key in this._data.sound_definitions) {\r\n      const soundDefSet = this._data.sound_definitions[key];\r\n\r\n      for (const sound of soundDefSet.sounds) {\r\n        if (typeof sound === \"string\") {\r\n          soundDefPathList.push(sound);\r\n        } else {\r\n          soundDefPathList.push(sound.name);\r\n        }\r\n      }\r\n    }\r\n\r\n    return soundDefPathList;\r\n  }\r\n\r\n  public getSoundDefinitionSetNameList() {\r\n    if (!this._data || !this._data.sound_definitions) {\r\n      return undefined;\r\n    }\r\n\r\n    const soundDefSetNameList = [];\r\n\r\n    for (const key in this._data.sound_definitions) {\r\n      soundDefSetNameList.push(key);\r\n    }\r\n\r\n    // this seems like a legacy mode?\r\n    for (const key in this._data) {\r\n      if (key !== \"sound_definitions\" && key !== \"format_version\") {\r\n        soundDefSetNameList.push(key);\r\n      }\r\n    }\r\n\r\n    return soundDefSetNameList;\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    file: IFile,\r\n    loadHandler?: IEventHandler<SoundDefinitionCatalogDefinition, SoundDefinitionCatalogDefinition>\r\n  ) {\r\n    let et: SoundDefinitionCatalogDefinition | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      et = new SoundDefinitionCatalogDefinition();\r\n\r\n      et.file = file;\r\n\r\n      file.manager = et;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof SoundDefinitionCatalogDefinition) {\r\n      et = file.manager as SoundDefinitionCatalogDefinition;\r\n\r\n      if (!et.isLoaded) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load();\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    if (!this._data) {\r\n      Log.unexpectedUndefined(\"SDCDP\");\r\n      return false;\r\n    }\r\n\r\n    return this._file.setObjectContentIfSemanticallyDifferent(this._data);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"TTCDF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._data = data;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  async deleteLinkToChild(childItem: ProjectItem) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (this._data === undefined) {\r\n      await this.load();\r\n    }\r\n\r\n    if (childItem.itemType === ProjectItemType.texture && this._data && this._data.sound_definitions) {\r\n      if (!childItem.isContentLoaded) {\r\n        await childItem.loadContent();\r\n      }\r\n\r\n      if (childItem.primaryFile && packRootFolder) {\r\n        let relativePath = this.getRelativePath(childItem.primaryFile, packRootFolder);\r\n\r\n        if (relativePath) {\r\n          for (const key in this._data.sound_definitions) {\r\n            const soundDef = this._data.sound_definitions[key];\r\n\r\n            for (const sound of soundDef.sounds) {\r\n              if (typeof sound === \"string\") {\r\n                if (sound === relativePath) {\r\n                  soundDef.sounds = Utilities.removeItemInArray(sound, soundDef.sounds);\r\n                }\r\n              } else if (sound.name === relativePath) {\r\n                soundDef.sounds = Utilities.removeItemInArray(sound, soundDef.sounds);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.persist();\r\n  }\r\n\r\n  getPackRootFolder() {\r\n    let packRootFolder = undefined;\r\n    if (this.file && this.file.parentFolder) {\r\n      let parentFolder = this.file.parentFolder;\r\n\r\n      packRootFolder = StorageUtilities.getParentOfParentFolderNamed(\"sounds\", parentFolder);\r\n    }\r\n\r\n    return packRootFolder;\r\n  }\r\n\r\n  getRelativePath(file: IFile, packRootFolder: IFolder) {\r\n    let relativePath = file.getFolderRelativePath(packRootFolder);\r\n\r\n    if (relativePath) {\r\n      relativePath = StorageUtilities.ensureNotStartsWithDelimiter(relativePath);\r\n    }\r\n\r\n    relativePath = AudioDefinition.canonicalizeAudioPath(relativePath);\r\n\r\n    return relativePath;\r\n  }\r\n\r\n  ensureDefintionForFile(project: Project, file: IFile) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    if (!packRootFolder || !this._data) {\r\n      return;\r\n    }\r\n\r\n    let relativePath = this.getRelativePath(file, packRootFolder);\r\n\r\n    if (!relativePath) {\r\n      return;\r\n    }\r\n\r\n    const soundDefName = StorageUtilities.getBaseFromName(file.name).toLowerCase();\r\n\r\n    if (Utilities.isUsableAsObjectKey(soundDefName)) {\r\n      let soundDef: ISoundDefinition | undefined = this._data.sound_definitions[soundDefName];\r\n\r\n      if (!soundDef) {\r\n        soundDef = {\r\n          category: \"neutral\",\r\n          sounds: [],\r\n        };\r\n\r\n        this._data.sound_definitions[soundDefName] = soundDef;\r\n      }\r\n\r\n      if (soundDef && !this.hasSoundByPath(soundDef, relativePath)) {\r\n        soundDef.sounds.push({\r\n          is3D: false,\r\n          name: relativePath,\r\n          volume: 1,\r\n          weight: 10,\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  hasSoundByPath(soundDefSet: ISoundDefinition, path: string) {\r\n    for (const sound of soundDefSet.sounds) {\r\n      if (typeof sound === \"string\" && sound === path) {\r\n        return sound;\r\n      } else if (typeof sound !== \"string\" && sound.name === path) {\r\n        return sound;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getSoundReferenceMatchesByPath(file: IFile) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n    if (!packRootFolder) {\r\n      return;\r\n    }\r\n\r\n    let relativePath = this.getRelativePath(file, packRootFolder);\r\n\r\n    const retSoundRefs: { [name: string]: ISoundReference[] } = {};\r\n\r\n    if (relativePath && this._data) {\r\n      const keys = this.getSoundDefinitionSetNameList();\r\n\r\n      for (const key in keys) {\r\n        if (Utilities.isUsableAsObjectKey(key)) {\r\n          let soundDefSet = this._data.sound_definitions[key];\r\n\r\n          if (!soundDefSet) {\r\n            soundDefSet = (this._data as any)[key];\r\n          }\r\n\r\n          if (soundDefSet && soundDefSet.sounds) {\r\n            for (const soundInstance of soundDefSet.sounds) {\r\n              if (typeof soundInstance === \"string\") {\r\n                if (StorageUtilities.isPathEqual(soundInstance, relativePath)) {\r\n                  if (!retSoundRefs[key]) {\r\n                    retSoundRefs[key] = [];\r\n                  }\r\n                  retSoundRefs[key].push({ name: soundInstance });\r\n                }\r\n              } else if (StorageUtilities.isPathEqual(soundInstance.name, relativePath)) {\r\n                if (!retSoundRefs[key]) {\r\n                  retSoundRefs[key] = [];\r\n                }\r\n                retSoundRefs[key].push(soundInstance);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return retSoundRefs;\r\n  }\r\n\r\n  getSoundDefinitionMatchesByPath(file: IFile) {\r\n    let packRootFolder = this.getPackRootFolder();\r\n    if (!packRootFolder) {\r\n      return;\r\n    }\r\n\r\n    let relativePath = this.getRelativePath(file, packRootFolder);\r\n\r\n    const retSoundDefs: { [name: string]: ISoundDefinition } = {};\r\n\r\n    if (relativePath && this._data) {\r\n      for (const key in this._data.sound_definitions) {\r\n        const soundDefSet = this._data.sound_definitions[key];\r\n\r\n        if (soundDefSet && soundDefSet.sounds) {\r\n          for (const soundInstance of soundDefSet.sounds) {\r\n            if (typeof soundInstance === \"string\") {\r\n              if (StorageUtilities.isPathEqual(soundInstance, relativePath)) {\r\n                retSoundDefs[key] = soundDefSet;\r\n              }\r\n            } else if (StorageUtilities.isPathEqual(soundInstance.name, relativePath)) {\r\n              retSoundDefs[key] = soundDefSet;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return retSoundDefs;\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem) {\r\n    const audioItems = project.getItemsByType(ProjectItemType.audio);\r\n\r\n    let packRootFolder = this.getPackRootFolder();\r\n\r\n    let soundPathList = this.getCanonincalizedSoundPathList();\r\n\r\n    for (const candItem of audioItems) {\r\n      if (packRootFolder && soundPathList) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          let relativePath = this.getRelativePath(candItem.primaryFile, packRootFolder);\r\n\r\n          if (relativePath) {\r\n            if (soundPathList.includes(relativePath)) {\r\n              item.addChildItem(candItem);\r\n\r\n              const nextSound: string[] = [];\r\n\r\n              for (const sound of soundPathList) {\r\n                if (sound !== relativePath) {\r\n                  nextSound.push(sound);\r\n                }\r\n              }\r\n\r\n              soundPathList = nextSound;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (soundPathList) {\r\n      for (const soundDef of soundPathList) {\r\n        const isVanilla = await Database.isVanillaToken(soundDef);\r\n        item.addUnfulfilledRelationship(soundDef, ProjectItemType.audio, isVanilla);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "/**\r\n * VanillaGeometryTransforms\r\n *\r\n * This module provides transforms for vanilla Minecraft geometry files that need\r\n * manual corrections because Minecraft's rendering code has hardcoded optimizations\r\n * that affect how certain models appear.\r\n *\r\n * The Minecraft game engine contains special rendering logic for certain entities\r\n * that isn't represented in the geometry files themselves. This transform system\r\n * allows MCTools to replicate those visual adjustments so models render correctly.\r\n *\r\n * Last Updated: December 2025\r\n */\r\n\r\nimport { IGeometry } from \"./IModelGeometry\";\r\nimport Log from \"../core/Log\";\r\n\r\n/**\r\n * Represents a transform operation that can be applied to a bone\r\n */\r\nexport interface IBoneTransform {\r\n  /**\r\n   * Name of the bone to transform. Use \"*\" for all bones.\r\n   */\r\n  boneName: string;\r\n\r\n  /**\r\n   * If set, adds this rotation (in degrees) to the bone's bind_pose_rotation\r\n   */\r\n  addBindPoseRotation?: [number, number, number];\r\n\r\n  /**\r\n   * If set, replaces the bone's bind_pose_rotation\r\n   */\r\n  setBindPoseRotation?: [number, number, number];\r\n\r\n  /**\r\n   * If set, adds this offset (in pixels) to the bone's pivot\r\n   */\r\n  addPivotOffset?: [number, number, number];\r\n\r\n  /**\r\n   * If set, replaces the bone's pivot\r\n   */\r\n  setPivot?: [number, number, number];\r\n\r\n  /**\r\n   * If set, adds this offset (in pixels) to all cube origins in this bone\r\n   */\r\n  addCubeOriginOffset?: [number, number, number];\r\n\r\n  /**\r\n   * If set, changes the parent of this bone\r\n   */\r\n  setParent?: string | null;\r\n\r\n  /**\r\n   * If set, removes the parent (makes bone a root bone)\r\n   */\r\n  removeParent?: boolean;\r\n\r\n  /**\r\n   * If set, adds a per-cube rotation (in degrees) to every cube in this bone.\r\n   * Unlike setBindPoseRotation, this does NOT rotate the bone's TransformNode,\r\n   * so child bones keep their world-space positions.\r\n   * The cube's rotation pivot is set to the bone's pivot.\r\n   */\r\n  setCubeRotation?: [number, number, number];\r\n}\r\n\r\n/**\r\n * Represents all transforms to apply to a specific vanilla geometry\r\n */\r\nexport interface IVanillaGeometryTransform {\r\n  /**\r\n   * Geometry identifier patterns this transform applies to.\r\n   * Supports wildcards: \"geometry.cow.*\" matches any cow geometry variant\r\n   */\r\n  geometryPatterns: string[];\r\n\r\n  /**\r\n   * Human-readable description of why this transform is needed\r\n   */\r\n  reason: string;\r\n\r\n  /**\r\n   * Array of bone transforms to apply in order\r\n   */\r\n  boneTransforms: IBoneTransform[];\r\n}\r\n\r\n/**\r\n * Registry of all vanilla geometry transforms.\r\n *\r\n * When adding new transforms:\r\n * 1. Document why Minecraft renders this model differently\r\n * 2. Specify the exact geometry patterns that need correction\r\n * 3. Apply minimal transforms to achieve correct appearance\r\n *\r\n * IMPORTANT: Most vanilla entities now use v2/v3 geometry formats that have correct\r\n * cube-level rotations and don't need bone-level transforms. Only add transforms for\r\n * specific legacy geometry IDs that are still actively used and have issues.\r\n *\r\n * Geometry format evolution:\r\n * - Legacy (v1.8 format): Uses bind_pose_rotation on bones, which affects child bones\r\n *   and requires Minecraft's renderer to apply hardcoded compensations\r\n * - Modern (v2/v3 format): Uses per-cube rotation, which doesn't affect bone hierarchy\r\n *   and renders correctly without special handling\r\n *\r\n * Entity geometry usage (as of Jan 2026):\r\n * - cow.entity.json uses geometry.cow.v2 (modern format, no transform needed)\r\n * - pig.entity.json uses geometry.pig.v3 (modern format, no transform needed)\r\n * - sheep.entity.json uses geometry.sheep.v1.8 (legacy format, but has bind_pose_rotation)\r\n * - cat.entity.json uses geometry.cat (legacy v1.21.0 format \u2014 body cube is modeled\r\n *   vertically [4,16,6] with NO rotation. Minecraft applies a hardcoded 90\u00B0 X rotation.)\r\n * - wolf.entity.json uses geometry.wolf (legacy flat hierarchy \u2014 body and upperBody\r\n *   cubes modeled vertically, all bones root-level with no parent chain.)\r\n * - fox.entity.json uses geometry.fox (hierarchical \u2014 body cube [6,11,6] modeled\r\n *   vertically with children parented to body. Needs 90\u00B0 X on body.)\r\n * - ocelot.entity.json uses geometry.ocelot.v1.8 (identical structure to geometry.cat.)\r\n * - chicken.entity.json uses geometry.chicken.v1.12 (modern, has per-cube rotation.)\r\n */\r\nconst VANILLA_GEOMETRY_TRANSFORMS: IVanillaGeometryTransform[] = [\r\n  // \u2500\u2500 Cat / Ocelot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // geometry.cat and geometry.ocelot.v1.8 model the body cube as a tall\r\n  // vertical column [4,16,6] but Minecraft's engine hardcodes a 90\u00B0 X\r\n  // rotation on the body cube only (matching cow.v2's per-cube approach).\r\n  //\r\n  // Comparison with geometry.ocelot v1.0 (which has bind_pose_rotation):\r\n  //   v1.0:  body pivot [0,12,-10], cube [-2,-7,-18], bind_pose_rotation [90,0,0]\r\n  //   v1.8:  body pivot [0,7,1],    cube [-2,-1,-2],  NO rotation\r\n  //\r\n  // All child bones (head, legs, tail) already have correct world-space\r\n  // positions \u2014 only the body cube needs rotation.  Tail cubes are vertical\r\n  // at rest; the curve comes from animation, not static geometry.\r\n  {\r\n    geometryPatterns: [\"geometry.cat\", \"geometry.ocelot.v1.8\"],\r\n    reason: \"Body cube modeled vertically [4,16,6] \u2014 Minecraft hardcodes per-cube 90\u00B0 X rotation (matches cow.v2 convention)\",\r\n    boneTransforms: [\r\n      { boneName: \"body\", setCubeRotation: [90, 0, 0] },\r\n    ],\r\n  },\r\n\r\n  // \u2500\u2500 Sheep \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Sheep geometry has bind_pose_rotation [90,0,0] on the body bone, with\r\n  // legs as children. The sheep's leg cube positions are in WORLD coordinates\r\n  // (Y=0 to Y=12, ground to hip). Applying the body's 90\u00B0 rotation to these\r\n  // world-space legs scatters them.\r\n  //\r\n  // Fix: detach the legs from the body so they render at their world-space\r\n  // positions. The body's bind_pose_rotation correctly rotates its own cubes;\r\n  // the head is already a root bone (no parent).\r\n  {\r\n    geometryPatterns: [\"geometry.sheep.sheared.v1.8\", \"geometry.sheep.v1.8*\"],\r\n    reason: \"Sheep legs are in world coordinates \u2014 detach from rotated body bone\",\r\n    boneTransforms: [\r\n      { boneName: \"leg0\", removeParent: true },\r\n      { boneName: \"leg1\", removeParent: true },\r\n      { boneName: \"leg2\", removeParent: true },\r\n      { boneName: \"leg3\", removeParent: true },\r\n    ],\r\n  },\r\n\r\n  // \u2500\u2500 Turtle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // The turtle body has bind_pose_rotation [90,0,0] but ALL child bone cubes\r\n  // (head, flippers) are in world coordinates, not the body's rotated local\r\n  // space. The body rotation correctly orients the shell, but applying it to\r\n  // children pushes the head up through the shell and scatters the flippers.\r\n  //\r\n  // Fix: detach head and flippers so they render at world coordinates.\r\n  // The head at Y=1-6, Z=-13 to -7 naturally sits in front of the shell.\r\n  // Back flippers need Z-correction because the shell is rendered through\r\n  // the rotation node while detached bones use Babylon's Z-negation.\r\n  {\r\n    geometryPatterns: [\"geometry.turtle\", \"geometry.turtle.*\"],\r\n    reason: \"Turtle head/flippers are in world coordinates \u2014 detach from rotated body\",\r\n    boneTransforms: [\r\n      { boneName: \"head\", removeParent: true },\r\n      { boneName: \"leg0\", removeParent: true, addCubeOriginOffset: [0, 0, -27] },\r\n      { boneName: \"leg1\", removeParent: true, addCubeOriginOffset: [0, 0, -27] },\r\n      { boneName: \"leg2\", removeParent: true, addCubeOriginOffset: [0, 0, -23] },\r\n      { boneName: \"leg3\", removeParent: true, addCubeOriginOffset: [0, 0, -23] },\r\n    ],\r\n  },\r\n\r\n  // \u2500\u2500 Enderman \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // The enderman geometry defines bones at \"animation-ready\" positions that\r\n  // Minecraft corrects via `animation.enderman.base_pose` (always-on loop).\r\n  // Without the base_pose offsets, the head is inside the body, the hat\r\n  // floats detached above, arms overlap the body, and legs clip underground.\r\n  //\r\n  // base_pose offsets (from animation.enderman.base_pose):\r\n  //   body:     position [0, +11, 0]     \u2014 raises entire model\r\n  //   head:     position [0,   0, 0]     \u2014 moves with body (+11) via bone hierarchy\r\n  //   hat:      position [0,   0, 0]     \u2014 moves with body via head (+11) via hierarchy\r\n  //   rightArm: position [-4,  0, 0]     \u2014 spread outward, moves with body (+11)\r\n  //   leftArm:  position [+4,  0, 0]     \u2014 spread outward, moves with body (+11)\r\n  //   rightLeg: position [0,  -5, 0]     \u2014 moves with body (+11), then -5 = net +6\r\n  //   leftLeg:  position [0,  -5, 0]     \u2014 moves with body (+11), then -5 = net +6\r\n  //\r\n  // Our renderer positions cubes at world coordinates (not through bone hierarchy),\r\n  // so the head doesn't automatically follow the body's offset. Additionally, the\r\n  // head pivot (Y=24) is 14 units below the body pivot (Y=38). In Minecraft's bone\r\n  // hierarchy rendering, the head ends up inside the body \u2014 it's the look_at_target\r\n  // animation that tilts the head up to sit on the shoulders. For our static render,\r\n  // we move the head to sit on top of the body (body top = Y=38 +11 = Y=49).\r\n  //\r\n  // Head total offset: +11 (body base_pose) +14 (lift to body top) = +25\r\n  // Hat stays at +11 because its geometry origin (Y=37.5) is already designed to\r\n  // surround the head at the body-top position (Y=49\u219257, hat Y=48.5\u219256.5).\r\n  {\r\n    geometryPatterns: [\"geometry.enderman*\"],\r\n    reason: \"Replicates animation.enderman.base_pose offsets + head-to-top lift\",\r\n    boneTransforms: [\r\n      { boneName: \"body\", addCubeOriginOffset: [0, 11, 0] },\r\n      { boneName: \"head\", addCubeOriginOffset: [0, 25, 0] },\r\n      { boneName: \"hat\", addCubeOriginOffset: [0, 11, 0] },\r\n      { boneName: \"rightArm\", addCubeOriginOffset: [-4, 11, 0] },\r\n      { boneName: \"leftArm\", addCubeOriginOffset: [4, 11, 0] },\r\n      { boneName: \"rightLeg\", addCubeOriginOffset: [0, 6, 0] },\r\n      { boneName: \"leftLeg\", addCubeOriginOffset: [0, 6, 0] },\r\n    ],\r\n  },\r\n];\r\n\r\n/**\r\n * Checks if a geometry identifier matches a pattern.\r\n * Supports simple wildcards: \"*\" matches any characters\r\n */\r\nfunction matchesPattern(geometryId: string, pattern: string): boolean {\r\n  // Normalize both to lowercase for comparison\r\n  const normalizedId = geometryId.toLowerCase();\r\n  const normalizedPattern = pattern.toLowerCase();\r\n\r\n  // Simple wildcard matching\r\n  if (normalizedPattern.includes(\"*\")) {\r\n    // Convert pattern to regex: escape special regex characters, then replace * with .*\r\n    // Must escape backslash first, then other special characters\r\n    const regexPattern = normalizedPattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\");\r\n    const regex = new RegExp(\"^\" + regexPattern + \"$\");\r\n    return regex.test(normalizedId);\r\n  }\r\n\r\n  return normalizedId === normalizedPattern;\r\n}\r\n\r\n/**\r\n * Finds the transform configuration for a given geometry identifier\r\n */\r\nexport function findGeometryTransform(geometryId: string): IVanillaGeometryTransform | undefined {\r\n  for (const transform of VANILLA_GEOMETRY_TRANSFORMS) {\r\n    for (const pattern of transform.geometryPatterns) {\r\n      if (matchesPattern(geometryId, pattern)) {\r\n        Log.verbose(`VanillaGeometryTransforms: Found transform for ${geometryId} (pattern: ${pattern})`);\r\n        return transform;\r\n      }\r\n    }\r\n  }\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * Applies transforms to a geometry definition.\r\n * Returns a deep copy with transforms applied - does not modify the original.\r\n *\r\n * @param geometry The original geometry definition\r\n * @param geometryId The geometry identifier (e.g., \"geometry.cow.v1.8\")\r\n * @returns A transformed copy of the geometry, or the original if no transforms apply\r\n */\r\nexport function applyGeometryTransforms(geometry: IGeometry, geometryId: string): IGeometry {\r\n  const transformConfig = findGeometryTransform(geometryId);\r\n\r\n  if (!transformConfig) {\r\n    return geometry;\r\n  }\r\n\r\n  Log.verbose(`VanillaGeometryTransforms: Applying transforms to ${geometryId}: ${transformConfig.reason}`);\r\n\r\n  // Deep clone the geometry to avoid modifying the original\r\n  const transformed = JSON.parse(JSON.stringify(geometry)) as IGeometry;\r\n\r\n  if (!transformed.bones) {\r\n    return transformed;\r\n  }\r\n\r\n  // Apply each bone transform\r\n  for (const boneTransform of transformConfig.boneTransforms) {\r\n    for (const bone of transformed.bones) {\r\n      // Check if this transform applies to this bone\r\n      const matches = boneTransform.boneName === \"*\" || bone.name === boneTransform.boneName;\r\n\r\n      if (!matches) {\r\n        continue;\r\n      }\r\n\r\n      Log.verbose(`VanillaGeometryTransforms: Transforming bone \"${bone.name}\"`);\r\n\r\n      // Apply bind_pose_rotation modifications\r\n      if (boneTransform.setBindPoseRotation !== undefined) {\r\n        bone.bind_pose_rotation = [...boneTransform.setBindPoseRotation];\r\n        Log.verbose(`  - Set bind_pose_rotation to [${bone.bind_pose_rotation.join(\", \")}]`);\r\n      }\r\n\r\n      if (boneTransform.addBindPoseRotation !== undefined) {\r\n        const current = bone.bind_pose_rotation || [0, 0, 0];\r\n        bone.bind_pose_rotation = [\r\n          current[0] + boneTransform.addBindPoseRotation[0],\r\n          current[1] + boneTransform.addBindPoseRotation[1],\r\n          current[2] + boneTransform.addBindPoseRotation[2],\r\n        ];\r\n        Log.verbose(`  - Added to bind_pose_rotation, now [${bone.bind_pose_rotation.join(\", \")}]`);\r\n      }\r\n\r\n      // Apply pivot modifications\r\n      if (boneTransform.setPivot !== undefined) {\r\n        bone.pivot = [...boneTransform.setPivot];\r\n        Log.verbose(`  - Set pivot to [${bone.pivot.join(\", \")}]`);\r\n      }\r\n\r\n      if (boneTransform.addPivotOffset !== undefined) {\r\n        const current = bone.pivot || [0, 0, 0];\r\n        bone.pivot = [\r\n          current[0] + boneTransform.addPivotOffset[0],\r\n          current[1] + boneTransform.addPivotOffset[1],\r\n          current[2] + boneTransform.addPivotOffset[2],\r\n        ];\r\n        Log.verbose(`  - Added to pivot, now [${bone.pivot.join(\", \")}]`);\r\n      }\r\n\r\n      // Apply cube origin offsets\r\n      if (boneTransform.addCubeOriginOffset !== undefined && bone.cubes) {\r\n        for (const cube of bone.cubes) {\r\n          if (cube.origin) {\r\n            cube.origin = [\r\n              cube.origin[0] + boneTransform.addCubeOriginOffset[0],\r\n              cube.origin[1] + boneTransform.addCubeOriginOffset[1],\r\n              cube.origin[2] + boneTransform.addCubeOriginOffset[2],\r\n            ];\r\n          }\r\n        }\r\n        Log.verbose(`  - Added offset to ${bone.cubes.length} cube origins`);\r\n      }\r\n\r\n      // Apply per-cube rotation (rotates cube geometry only, not the bone TransformNode)\r\n      if (boneTransform.setCubeRotation !== undefined && bone.cubes) {\r\n        const bonePivot = bone.pivot || [0, 0, 0];\r\n        for (const cube of bone.cubes) {\r\n          cube.rotation = [...boneTransform.setCubeRotation];\r\n          cube.pivot = [...bonePivot];\r\n        }\r\n        Log.verbose(`  - Set per-cube rotation [${boneTransform.setCubeRotation.join(\", \")}] on ${bone.cubes.length} cubes (pivot: [${bonePivot.join(\", \")}])`);\r\n      }\r\n\r\n      // Apply parent modifications\r\n      if (boneTransform.removeParent) {\r\n        delete bone.parent;\r\n        Log.verbose(`  - Removed parent`);\r\n      }\r\n\r\n      if (boneTransform.setParent !== undefined) {\r\n        if (boneTransform.setParent === null) {\r\n          delete bone.parent;\r\n        } else {\r\n          bone.parent = boneTransform.setParent;\r\n        }\r\n        Log.verbose(`  - Set parent to \"${bone.parent || \"(none)\"}\"`);\r\n      }\r\n    }\r\n  }\r\n\r\n  return transformed;\r\n}\r\n\r\n/**\r\n * Returns a list of all registered geometry patterns that have transforms\r\n */\r\nexport function getRegisteredTransformPatterns(): string[] {\r\n  const patterns: string[] = [];\r\n  for (const transform of VANILLA_GEOMETRY_TRANSFORMS) {\r\n    patterns.push(...transform.geometryPatterns);\r\n  }\r\n  return patterns;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE: MolangEvaluator\r\n *\r\n * Evaluates Molang expressions used in Minecraft render controllers, animations,\r\n * and entity definitions. This is a subset evaluator focused on the expression\r\n * patterns found in render controllers:\r\n *\r\n * - Literals: `1.0`, `0`, `42`\r\n * - Query references: `query.is_baby`, `q.variant`\r\n * - Variable references: `variable.index`, `v.armor_texture_slot`\r\n * - Ternary conditionals: `query.is_baby ? Texture.baby : Texture.default`\r\n * - Nested ternary: `query.is_angry ? A : (query.is_tamed ? B : C)`\r\n * - Comparison operators: `==`, `!=`, `<`, `>`, `<=`, `>=`\r\n * - Logical operators: `&&`, `||`, `!`\r\n * - Arithmetic: `+`, `-`, `*`, `/`\r\n * - String references: `Texture.default`, `Geometry.baby`, `Array.geos`\r\n * - Array indexing: `Array.geos[query.is_sheared]`\r\n *\r\n * This evaluator uses a recursive descent parser rather than the existing\r\n * Molang.ts shunting-yard parser, because render controller expressions\r\n * contain string references (Texture.*, Geometry.*) and ternary operators\r\n * that the basic parser doesn't support.\r\n *\r\n * Related files:\r\n * - IMolangContext.ts \u2014 query/variable context for evaluation\r\n * - RenderControllerResolver.ts \u2014 uses this to resolve render controller fields\r\n * - IRenderControllerSet.ts \u2014 render controller data structures\r\n */\r\n\r\nimport IMolangContext from \"./IMolangContext\";\r\n\r\n/**\r\n * Result of evaluating a Molang expression. Can be a number (for arithmetic/boolean)\r\n * or a string (for reference resolution like \"Texture.default\").\r\n */\r\nexport type MolangValue = number | string;\r\n\r\n/**\r\n * Evaluates Molang expressions against an entity context.\r\n *\r\n * Design: stateless evaluator \u2014 create once, call evaluate() many times with\r\n * different expressions and contexts. Array definitions are passed per-call\r\n * since they come from the render controller, not the entity.\r\n */\r\nexport default class MolangEvaluator {\r\n  /**\r\n   * Evaluate a Molang expression string and return the result.\r\n   *\r\n   * @param expression The Molang expression (e.g., \"query.is_baby ? Texture.baby : Texture.default\")\r\n   * @param context Entity state context (query values, variables)\r\n   * @param arrays Optional array definitions from render controller (e.g., {\"Array.geos\": [\"Geometry.default\", \"Geometry.sheared\"]})\r\n   * @returns The evaluated result \u2014 a number or a string reference\r\n   */\r\n  evaluate(\r\n    expression: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ): MolangValue {\r\n    const trimmed = expression.trim();\r\n    if (trimmed.length === 0) {\r\n      return 0;\r\n    }\r\n\r\n    const parser = new ExpressionParser(trimmed, context, arrays);\r\n    return parser.parseTernary();\r\n  }\r\n\r\n  /**\r\n   * Evaluate a Molang expression and return only the numeric result.\r\n   * String references resolve to 0.\r\n   */\r\n  evaluateNumber(\r\n    expression: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ): number {\r\n    const result = this.evaluate(expression, context, arrays);\r\n    return typeof result === \"number\" ? result : 0;\r\n  }\r\n\r\n  /**\r\n   * Evaluate a Molang expression and return only the string result.\r\n   * Numeric results resolve to empty string.\r\n   */\r\n  evaluateString(\r\n    expression: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ): string {\r\n    const result = this.evaluate(expression, context, arrays);\r\n    return typeof result === \"string\" ? result : \"\";\r\n  }\r\n}\r\n\r\n/**\r\n * Recursive descent parser/evaluator for a single Molang expression.\r\n * Handles operator precedence via grammar rules:\r\n *\r\n *   ternary    \u2192 logicalOr ('?' ternary ':' ternary)?\r\n *   logicalOr  \u2192 logicalAnd ('||' logicalAnd)*\r\n *   logicalAnd \u2192 equality ('&&' equality)*\r\n *   equality   \u2192 comparison (('==' | '!=') comparison)*\r\n *   comparison \u2192 additive (('<' | '>' | '<=' | '>=') additive)*\r\n *   additive   \u2192 multiplicative (('+' | '-') multiplicative)*\r\n *   multiplicative \u2192 unary (('*' | '/') unary)*\r\n *   unary      \u2192 '!' unary | primary\r\n *   primary    \u2192 NUMBER | REFERENCE | '(' ternary ')' | arrayAccess\r\n */\r\nclass ExpressionParser {\r\n  private _expr: string;\r\n  private _pos: number;\r\n  private _context: IMolangContext;\r\n  private _arrays: Map<string, string[]> | undefined;\r\n\r\n  constructor(\r\n    expr: string,\r\n    context: IMolangContext,\r\n    arrays?: Map<string, string[]>\r\n  ) {\r\n    this._expr = expr;\r\n    this._pos = 0;\r\n    this._context = context;\r\n    this._arrays = arrays;\r\n  }\r\n\r\n  parseTernary(): MolangValue {\r\n    const condition = this.parseLogicalOr();\r\n\r\n    this.skipWhitespace();\r\n    if (this.peek() === \"?\") {\r\n      this.advance(); // skip '?'\r\n      const trueBranch = this.parseTernary();\r\n      this.skipWhitespace();\r\n      this.expect(\":\");\r\n      const falseBranch = this.parseTernary();\r\n      return this.isTruthy(condition) ? trueBranch : falseBranch;\r\n    }\r\n\r\n    return condition;\r\n  }\r\n\r\n  private parseLogicalOr(): MolangValue {\r\n    let left = this.parseLogicalAnd();\r\n\r\n    this.skipWhitespace();\r\n    while (this.matchStr(\"||\")) {\r\n      const right = this.parseLogicalAnd();\r\n      left = (this.isTruthy(left) || this.isTruthy(right)) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseLogicalAnd(): MolangValue {\r\n    let left = this.parseEquality();\r\n\r\n    this.skipWhitespace();\r\n    while (this.matchStr(\"&&\")) {\r\n      const right = this.parseEquality();\r\n      left = (this.isTruthy(left) && this.isTruthy(right)) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseEquality(): MolangValue {\r\n    let left = this.parseComparison();\r\n\r\n    this.skipWhitespace();\r\n    if (this.matchStr(\"==\")) {\r\n      const right = this.parseComparison();\r\n      return this.toNumber(left) === this.toNumber(right) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\"!=\")) {\r\n      const right = this.parseComparison();\r\n      return this.toNumber(left) !== this.toNumber(right) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseComparison(): MolangValue {\r\n    let left = this.parseAdditive();\r\n\r\n    this.skipWhitespace();\r\n    if (this.matchStr(\"<=\")) {\r\n      return this.toNumber(left) <= this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\">=\")) {\r\n      return this.toNumber(left) >= this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\"<\")) {\r\n      return this.toNumber(left) < this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n    if (this.matchStr(\">\")) {\r\n      return this.toNumber(left) > this.toNumber(this.parseAdditive()) ? 1 : 0;\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseAdditive(): MolangValue {\r\n    let left = this.parseMultiplicative();\r\n\r\n    this.skipWhitespace();\r\n    while (true) {\r\n      if (this.matchStr(\"+\")) {\r\n        left = this.toNumber(left) + this.toNumber(this.parseMultiplicative());\r\n      } else if (this.matchStr(\"-\")) {\r\n        left = this.toNumber(left) - this.toNumber(this.parseMultiplicative());\r\n      } else {\r\n        break;\r\n      }\r\n      this.skipWhitespace();\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseMultiplicative(): MolangValue {\r\n    let left = this.parseUnary();\r\n\r\n    this.skipWhitespace();\r\n    while (true) {\r\n      if (this.matchStr(\"*\")) {\r\n        left = this.toNumber(left) * this.toNumber(this.parseUnary());\r\n      } else if (this.matchStr(\"/\")) {\r\n        const right = this.toNumber(this.parseUnary());\r\n        left = right !== 0 ? this.toNumber(left) / right : 0;\r\n      } else {\r\n        break;\r\n      }\r\n      this.skipWhitespace();\r\n    }\r\n\r\n    return left;\r\n  }\r\n\r\n  private parseUnary(): MolangValue {\r\n    this.skipWhitespace();\r\n    if (this.matchStr(\"!\")) {\r\n      const val = this.parseUnary();\r\n      return this.isTruthy(val) ? 0 : 1;\r\n    }\r\n    return this.parsePrimary();\r\n  }\r\n\r\n  private parsePrimary(): MolangValue {\r\n    this.skipWhitespace();\r\n\r\n    // Parenthesized expression\r\n    if (this.peek() === \"(\") {\r\n      this.advance();\r\n      const val = this.parseTernary();\r\n      this.skipWhitespace();\r\n      if (this.peek() === \")\") {\r\n        this.advance();\r\n      }\r\n      return val;\r\n    }\r\n\r\n    // Number literal (including negative and decimal)\r\n    if (this.isDigit(this.peek()) || (this.peek() === \"-\" && this.isDigit(this.peekAt(1)))) {\r\n      return this.parseNumber();\r\n    }\r\n\r\n    // Identifier/reference (query.x, variable.y, Texture.default, Array.geos, etc.)\r\n    if (this.isIdentStart(this.peek())) {\r\n      return this.parseReference();\r\n    }\r\n\r\n    // Single-quoted string literal\r\n    if (this.peek() === \"'\") {\r\n      return this.parseStringLiteral();\r\n    }\r\n\r\n    // Unknown \u2014 return 0\r\n    return 0;\r\n  }\r\n\r\n  private parseNumber(): number {\r\n    let numStr = \"\";\r\n    if (this.peek() === \"-\") {\r\n      numStr += \"-\";\r\n      this.advance();\r\n    }\r\n    while (this._pos < this._expr.length && (this.isDigit(this.peek()) || this.peek() === \".\")) {\r\n      numStr += this.peek();\r\n      this.advance();\r\n    }\r\n    return parseFloat(numStr) || 0;\r\n  }\r\n\r\n  private parseStringLiteral(): string {\r\n    this.advance(); // skip opening '\r\n    let str = \"\";\r\n    while (this._pos < this._expr.length && this.peek() !== \"'\") {\r\n      str += this.peek();\r\n      this.advance();\r\n    }\r\n    if (this.peek() === \"'\") {\r\n      this.advance(); // skip closing '\r\n    }\r\n    return str;\r\n  }\r\n\r\n  private parseReference(): MolangValue {\r\n    let ident = this.parseIdentifier();\r\n\r\n    // Expand short forms\r\n    if (ident === \"q\") ident = \"query\";\r\n    else if (ident === \"v\") ident = \"variable\";\r\n    else if (ident === \"t\") ident = \"temp\";\r\n    else if (ident === \"c\") ident = \"context\";\r\n\r\n    // Check for dot-notation: query.is_baby, Texture.default, Array.geos\r\n    if (this.peek() === \".\") {\r\n      this.advance(); // skip '.'\r\n      const member = this.parseIdentifier();\r\n      const fullRef = ident + \".\" + member;\r\n\r\n      // Handle query lookups\r\n      if (ident === \"query\") {\r\n        return this._context.queries.get(fullRef) ?? this._context.queries.get(\"query.\" + member) ?? 0;\r\n      }\r\n\r\n      // Handle variable lookups\r\n      if (ident === \"variable\") {\r\n        return this._context.variables.get(fullRef) ?? this._context.variables.get(\"variable.\" + member) ?? 0;\r\n      }\r\n\r\n      // Handle temp lookups\r\n      if (ident === \"temp\") {\r\n        return this._context.temps.get(fullRef) ?? this._context.temps.get(\"temp.\" + member) ?? 0;\r\n      }\r\n\r\n      // Handle Array access: Array.geos[index]\r\n      if (ident === \"Array\" || ident === \"array\") {\r\n        this.skipWhitespace();\r\n        if (this.peek() === \"[\") {\r\n          this.advance(); // skip '['\r\n          const indexVal = this.parseTernary();\r\n          this.skipWhitespace();\r\n          if (this.peek() === \"]\") {\r\n            this.advance(); // skip ']'\r\n          }\r\n          return this.resolveArrayAccess(fullRef, this.toNumber(indexVal));\r\n        }\r\n        // Array reference without index \u2014 return as string\r\n        return fullRef;\r\n      }\r\n\r\n      // Anything else (Texture.default, Geometry.baby, Material.body) \u2014 return as string reference\r\n      return fullRef;\r\n    }\r\n\r\n    // Check for function call: math.sin(x) \u2014 simplified, just skip args for now\r\n    if (this.peek() === \"(\") {\r\n      // For now, evaluate function arguments but return 0 for unsupported functions\r\n      this.advance(); // skip '('\r\n      if (this.peek() !== \")\") {\r\n        this.parseTernary(); // evaluate argument (discard result)\r\n      }\r\n      if (this.peek() === \")\") {\r\n        this.advance(); // skip ')'\r\n      }\r\n      return 0;\r\n    }\r\n\r\n    // Bare identifier \u2014 try as variable\r\n    const queryVal = this._context.queries.get(\"query.\" + ident);\r\n    if (queryVal !== undefined) return queryVal;\r\n\r\n    const varVal = this._context.variables.get(\"variable.\" + ident);\r\n    if (varVal !== undefined) return varVal;\r\n\r\n    // Could be \"this\" keyword (passthrough in color context)\r\n    if (ident === \"this\") return \"this\";\r\n\r\n    return ident;\r\n  }\r\n\r\n  private resolveArrayAccess(arrayName: string, index: number): MolangValue {\r\n    if (!this._arrays) return arrayName;\r\n\r\n    const arr = this._arrays.get(arrayName);\r\n    if (!arr || arr.length === 0) return arrayName;\r\n\r\n    // Molang uses integer index, clamp to valid range\r\n    const idx = Math.max(0, Math.min(Math.floor(index), arr.length - 1));\r\n    return arr[idx];\r\n  }\r\n\r\n  private parseIdentifier(): string {\r\n    let id = \"\";\r\n    while (this._pos < this._expr.length && this.isIdentChar(this.peek())) {\r\n      id += this.peek();\r\n      this.advance();\r\n    }\r\n    return id;\r\n  }\r\n\r\n  // -- Helpers --\r\n\r\n  private isTruthy(val: MolangValue): boolean {\r\n    if (typeof val === \"number\") return val !== 0;\r\n    if (typeof val === \"string\") return val.length > 0;\r\n    return false;\r\n  }\r\n\r\n  private toNumber(val: MolangValue): number {\r\n    if (typeof val === \"number\") return val;\r\n    return 0;\r\n  }\r\n\r\n  private peek(): string {\r\n    return this._pos < this._expr.length ? this._expr[this._pos] : \"\";\r\n  }\r\n\r\n  private peekAt(offset: number): string {\r\n    const idx = this._pos + offset;\r\n    return idx < this._expr.length ? this._expr[idx] : \"\";\r\n  }\r\n\r\n  private advance(): void {\r\n    this._pos++;\r\n  }\r\n\r\n  private skipWhitespace(): void {\r\n    while (this._pos < this._expr.length && /\\s/.test(this._expr[this._pos])) {\r\n      this._pos++;\r\n    }\r\n  }\r\n\r\n  private matchStr(s: string): boolean {\r\n    this.skipWhitespace();\r\n    if (this._expr.substring(this._pos, this._pos + s.length) === s) {\r\n      // For multi-char operators, make sure next char isn't part of a longer operator\r\n      if (s.length === 1 && (s === \"<\" || s === \">\" || s === \"!\")) {\r\n        const next = this.peekAt(s.length);\r\n        if (next === \"=\") return false;\r\n      }\r\n      this._pos += s.length;\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  private expect(s: string): void {\r\n    this.skipWhitespace();\r\n    if (this._expr.substring(this._pos, this._pos + s.length) === s) {\r\n      this._pos += s.length;\r\n    }\r\n    // Silently skip if missing \u2014 defensive for malformed expressions\r\n  }\r\n\r\n  private isDigit(ch: string): boolean {\r\n    return ch >= \"0\" && ch <= \"9\";\r\n  }\r\n\r\n  private isIdentStart(ch: string): boolean {\r\n    return (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\") || ch === \"_\";\r\n  }\r\n\r\n  private isIdentChar(ch: string): boolean {\r\n    return this.isIdentStart(ch) || this.isDigit(ch) || ch === \"_\";\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ARCHITECTURE: RenderControllerResolver\r\n *\r\n * Resolves a Minecraft render controller into concrete geometry IDs, texture paths,\r\n * and tint colors by evaluating Molang expressions against an entity context.\r\n *\r\n * Pipeline:\r\n *   IRenderController (from .render_controllers.json)\r\n *   + EntityTypeResourceDefinition (texture/geometry key maps)\r\n *   + IMolangContext (entity state: is_baby, variant, etc.)\r\n *   \u2192 IRenderResolvedState (concrete geometry ID, texture paths, tint)\r\n *\r\n * Reference resolution:\r\n *   \"Texture.default\" \u2192 look up \"default\" key in entity's textures map \u2192 \"textures/entity/sheep/sheep\"\r\n *   \"Geometry.baby\"   \u2192 look up \"baby\" key in entity's geometry map \u2192 \"geometry.sheep.baby\"\r\n *   \"Array.geos[query.is_sheared]\" \u2192 evaluate index, look up in render controller arrays\r\n *\r\n * Related files:\r\n * - MolangEvaluator.ts \u2014 expression evaluation engine\r\n * - IMolangContext.ts \u2014 entity state context\r\n * - IRenderControllerSet.ts \u2014 render controller data structures\r\n * - IRenderResolvedState.ts \u2014 output interface\r\n * - EntityTypeResourceDefinition.ts \u2014 entity texture/geometry key maps\r\n */\r\n\r\nimport { IRenderController, RenderControllerArrayLists } from \"./IRenderControllerSet\";\r\nimport IMolangContext from \"./IMolangContext\";\r\nimport IRenderResolvedState, { IRenderTextureLayer } from \"./IRenderResolvedState\";\r\nimport MolangEvaluator from \"./MolangEvaluator\";\r\n\r\nexport default class RenderControllerResolver {\r\n  private _evaluator: MolangEvaluator;\r\n\r\n  constructor() {\r\n    this._evaluator = new MolangEvaluator();\r\n  }\r\n\r\n  /**\r\n   * Resolve a render controller to concrete geometry/texture/material values.\r\n   *\r\n   * @param rc The render controller data from the .render_controllers.json file\r\n   * @param textureMap Entity's texture key map: {\"default\": \"textures/entity/sheep/sheep\", \"baby\": \"...\"}\r\n   * @param geometryMap Entity's geometry key map: {\"default\": \"geometry.sheep.v1.8\", \"sheared\": \"...\"}\r\n   * @param context Molang evaluation context (entity state)\r\n   * @returns Resolved geometry ID, texture layers, and optional tint\r\n   */\r\n  resolve(\r\n    rc: IRenderController,\r\n    textureMap: { [key: string]: string | undefined },\r\n    geometryMap: { [key: string]: string | undefined },\r\n    context: IMolangContext\r\n  ): IRenderResolvedState {\r\n    const arrays = this._buildArrayMap(rc.arrays);\r\n\r\n    // Resolve geometry\r\n    let geometryId: string | undefined;\r\n    if (rc.geometry) {\r\n      const geoRef = this._evaluator.evaluateString(rc.geometry, context, arrays);\r\n      geometryId = this._resolveReference(geoRef, \"Geometry\", geometryMap);\r\n    }\r\n\r\n    // Resolve texture layers\r\n    const textureLayers: IRenderTextureLayer[] = [];\r\n    if (rc.textures) {\r\n      for (const texExpr of rc.textures) {\r\n        const texRef = this._evaluator.evaluateString(texExpr, context, arrays);\r\n        const texPath = this._resolveReference(texRef, \"Texture\", textureMap);\r\n        if (texPath) {\r\n          textureLayers.push({ texturePath: texPath });\r\n        }\r\n      }\r\n    }\r\n\r\n    // If no layers resolved, try fallback to \"default\" texture\r\n    if (textureLayers.length === 0 && textureMap[\"default\"]) {\r\n      textureLayers.push({ texturePath: textureMap[\"default\"] });\r\n    }\r\n\r\n    return {\r\n      geometryId,\r\n      textureLayers,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Resolve a reference like \"Texture.default\" or \"Geometry.baby\" to the actual\r\n   * path/ID using the entity's key maps.\r\n   */\r\n  private _resolveReference(\r\n    ref: string,\r\n    prefix: string,\r\n    keyMap: { [key: string]: string | undefined }\r\n  ): string | undefined {\r\n    if (!ref) return undefined;\r\n\r\n    // Check if it's a prefixed reference: \"Texture.default\" \u2192 key \"default\"\r\n    const prefixDot = prefix + \".\";\r\n    if (ref.startsWith(prefixDot)) {\r\n      const key = ref.substring(prefixDot.length);\r\n      return keyMap[key] ?? keyMap[\"default\"];\r\n    }\r\n\r\n    // Check case-insensitive prefix match\r\n    const lowerRef = ref.toLowerCase();\r\n    const lowerPrefix = prefix.toLowerCase() + \".\";\r\n    if (lowerRef.startsWith(lowerPrefix)) {\r\n      const key = ref.substring(lowerPrefix.length);\r\n      return keyMap[key] ?? keyMap[\"default\"];\r\n    }\r\n\r\n    // It might already be a direct path (e.g., \"textures/entity/sheep/sheep\")\r\n    if (ref.includes(\"/\")) {\r\n      return ref;\r\n    }\r\n\r\n    // Try as a key directly\r\n    if (keyMap[ref]) {\r\n      return keyMap[ref];\r\n    }\r\n\r\n    return keyMap[\"default\"];\r\n  }\r\n\r\n  /**\r\n   * Build a flat Map<string, string[]> from the render controller's nested array definitions.\r\n   * Converts: { textures: { \"Array.skins\": [\"Texture.a\", \"Texture.b\"] }, geometries: {...} }\r\n   * To: Map { \"Array.skins\" \u2192 [\"Texture.a\", \"Texture.b\"], \"Array.geos\" \u2192 [...] }\r\n   */\r\n  private _buildArrayMap(arrays: RenderControllerArrayLists | undefined): Map<string, string[]> | undefined {\r\n    if (!arrays) return undefined;\r\n\r\n    const map = new Map<string, string[]>();\r\n\r\n    for (const category of [\"textures\", \"geometries\", \"materials\"] as const) {\r\n      const categoryArrays = arrays[category];\r\n      if (categoryArrays) {\r\n        for (const arrayName in categoryArrays) {\r\n          const entries = categoryArrays[arrayName];\r\n          if (entries) {\r\n            map.set(arrayName, entries);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return map.size > 0 ? map : undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Context for evaluating Molang expressions. Provides query values, variables,\r\n * and temporary values that Molang expressions can reference.\r\n *\r\n * Used by MolangEvaluator to resolve `query.*`, `variable.*`, and `temp.*` references\r\n * during render controller evaluation.\r\n */\r\nexport default interface IMolangContext {\r\n  queries: Map<string, number>;\r\n  variables: Map<string, number>;\r\n  temps: Map<string, number>;\r\n}\r\n\r\n/**\r\n * Creates a default entity context for gallery/preview rendering.\r\n * Represents an adult entity with default variant (not baby, not sheared, variant 0).\r\n */\r\nexport function createDefaultEntityContext(): IMolangContext {\r\n  const queries = new Map<string, number>();\r\n\r\n  // Common entity state queries - default to adult, normal appearance\r\n  queries.set(\"query.is_baby\", 0);\r\n  queries.set(\"query.is_sheared\", 0);\r\n  queries.set(\"query.is_tamed\", 0);\r\n  queries.set(\"query.is_angry\", 0);\r\n  queries.set(\"query.is_saddled\", 0);\r\n  queries.set(\"query.is_charged\", 0);\r\n  queries.set(\"query.is_powered\", 0);\r\n  queries.set(\"query.is_ignited\", 0);\r\n  queries.set(\"query.is_swimming\", 0);\r\n  queries.set(\"query.is_sleeping\", 0);\r\n  queries.set(\"query.variant\", 0);\r\n  queries.set(\"query.mark_variant\", 0);\r\n  queries.set(\"query.skin_id\", 0);\r\n\r\n  return {\r\n    queries,\r\n    variables: new Map<string, number>(),\r\n    temps: new Map<string, number>(),\r\n  };\r\n}\r\n", "import Database from \"./Database\";\r\nimport ItemTextureCatalogDefinition from \"./ItemTextureCatalogDefinition\";\r\nimport SoundDefinitionCatalogDefinition from \"./SoundDefinitionCatalogDefinition\";\r\nimport BlocksCatalogDefinition from \"./BlocksCatalogDefinition\";\r\nimport TerrainTextureCatalogDefinition from \"./TerrainTextureCatalogDefinition\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport AttachableResourceDefinition from \"./AttachableResourceDefinition\";\r\nimport ModelGeometryDefinition from \"./ModelGeometryDefinition\";\r\nimport { IGeometry, IGeometryBone } from \"./IModelGeometry\";\r\nimport Log from \"../core/Log\";\r\nimport { applyGeometryTransforms } from \"./VanillaGeometryTransforms\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport RenderControllerSetDefinition from \"./RenderControllerSetDefinition\";\r\nimport RenderControllerResolver from \"./RenderControllerResolver\";\r\nimport { createDefaultEntityContext } from \"./IMolangContext\";\r\n\r\nexport interface IVanillaEntityModelData {\r\n  entityTypeId: string;\r\n  geometryId?: string;\r\n  texturePath?: string;\r\n  textureUrl?: string;\r\n  geometry?: IGeometry;\r\n  textureData?: Uint8Array;\r\n  modelDefinition?: ModelGeometryDefinition;\r\n  /** Optional tint color for entities with colored overlays (e.g., sheep wool). RGBA 0-1 range. */\r\n  tintColor?: { r: number; g: number; b: number; a: number };\r\n  /** When true, render texture as fully opaque (ignore alpha channel). Used for entities\r\n   *  whose textures have near-zero alpha body pixels designed for multi-layer overlay. */\r\n  ignoreAlpha?: boolean;\r\n}\r\n\r\nexport interface IVanillaAttachableModelData {\r\n  attachableTypeId: string;\r\n  geometryId?: string;\r\n  texturePath?: string;\r\n  textureUrl?: string;\r\n  geometry?: IGeometry;\r\n  textureData?: Uint8Array;\r\n  modelDefinition?: ModelGeometryDefinition;\r\n  /** Base humanoid geometry for armor attachables (Steve model) */\r\n  baseGeometry?: IGeometry;\r\n  baseModelDefinition?: ModelGeometryDefinition;\r\n  baseTextureUrl?: string;\r\n  baseTextureData?: Uint8Array;\r\n}\r\n\r\nexport default class VanillaProjectManager {\r\n  static blocksCatalog: BlocksCatalogDefinition | null = null;\r\n  static itemTextureCatalog: ItemTextureCatalogDefinition | null = null;\r\n  static terrainTextureCatalog: TerrainTextureCatalogDefinition | null = null;\r\n  static soundDefinitionCatalog: SoundDefinitionCatalogDefinition | null = null;\r\n\r\n  // Cache for entity resource definitions\r\n  private static _entityResourceCache: Map<string, EntityTypeResourceDefinition> = new Map();\r\n  private static _entityModelDataCache: Map<string, IVanillaEntityModelData> = new Map();\r\n\r\n  // Cache for attachable resource definitions\r\n  private static _attachableResourceCache: Map<string, AttachableResourceDefinition> = new Map();\r\n  private static _attachableModelDataCache: Map<string, IVanillaAttachableModelData> = new Map();\r\n\r\n  /**\r\n   * Get a list of all vanilla entity type IDs\r\n   */\r\n  static async getVanillaEntityTypeIds(): Promise<string[]> {\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n    if (!vanillaFolder) return [];\r\n\r\n    const entityFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/entity/\");\r\n    if (!entityFolder) return [];\r\n\r\n    await entityFolder.load();\r\n\r\n    const entityIds: string[] = [];\r\n    for (const fileName in entityFolder.files) {\r\n      if (\r\n        fileName.endsWith(\".entity.json\") &&\r\n        !fileName.includes(\"v1.0\") &&\r\n        !fileName.includes(\".v2.\") &&\r\n        !fileName.includes(\".v3.\") &&\r\n        !fileName.includes(\"_v1.\") &&\r\n        !fileName.includes(\"_v2.\") &&\r\n        !fileName.includes(\"_v3.\")\r\n      ) {\r\n        const entityId = fileName.replace(\".entity.json\", \"\");\r\n        entityIds.push(entityId);\r\n      }\r\n    }\r\n\r\n    entityIds.sort();\r\n    return entityIds;\r\n  }\r\n\r\n  /**\r\n   * Get entity resource definition for a vanilla entity by type ID\r\n   */\r\n  static async getVanillaEntityResource(typeId: string): Promise<EntityTypeResourceDefinition | null> {\r\n    // Remove minecraft: prefix if present\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n\r\n    // Check cache first\r\n    if (this._entityResourceCache.has(shortId)) {\r\n      return this._entityResourceCache.get(shortId) || null;\r\n    }\r\n\r\n    const file = await Database.getPreviewVanillaFile(`/resource_pack/entity/${shortId}.entity.json`);\r\n    if (!file) return null;\r\n\r\n    const etrd = await EntityTypeResourceDefinition.ensureOnFile(file);\r\n    if (etrd) {\r\n      this._entityResourceCache.set(shortId, etrd);\r\n      return etrd;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get complete model data for a vanilla entity, including geometry and texture.\r\n   * Uses the \"default\" variant by default, ensuring geometry and texture are properly matched.\r\n   * @param typeId - Entity type ID (e.g., \"cow\" or \"minecraft:cow\")\r\n   * @param variantKey - Optional variant key (e.g., \"default\", \"warm\", \"cold\"). Defaults to \"default\".\r\n   */\r\n  static async getVanillaEntityModelData(\r\n    typeId: string,\r\n    variantKey: string = \"default\"\r\n  ): Promise<IVanillaEntityModelData | null> {\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n    const cacheKey = `${shortId}_${variantKey}`;\r\n\r\n    // Check cache first\r\n    if (this._entityModelDataCache.has(cacheKey)) {\r\n      const cached = this._entityModelDataCache.get(cacheKey) || null;\r\n      // If cached but missing texture, try reloading\r\n      if (cached && !cached.textureData && !cached.textureUrl) {\r\n        this._entityModelDataCache.delete(cacheKey);\r\n      } else {\r\n        return cached;\r\n      }\r\n    }\r\n\r\n    const entityResource = await this.getVanillaEntityResource(shortId);\r\n    if (!entityResource) {\r\n      // Not a vanilla entity, return null - this is expected for custom entities\r\n      return null;\r\n    }\r\n\r\n    const modelData: IVanillaEntityModelData = {\r\n      entityTypeId: shortId,\r\n    };\r\n\r\n    // Try render controller-based resolution first\r\n    let rcResolved: { geometryId?: string; textureLayers: { texturePath: string; tintColor?: { r: number; g: number; b: number; a: number } }[] } | null = null;\r\n    try {\r\n      rcResolved = await this._resolveViaRenderController(shortId, entityResource);\r\n    } catch {\r\n      // Render controller resolution is optional \u2014 fall back to key-based matching\r\n    }\r\n\r\n    // Get geometry and texture \u2014 prefer render controller resolution, fall back to key-based matching\r\n    let geometryId: string | undefined;\r\n    let texturePath: string | undefined;\r\n\r\n    if (rcResolved) {\r\n      geometryId = rcResolved.geometryId;\r\n      if (rcResolved.textureLayers.length > 0) {\r\n        texturePath = rcResolved.textureLayers[0].texturePath;\r\n        // Propagate tint color from first layer if present\r\n        if (rcResolved.textureLayers[0].tintColor) {\r\n          modelData.tintColor = rcResolved.textureLayers[0].tintColor;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fall back to variant-key matching if render controller didn't resolve\r\n    if (!geometryId || !texturePath) {\r\n      const matched = entityResource.getMatchedGeometryAndTexture(variantKey);\r\n      if (!geometryId) geometryId = matched.geometryId;\r\n      if (!texturePath) texturePath = matched.texturePath;\r\n    }\r\n\r\n    // Per-material rendering adjustments.\r\n    // Most vanilla entity materials use alpha TEST (binary: alpha > 0.5 = opaque,\r\n    // alpha \u2264 0.5 = invisible). This is set in ModelMeshFactory via MATERIAL_ALPHATEST.\r\n    // A few specific materials render fully OPAQUE (ignoring alpha entirely):\r\n    const materials = entityResource.data?.materials;\r\n    const defaultMaterial = materials?.[\"default\"];\r\n\r\n    const opaqueMaterials = new Set([\r\n      \"enderman\",  // Head texture has alpha=0 pixels that should render as opaque black\r\n      \"sheep\",     // Wool overlay texture has near-zero alpha body pixels\r\n    ]);\r\n\r\n    if (defaultMaterial && opaqueMaterials.has(defaultMaterial)) {\r\n      modelData.ignoreAlpha = true;\r\n    }\r\n\r\n    // Sheep-specific: apply wool tint color\r\n    if (defaultMaterial === \"sheep\") {\r\n      // White sheep wool color from Minecraft's color palette (#E7E7E7 / 0.906 per channel)\r\n      modelData.tintColor = { r: 0.906, g: 0.906, b: 0.906, a: 1.0 };\r\n    }\r\n\r\n    // Load geometry\r\n    if (geometryId) {\r\n      modelData.geometryId = geometryId;\r\n\r\n      const geometry = await this._loadVanillaGeometry(geometryId);\r\n      if (geometry) {\r\n        // Apply VanillaGeometryTransforms to correct for Minecraft's hardcoded renderer quirks\r\n        // (e.g., cow and sheep body bone rotation corrections)\r\n        modelData.geometry = applyGeometryTransforms(geometry.geometry, geometryId);\r\n        modelData.modelDefinition = geometry.definition;\r\n      } else {\r\n        Log.debugAlert(`Failed to load geometry for ${shortId}: ${geometryId}`);\r\n      }\r\n    }\r\n\r\n    // Load texture - use the matched texture path to ensure it corresponds to the geometry\r\n    if (texturePath) {\r\n      // Remove file extension if present\r\n      if (texturePath.endsWith(\".png\") || texturePath.endsWith(\".tga\")) {\r\n        texturePath = texturePath.substring(0, texturePath.lastIndexOf(\".\"));\r\n      }\r\n\r\n      modelData.texturePath = texturePath;\r\n\r\n      // Set texture URL - use serve folder which has PNG versions\r\n      // The URL is relative to the public folder and will be served at runtime\r\n      modelData.textureUrl = CreatorToolsHost.contentWebRoot + `res/latest/van/serve/resource_pack/${texturePath}.png`;\r\n\r\n      // Also try to load texture data for entities that may have it available\r\n      const textureData = await this.loadVanillaTexture(texturePath);\r\n      if (textureData) {\r\n        modelData.textureData = textureData;\r\n      }\r\n    }\r\n\r\n    // Cache the result\r\n    this._entityModelDataCache.set(cacheKey, modelData);\r\n\r\n    return modelData;\r\n  }\r\n\r\n  /**\r\n   * Attempt to resolve an entity's geometry and texture via its render controller.\r\n   * Falls back to null if no render controller is found or resolution fails.\r\n   */\r\n  private static async _resolveViaRenderController(\r\n    shortId: string,\r\n    entityResource: EntityTypeResourceDefinition\r\n  ): Promise<{ geometryId?: string; textureLayers: { texturePath: string; tintColor?: { r: number; g: number; b: number; a: number } }[] } | null> {\r\n    try {\r\n      const rcIds = entityResource.renderControllerIdList;\r\n      if (!rcIds || rcIds.length === 0) return null;\r\n\r\n      const textureMap = entityResource.data?.textures;\r\n      const geometryMap = entityResource.data?.geometry;\r\n      if (!textureMap || !geometryMap) return null;\r\n\r\n      const rcId = typeof rcIds[0] === \"string\" ? rcIds[0] : String(rcIds[0]);\r\n\r\n      const rcDef = await this._loadVanillaRenderController(shortId, rcId);\r\n      if (!rcDef) return null;\r\n\r\n      const resolver = new RenderControllerResolver();\r\n      const context = createDefaultEntityContext();\r\n\r\n      const result = resolver.resolve(rcDef, textureMap, geometryMap, context);\r\n\r\n      // For sheep, the render controller resolves to the woolly default geometry\r\n      // (geometry.sheep.v1.8). The geometry transform system now handles the\r\n      // body bind_pose_rotation \u2192 per-cube rotation conversion, so we no longer\r\n      // need to force the \"sheared\" geometry. Let the render controller resolution\r\n      // stand as-is.\r\n\r\n      return result;\r\n    } catch (err) {\r\n      Log.verbose(`Render controller resolution failed for ${shortId}: ${err}`);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Load a vanilla render controller by its ID (e.g., \"controller.render.sheep.v2\").\r\n   * Tries candidate filenames based on entity short ID via Database.getPreviewVanillaFile,\r\n   * which uses the IFile/IFolder storage abstractions and works across web, Node.js, etc.\r\n   */\r\n  private static async _loadVanillaRenderController(\r\n    entityShortId: string,\r\n    controllerId: string\r\n  ): Promise<import(\"./IRenderControllerSet\").IRenderController | null> {\r\n    const candidates = [\r\n      `/resource_pack/render_controllers/${entityShortId}.render_controllers.json`,\r\n      `/resource_pack/render_controllers/${entityShortId}.v2.render_controllers.json`,\r\n      `/resource_pack/render_controllers/${entityShortId}.v3.render_controllers.json`,\r\n      `/resource_pack/render_controllers/${entityShortId}.v4.render_controllers.json`,\r\n    ];\r\n\r\n    for (const filePath of candidates) {\r\n      const file = await Database.getPreviewVanillaFile(filePath);\r\n      if (file) {\r\n        const rcSetDef = new RenderControllerSetDefinition();\r\n        rcSetDef.file = file;\r\n        await rcSetDef.load();\r\n\r\n        const rcData = rcSetDef.data;\r\n        if (rcData?.render_controllers) {\r\n          const rc = rcData.render_controllers[controllerId];\r\n          if (rc) return rc;\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get a list of all vanilla attachable type IDs (items with 3D models like armor, bow, shield).\r\n   * Filters out .player.json variants and index.json.\r\n   */\r\n  static async getVanillaAttachableTypeIds(): Promise<string[]> {\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n    if (!vanillaFolder) return [];\r\n\r\n    const attachableFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/attachables/\");\r\n    if (!attachableFolder) return [];\r\n\r\n    await attachableFolder.load();\r\n\r\n    const attachableIds: string[] = [];\r\n    for (const fileName in attachableFolder.files) {\r\n      // Skip player variants (e.g., diamond_chestplate.player.json) and index\r\n      if (fileName.includes(\".player.\") || fileName === \"index.json\") {\r\n        continue;\r\n      }\r\n\r\n      if (fileName.endsWith(\".json\")) {\r\n        // Remove extensions: \"bow.json\" \u2192 \"bow\", \"crossbow.entity.json\" \u2192 \"crossbow\"\r\n        let id = fileName.replace(\".entity.json\", \"\").replace(\".json\", \"\");\r\n        attachableIds.push(id);\r\n      }\r\n    }\r\n\r\n    attachableIds.sort();\r\n    return attachableIds;\r\n  }\r\n\r\n  /**\r\n   * Get attachable resource definition for a vanilla attachable by type ID.\r\n   */\r\n  static async getVanillaAttachableResource(typeId: string): Promise<AttachableResourceDefinition | null> {\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n\r\n    if (this._attachableResourceCache.has(shortId)) {\r\n      return this._attachableResourceCache.get(shortId) || null;\r\n    }\r\n\r\n    // Try multiple file name patterns\r\n    const possibleFiles = [`${shortId}.json`, `${shortId}.entity.json`];\r\n\r\n    for (const fileName of possibleFiles) {\r\n      const file = await Database.getPreviewVanillaFile(`/resource_pack/attachables/${fileName}`);\r\n      if (file) {\r\n        const ard = await AttachableResourceDefinition.ensureOnFile(file);\r\n        if (ard) {\r\n          this._attachableResourceCache.set(shortId, ard);\r\n          return ard;\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get complete model data for a vanilla attachable, including geometry and texture.\r\n   * @param typeId - Attachable type ID (e.g., \"diamond_chestplate\" or \"minecraft:diamond_chestplate\")\r\n   */\r\n  static async getVanillaAttachableModelData(typeId: string): Promise<IVanillaAttachableModelData | null> {\r\n    const shortId = typeId.replace(\"minecraft:\", \"\");\r\n\r\n    if (this._attachableModelDataCache.has(shortId)) {\r\n      return this._attachableModelDataCache.get(shortId) || null;\r\n    }\r\n\r\n    const attachableResource = await this.getVanillaAttachableResource(shortId);\r\n    if (!attachableResource) {\r\n      return null;\r\n    }\r\n\r\n    const modelData: IVanillaAttachableModelData = {\r\n      attachableTypeId: shortId,\r\n    };\r\n\r\n    // Get default geometry\r\n    const geometry = attachableResource.geometry;\r\n    if (geometry && geometry[\"default\"]) {\r\n      let geometryId = geometry[\"default\"];\r\n      modelData.geometryId = geometryId;\r\n\r\n      // For armor attachables, the attachable references IDs like \"geometry.humanoid.armor.chestplate\"\r\n      // which live in mobs.json and use cross-file v1.8.0 inheritance (\u2192geometry.zombie).\r\n      // Instead, use the equivalent self-contained geometry from player_armor.json:\r\n      // \"geometry.humanoid.armor.X\" \u2192 \"geometry.player.armor.X\"\r\n      let armorGeoId: string | undefined;\r\n      if (geometryId.startsWith(\"geometry.humanoid.armor.\")) {\r\n        armorGeoId = geometryId.replace(\"geometry.humanoid.armor.\", \"geometry.player.armor.\");\r\n      }\r\n\r\n      let geoResult = null;\r\n      if (armorGeoId) {\r\n        // Try the player_armor.json version first (self-contained inheritance chain)\r\n        geoResult = await this._loadVanillaGeometry(armorGeoId);\r\n      }\r\n      if (!geoResult) {\r\n        geoResult = await this._loadVanillaGeometry(geometryId);\r\n      }\r\n\r\n      if (geoResult) {\r\n        modelData.geometry = applyGeometryTransforms(geoResult.geometry, geometryId);\r\n        modelData.modelDefinition = geoResult.definition;\r\n      } else {\r\n        Log.debugAlert(`Failed to load geometry for attachable ${shortId}: ${geometryId}`);\r\n      }\r\n    }\r\n\r\n    // Get default texture\r\n    const textures = attachableResource.textures;\r\n    if (textures && textures[\"default\"]) {\r\n      let texturePath = textures[\"default\"];\r\n\r\n      if (texturePath) {\r\n        // Remove file extension if present\r\n        if (texturePath.endsWith(\".png\") || texturePath.endsWith(\".tga\")) {\r\n          texturePath = texturePath.substring(0, texturePath.lastIndexOf(\".\"));\r\n        }\r\n\r\n        modelData.texturePath = texturePath;\r\n        modelData.textureUrl =\r\n          CreatorToolsHost.contentWebRoot + `res/latest/van/serve/resource_pack/${texturePath}.png`;\r\n\r\n        const textureData = await this.loadVanillaTexture(texturePath);\r\n        if (textureData) {\r\n          modelData.textureData = textureData;\r\n        }\r\n      }\r\n    }\r\n\r\n    // For armor-type attachables, load the humanoid base model (Steve) so\r\n    // the armor can be rendered on top of a body silhouette.\r\n    // Armor geometries reference identifiers containing \"humanoid\" or \"armor\".\r\n    const isArmorType =\r\n      modelData.geometryId && (modelData.geometryId.includes(\"humanoid\") || modelData.geometryId.includes(\"armor\"));\r\n\r\n    if (isArmorType) {\r\n      const baseGeoResult = await this._loadVanillaGeometry(\"geometry.humanoid.custom\");\r\n      if (baseGeoResult) {\r\n        modelData.baseGeometry = baseGeoResult.geometry;\r\n        modelData.baseModelDefinition = baseGeoResult.definition;\r\n        modelData.baseTextureUrl =\r\n          CreatorToolsHost.contentWebRoot + \"res/latest/van/serve/resource_pack/textures/entity/steve.png\";\r\n\r\n        const steveTexture = await this.loadVanillaTexture(\"textures/entity/steve\");\r\n        if (steveTexture) {\r\n          modelData.baseTextureData = steveTexture;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._attachableModelDataCache.set(shortId, modelData);\r\n    return modelData;\r\n  }\r\n\r\n  private static async _loadVanillaGeometry(\r\n    geometryId: string\r\n  ): Promise<{ geometry: IGeometry; definition: ModelGeometryDefinition } | null> {\r\n    // Parse geometry ID to find the file\r\n    // Format is typically \"geometry.mob_name\" or \"geometry.mob_name.variant\"\r\n    const parts = geometryId.split(\".\");\r\n    if (parts.length < 2) return null;\r\n\r\n    const baseName = parts[1]; // e.g., \"pig\" from \"geometry.pig\" or \"tropicalfish_a\" from \"geometry.tropicalfish_a\"\r\n\r\n    // Generate possible file names to try\r\n    // Some entities use underscores in file names but not in geometry IDs, or vice versa\r\n    const baseNameWithUnderscore = this._addUnderscoreBeforeLastPart(baseName);\r\n    const baseNameWithoutSuffix = baseName.replace(/_[a-z]$/, \"\"); // Remove _a, _b suffixes\r\n    const baseNameWithUnderscoreNoSuffix = this._addUnderscoreBeforeLastPart(baseNameWithoutSuffix);\r\n\r\n    const possibleBaseNames = [baseName, baseNameWithUnderscore, baseNameWithoutSuffix, baseNameWithUnderscoreNoSuffix];\r\n\r\n    // Remove duplicates\r\n    const uniqueBaseNames = [...new Set(possibleBaseNames)];\r\n\r\n    const possibleFiles: string[] = [];\r\n    for (const name of uniqueBaseNames) {\r\n      possibleFiles.push(`${name}.geo.json`);\r\n      possibleFiles.push(`${name}.v3.geo.json`);\r\n      possibleFiles.push(`${name}.v2.geo.json`);\r\n    }\r\n\r\n    // First pass: look for exact geometry ID match\r\n    for (const fileName of possibleFiles) {\r\n      const file = await Database.getPreviewVanillaFile(`/resource_pack/models/entity/${fileName}`);\r\n      if (file) {\r\n        const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n        if (geoDef) {\r\n          const exactGeometry = geoDef.getById(geometryId);\r\n          if (exactGeometry) {\r\n            return { geometry: exactGeometry, definition: geoDef };\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Second pass: if no exact match found, fall back to default geometry from first file with one\r\n    for (const fileName of possibleFiles) {\r\n      const file = await Database.getPreviewVanillaFile(`/resource_pack/models/entity/${fileName}`);\r\n      if (file) {\r\n        const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n        if (geoDef && geoDef.defaultGeometry) {\r\n          Log.debugAlert(\r\n            `VanillaProjectManager: No exact match for geometry \"${geometryId}\", falling back to default from ${fileName}`\r\n          );\r\n          return { geometry: geoDef.defaultGeometry, definition: geoDef };\r\n        }\r\n      }\r\n    }\r\n\r\n    // Third pass: scan all files in /models/entity/ for an exact geometry ID match.\r\n    // This handles attachable geometries (e.g., \"geometry.humanoid.armor.chestplate\"\r\n    // which lives in \"player_armor.json\") where the baseName heuristic fails.\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n    if (vanillaFolder) {\r\n      const modelsFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/models/entity/\");\r\n      if (modelsFolder) {\r\n        await modelsFolder.load();\r\n\r\n        for (const fileName in modelsFolder.files) {\r\n          if (!fileName.endsWith(\".json\")) continue;\r\n          // Skip files we already tried in the first two passes\r\n          if (possibleFiles.includes(fileName)) continue;\r\n\r\n          const file = modelsFolder.files[fileName];\r\n          if (file) {\r\n            const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n            if (geoDef) {\r\n              const exactGeometry = geoDef.getById(geometryId);\r\n              if (exactGeometry) {\r\n                // Try v1.8.0 inheritance resolution first (e.g., player_armor.json)\r\n                const resolved = this._resolveV18Inheritance(geometryId, geoDef);\r\n                if (resolved) {\r\n                  return { geometry: resolved, definition: geoDef };\r\n                }\r\n                return { geometry: exactGeometry, definition: geoDef };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fourth pass: scan /models/ root directory (not just /models/entity/) for v1.8.0 format files.\r\n    // The mobs.json file in /models/ contains humanoid armor geometry with inheritance syntax.\r\n    if (vanillaFolder) {\r\n      const modelsRootFolder = await vanillaFolder.getFolderFromRelativePath(\"/resource_pack/models/\");\r\n      if (modelsRootFolder) {\r\n        await modelsRootFolder.load();\r\n\r\n        for (const fileName in modelsRootFolder.files) {\r\n          if (!fileName.endsWith(\".json\")) continue;\r\n\r\n          const file = modelsRootFolder.files[fileName];\r\n          if (file) {\r\n            const geoDef = await ModelGeometryDefinition.ensureOnFile(file);\r\n            if (geoDef) {\r\n              const exactGeometry = geoDef.getById(geometryId);\r\n              if (exactGeometry) {\r\n                // Check if this is a v1.8.0 format with inheritance that needs resolution\r\n                const resolved = this._resolveV18Inheritance(geometryId, geoDef);\r\n                if (resolved) {\r\n                  return { geometry: resolved, definition: geoDef };\r\n                }\r\n                return { geometry: exactGeometry, definition: geoDef };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Resolve v1.8.0 geometry inheritance chain.\r\n   *\r\n   * V1.8.0 format uses keys like `\"geometry.X:geometry.Y\"` where Y is the parent.\r\n   * Each child provides bone overrides: `inflate` modifies cube inflation,\r\n   * `reset: true` removes all cubes from a bone (hides it), `neverRender` controls visibility.\r\n   *\r\n   * Example chain for chestplate:\r\n   *   geometry.humanoid.armor.chestplate:geometry.humanoid.armor1\r\n   *     \u2192 geometry.humanoid.armor1:geometry.zombie\r\n   *       \u2192 geometry.zombie (base with all cubes)\r\n   *\r\n   * Returns a flattened IGeometry with all inheritance resolved.\r\n   */\r\n  private static _resolveV18Inheritance(geometryId: string, geoDef: ModelGeometryDefinition): IGeometry | null {\r\n    const data = geoDef.data as any;\r\n    if (!data) return null;\r\n\r\n    // Find the key that matches this geometry ID (may include \":parent\" suffix)\r\n    let matchingKey: string | undefined;\r\n    let parentId: string | undefined;\r\n\r\n    for (const key of Object.keys(data)) {\r\n      if (key === geometryId || key.startsWith(geometryId + \":\")) {\r\n        matchingKey = key;\r\n        const colonIndex = key.indexOf(\":\");\r\n        if (colonIndex > 0) {\r\n          parentId = key.substring(colonIndex + 1);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!matchingKey) return null;\r\n    if (!parentId) {\r\n      // No inheritance \u2014 return as-is\r\n      return null;\r\n    }\r\n\r\n    // Resolve parentId recursively\r\n    const parentGeometry = this._resolveV18InheritanceFrom(parentId, data);\r\n    if (!parentGeometry || !parentGeometry.bones) return null;\r\n\r\n    // Get the child overrides\r\n    const childData = data[matchingKey];\r\n    if (!childData || !childData.bones) return null;\r\n\r\n    // Deep clone parent bones to avoid mutating the original\r\n    const resolvedBones: IGeometryBone[] = JSON.parse(JSON.stringify(parentGeometry.bones));\r\n\r\n    // Apply child bone overrides\r\n    for (const childBone of childData.bones) {\r\n      const parentBoneIndex = resolvedBones.findIndex((b: IGeometryBone) => b.name === childBone.name);\r\n\r\n      if (parentBoneIndex >= 0) {\r\n        const parentBone = resolvedBones[parentBoneIndex];\r\n\r\n        if (childBone.reset) {\r\n          // reset: true removes all cubes from this bone (makes it invisible)\r\n          parentBone.cubes = undefined;\r\n          parentBone.poly_mesh = undefined;\r\n          parentBone.texture_meshes = undefined;\r\n        } else if (childBone.cubes && childBone.cubes.length > 0) {\r\n          // Child provides complete cube definitions \u2014 replace parent cubes.\r\n          // This is used by sheep wool overlay: child bones have different UVs\r\n          // and inflate values that map to the wool section of the texture.\r\n          parentBone.cubes = JSON.parse(JSON.stringify(childBone.cubes));\r\n\r\n          // Preserve parent's bind_pose_rotation if child overrides it\r\n          if (childBone.bind_pose_rotation) {\r\n            parentBone.bind_pose_rotation = [...childBone.bind_pose_rotation];\r\n          }\r\n          // Preserve parent's pivot if child overrides it\r\n          if (childBone.pivot) {\r\n            parentBone.pivot = [...childBone.pivot];\r\n          }\r\n        } else {\r\n          // No cubes in child \u2014 apply property overrides to existing parent cubes\r\n          if (childBone.inflate !== undefined && parentBone.cubes) {\r\n            for (const cube of parentBone.cubes) {\r\n              cube.inflate = childBone.inflate;\r\n            }\r\n          }\r\n          if (childBone.neverRender !== undefined) {\r\n            (parentBone as any).neverRender = childBone.neverRender;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Filter out neverRender bones and bones with no visual content\r\n    const visibleBones = resolvedBones.filter((b: any) => {\r\n      if (b.neverRender === true) return false;\r\n      return true;\r\n    });\r\n\r\n    return {\r\n      description: parentGeometry.description || {\r\n        identifier: geometryId,\r\n        texture_width: childData.texturewidth || parentGeometry.texturewidth || 64,\r\n        texture_height: childData.textureheight || parentGeometry.textureheight || 32,\r\n        visible_bounds_width: 2,\r\n        visible_bounds_height: 2,\r\n        visible_bounds_offset: [0, 1, 0],\r\n      },\r\n      bones: visibleBones,\r\n      texturewidth: childData.texturewidth || parentGeometry.texturewidth,\r\n      textureheight: childData.textureheight || parentGeometry.textureheight,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Recursively resolve a v1.8.0 geometry ID within a single file's data.\r\n   */\r\n  private static _resolveV18InheritanceFrom(geoId: string, data: any): any | null {\r\n    // Find the key for this geometry ID\r\n    let matchingKey: string | undefined;\r\n    let parentId: string | undefined;\r\n\r\n    for (const key of Object.keys(data)) {\r\n      if (key === \"format_version\") continue;\r\n\r\n      if (key === geoId || key.startsWith(geoId + \":\")) {\r\n        matchingKey = key;\r\n        const colonIndex = key.indexOf(\":\");\r\n        if (colonIndex > 0) {\r\n          parentId = key.substring(colonIndex + 1);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (!matchingKey) return null;\r\n\r\n    const geoData = data[matchingKey];\r\n    if (!parentId) {\r\n      // Base geometry \u2014 no parent, return directly\r\n      return geoData;\r\n    }\r\n\r\n    // Recursively resolve parent\r\n    const parentGeo = this._resolveV18InheritanceFrom(parentId, data);\r\n    if (!parentGeo || !parentGeo.bones) return geoData;\r\n\r\n    // Deep clone parent bones\r\n    const resolvedBones: IGeometryBone[] = JSON.parse(JSON.stringify(parentGeo.bones));\r\n\r\n    // Apply child overrides\r\n    if (geoData.bones) {\r\n      for (const childBone of geoData.bones) {\r\n        const parentBoneIndex = resolvedBones.findIndex((b: IGeometryBone) => b.name === childBone.name);\r\n\r\n        if (parentBoneIndex >= 0) {\r\n          const parentBone = resolvedBones[parentBoneIndex];\r\n\r\n          if (childBone.reset) {\r\n            parentBone.cubes = undefined;\r\n            parentBone.poly_mesh = undefined;\r\n            parentBone.texture_meshes = undefined;\r\n          } else {\r\n            if (childBone.inflate !== undefined && parentBone.cubes) {\r\n              for (const cube of parentBone.cubes) {\r\n                cube.inflate = childBone.inflate;\r\n              }\r\n            }\r\n            if (childBone.neverRender !== undefined) {\r\n              (parentBone as any).neverRender = childBone.neverRender;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return {\r\n      ...parentGeo,\r\n      ...geoData,\r\n      bones: resolvedBones,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Adds an underscore before the last \"word\" in a name.\r\n   * e.g., \"tropicalfish\" -> \"tropical_fish\", \"tropicalfish_a\" -> \"tropical_fish_a\"\r\n   */\r\n  private static _addUnderscoreBeforeLastPart(name: string): string {\r\n    // Common suffixes that indicate a word boundary\r\n    const commonWords = [\r\n      \"fish\",\r\n      \"spawner\",\r\n      \"golem\",\r\n      \"spider\",\r\n      \"skeleton\",\r\n      \"zombie\",\r\n      \"creeper\",\r\n      \"slime\",\r\n      \"cube\",\r\n      \"guardian\",\r\n      \"shulker\",\r\n      \"villager\",\r\n      \"illager\",\r\n      \"pillager\",\r\n      \"witch\",\r\n      \"horse\",\r\n      \"donkey\",\r\n      \"mule\",\r\n      \"llama\",\r\n      \"wolf\",\r\n      \"cat\",\r\n      \"ocelot\",\r\n      \"fox\",\r\n      \"panda\",\r\n      \"bee\",\r\n      \"hoglin\",\r\n      \"piglin\",\r\n      \"strider\",\r\n      \"axolotl\",\r\n      \"goat\",\r\n      \"frog\",\r\n      \"warden\",\r\n      \"sniffer\",\r\n      \"camel\",\r\n      \"breeze\",\r\n      \"bogged\",\r\n      \"armadillo\",\r\n    ];\r\n\r\n    for (const word of commonWords) {\r\n      const index = name.indexOf(word);\r\n      if (index > 0 && name[index - 1] !== \"_\") {\r\n        return name.substring(0, index) + \"_\" + name.substring(index);\r\n      }\r\n    }\r\n    return name;\r\n  }\r\n\r\n  /**\r\n   * Load a vanilla texture by its resource path (e.g., \"textures/entity/pig/pig\").\r\n   * Returns the raw PNG bytes from the serve vanilla folder, or null if not found.\r\n   */\r\n  static async loadVanillaTexture(texturePath: string): Promise<Uint8Array | null> {\r\n    // texturePath is like \"textures/entity/pig/pig\"\r\n    // Use serve folder which has PNG versions of all textures (including those that are TGA in preview/release)\r\n    const vanillaFolder = await Database.getServeVanillaFolder();\r\n    if (!vanillaFolder) {\r\n      Log.debugAlert(\"Could not get serve vanilla folder\");\r\n      return null;\r\n    }\r\n\r\n    const fullPath = `/resource_pack/${texturePath}.png`;\r\n\r\n    const file = await vanillaFolder.getFileFromRelativePath(fullPath);\r\n    if (!file) {\r\n      Log.debugAlert(`Vanilla texture file not found: ${fullPath}`);\r\n      // Try to list the directory to see what's there\r\n      const dirPath = `/resource_pack/${texturePath.substring(0, texturePath.lastIndexOf(\"/\"))}`;\r\n      return null;\r\n    }\r\n\r\n    await file.loadContent();\r\n\r\n    if (file.content instanceof Uint8Array) {\r\n      return file.content;\r\n    }\r\n\r\n    Log.debugAlert(`Vanilla texture file content is not Uint8Array: ${typeof file.content}`);\r\n    return null;\r\n  }\r\n\r\n  static getBlocksCatalogDirect() {\r\n    return this.blocksCatalog;\r\n  }\r\n\r\n  static async getBlocksCatalog() {\r\n    if (!VanillaProjectManager.blocksCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/blocks.json\");\r\n\r\n      if (file) {\r\n        const blockCat = new BlocksCatalogDefinition();\r\n        blockCat.file = file;\r\n\r\n        await blockCat.load();\r\n\r\n        this.blocksCatalog = blockCat;\r\n      }\r\n    }\r\n\r\n    return this.blocksCatalog;\r\n  }\r\n\r\n  static getTerrainTexturesCatalogDirect() {\r\n    return this.terrainTextureCatalog;\r\n  }\r\n\r\n  static async getTerrainTexturesCatalog() {\r\n    if (!VanillaProjectManager.terrainTextureCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/textures/terrain_texture.json\");\r\n\r\n      if (file) {\r\n        const terrainCat = new TerrainTextureCatalogDefinition();\r\n        terrainCat.file = file;\r\n\r\n        await terrainCat.load();\r\n\r\n        VanillaProjectManager.terrainTextureCatalog = terrainCat;\r\n      }\r\n    }\r\n\r\n    return VanillaProjectManager.terrainTextureCatalog;\r\n  }\r\n\r\n  static async getItemTexturesCatalog() {\r\n    if (!VanillaProjectManager.itemTextureCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/textures/item_texture.json\");\r\n\r\n      if (file) {\r\n        const itemCat = new ItemTextureCatalogDefinition();\r\n        itemCat.file = file;\r\n\r\n        await itemCat.load();\r\n\r\n        VanillaProjectManager.itemTextureCatalog = itemCat;\r\n      }\r\n    }\r\n\r\n    return VanillaProjectManager.itemTextureCatalog;\r\n  }\r\n\r\n  static async getSoundDefinitionCatalog() {\r\n    if (!VanillaProjectManager.soundDefinitionCatalog) {\r\n      const file = await Database.getPreviewVanillaFile(\"/resource_pack/sounds/sound_definitions.json\");\r\n\r\n      if (file) {\r\n        const soundDefinitionCat = new SoundDefinitionCatalogDefinition();\r\n        soundDefinitionCat.file = file;\r\n\r\n        await soundDefinitionCat.load();\r\n\r\n        VanillaProjectManager.soundDefinitionCatalog = soundDefinitionCat;\r\n      }\r\n    }\r\n\r\n    return VanillaProjectManager.soundDefinitionCatalog;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport DifferenceSet from \"../storage/DifferenceSet\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport VanillaProjectManager from \"./VanillaProjectManager\";\r\nimport { CreatorToolsMinecraftState } from \"../app/CreatorTools\";\r\n\r\n/**\r\n * Minecraft server port constants for multi-slot architecture.\r\n * Slot 0 = 19132, Slot 1 = 19164, Slot 2 = 19196, etc. (32-port spacing)\r\n * Debug ports follow the same pattern starting at 19144 (19132 + 12)\r\n */\r\nexport const MINECRAFT_BASE_PORT = 19132;\r\nexport const MINECRAFT_PORT_INCREMENT = 32;\r\nexport const MINECRAFT_DEBUG_PORT_OFFSET = 12; // Debug port is base port + 12\r\n\r\nexport default class MinecraftUtilities {\r\n  /**\r\n   * Get the Minecraft UDP port for a given slot number.\r\n   * Slot 0 = 19132, Slot 1 = 19164, Slot 2 = 19196, etc.\r\n   * @param slotNumber The slot number (0-based)\r\n   * @returns The UDP port for Minecraft connections\r\n   */\r\n  static getPortForSlot(slotNumber: number): number {\r\n    return MINECRAFT_BASE_PORT + slotNumber * MINECRAFT_PORT_INCREMENT;\r\n  }\r\n\r\n  /**\r\n   * Get the slot number from a Minecraft UDP port.\r\n   * @param port The UDP port\r\n   * @returns The slot number (0-based)\r\n   */\r\n  static getSlotFromPort(port: number): number {\r\n    return Math.floor((port - MINECRAFT_BASE_PORT) / MINECRAFT_PORT_INCREMENT);\r\n  }\r\n\r\n  /**\r\n   * Get the script debugger port for a given slot number.\r\n   * The debug port is the base port + 12 for each slot.\r\n   * Slot 0 = 19144, Slot 1 = 19176, Slot 2 = 19208, etc.\r\n   * @param slotNumber The slot number (0-based)\r\n   * @returns The debug port for the script debugger\r\n   */\r\n  static getDebugPortForSlot(slotNumber: number): number {\r\n    return MinecraftUtilities.getPortForSlot(slotNumber) + MINECRAFT_DEBUG_PORT_OFFSET;\r\n  }\r\n\r\n  static isReloadableSetOfChanges(differenceSet: DifferenceSet) {\r\n    return differenceSet.hasFileOnlyOfExtension(\"js\", \"ts\", \"map\") && !differenceSet.getHasDeletions();\r\n  }\r\n\r\n  static removeSubTypeExtensionFromName(name: string) {\r\n    let canonId = name.trim();\r\n\r\n    if (name.endsWith(\".json\")) {\r\n      canonId = canonId.substring(0, canonId.length - 5);\r\n    }\r\n\r\n    const lastPeriod = name.lastIndexOf(\".\");\r\n\r\n    if (lastPeriod >= 0) {\r\n      canonId = canonId.substring(0, lastPeriod);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static getServerStatusFromState(state: CreatorToolsMinecraftState) {\r\n    switch (state) {\r\n      case CreatorToolsMinecraftState.stopped:\r\n        return \"stopped\";\r\n      case CreatorToolsMinecraftState.error:\r\n        return \"error\";\r\n      case CreatorToolsMinecraftState.starting:\r\n        return \"starting\";\r\n      case CreatorToolsMinecraftState.preparing:\r\n        return \"preparing\";\r\n      case CreatorToolsMinecraftState.started:\r\n        return \"running\";\r\n      case CreatorToolsMinecraftState.stopping:\r\n        return \"stopping\";\r\n      case CreatorToolsMinecraftState.disconnected:\r\n        return \"disconnected\";\r\n      case CreatorToolsMinecraftState.initializing:\r\n        return \"initializing\";\r\n      case CreatorToolsMinecraftState.initialized:\r\n        return \"initialized\";\r\n      case CreatorToolsMinecraftState.prepared:\r\n        return \"prepared\";\r\n      case CreatorToolsMinecraftState.newMinecraft:\r\n        return \"new minecraft\";\r\n      case CreatorToolsMinecraftState.none:\r\n        return \"none\";\r\n      default:\r\n        return \"unknown\";\r\n    }\r\n  }\r\n\r\n  static getIsBuiltIn(eventId: string) {\r\n    return (\r\n      eventId === \"minecraft:entity_spawned\" ||\r\n      eventId === \"minecraft:entity_born\" ||\r\n      eventId === \"minecraft:transformed\" ||\r\n      eventId === \"minecraft:on_prime\"\r\n    );\r\n  }\r\n\r\n  static getAfterPackPath(path: string) {\r\n    const hashIndex = path.indexOf(\"#\");\r\n\r\n    if (hashIndex >= 0) {\r\n      path = path.substring(hashIndex + 1);\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  static getNamespacedIdNamspace(name: string) {\r\n    let canonId = name.toLowerCase().trim();\r\n\r\n    let colonIndex = canonId.indexOf(\":\");\r\n\r\n    if (colonIndex >= 0) {\r\n      canonId = canonId.substring(0, colonIndex);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static getNamespacedIdName(name: string) {\r\n    let canonId = name.toLowerCase().trim();\r\n\r\n    let colonIndex = canonId.indexOf(\":\");\r\n\r\n    if (colonIndex >= 0) {\r\n      canonId = canonId.substring(colonIndex + 1);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static pathLooksLikeSkinPackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"skin_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_sps\") >= 0 ||\r\n      pathCanon.indexOf(\"/sps_\") >= 0 ||\r\n      pathCanon.endsWith(\"sps/\") ||\r\n      pathCanon === \"/sps/\" ||\r\n      pathCanon === \"/sp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeBehaviorPackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"behavior_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_bps\") >= 0 ||\r\n      pathCanon.indexOf(\"/bps_\") >= 0 ||\r\n      pathCanon.endsWith(\"bps/\") ||\r\n      pathCanon === \"/bps/\" ||\r\n      pathCanon === \"/bp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeDesignPackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"design_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_dps\") >= 0 ||\r\n      pathCanon.indexOf(\"/dps_\") >= 0 ||\r\n      pathCanon.endsWith(\"dps/\") ||\r\n      pathCanon === \"/dps/\" ||\r\n      pathCanon === \"/dp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeResourcePackContainerName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"resource_packs\") >= 0 ||\r\n      pathCanon.indexOf(\"_rps\") >= 0 ||\r\n      pathCanon.indexOf(\"/rps_\") >= 0 ||\r\n      pathCanon.endsWith(\"rps/\") ||\r\n      pathCanon === \"/rps/\" ||\r\n      pathCanon === \"/rp/\"\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikePackContainerName(path: string) {\r\n    return (\r\n      this.pathLooksLikeBehaviorPackContainerName(path) ||\r\n      this.pathLooksLikeResourcePackContainerName(path) ||\r\n      this.pathLooksLikeResourcePackContainerName(path) ||\r\n      this.pathLooksLikeSkinPackContainerName(path)\r\n    );\r\n  }\r\n\r\n  static pathLooksLikeDesignPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"/design\") >= 0 ||\r\n      pathCanon.indexOf(\"design_pack\") >= 0 ||\r\n      pathCanon.indexOf(\"_dp\") >= 0 || // bp is uncommon as the start of a word\r\n      pathCanon.indexOf(\"/dp_\") >= 0 ||\r\n      pathCanon.indexOf(\"/dp/\") >= 0\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeBehaviorPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"/behavior\") >= 0 ||\r\n      pathCanon.indexOf(\"behavior_pack\") >= 0 ||\r\n      pathCanon.indexOf(\"_bp\") >= 0 || // bp is uncommon as the start of a word\r\n      pathCanon.indexOf(\"/bp_\") >= 0 ||\r\n      pathCanon.indexOf(\"/bp/\") >= 0\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public static isBedrockItem(itemId: string) {\r\n    if (itemId.indexOf(\"element\") >= 0) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n  public static getBlockDefaultTexturePath(blockId: string) {\r\n    let blockCat = VanillaProjectManager.getBlocksCatalogDirect();\r\n    let textureCat = VanillaProjectManager.getTerrainTexturesCatalogDirect();\r\n\r\n    if (!blockCat || !textureCat) {\r\n      return undefined;\r\n    }\r\n\r\n    const blockTextureId = blockCat.getDefaultTextureId(blockId);\r\n\r\n    if (!blockTextureId) {\r\n      return undefined;\r\n    }\r\n\r\n    return textureCat.getDefaultTexturePath(blockTextureId);\r\n  }\r\n\r\n  static shortenFilterDescription(descript: string) {\r\n    descript = descript.replace(\"Returns true if \", \"\");\r\n    descript = descript.replace(\"True if \", \"\");\r\n    descript = descript.replace(\"Returns true when \", \"\");\r\n    descript = descript.replace(\"Tests the \", \"\");\r\n    descript = descript.replace(\"Tests if \", \"\");\r\n    descript = descript.replace(\"Tests whether \", \"\");\r\n    descript = descript.replace(\"Tests for \", \"\");\r\n    descript = descript.replace(\"Returns \", \"\");\r\n    if (descript.startsWith(\"the \")) {\r\n      descript = descript.substring(4);\r\n    }\r\n\r\n    descript = Utilities.ensureLooksLikeSentence(descript);\r\n\r\n    return descript;\r\n  }\r\n\r\n  static clearCommonTerms(path: string) {\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/resource_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/behavior_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/design_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/skin_packs/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/resource_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/behavior_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/design_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/skin_pack/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/behavior/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/resource/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/design/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/static-assets/\", \"/\");\r\n    path = Utilities.replaceAllCaseInsensitive(path, \"/zips/\", \"/\");\r\n\r\n    path = path.replace(/\\/\\//gi, \"/\");\r\n\r\n    return path;\r\n  }\r\n\r\n  static pathLooksLikeResourcePackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (\r\n      pathCanon.indexOf(\"/resource\") >= 0 ||\r\n      pathCanon.indexOf(\"resource_pack\") >= 0 ||\r\n      pathCanon.indexOf(\"_rp\") >= 0 || // rp is uncommon as the start of a word\r\n      pathCanon.indexOf(\"/rp_\") >= 0 ||\r\n      pathCanon.indexOf(\"/rp/\") >= 0\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeSkinPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    // because sp might common in english as an abbreviation, be less tolerant\r\n    // compared to behavior/resource packs in assuming \"sp\" means skin pack\r\n    if (pathCanon.indexOf(\"/skin\") >= 0 || pathCanon.indexOf(\"skin_pack\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikePersonaPackName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (pathCanon.indexOf(\"/persona/\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeWorldFolderName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (pathCanon.indexOf(\"/world\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static pathLooksLikeSubPacksFolderName(path: string) {\r\n    let pathCanon = path.toLowerCase();\r\n\r\n    pathCanon = pathCanon.replace(/\\\\/gi, \"/\");\r\n    pathCanon = pathCanon.replace(/ /gi, \"_\");\r\n    pathCanon = Utilities.ensureEndsWithSlash(Utilities.ensureStartsWithSlash(pathCanon));\r\n\r\n    if (pathCanon.indexOf(\"/subpacks\") >= 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n  static pathLooksLikePackName(path: string) {\r\n    return (\r\n      this.pathLooksLikeBehaviorPackName(path) ||\r\n      this.pathLooksLikeResourcePackName(path) ||\r\n      this.pathLooksLikeSkinPackName(path)\r\n    );\r\n  }\r\n\r\n  static replaceMinecraftPathTokens(tokenizePath: string) {\r\n    if (tokenizePath.startsWith(\"<RPME>\")) {\r\n      tokenizePath += \".geo.json\";\r\n    } else if (\r\n      tokenizePath.startsWith(\"<BPE>\") ||\r\n      tokenizePath.startsWith(\"<BPLE>\") ||\r\n      tokenizePath.startsWith(\"<BPSR>\")\r\n    ) {\r\n      tokenizePath += \".json\";\r\n    } else if (tokenizePath.startsWith(\"<RPE>\")) {\r\n      tokenizePath += \".entity.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPAC>\")) {\r\n      tokenizePath += \".animation_controllers.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPRC>\")) {\r\n      tokenizePath += \".render_controllers.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPA>\")) {\r\n      tokenizePath += \".animation.json\";\r\n    } else if (tokenizePath.startsWith(\"<RPTE>\")) {\r\n      if (tokenizePath.indexOf(\".\") < 0) {\r\n        tokenizePath += \".png\";\r\n      }\r\n    }\r\n    tokenizePath = tokenizePath.replace(/<RPTE>/gi, \"/resource_pack/textures/entity/\");\r\n    tokenizePath = tokenizePath.replace(/<RPME>/gi, \"/resource_pack/models/entity/\");\r\n    tokenizePath = tokenizePath.replace(/<RPAC>/gi, \"/resource_pack/animation_controllers/\");\r\n    tokenizePath = tokenizePath.replace(/<RPRC>/gi, \"/resource_pack/render_controllers/\");\r\n    tokenizePath = tokenizePath.replace(/<RPA>/gi, \"/resource_pack/animations/\");\r\n    tokenizePath = tokenizePath.replace(/<RPE>/gi, \"/resource_pack/entity/\");\r\n    tokenizePath = tokenizePath.replace(/<BPE>/gi, \"/behavior_pack/entities/\");\r\n    tokenizePath = tokenizePath.replace(/<BPLE>/gi, \"/behavior_pack/loot_tables/entities/\");\r\n    tokenizePath = tokenizePath.replace(/<BPSR>/gi, \"/behavior_pack/spawn_rules/\");\r\n\r\n    return tokenizePath;\r\n  }\r\n\r\n  static makeNameScriptSafe(tokenName: string) {\r\n    tokenName = tokenName.replace(/[^a-z0-9_]/gi, \"-\").replace(/\\s+/g, \"-\");\r\n\r\n    while (tokenName.length > 1 && !Utilities.isAlpha(tokenName.substring(0, 1))) {\r\n      tokenName = tokenName.substring(1);\r\n    }\r\n\r\n    if (!Utilities.isAlpha(tokenName.substring(0, 1))) {\r\n      tokenName = \"a\" + tokenName;\r\n    }\r\n\r\n    return tokenName;\r\n  }\r\n\r\n  static makeNameFolderSafe(tokenName: string) {\r\n    tokenName = Utilities.replaceAll(tokenName, \" \", \"-\").toLowerCase();\r\n\r\n    if (tokenName.length > 16) {\r\n      tokenName = tokenName.substring(0, 16);\r\n    }\r\n\r\n    return tokenName;\r\n  }\r\n\r\n  static getVersionArrayFrom(ver: string | number | number[] | undefined) {\r\n    if (typeof ver === \"number\") {\r\n      if (Math.floor(ver) !== ver) {\r\n        // deal with decimal numbers that have been observed, e.g., 1.1\r\n        return [Math.floor(ver), Math.floor((ver - Math.floor(ver)) * 10), 0];\r\n      } else {\r\n        return [ver, 0, 0];\r\n      }\r\n    }\r\n\r\n    if (ver === undefined) {\r\n      return [0, 0, 0];\r\n    }\r\n\r\n    if (typeof ver === \"string\") {\r\n      let fvArr = ver.split(\".\");\r\n\r\n      let fvArrInt: number[] = [];\r\n      for (let i = 0; i < fvArr.length; i++) {\r\n        try {\r\n          const num = parseInt(fvArr[i]);\r\n\r\n          if (isNaN(num)) {\r\n            return [0, 0, 0];\r\n          }\r\n\r\n          fvArrInt.push(num);\r\n        } catch (e) {}\r\n      }\r\n\r\n      while (fvArrInt.length < 3) {\r\n        fvArrInt.push(0);\r\n      }\r\n\r\n      return fvArrInt;\r\n    }\r\n\r\n    return ver;\r\n  }\r\n\r\n  static getVersionNumber(ver: string): number {\r\n    if (ver === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    let fvArr = ver.split(\".\");\r\n\r\n    let fvArrInt: number[] = [];\r\n    for (let i = 0; i < fvArr.length; i++) {\r\n      try {\r\n        const num = parseInt(fvArr[i]);\r\n\r\n        if (isNaN(num)) {\r\n          return 0;\r\n        }\r\n\r\n        fvArrInt.push(num);\r\n      } catch (e) {}\r\n    }\r\n\r\n    while (fvArrInt.length < 3) {\r\n      fvArrInt.push(0);\r\n    }\r\n\r\n    if (fvArrInt.length < 3) {\r\n      return 0;\r\n    }\r\n\r\n    let verNum = fvArrInt[0] * 1000000 + 10000000;\r\n    verNum += fvArrInt[1] * 1000 + fvArrInt[2];\r\n\r\n    return verNum;\r\n  }\r\n\r\n  static cleanUpScriptDescription(scriptDescription: string) {\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"/*\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*/\\n\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*\\n\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*/\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"*\", \"\");\r\n    scriptDescription = Utilities.replaceAll(scriptDescription, \"@beta\", \"\");\r\n\r\n    scriptDescription = scriptDescription.trim();\r\n\r\n    return scriptDescription;\r\n  }\r\n\r\n  static getIdsAndVersions(packStr: string): { uuid: string; version: number[] }[] {\r\n    const refs: { uuid: string; version: number[] }[] = [];\r\n\r\n    const packRefStrs = packStr.split(\",\");\r\n\r\n    for (const packRefStr of packRefStrs) {\r\n      const packRefStrParts = packRefStr.split(\"@\");\r\n      let wasAdded = false;\r\n\r\n      if (packRefStrParts.length === 2) {\r\n        const versionNumberParts = packRefStrParts[1].split(\".\");\r\n\r\n        if (versionNumberParts.length === 3) {\r\n          const verNumber: number[] = [];\r\n\r\n          for (let i = 0; i < versionNumberParts.length; i++) {\r\n            let num = undefined;\r\n\r\n            try {\r\n              num = parseInt(versionNumberParts[i]);\r\n            } catch (e) {}\r\n\r\n            if (num !== undefined) {\r\n              verNumber.push(num);\r\n            }\r\n          }\r\n\r\n          if (verNumber.length === 3 && this.isValidUuid(packRefStrParts[0])) {\r\n            refs.push({\r\n              uuid: packRefStrParts[0],\r\n              version: verNumber,\r\n            });\r\n            wasAdded = true;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!wasAdded) {\r\n        Log.fail(\"UUID/version is not in a good form (uuid@x.y.z) - is '\" + packRefStr + \"'\");\r\n      }\r\n    }\r\n\r\n    return refs;\r\n  }\r\n\r\n  static isValidUuid(uuid: string) {\r\n    // sample uuid: 414a42cd-98d4-4e0d-8e3f-e34ab8a0c05e\r\n    //              xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\r\n\r\n    if (uuid.length === 36) {\r\n      const parts = uuid.split(\"-\");\r\n\r\n      if (\r\n        parts.length === 5 &&\r\n        parts[0].length === 8 &&\r\n        parts[1].length === 4 &&\r\n        parts[2].length === 4 &&\r\n        parts[3].length === 4 &&\r\n        parts[4].length === 12\r\n      ) {\r\n        for (let i = 0; i < parts.length; i++) {\r\n          for (let j = 0; j < parts[i].length; j++) {\r\n            if (!Utilities.isAlphaNumeric(parts[i][j])) {\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static fixupJson(json: string) {\r\n    json = json.replace(/([, ;}\\]])0b([, ;}\\]])/gi, \"$1false$2\");\r\n    json = json.replace(/([, ;}\\]])1b([, ;}\\]])/gi, \"$1true$2\");\r\n\r\n    json = json.replace(/(\\d)b([, ;\\]])/gi, \"$1$2\");\r\n    json = json.replace(/(\\d)d([, ;\\]])/gi, \"$1$2\");\r\n    json = json.replace(/(\\d)f([, ;\\]])/gi, \"$1$2\");\r\n    json = json.replace(/(\\d)s([, ;\\]])/gi, \"$1$2\");\r\n\r\n    json = json.replace(/\\[I;/gi, \"[\");\r\n\r\n    json = json.replace(/\u2026/gi, \"\");\r\n    /*      \r\n        json = json.replace(/([, ;\\]])none([, ;\\]])/gi, \"$1\\\"none\\\"$2\");\r\n        json = json.replace(/([, ;\\]])south([, ;\\]])/gi, \"$1\\\"south\\\"$2\");\r\n        json = json.replace(/([, ;\\]])north([, ;\\]])/gi, \"$1\\\"north\\\"$2\");\r\n        json = json.replace(/([, ;\\]])east([, ;\\]])/gi, \"$1\\\"east\\\"$2\");\r\n        json = json.replace(/([, ;\\]])west([, ;\\]])/gi, \"$1\\\"west\\\"$2\");\r\n        json = json.replace(/([, ;\\]])side([, ;\\]])/gi, \"$1\\\"side\\\"$2\");\r\n*/\r\n\r\n    return json;\r\n  }\r\n\r\n  static canonicalizeName(id: string) {\r\n    if (id === undefined || id === null) {\r\n      Log.debug(\"canonicalizeName called with undefined/null id\");\r\n      return \"\";\r\n    }\r\n\r\n    let canonId = id.toLowerCase().trim();\r\n\r\n    if (canonId.startsWith(\"minecraft:\")) {\r\n      canonId = canonId.substring(10, canonId.length);\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n\r\n  static canonicalizeFullName(id: string) {\r\n    if (id === undefined || id === null) {\r\n      Log.debug(\"canonicalizeFullName called with undefined/null id\");\r\n      return \"\";\r\n    }\r\n\r\n    let canonId = id.toLowerCase().trim();\r\n\r\n    if (canonId.indexOf(\":\") < 0) {\r\n      canonId = \"minecraft:\" + canonId;\r\n    }\r\n\r\n    return canonId;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BlockBaseType from \"./BlockBaseType\";\r\nimport { BlockRenderType } from \"./BlockRenderType\";\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport IJavaBlockTypeData from \"./IJavaBlockTypeData\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Database from \"./Database\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IComponent from \"./IComponent\";\r\nimport IBlockTypeBehaviorPack from \"./IBlockTypeBehaviorPack\";\r\nimport IBlockTypeWrapper from \"./IBlockTypeWrapper\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport { IBlocksMetadataBlockProperty } from \"./IBlocksMetadata\";\r\nimport { IBlockResource } from \"./IBlocksCatalog\";\r\n\r\nexport default class BlockType implements IManagedComponentSetItem {\r\n  public data: IBlockTypeData;\r\n  public javaData: IJavaBlockTypeData | null;\r\n\r\n  private _baseType?: BlockBaseType;\r\n  private _baseTypeId = \"\";\r\n\r\n  private _isCustom = false;\r\n  private _behaviorPackData: IBlockTypeWrapper | null = null;\r\n  private _behaviorPackFile?: IFile;\r\n  private _blockResource?: IBlockResource;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  private _properties: { [name: string]: IBlocksMetadataBlockProperty } = {};\r\n\r\n  public behaviorPackBlockTypeDef?: IBlockTypeBehaviorPack;\r\n  private _managed: { [id: string]: IManagedComponent | undefined } = {};\r\n  private _onLoaded = new EventDispatcher<BlockType, BlockType>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<BlockType, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<BlockType, string>();\r\n  private _onComponentChanged = new EventDispatcher<BlockType, IManagedComponent>();\r\n\r\n  public get numericId() {\r\n    return this.data.lid;\r\n  }\r\n\r\n  public set numericId(newId: number | undefined) {\r\n    this.data.lid = newId;\r\n  }\r\n\r\n  public get baseTypeId() {\r\n    return this._baseTypeId;\r\n  }\r\n\r\n  public get mapColor(): string | undefined {\r\n    // First check if this specific block type has a map color\r\n    if (this.data.mc) {\r\n      return this.data.mc;\r\n    }\r\n\r\n    // Fall back to the base type's map color from mccat.json\r\n    if (this._baseType && this._baseType.mapColor) {\r\n      return this._baseType.mapColor;\r\n    }\r\n\r\n    // Check the default base type\r\n    const defaultBaseType = Database.defaultBlockBaseType;\r\n    if (defaultBaseType && defaultBaseType.mapColor) {\r\n      return defaultBaseType.mapColor;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public get isCustom() {\r\n    return this._isCustom;\r\n  }\r\n\r\n  public get baseType() {\r\n    if (this._baseType !== undefined) {\r\n      return this._baseType;\r\n    }\r\n\r\n    return Database.defaultBlockBaseType;\r\n  }\r\n\r\n  public get catalogResource(): IBlockResource | undefined {\r\n    if (this._blockResource) {\r\n      return this._blockResource;\r\n    }\r\n\r\n    if (Database.blocksCatalog) {\r\n      // First try with shortId (full block name like \"acacia_button\")\r\n      let lookupId = this.shortId;\r\n\r\n      if (lookupId) {\r\n        this._blockResource = Database.blocksCatalog.getCatalogResource(lookupId);\r\n      }\r\n\r\n      // Fall back to material if shortId lookup fails\r\n      if (!this._blockResource) {\r\n        let mat = this.material;\r\n        if (mat && mat !== lookupId) {\r\n          this._blockResource = Database.blocksCatalog.getCatalogResource(mat);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._blockResource;\r\n  }\r\n\r\n  public set baseType(baseType: BlockBaseType) {\r\n    this._baseType = baseType;\r\n    this._baseTypeId = baseType.name;\r\n  }\r\n\r\n  public get material() {\r\n    if (this.data.m) {\r\n      return this.data.m;\r\n    }\r\n\r\n    return this.data.n;\r\n  }\r\n\r\n  public renderType: BlockRenderType = BlockRenderType.Custom;\r\n\r\n  get icon() {\r\n    let val = this.data.ic;\r\n\r\n    if (val === undefined && this.baseType !== undefined) {\r\n      val = this.baseType.icon;\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  get title() {\r\n    let id = this.shortId;\r\n\r\n    // For custom blocks, strip the namespace prefix (e.g., \"ec_vv:bushy_cherry\" -> \"bushy_cherry\")\r\n    const colonIndex = id.indexOf(\":\");\r\n    if (colonIndex >= 0) {\r\n      id = id.substring(colonIndex + 1);\r\n    }\r\n\r\n    return Utilities.humanifyMinecraftName(id);\r\n  }\r\n\r\n  get friendlyName(): string {\r\n    // First check if the base type has a friendly name from mccat.json\r\n    if (this._baseType && this._baseType.friendlyName) {\r\n      return this._baseType.friendlyName;\r\n    }\r\n\r\n    // Fall back to humanified shortId\r\n    return this.title;\r\n  }\r\n\r\n  constructor(typeId: string) {\r\n    this.javaData = null;\r\n\r\n    this.data = {\r\n      n: typeId,\r\n    };\r\n\r\n    if (typeId.indexOf(\":\") >= 0 && !typeId.startsWith(\"minecraft:\")) {\r\n      this._isCustom = true;\r\n    }\r\n  }\r\n\r\n  getIcon(): string {\r\n    const icon = this.icon;\r\n\r\n    if (icon === undefined) {\r\n      return this.shortId;\r\n    }\r\n\r\n    const typeName = MinecraftUtilities.canonicalizeName(this.id);\r\n\r\n    const lastUnder = typeName.lastIndexOf(\"_\");\r\n\r\n    let allButLast = typeName;\r\n\r\n    if (lastUnder >= 0) {\r\n      allButLast = allButLast.substring(0, lastUnder);\r\n    }\r\n\r\n    switch (icon) {\r\n      case \"st_\":\r\n        return \"stone_\" + allButLast;\r\n\r\n      case \"le_\":\r\n        return \"leaves_acacia_carried\";\r\n\r\n      case \"pl_\":\r\n        return \"planks_\" + allButLast;\r\n\r\n      case \"_car\":\r\n        return allButLast + \"_carried\";\r\n\r\n      case \"plant_\":\r\n        return typeName + \"_fern_carried\";\r\n      case \"_\":\r\n        return typeName;\r\n\r\n      case \"_t\":\r\n        return allButLast + \"_top\";\r\n\r\n      case \"_br\":\r\n        return allButLast + \"_bricks\";\r\n\r\n      case \"_carr\":\r\n        return typeName + \"_carried\";\r\n\r\n      case \"_bl\":\r\n        return allButLast + \"_block\";\r\n\r\n      case \"_n\":\r\n        return allButLast + \"_normal\";\r\n\r\n      case \"_blt\":\r\n        return allButLast + \"_block_top\";\r\n\r\n      case \"mshblk\":\r\n        const lastmb = allButLast.split(\"_\");\r\n\r\n        return \"mushroom_block_skin_\" + lastmb[0];\r\n\r\n      case \"ml_sm\":\r\n        const lastml = allButLast.split(\"_\");\r\n\r\n        return lastml[lastml.length - 2] + \"_\" + lastml[lastml.length - 1] + \"_smooth\";\r\n\r\n      case \"l_blt\":\r\n        const lastbt = allButLast.split(\"_\");\r\n\r\n        return lastbt[lastbt.length - 1] + \"_block_top\";\r\n\r\n      case \"|\":\r\n        return allButLast;\r\n\r\n      case \"|s\":\r\n        return allButLast + \"s\";\r\n\r\n      case \"l\":\r\n        const last = allButLast.split(\"_\");\r\n\r\n        return last[last.length - 1];\r\n\r\n      case \"sb_\":\r\n        const fu = allButLast.split(\"_\");\r\n\r\n        return \"stonebricks_\" + fu[0];\r\n\r\n      case \"st_l_sm\":\r\n        const lasta = allButLast.split(\"_\");\r\n\r\n        return \"stone_\" + lasta[lasta.length - 1] + \"_smooth\";\r\n\r\n      case \"|rv\":\r\n        // dark_prismarine_stairs => prismarine_dark_stairs\r\n        let result = \"\";\r\n\r\n        const rv = allButLast.split(\"_\");\r\n\r\n        for (let i = rv.length - 1; i > 0; i--) {\r\n          if (result.length > 0) {\r\n            result += \"_\";\r\n          }\r\n\r\n          result += rv[i];\r\n        }\r\n\r\n        return result;\r\n\r\n      case \"2rv\":\r\n        // yellow_glazed_terracotta => glazed_terracotta_yellow\r\n        // dark_blue_glazed_terracotta => glazed_terracotta_dark_blue\r\n        let resultF = \"\";\r\n\r\n        const rvF = typeName.split(\"_\");\r\n\r\n        if (rvF.length >= 2) {\r\n          resultF = rvF[rvF.length - 2] + \"_\" + rvF[rvF.length - 1];\r\n\r\n          for (let i = 0; i < rvF.length - 2; i++) {\r\n            resultF += \"_\" + rvF[i];\r\n          }\r\n        } else {\r\n          resultF = typeName;\r\n        }\r\n\r\n        return resultF;\r\n\r\n      case \"rv\":\r\n        // dark_prismarine => prismarine_dark\r\n        let resultA = \"\";\r\n\r\n        const rvA = typeName.split(\"_\");\r\n\r\n        for (let i = rvA.length - 1; i >= 0; i--) {\r\n          if (resultA.length > 0) {\r\n            resultA += \"_\";\r\n          }\r\n\r\n          resultA += rvA[i];\r\n        }\r\n\r\n        return resultA;\r\n    }\r\n\r\n    if (this.icon !== undefined) {\r\n      return this.icon;\r\n    }\r\n\r\n    return this.shortId;\r\n  }\r\n\r\n  public get id() {\r\n    if (this.behaviorPackBlockTypeDef && this.behaviorPackBlockTypeDef.description) {\r\n      return this.behaviorPackBlockTypeDef.description.identifier;\r\n    }\r\n\r\n    if (this.data.n === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    if (this.data.n.endsWith(\"_\")) {\r\n      return this.data.n + this.baseTypeId;\r\n    }\r\n\r\n    return this.data.n;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this.data.n = newId;\r\n\r\n    if (this.behaviorPackBlockTypeDef && this.behaviorPackBlockTypeDef.description && newId) {\r\n      this.behaviorPackBlockTypeDef.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._behaviorPackFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    this._behaviorPackFile = newFile;\r\n  }\r\n\r\n  public get shortId() {\r\n    let id = this.id;\r\n    if (id.startsWith(\"minecraft:\")) {\r\n      return id.substring(10, id.length);\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this.behaviorPackBlockTypeDef === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managed[id]) {\r\n      const comp = this.behaviorPackBlockTypeDef.components[id];\r\n\r\n      if (comp) {\r\n        this._managed[id] = new ManagedComponent(this.behaviorPackBlockTypeDef.components, id, comp);\r\n      }\r\n    }\r\n\r\n    return this._managed[id];\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"BTNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getAllComponents() {\r\n    return this.getComponents();\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this.behaviorPackBlockTypeDef !== undefined) {\r\n      for (const componentName in this.behaviorPackBlockTypeDef.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  ensurePropertyDefinition(propertyName: string, propertyDef: IBlocksMetadataBlockProperty) {\r\n    if (!this._properties[propertyName]) {\r\n      this._properties[propertyName] = propertyDef;\r\n    }\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this.behaviorPackBlockTypeDef as IBlockTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managed[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this.behaviorPackBlockTypeDef === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: IComponent | string | string[] | boolean | number[] | number | undefined;\r\n    } = {};\r\n    const newComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this.behaviorPackBlockTypeDef.components) {\r\n      if (name !== id) {\r\n        const component = this.behaviorPackBlockTypeDef.components[name];\r\n\r\n        newBehaviorPacks[name] = component;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managed) {\r\n      if (name !== id) {\r\n        newComponents[name] = this._managed[name];\r\n      }\r\n    }\r\n\r\n    this.behaviorPackBlockTypeDef.components = newBehaviorPacks;\r\n    this._managed = newComponents;\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (this.behaviorPackBlockTypeDef === undefined) {\r\n      this.behaviorPackBlockTypeDef = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n        },\r\n        components: {},\r\n        events: {},\r\n      };\r\n    }\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._behaviorPackFile === undefined) {\r\n      return false;\r\n    }\r\n\r\n    Log.assert(this._behaviorPackData !== null, \"BTP\");\r\n\r\n    if (!this._behaviorPackData) {\r\n      return false;\r\n    }\r\n\r\n    return this._behaviorPackFile.setObjectContentIfSemanticallyDifferent(this._behaviorPackData);\r\n  }\r\n\r\n  /**\r\n   * Loads the definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    if (this._behaviorPackFile === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (!this._behaviorPackFile.isContentLoaded) {\r\n      await this._behaviorPackFile.loadContent();\r\n    }\r\n\r\n    if (!this._behaviorPackFile.content || this._behaviorPackFile.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._loadedWithComments = preserveComments;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._behaviorPackFile)\r\n      : StorageUtilities.getJsonObject(this._behaviorPackFile);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._behaviorPackData = data;\r\n\r\n    const block = data[\"minecraft:block\"];\r\n\r\n    if (block.description) {\r\n      this.id = block.description.identifier;\r\n    }\r\n\r\n    this.behaviorPackBlockTypeDef = block;\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport IBlockTypePropertyData from \"./IBlockTypePropertyData\";\r\n\r\n/**\r\n * Defines the geometric shape/mesh type for block rendering.\r\n * Used to drive data-driven block mesh creation in BlockMeshFactory.\r\n */\r\nexport enum BlockShape {\r\n  custom = 0,\r\n  unitCube = 1,\r\n  stairs = 2,\r\n  slab = 3,\r\n  fence = 4,\r\n  fenceGate = 5,\r\n  wall = 6,\r\n  door = 7,\r\n  trapdoor = 8,\r\n  button = 9,\r\n  pressurePlate = 10,\r\n  torch = 11,\r\n  lantern = 12,\r\n  chain = 13,\r\n  ladder = 14,\r\n  rail = 15,\r\n  lever = 16,\r\n  anvil = 17,\r\n  candle = 18,\r\n  endRod = 19,\r\n  glassPaneOrBars = 20,\r\n  billboard = 21, // Cross/X shape (saplings, flowers, mushrooms, etc.)\r\n  carpet = 22,\r\n  crop = 23, // Wheat, carrots, potatoes, etc.\r\n  leaves = 24,\r\n  log = 25,\r\n  water = 26,\r\n  redstoneWire = 27,\r\n  sign = 28,\r\n  hangingSign = 29,\r\n  bed = 30,\r\n  chest = 31,\r\n  campfire = 32,\r\n  bell = 33,\r\n  hopper = 34,\r\n  brewingStand = 35,\r\n  enchantingTable = 36,\r\n  cauldron = 37,\r\n  dripleaf = 38, // Big dripleaf with tilted leaf head and stem\r\n}\r\n\r\nexport default interface IBlockBaseTypeData {\r\n  id?: number;\r\n  n: string;\r\n  t?: string; // friendly title/display name\r\n  mc?: string; // map color\r\n  m?: string; // material\r\n  ic?: string;\r\n  abstract?: boolean;\r\n  isOpaque?: boolean;\r\n  sh?: BlockShape; // shape (abbreviated)\r\n  properties?: IBlockTypePropertyData[];\r\n  variants?: IBlockTypeData[];\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IBlockBaseTypeData, { BlockShape } from \"./IBlockBaseTypeData\";\r\n\r\nexport default class BlockBaseType {\r\n  private _name = \"\";\r\n\r\n  public data: IBlockBaseTypeData;\r\n\r\n  get icon() {\r\n    return this.data.ic;\r\n  }\r\n\r\n  getProperty(name: string) {\r\n    if (this.data.properties === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    for (let i = 0; i < this.data.properties.length; i++) {\r\n      if (this.data.properties[i].name === name) {\r\n        return this.data.properties[i];\r\n      }\r\n    }\r\n\r\n    throw new Error();\r\n  }\r\n\r\n  get isOpaque() {\r\n    if (this.data.isOpaque !== undefined) {\r\n      return this.data.isOpaque;\r\n    }\r\n\r\n    // Shapes that are inherently non-opaque (transparent, partial, or see-through)\r\n    const nonOpaqueShapes = [\r\n      BlockShape.fence,\r\n      BlockShape.fenceGate,\r\n      BlockShape.door,\r\n      BlockShape.trapdoor,\r\n      BlockShape.button,\r\n      BlockShape.pressurePlate,\r\n      BlockShape.torch,\r\n      BlockShape.lantern,\r\n      BlockShape.chain,\r\n      BlockShape.ladder,\r\n      BlockShape.rail,\r\n      BlockShape.lever,\r\n      BlockShape.candle,\r\n      BlockShape.endRod,\r\n      BlockShape.glassPaneOrBars,\r\n      BlockShape.billboard,\r\n      BlockShape.carpet,\r\n      BlockShape.crop,\r\n      BlockShape.leaves,\r\n      BlockShape.water,\r\n      BlockShape.redstoneWire,\r\n      BlockShape.sign,\r\n      BlockShape.hangingSign,\r\n      BlockShape.campfire,\r\n      BlockShape.bell,\r\n      BlockShape.hopper,\r\n      BlockShape.brewingStand,\r\n      BlockShape.enchantingTable,\r\n      BlockShape.cauldron,\r\n      BlockShape.dripleaf,\r\n    ];\r\n\r\n    // Non-opaque shapes should not hide adjacent faces\r\n    if (nonOpaqueShapes.includes(this.shape)) {\r\n      return false;\r\n    }\r\n\r\n    // Default: solid blocks (custom, unitCube, stairs, slab, wall, anvil, bed, chest, etc.)\r\n    // are opaque and correctly cull hidden faces between adjacent blocks\r\n    return true;\r\n  }\r\n\r\n  get mapColor(): string | undefined {\r\n    return this.data.mc;\r\n  }\r\n\r\n  get shape(): BlockShape {\r\n    // Support both abbreviated (sh) and full (shape) property names\r\n    const shapeValue = this.data.sh;\r\n    if (shapeValue === undefined) {\r\n      return BlockShape.custom;\r\n    }\r\n\r\n    return shapeValue;\r\n  }\r\n\r\n  get friendlyName(): string | undefined {\r\n    return this.data.t;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  constructor(name: string) {\r\n    this._name = name;\r\n\r\n    this.data = {\r\n      n: name,\r\n    };\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { Packument } from \"@npm/types\";\r\n\r\nexport default class NpmModule {\r\n  packument: Packument;\r\n\r\n  latest: string | undefined;\r\n  beta: string | undefined;\r\n  betaVersion: string | undefined;\r\n  betaProductVersion: string | undefined;\r\n  latestPreviewVersion: string | undefined;\r\n  latestRetailVersion: string | undefined;\r\n\r\n  constructor(packument: Packument) {\r\n    this.packument = packument;\r\n\r\n    if (this.packument[\"dist-tags\"]) {\r\n      this.latest = this.packument[\"dist-tags\"].latest;\r\n      this.beta = this.packument[\"dist-tags\"].beta;\r\n    }\r\n\r\n    if (this.beta) {\r\n      // e.g., 1.3.0-beta.1.20.0-preview.23;\r\n      const betaTag = this.beta.indexOf(\"-beta.\");\r\n\r\n      if (betaTag > 0) {\r\n        this.betaVersion = this.beta.substring(0, betaTag);\r\n        this.betaProductVersion = this.beta.substring(betaTag + 6);\r\n        const dash = this.betaProductVersion.indexOf(\"-\");\r\n\r\n        if (dash >= 0) {\r\n          this.latestPreviewVersion = this.betaProductVersion.substring(0, dash);\r\n\r\n          const nums = this.latestPreviewVersion.split(\".\");\r\n\r\n          if (nums.length === 3) {\r\n            if (nums[2] === \"0\") {\r\n              this.latestRetailVersion = nums[0] + \".\" + (parseInt(nums[1]) - 1).toString() + \".0\";\r\n            } else {\r\n              this.latestRetailVersion = nums[0] + \".\" + nums[1] + \".\" + (parseInt(nums[2]) - 10).toString();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ScriptModuleInfo - Minecraft Script API module information\r\n *\r\n * Contains version information, API documentation, and metadata for\r\n * Minecraft Script API modules.\r\n */\r\n\r\n/**\r\n * Script module stability level\r\n */\r\nexport enum ModuleStability {\r\n  Stable = \"stable\",\r\n  Beta = \"beta\",\r\n  Internal = \"internal\",\r\n}\r\n\r\n/**\r\n * Information about a script module\r\n */\r\nexport interface IScriptModuleInfo {\r\n  /** Module name (e.g., \"@minecraft/server\") */\r\n  name: string;\r\n  /** Latest stable version */\r\n  latestStableVersion: string;\r\n  /** Latest beta version */\r\n  latestBetaVersion: string;\r\n  /** Minimum supported Minecraft version */\r\n  minMinecraftVersion: string;\r\n  /** Short description */\r\n  description: string;\r\n  /** Stability level */\r\n  stability: ModuleStability;\r\n  /** NPM package name for type definitions */\r\n  typesPackage: string;\r\n  /** Documentation URL */\r\n  docsUrl: string;\r\n}\r\n\r\n/**\r\n * Known Minecraft Script API modules\r\n */\r\nexport const SCRIPT_MODULES: IScriptModuleInfo[] = [\r\n  {\r\n    name: \"@minecraft/server\",\r\n    latestStableVersion: \"1.17.0\",\r\n    latestBetaVersion: \"1.18.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Core Minecraft server APIs for entities, blocks, dimensions, and world manipulation\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/server\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server/minecraft-server\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-ui\",\r\n    latestStableVersion: \"1.4.0\",\r\n    latestBetaVersion: \"1.5.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"UI APIs for creating forms, dialogs, and player interactions\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/server-ui\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-ui/minecraft-server-ui\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-admin\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Administrative APIs for Bedrock Dedicated Server\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-admin\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-admin/minecraft-server-admin\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-gametest\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"GameTest Framework APIs for automated testing\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-gametest\",\r\n    docsUrl:\r\n      \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-gametest/minecraft-server-gametest\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-net\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Networking APIs for HTTP requests (Dedicated Server only)\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-net\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/server-net/minecraft-server-net\",\r\n  },\r\n  {\r\n    name: \"@minecraft/server-editor\",\r\n    latestStableVersion: \"0.1.0-beta\",\r\n    latestBetaVersion: \"0.1.0-beta\",\r\n    minMinecraftVersion: \"1.21.0\",\r\n    description: \"Editor extension APIs for Minecraft Editor\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/server-editor\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/documents/editoroverview\",\r\n  },\r\n  {\r\n    name: \"@minecraft/vanilla-data\",\r\n    latestStableVersion: \"1.20.80\",\r\n    latestBetaVersion: \"1.21.40\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Type definitions for vanilla Minecraft identifiers (blocks, items, entities)\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/vanilla-data\",\r\n    docsUrl: \"https://www.npmjs.com/package/@minecraft/vanilla-data\",\r\n  },\r\n  {\r\n    name: \"@minecraft/common\",\r\n    latestStableVersion: \"1.2.0\",\r\n    latestBetaVersion: \"1.2.0\",\r\n    minMinecraftVersion: \"1.20.0\",\r\n    description: \"Common types and utilities used across Minecraft modules\",\r\n    stability: ModuleStability.Stable,\r\n    typesPackage: \"@minecraft/common\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/minecraft/common/minecraft-common\",\r\n  },\r\n  {\r\n    name: \"@minecraft/debug-utilities\",\r\n    latestStableVersion: \"1.0.0-beta\",\r\n    latestBetaVersion: \"1.0.0-beta\",\r\n    minMinecraftVersion: \"1.21.0\",\r\n    description: \"Debugging utilities for script development\",\r\n    stability: ModuleStability.Beta,\r\n    typesPackage: \"@minecraft/debug-utilities\",\r\n    docsUrl: \"https://learn.microsoft.com/minecraft/creator/scriptapi/\",\r\n  },\r\n];\r\n\r\n/**\r\n * Utility class for script module information\r\n */\r\nexport class ScriptModuleInfoProvider {\r\n  private static moduleMap: Map<string, IScriptModuleInfo> | null = null;\r\n\r\n  /**\r\n   * Get module map (lazy initialization)\r\n   */\r\n  private static getModuleMap(): Map<string, IScriptModuleInfo> {\r\n    if (!this.moduleMap) {\r\n      this.moduleMap = new Map();\r\n      for (const module of SCRIPT_MODULES) {\r\n        this.moduleMap.set(module.name, module);\r\n      }\r\n    }\r\n    return this.moduleMap;\r\n  }\r\n\r\n  /**\r\n   * Get info for a specific module\r\n   */\r\n  public static getModuleInfo(moduleName: string): IScriptModuleInfo | undefined {\r\n    return this.getModuleMap().get(moduleName);\r\n  }\r\n\r\n  /**\r\n   * Gets the latest version for a Minecraft module.\r\n   * @param moduleName Module name (with or without @minecraft/ prefix)\r\n   * @param preferBeta If true, returns the latest beta version; otherwise returns stable\r\n   * @returns The version string, or undefined if module is not known\r\n   */\r\n  public static getLatestVersion(moduleName: string, preferBeta: boolean = true): string | undefined {\r\n    // Normalize: add @minecraft/ prefix if not present\r\n    const fullName = moduleName.startsWith(\"@minecraft/\") ? moduleName : `@minecraft/${moduleName}`;\r\n    const info = this.getModuleInfo(fullName);\r\n    if (!info) {\r\n      return undefined;\r\n    }\r\n    return preferBeta ? info.latestBetaVersion : info.latestStableVersion;\r\n  }\r\n\r\n  /**\r\n   * Gets version info for a Minecraft module.\r\n   * @param moduleName Module name (with or without @minecraft/ prefix)\r\n   * @returns Version info object, or undefined if module is not known\r\n   */\r\n  public static getVersionInfo(\r\n    moduleName: string\r\n  ): { latestStableVersion: string; latestBetaVersion: string; minMinecraftVersion: string } | undefined {\r\n    // Normalize: add @minecraft/ prefix if not present\r\n    const fullName = moduleName.startsWith(\"@minecraft/\") ? moduleName : `@minecraft/${moduleName}`;\r\n    const info = this.getModuleInfo(fullName);\r\n    if (!info) {\r\n      return undefined;\r\n    }\r\n    return {\r\n      latestStableVersion: info.latestStableVersion,\r\n      latestBetaVersion: info.latestBetaVersion,\r\n      minMinecraftVersion: info.minMinecraftVersion,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Get all module names\r\n   */\r\n  public static getAllModuleNames(): string[] {\r\n    return SCRIPT_MODULES.map((m) => m.name);\r\n  }\r\n\r\n  /**\r\n   * Check if a module name is a valid Minecraft module\r\n   */\r\n  public static isMinecraftModule(moduleName: string): boolean {\r\n    return this.getModuleMap().has(moduleName);\r\n  }\r\n\r\n  /**\r\n   * Parse a module version from package.json dependency\r\n   */\r\n  public static parseModuleVersion(versionSpec: string): { version: string; isBeta: boolean } {\r\n    // Handle version specs like \"^1.0.0\", \"~1.0.0\", \"1.0.0-beta\", etc.\r\n    const cleanVersion = versionSpec.replace(/^[\\^~>=<]+/, \"\").trim();\r\n    const isBeta = cleanVersion.includes(\"beta\") || cleanVersion.includes(\"alpha\");\r\n\r\n    return { version: cleanVersion, isBeta };\r\n  }\r\n\r\n  /**\r\n   * Check if a module version is outdated\r\n   */\r\n  public static isVersionOutdated(\r\n    moduleName: string,\r\n    currentVersion: string\r\n  ): { isOutdated: boolean; latestVersion: string; isBetaAvailable: boolean } {\r\n    const info = this.getModuleInfo(moduleName);\r\n    if (!info) {\r\n      return { isOutdated: false, latestVersion: currentVersion, isBetaAvailable: false };\r\n    }\r\n\r\n    const { version, isBeta } = this.parseModuleVersion(currentVersion);\r\n    const targetVersion = isBeta ? info.latestBetaVersion : info.latestStableVersion;\r\n\r\n    // Simple version comparison (works for semver)\r\n    const isOutdated = this.compareVersions(version, targetVersion) < 0;\r\n    const isBetaAvailable = this.compareVersions(info.latestStableVersion, info.latestBetaVersion) < 0;\r\n\r\n    return {\r\n      isOutdated,\r\n      latestVersion: targetVersion,\r\n      isBetaAvailable,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Compare two semver versions\r\n   * Returns: -1 if a < b, 0 if a == b, 1 if a > b\r\n   */\r\n  public static compareVersions(a: string, b: string): number {\r\n    // Strip beta/alpha suffixes for comparison\r\n    const cleanA = a.replace(/-.*$/, \"\");\r\n    const cleanB = b.replace(/-.*$/, \"\");\r\n\r\n    const partsA = cleanA.split(\".\").map((n) => parseInt(n, 10) || 0);\r\n    const partsB = cleanB.split(\".\").map((n) => parseInt(n, 10) || 0);\r\n\r\n    for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {\r\n      const numA = partsA[i] || 0;\r\n      const numB = partsB[i] || 0;\r\n\r\n      if (numA < numB) return -1;\r\n      if (numA > numB) return 1;\r\n    }\r\n\r\n    // If base versions are equal, non-beta > beta\r\n    const isBetaA = a.includes(\"beta\") || a.includes(\"alpha\");\r\n    const isBetaB = b.includes(\"beta\") || b.includes(\"alpha\");\r\n\r\n    if (isBetaA && !isBetaB) return -1;\r\n    if (!isBetaA && isBetaB) return 1;\r\n\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * Get recommended dependency entries for manifest.json\r\n   */\r\n  public static getRecommendedDependency(\r\n    moduleName: string,\r\n    useBeta: boolean = false\r\n  ): { module_name: string; version: string } | null {\r\n    const info = this.getModuleInfo(moduleName);\r\n    if (!info) {\r\n      return null;\r\n    }\r\n\r\n    return {\r\n      module_name: moduleName,\r\n      version: useBeta ? info.latestBetaVersion : info.latestStableVersion,\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * Common Script API types that need special handling\r\n */\r\nexport const COMMON_SCRIPT_TYPES = {\r\n  // Core types\r\n  world: {\r\n    module: \"@minecraft/server\",\r\n    description: \"The global World object - access to dimensions, players, and world state\",\r\n  },\r\n  system: {\r\n    module: \"@minecraft/server\",\r\n    description: \"The System object - timing, events, and script lifecycle\",\r\n  },\r\n  Entity: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Base class for all entities (players, mobs, items)\",\r\n  },\r\n  Player: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents a player in the world\",\r\n  },\r\n  Block: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents a block in the world\",\r\n  },\r\n  Dimension: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents a dimension (overworld, nether, end)\",\r\n  },\r\n  ItemStack: {\r\n    module: \"@minecraft/server\",\r\n    description: \"Represents an item stack\",\r\n  },\r\n  Vector3: {\r\n    module: \"@minecraft/server\",\r\n    description: \"3D vector with x, y, z coordinates\",\r\n  },\r\n\r\n  // UI types\r\n  ActionFormData: {\r\n    module: \"@minecraft/server-ui\",\r\n    description: \"Button-based form for player selection\",\r\n  },\r\n  MessageFormData: {\r\n    module: \"@minecraft/server-ui\",\r\n    description: \"Simple message with two buttons\",\r\n  },\r\n  ModalFormData: {\r\n    module: \"@minecraft/server-ui\",\r\n    description: \"Complex form with multiple input types\",\r\n  },\r\n};\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Catalog from \"./ICatalog\";\r\nimport axios from \"axios\";\r\nimport BlockType from \"./BlockType\";\r\nimport BlockBaseType from \"./BlockBaseType\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport IJavaBlockTypeData from \"./IJavaBlockTypeData\";\r\nimport IBlockTypeData from \"./IBlockTypeData\";\r\nimport { BlockShape } from \"./IBlockBaseTypeData\";\r\nimport Log from \"./../core/Log\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IFormField from \"../dataform/IFormField\";\r\nimport ILocalUtilities from \"../core/ILocalUtilities\";\r\nimport ITypeDefCatalog from \"./ITypeDefCatalog\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport NpmModule from \"../devproject/NpmModule\";\r\nimport IMainInfoVersions from \"./IMainInfoVersions\";\r\nimport IFormDefinition from \"../dataform/IFormDefinition\";\r\nimport FieldUtilities from \"../dataform/FieldUtilities\";\r\nimport ContentIndex, { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport IProjectInfoData from \"../info/IProjectInfoData\";\r\nimport Project, { FolderContext } from \"../app/Project\";\r\nimport { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"../app/IProjectItemData\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ISnippet from \"../app/ISnippet\";\r\nimport IGalleryItem from \"../app/IGalleryItem\";\r\nimport { MinecraftTrack } from \"../app/ICreatorToolsData\";\r\nimport IBiomesMetadata from \"./IBiomesMetadata\";\r\nimport IBlocksMetadata from \"./IBlocksMetadata\";\r\nimport ILegacyDocumentationNode from \"./docs/ILegacyDocumentation\";\r\nimport IEntitiesMetadata from \"./IEntitiesMetadata\";\r\nimport IItemsMetadata from \"./IItemsMetadata\";\r\nimport IDocCommandSet from \"./docs/IDocCommandSet\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { HashCatalog } from \"../core/HashUtilities\";\r\nimport IFile from \"../storage/IFile\";\r\nimport TerrainTextureCatalogDefinition from \"./TerrainTextureCatalogDefinition\";\r\nimport BlocksCatalogDefinition from \"./BlocksCatalogDefinition\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport IContentSource from \"../app/IContentSource\";\r\nimport { ScriptModuleInfoProvider } from \"../langcore/javascript/ScriptModuleInfo\";\r\n\r\nexport default class Database {\r\n  static isVanillaLoaded = false;\r\n  static isScriptTypesLoaded = false;\r\n  static isContentSourcesLoaded = false;\r\n  static vanillaCatalog: Catalog | null = null;\r\n  static loadedFormCount = 0;\r\n  static _creatorToolsIngameFile: IFile | null = null;\r\n  static _creatorToolsIngameProject: Project | null = null;\r\n  static uxCatalog: { [formName: string]: IFormDefinition } = {};\r\n  private static _missingForms: Set<string> = new Set();\r\n  static formsFolders: { [folderName: string]: IFolder } = {};\r\n  static modelTemplateCatalog: { [templateName: string]: object } = {};\r\n  static loadedModelTemplateCount = 0;\r\n  static stable20TypeDefs: ITypeDefCatalog | null = null;\r\n  static libs: ITypeDefCatalog | null = null;\r\n  static stable10TypeDefs: ITypeDefCatalog | null = null;\r\n  static contentFolder: IFolder | null = null;\r\n  static snippetsFolder: IFolder | null = null;\r\n  static previewMetadataFolder: IFolder | null = null;\r\n  static releaseMetadataFolder: IFolder | null = null;\r\n  static previewVanillaFolder: IFolder | null = null;\r\n  static releaseVanillaFolder: IFolder | null = null;\r\n  static serveVanillaFolder: IFolder | null = null;\r\n  static samplesFolder: IFolder | null = null;\r\n  static releaseVanillaBehaviorPackFolder: IFolder | null = null;\r\n  static releaseVanillaResourcePackFolder: IFolder | null = null;\r\n  static local: ILocalUtilities | null = null;\r\n  static vanillaInfoData: IProjectInfoData | null = null;\r\n  static vanillaContentIndex: ContentIndex | null = null;\r\n\r\n  static blocksCatalog: BlocksCatalogDefinition | undefined = undefined;\r\n  static terrainTextureCatalog: TerrainTextureCatalogDefinition | undefined = undefined;\r\n\r\n  static previewVanillaInfoData: IProjectInfoData | null = null;\r\n  static previewVanillaContentIndex: ContentIndex | null = null;\r\n  static releaseVanillaContentHashes: HashCatalog | null = null;\r\n  private static _isLoadingReleaseVanillaHashes: boolean = false;\r\n  private static _pendingLoadReleaseVanillaHashRequests: ((value: unknown) => void)[] = [];\r\n\r\n  static samplesInfoData: IProjectInfoData | null = null;\r\n  static samplesContentIndex: ContentIndex | null = null;\r\n  static addonsDocs: ILegacyDocumentationNode | null = null;\r\n  static biomesMetadata: IBiomesMetadata | null = null;\r\n  static blocksMetadata: IBlocksMetadata | null = null;\r\n  static entitiesMetadata: IEntitiesMetadata | null = null;\r\n  static itemsMetadata: IItemsMetadata | null = null;\r\n  static commandsMetadata: IDocCommandSet | null = null;\r\n\r\n  static latestVersion: string | undefined;\r\n  static latestPreviewVersion: string | undefined;\r\n\r\n  private static _isLoadingSnippets: boolean = false;\r\n  private static _pendingLoadSnippetsRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingVanillaResourceDefinition: boolean = false;\r\n  private static _pendingLoadVanillaResourceDefinitionRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingVanillaInfoData: boolean = false;\r\n  private static _pendingLoadVanillaInfoDataRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingPreviewVanillaInfoData: boolean = false;\r\n  private static _pendingLoadPreviewVanillaInfoDataRequests: ((value: unknown) => void)[] = [];\r\n  private static _isLoadingSamples: boolean = false;\r\n  private static _pendingLoadSamplesRequests: ((value: unknown) => void)[] = [];\r\n\r\n  static dataPath: string = \"res/latest/\";\r\n\r\n  static creatorToolsIngameBehaviorPackUUID = \"37355e25-5c48-43be-ad24-107d6cf2ea74\";\r\n  static creatorToolsIngameBehaviorPackVersion = [1, 0, 0];\r\n  static creatorToolsIngameResourcePackUUID = \"a49a75c0-d3a1-47c5-adcd-70394b0fe749\";\r\n  static creatorToolsIngameResourcePackVersion = [1, 0, 0];\r\n\r\n  static minecraftEduVersion = \"1.21.90\";\r\n  static minecraftEduPreviewVersion = \"1.21.110\";\r\n  static fallbackMinecraftVersion = \"1.26.0\"; // used if we fail to retrieve the latest version from the network\r\n  static fallbackMinecraftPreviewVersion = \"1.26.10.27\"; // should be occasionally statically updated.\r\n\r\n  static defaultContentSources: IContentSource[] = [\r\n    {\r\n      id: \"minecraftBedrockComMojang\",\r\n      localFolderPath: \"<BDRK>\",\r\n    },\r\n    {\r\n      id: \"minecraftBedrockPreviewComMojang\",\r\n      localFolderPath: \"<BDPV>\",\r\n    },\r\n    {\r\n      id: \"minecraftEducationComMojang\",\r\n      localFolderPath: \"<EDUR>\",\r\n    },\r\n    {\r\n      id: \"minecraftEducationPreviewComMojang\",\r\n      localFolderPath: \"<EDUP>\",\r\n    },\r\n  ];\r\n\r\n  static contentSources: IContentSource[] = [];\r\n\r\n  /**\r\n   * Gets all known Minecraft script module names.\r\n   * Delegates to ScriptModuleInfoProvider which is the single source of truth.\r\n   */\r\n  static get minecraftModuleNames(): string[] {\r\n    return ScriptModuleInfoProvider.getAllModuleNames();\r\n  }\r\n\r\n  static maxMinecraftPatchVersions = {\r\n    \"1.19\": \"80\",\r\n    \"1.20\": \"80\",\r\n    \"1.21\": \"120\",\r\n  };\r\n\r\n  static moduleDescriptors: { [id: string]: NpmModule } = {};\r\n\r\n  static blockTypes: { [id: string]: BlockType } = {};\r\n  static schemaContents: { [id: string]: object } = {};\r\n  static officialSchemaContents: { [id: string]: object } = {};\r\n  static blockBaseTypes: { [id: string]: BlockBaseType } = {};\r\n  static _blockTypesByLegacyId: BlockType[] | undefined;\r\n\r\n  static javaBlockTypeData: { [id: string]: IJavaBlockTypeData } = {};\r\n\r\n  static _defaultBlockBaseType?: BlockBaseType;\r\n\r\n  static get defaultBlockBaseType() {\r\n    if (Database._defaultBlockBaseType === undefined) {\r\n      Database._defaultBlockBaseType = Database.ensureBlockBaseType(\"block\");\r\n    }\r\n\r\n    return Database._defaultBlockBaseType;\r\n  }\r\n\r\n  static async ensureFormLoadedByPath(path: string): Promise<IFormDefinition | undefined> {\r\n    const lastSlash = path.lastIndexOf(\"/\");\r\n\r\n    if (lastSlash >= 0) {\r\n      return await Database.ensureFormLoaded(path.substring(0, lastSlash), path.substring(lastSlash + 1));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Clears cached folder references for bulk content (vanilla, samples) to free memory.\r\n   * This should be called after bulk operations like documentation generation are complete.\r\n   */\r\n  static clearBulkContentCaches() {\r\n    Database.previewVanillaFolder = null;\r\n    Database.releaseVanillaFolder = null;\r\n    Database.serveVanillaFolder = null;\r\n    Database.samplesFolder = null;\r\n    Database.previewVanillaContentIndex = null;\r\n    Database.samplesContentIndex = null;\r\n    Database.previewVanillaInfoData = null;\r\n    Database.samplesInfoData = null;\r\n  }\r\n\r\n  /**\r\n   * Reads a JSON file directly from the preview vanilla content without using the folder abstraction.\r\n   * This avoids caching File/Folder objects in memory, which is important for batch processing.\r\n   * @param relativePath Path relative to the vanilla preview root (e.g., \"/behavior_pack/entities/pig.json\")\r\n   * @returns The parsed JSON object, or null if the file doesn't exist or can't be parsed\r\n   */\r\n  static async readPreviewVanillaJsonFile(relativePath: string): Promise<object | null> {\r\n    if (!Database.local) {\r\n      return null;\r\n    }\r\n\r\n    // Normalize the path - remove leading slash if present\r\n    if (relativePath.startsWith(\"/\")) {\r\n      relativePath = relativePath.substring(1);\r\n    }\r\n\r\n    const fullPath = \"res/latest/van/preview/\" + relativePath;\r\n    return await Database.local.readJsonFile(fullPath);\r\n  }\r\n\r\n  /**\r\n   * Reads a JSON file directly from the samples content without using the folder abstraction.\r\n   * This avoids caching File/Folder objects in memory, which is important for batch processing.\r\n   * @param relativePath Path relative to the samples root (e.g., \"/behavior_packs/example/entities/pig.json\")\r\n   * @returns The parsed JSON object, or null if the file doesn't exist or can't be parsed\r\n   */\r\n  static async readSamplesJsonFile(relativePath: string): Promise<object | null> {\r\n    if (!Database.local) {\r\n      return null;\r\n    }\r\n\r\n    // Normalize the path - remove leading slash if present\r\n    if (relativePath.startsWith(\"/\")) {\r\n      relativePath = relativePath.substring(1);\r\n    }\r\n\r\n    const fullPath = \"res/samples/\" + relativePath;\r\n    return await Database.local.readJsonFile(fullPath);\r\n  }\r\n\r\n  static getFormName(subFolder: string, name: string) {\r\n    name = name.toLowerCase();\r\n\r\n    return (subFolder ? subFolder + \".\" : \"\") + name;\r\n  }\r\n\r\n  static isFormLoaded(subFolder: string, name: string) {\r\n    const extendedName = Database.getFormName(subFolder, name);\r\n\r\n    if (Database.uxCatalog[extendedName] !== undefined) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Forms are loaded from a single canonical location: `data/forms/`.\r\n   *\r\n   * Generation: the `gulp copybedrockschemas` task lays down\r\n   * `@minecraft/bedrock-schemas`'s upstream forms first, then OVERLAYS our\r\n   * checked-in overrides from `app/public_supplemental/data/local_forms/`\r\n   * directly on top of them (same-named files replace upstream copies).\r\n   *\r\n   * The result is a single merged tree at `public/data/forms/` (or\r\n   * `toolbuild/vsc/data/forms/` for the VSC extension), so this loader does\r\n   * not need a runtime fallback chain \u2014 there is only one place to look.\r\n   *\r\n   * To extend or replace an upstream form, drop a same-pathed file under\r\n   * `app/public_supplemental/data/local_forms/<sub>/<name>.form.json` and\r\n   * rebuild. To unsticky an override (e.g. because upstream caught up), just\r\n   * delete that file and rebuild.\r\n   */\r\n  private static readonly DEFAULT_FORMS_PATH = \"data/forms/\";\r\n\r\n  static ensureFormLoadedSync(subFolder: string, name: string): IFormDefinition | undefined {\r\n    name = name.toLowerCase();\r\n\r\n    const extendedName = Database.getFormName(subFolder, name);\r\n\r\n    if (Database.uxCatalog[extendedName] !== undefined) {\r\n      return Database.uxCatalog[extendedName];\r\n    }\r\n\r\n    return Database._tryLoadFormSync(Database.DEFAULT_FORMS_PATH, subFolder, name);\r\n  }\r\n\r\n  private static _tryLoadFormSync(basePath: string, subFolder: string, name: string): IFormDefinition | undefined {\r\n    let path = basePath;\r\n    if (subFolder) {\r\n      path += subFolder + \"/\";\r\n    }\r\n\r\n    if (!Database.local) {\r\n      return undefined;\r\n    }\r\n\r\n    const storage = Database.local.createStorage(path);\r\n\r\n    if (!storage) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!storage.rootFolder.isLoaded) {\r\n      if ((storage.rootFolder as any).loadSync) {\r\n        (storage.rootFolder as any).loadSync();\r\n      }\r\n    }\r\n\r\n    const file = storage.rootFolder.files[name + \".form.json\"];\r\n    if (!file) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      if ((file as any).loadContentSync) {\r\n        (file as any).loadContentSync();\r\n      }\r\n    }\r\n\r\n    const res = StorageUtilities.getJsonObject(file) as IFormDefinition;\r\n    if (res) {\r\n      FieldUtilities.normalizeFormFieldDataTypes(res);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  static async ensureFormLoaded(subFolder: string, name: string): Promise<IFormDefinition | undefined> {\r\n    name = name.toLowerCase();\r\n\r\n    const extendedName = Database.getFormName(subFolder, name);\r\n\r\n    if (Database.uxCatalog[extendedName] !== undefined) {\r\n      return Database.uxCatalog[extendedName];\r\n    }\r\n\r\n    // Skip re-fetching forms that were previously not found\r\n    if (Database._missingForms.has(extendedName)) {\r\n      return undefined;\r\n    }\r\n\r\n    const res = await Database._tryLoadForm(Database.DEFAULT_FORMS_PATH, subFolder, name);\r\n\r\n    if (res) {\r\n      Database.uxCatalog[extendedName] = res;\r\n      Database.loadedFormCount++;\r\n      return res;\r\n    }\r\n\r\n    Database._missingForms.add(extendedName);\r\n    return undefined;\r\n  }\r\n\r\n  private static async _tryLoadForm(\r\n    basePath: string,\r\n    subFolder: string,\r\n    name: string\r\n  ): Promise<IFormDefinition | undefined> {\r\n    let path = basePath;\r\n    if (subFolder) {\r\n      path += subFolder + \"/\";\r\n    }\r\n\r\n    if (Database.local) {\r\n      const storage = Database.local.createStorage(path);\r\n\r\n      if (!storage) {\r\n        return undefined;\r\n      }\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      const file = storage.rootFolder.files[name + \".form.json\"];\r\n\r\n      if (!file) {\r\n        return undefined;\r\n      }\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent();\r\n      }\r\n\r\n      const res = StorageUtilities.getJsonObject(file) as IFormDefinition;\r\n      if (res) {\r\n        FieldUtilities.normalizeFormFieldDataTypes(res);\r\n      }\r\n      return res;\r\n    }\r\n\r\n    // HTTP fallback: fetch directly. We swallow 404s silently because the local\r\n    // override directory is expected to be sparse (most forms have no override).\r\n    const httpPath = CreatorToolsHost.contentWebRoot + path + name + \".form.json\";\r\n\r\n    try {\r\n      const response = await axios.get(httpPath);\r\n\r\n      const res = response.data as IFormDefinition;\r\n      if (res) {\r\n        FieldUtilities.normalizeFormFieldDataTypes(res);\r\n      }\r\n      return res;\r\n    } catch {\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  static isModelTemplateLoaded(name: string): boolean {\r\n    const normalizedName = name.toLowerCase();\r\n    return Database.modelTemplateCatalog[normalizedName] !== undefined;\r\n  }\r\n\r\n  static getModelTemplate(name: string): object | undefined {\r\n    const normalizedName = name.toLowerCase();\r\n    return Database.modelTemplateCatalog[normalizedName];\r\n  }\r\n\r\n  static async ensureModelTemplateLoaded(name: string): Promise<object | undefined> {\r\n    const normalizedName = name.toLowerCase();\r\n\r\n    if (Database.modelTemplateCatalog[normalizedName] !== undefined) {\r\n      return Database.modelTemplateCatalog[normalizedName];\r\n    }\r\n\r\n    let path = \"data/model_templates/\";\r\n\r\n    if (Database.local) {\r\n      const storage = Database.local.createStorage(path);\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        const file = storage.rootFolder.files[normalizedName + \".model.json\"];\r\n        if (file) {\r\n          if (!file.isContentLoaded) {\r\n            await file.loadContent();\r\n          }\r\n\r\n          const res = StorageUtilities.getJsonObject(file);\r\n          if (res) {\r\n            Database.modelTemplateCatalog[normalizedName] = res;\r\n            Database.loadedModelTemplateCount++;\r\n            return res;\r\n          }\r\n        }\r\n\r\n        Log.fail(\"Could not load model template locally for '\" + normalizedName + \"'.\");\r\n        return undefined;\r\n      }\r\n    } else {\r\n      path = CreatorToolsHost.contentWebRoot + path + normalizedName + \".model.json\";\r\n\r\n      try {\r\n        const response = await axios.get(path);\r\n\r\n        Database.modelTemplateCatalog[normalizedName] = response.data;\r\n        Database.loadedModelTemplateCount++;\r\n\r\n        return response.data;\r\n      } catch {\r\n        Log.fail(\"Could not load model template for '\" + path + \"'.\");\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getModelTemplateNames(): Promise<string[]> {\r\n    const templateNames: string[] = [];\r\n    const path = \"data/model_templates/\";\r\n\r\n    if (Database.local) {\r\n      const storage = Database.local.createStorage(path);\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        for (const fileName of Object.keys(storage.rootFolder.files)) {\r\n          if (fileName.endsWith(\".model.json\")) {\r\n            templateNames.push(fileName.replace(\".model.json\", \"\"));\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + path);\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      for (const fileName of Object.keys(storage.rootFolder.files)) {\r\n        if (fileName.endsWith(\".model.json\")) {\r\n          templateNames.push(fileName.replace(\".model.json\", \"\"));\r\n        }\r\n      }\r\n    }\r\n\r\n    return templateNames;\r\n  }\r\n\r\n  static async getFormsFolder(subFolder: string) {\r\n    if (this.formsFolders[subFolder]) {\r\n      return this.formsFolders[subFolder];\r\n    }\r\n\r\n    const folderPath = \"data/forms/\" + subFolder + \"/\";\r\n\r\n    if (\r\n      Database.local &&\r\n      (CreatorToolsHost.fullLocalStorage ||\r\n        !CreatorToolsHost.contentWebRoot ||\r\n        !CreatorToolsHost.retrieveDataFromWebContentRoot)\r\n    ) {\r\n      const storage = Database.local.createStorage(folderPath);\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        this.formsFolders[subFolder] = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + folderPath);\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      this.formsFolders[subFolder] = storage.rootFolder;\r\n    }\r\n\r\n    return this.formsFolders[subFolder];\r\n  }\r\n\r\n  static getFormByPath(path: string): IFormDefinition | undefined {\r\n    const lastSlash = path.lastIndexOf(\"/\");\r\n\r\n    if (lastSlash >= 0) {\r\n      return Database.getForm(path.substring(0, lastSlash), path.substring(lastSlash + 1));\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getForm(subFolder: string, name: string): IFormDefinition | undefined {\r\n    name = Database.getFormName(subFolder, name);\r\n\r\n    return Database.uxCatalog[name];\r\n  }\r\n\r\n  static getBlockType(name: string) {\r\n    name = MinecraftUtilities.canonicalizeName(name);\r\n\r\n    const blockType = Database.blockTypes[name];\r\n\r\n    return blockType;\r\n  }\r\n\r\n  static populateBlockTypesByLegacyId() {\r\n    this._blockTypesByLegacyId = [];\r\n\r\n    for (const blockTypeName in this.blockTypes) {\r\n      const blockType = this.blockTypes[blockTypeName];\r\n\r\n      if (blockType.numericId !== undefined) {\r\n        Log.assert(\r\n          this._blockTypesByLegacyId[blockType.numericId] === undefined,\r\n          \"Multiple block types registered for the same ID:\" + blockType.id\r\n        );\r\n        this._blockTypesByLegacyId[blockType.numericId] = blockType;\r\n      }\r\n    }\r\n  }\r\n\r\n  static async getModuleDescriptor(moduleId: string) {\r\n    if (Database.moduleDescriptors[moduleId]) {\r\n      return Database.moduleDescriptors[moduleId];\r\n    }\r\n\r\n    const url = \"https://registry.npmjs.org/\" + moduleId;\r\n\r\n    try {\r\n      const response = await axios.get(url);\r\n\r\n      Database.moduleDescriptors[moduleId] = new NpmModule(response.data);\r\n    } catch (e: any) {\r\n      if (e && (!e.message || !e.message.indexOf || e.message.indexOf(\"etwork \") < 0)) {\r\n        Log.debugAlert(\"Could not load registry for '\" + moduleId + \"': \" + e.toString());\r\n      } else {\r\n        CreatorToolsHost.getCreatorTools()?.notifyStatusUpdate(\r\n          \"Could not connect to network to retrieve latest script package details. Url: \" + url\r\n        );\r\n      }\r\n    }\r\n\r\n    return Database.moduleDescriptors[moduleId];\r\n  }\r\n\r\n  static async getNextMinecraftPreviewVersion() {\r\n    const latestMinecraftPreviewVersion = await Database.getLatestMinecraftPreviewVersion();\r\n\r\n    if (!latestMinecraftPreviewVersion) {\r\n      return undefined;\r\n    }\r\n\r\n    const ver = latestMinecraftPreviewVersion.split(\".\");\r\n\r\n    if (!ver || !ver.length || ver.length < 3) {\r\n      return undefined;\r\n    }\r\n\r\n    let triplet = undefined;\r\n\r\n    try {\r\n      triplet = [parseInt(ver[0]), parseInt(ver[1]), parseInt(ver[2]) + 10];\r\n    } catch (e) {\r\n      return undefined;\r\n    }\r\n\r\n    return triplet.join(\".\");\r\n  }\r\n\r\n  static async getLatestMinecraftPreviewVersion() {\r\n    const moduleDescriptor = await this.getModuleDescriptor(\"@minecraft/server\");\r\n\r\n    if (!moduleDescriptor || !moduleDescriptor.latestPreviewVersion) {\r\n      return \"1.21.0\";\r\n    }\r\n\r\n    return moduleDescriptor.latestPreviewVersion;\r\n  }\r\n\r\n  static async getLatestMinecraftRetailVersion() {\r\n    const moduleDescriptor = await this.getModuleDescriptor(\"@minecraft/server\");\r\n\r\n    if (!moduleDescriptor || !moduleDescriptor.latestRetailVersion) {\r\n      return \"1.21.0\";\r\n    }\r\n\r\n    return moduleDescriptor.latestRetailVersion;\r\n  }\r\n\r\n  static async isRecentVersionFromVersionArray(version: number[] | undefined) {\r\n    if (version === undefined || version.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    const ver = await this.getLatestVersionInfo(MinecraftTrack.main);\r\n\r\n    if (!ver) {\r\n      return false;\r\n    }\r\n\r\n    const verArr = MinecraftUtilities.getVersionArrayFrom(ver);\r\n    if (!verArr || verArr.length < 3) {\r\n      return false;\r\n    }\r\n\r\n    const majorVersion = verArr[0];\r\n    const minorVersion = verArr[1];\r\n\r\n    if (version[0] < majorVersion) {\r\n      return false;\r\n    }\r\n\r\n    if (majorVersion === version[0] && minorVersion - version[1] > 1) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  static async getContentFolderFile(fileRelativePath: string) {\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null || !CreatorToolsHost.getCreatorTools()) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    fileRelativePath = StorageUtilities.ensureStartsWithDelimiter(fileRelativePath);\r\n\r\n    return await Database.contentFolder.ensureFileFromRelativePath(fileRelativePath);\r\n  }\r\n\r\n  static async getContentFolderContent(fileRelativePath: string) {\r\n    const file = await Database.getContentFolderFile(fileRelativePath);\r\n\r\n    if (!file) {\r\n      return;\r\n    }\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    return file.content;\r\n  }\r\n\r\n  static async ensureCreatorToolsIngameFile() {\r\n    if (Database._creatorToolsIngameFile) {\r\n      return Database._creatorToolsIngameFile;\r\n    }\r\n\r\n    await Database.loadContent();\r\n\r\n    if (Database.contentFolder === null || !CreatorToolsHost.getCreatorTools()) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    const file = Database.contentFolder.ensureFile(\"creator_tools_ingame.mcaddon\");\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    Database._creatorToolsIngameFile = file;\r\n\r\n    return file;\r\n  }\r\n\r\n  static async ensureCreatorToolsIngameProject() {\r\n    if (Database._creatorToolsIngameProject) {\r\n      return Database._creatorToolsIngameProject;\r\n    }\r\n\r\n    const file = await Database.ensureCreatorToolsIngameFile();\r\n    const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n    if (Database.contentFolder === null || !file || !ct) {\r\n      Log.unexpectedContentState();\r\n      return undefined;\r\n    }\r\n\r\n    if (file.content instanceof Uint8Array) {\r\n      Database._creatorToolsIngameProject = new Project(ct, \"Creator Tools\", null);\r\n\r\n      const projectFolder = await Database._creatorToolsIngameProject.ensureProjectFolder();\r\n\r\n      const folder = projectFolder.ensureFolder(\"addons\");\r\n\r\n      const contentFile = folder.ensureFile(file.name);\r\n\r\n      contentFile.setContent(file.content);\r\n\r\n      contentFile.saveContent();\r\n\r\n      const relPath = contentFile.getFolderRelativePath(Database._creatorToolsIngameProject.projectFolder as IFolder);\r\n\r\n      if (relPath !== undefined) {\r\n        Database._creatorToolsIngameProject.ensureItemByProjectPath(\r\n          relPath,\r\n          ProjectItemStorageType.singleFile,\r\n          file.name,\r\n          ProjectItemType.MCAddon,\r\n          FolderContext.unknown,\r\n          undefined,\r\n          ProjectItemCreationType.normal\r\n        );\r\n\r\n        await Database._creatorToolsIngameProject.inferProjectItemsFromZipFile(relPath, contentFile, false);\r\n      }\r\n\r\n      return Database._creatorToolsIngameProject;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getLatestVersionInfo(track: MinecraftTrack, force?: boolean) {\r\n    if (track === MinecraftTrack.edu) {\r\n      return Database.minecraftEduVersion;\r\n    }\r\n\r\n    if (track === MinecraftTrack.eduPreview) {\r\n      return Database.minecraftEduPreviewVersion;\r\n    }\r\n\r\n    // Test pinning hook: if MCT_TEST_PINNED_MC_VERSION (or _PREVIEW_VERSION) is set\r\n    // in the environment, treat it as the canonical \"current Minecraft version\" for\r\n    // this process. This insulates test baselines from upstream version drift \u2014\r\n    // every validator that pulls \"latest\" from here (FormatVersionManager,\r\n    // MinEngineVersionManager, BaseGameVersionManager, etc.) will produce stable,\r\n    // deterministic output regardless of when the bedrock-samples version.json\r\n    // changes. Honors `force` so callers that explicitly want a refresh can bypass.\r\n    if (!force && typeof process !== \"undefined\" && process.env) {\r\n      if (track === MinecraftTrack.preview && process.env.MCT_TEST_PINNED_MC_PREVIEW_VERSION) {\r\n        Database.latestPreviewVersion = process.env.MCT_TEST_PINNED_MC_PREVIEW_VERSION;\r\n        return Database.latestPreviewVersion;\r\n      }\r\n\r\n      if (track === MinecraftTrack.main && process.env.MCT_TEST_PINNED_MC_VERSION) {\r\n        Database.latestVersion = process.env.MCT_TEST_PINNED_MC_VERSION;\r\n        return Database.latestVersion;\r\n      }\r\n    }\r\n\r\n    if (track === MinecraftTrack.preview && Database.latestPreviewVersion && !force) {\r\n      return Database.latestPreviewVersion;\r\n    }\r\n\r\n    if (track === MinecraftTrack.main && Database.latestVersion && !force) {\r\n      return Database.latestVersion;\r\n    }\r\n\r\n    let minecraftInfoResponse: any = undefined;\r\n\r\n    let versionUrl = \"https://raw.githubusercontent.com/Mojang/bedrock-samples/main/version.json\";\r\n\r\n    if (track === MinecraftTrack.preview) {\r\n      versionUrl = \"https://raw.githubusercontent.com/Mojang/bedrock-samples/preview/version.json\";\r\n    }\r\n\r\n    try {\r\n      minecraftInfoResponse = await axios.get(versionUrl);\r\n    } catch (e: any) {\r\n      if (e && (!e.message || !e.message.indexOf || e.message.indexOf(\"etwork \") < 0)) {\r\n        Log.debugAlert(\"Could not load version info from '\" + versionUrl + \"': \" + e.toString());\r\n      } else {\r\n        CreatorToolsHost.getCreatorTools()?.notifyStatusUpdate(\r\n          \"Could not connect to network to retrieve latest Minecraft version details. Url: \" + versionUrl\r\n        );\r\n      }\r\n\r\n      if (track === MinecraftTrack.preview) {\r\n        Database.latestPreviewVersion = Database.fallbackMinecraftPreviewVersion;\r\n        return Database.fallbackMinecraftPreviewVersion;\r\n      }\r\n\r\n      if (track === MinecraftTrack.main) {\r\n        Database.latestVersion = Database.fallbackMinecraftVersion;\r\n        return Database.fallbackMinecraftVersion;\r\n      }\r\n    }\r\n\r\n    let latestVersionIndex = 0;\r\n    let latestVerStr = \"\";\r\n    try {\r\n      if (minecraftInfoResponse === undefined || minecraftInfoResponse.data === undefined) {\r\n        throw new Error(\"Unexpected empty response.\");\r\n      }\r\n\r\n      const responseJson: IMainInfoVersions = JSON.parse(JSON.stringify(minecraftInfoResponse.data));\r\n\r\n      if (!responseJson) {\r\n        throw new Error(\"Improperly formatted response (source: \" + minecraftInfoResponse.data + \")\");\r\n      }\r\n\r\n      for (const verId in responseJson) {\r\n        const ver = responseJson[verId].version;\r\n\r\n        if (ver) {\r\n          const isPreview = Database.getVersionIsPreview(ver); // version ends with .20 or higher\r\n\r\n          const versionIndex = Database.getVersionIndexFromVersionStr(ver);\r\n\r\n          if (\r\n            versionIndex > 0 &&\r\n            versionIndex > latestVersionIndex &&\r\n            ((isPreview && track === MinecraftTrack.preview) || (!isPreview && track === MinecraftTrack.main))\r\n          ) {\r\n            latestVersionIndex = versionIndex;\r\n\r\n            // re-constitute the version number ourselves\r\n            const verNums = ver.split(\".\");\r\n\r\n            latestVerStr =\r\n              verNums[0] + \".\" + verNums[1] + \".\" + verNums[2] + \".\" + Utilities.frontPadToLength(verNums[3], 2, \"0\");\r\n          }\r\n        }\r\n      }\r\n    } catch (e: any) {\r\n      Log.error(\"Could not process Minecraft version details.\" + e);\r\n      throw new Error(e.toString());\r\n    }\r\n\r\n    if (latestVerStr && latestVerStr.length > 0) {\r\n      if (track === MinecraftTrack.preview) {\r\n        Database.latestPreviewVersion = latestVerStr;\r\n      } else {\r\n        Database.latestVersion = latestVerStr;\r\n      }\r\n    }\r\n\r\n    return latestVerStr;\r\n  }\r\n\r\n  static getVersionIsPreview(ver: string) {\r\n    const verNums = ver.split(\".\");\r\n\r\n    if (verNums.length !== 4) {\r\n      return false;\r\n    }\r\n\r\n    for (let j = 0; j < verNums.length; j++) {\r\n      if (!Utilities.isNumeric(verNums[j])) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return parseInt(verNums[3]) > 19;\r\n  }\r\n\r\n  static getVersionIndexFromVersionStr(ver: string) {\r\n    const verNums = ver.split(\".\");\r\n\r\n    if (verNums.length !== 4 && verNums.length !== 3) {\r\n      return -1;\r\n    }\r\n\r\n    for (let j = 0; j < verNums.length; j++) {\r\n      if (!Utilities.isNumeric(verNums[j])) {\r\n        return -1;\r\n      }\r\n    }\r\n\r\n    let versionIndex = parseInt(verNums[0]) * 16777216 + parseInt(verNums[1]) * 65536 + parseInt(verNums[2]) * 256;\r\n\r\n    if (verNums.length === 4) {\r\n      versionIndex += parseInt(verNums[3]);\r\n    }\r\n\r\n    return versionIndex;\r\n  }\r\n\r\n  static getBlockTypeByLegacyId(id: number) {\r\n    if (!this._blockTypesByLegacyId) {\r\n      this._blockTypesByLegacyId = [];\r\n      this.populateBlockTypesByLegacyId();\r\n    }\r\n\r\n    const result = this._blockTypesByLegacyId[id];\r\n    Log.assert(result !== undefined);\r\n    // Return undefined for unknown legacy IDs rather than asserting,\r\n    // as worlds may contain blocks with IDs not in our catalog\r\n    return result;\r\n  }\r\n\r\n  static getMatchingBlocks(searchTerm: string) {\r\n    searchTerm = searchTerm.toLowerCase().trim();\r\n    searchTerm = searchTerm.replace(/_/gi, \" \");\r\n\r\n    const searchTerms = searchTerm.split(\" \");\r\n\r\n    let exactMatch = undefined;\r\n\r\n    let matches = [];\r\n\r\n    for (const name in this.blockTypes) {\r\n      const bt = this.blockTypes[name];\r\n\r\n      const titleCanon = bt.title.toLowerCase();\r\n\r\n      if (titleCanon === searchTerm && exactMatch === undefined) {\r\n        exactMatch = bt;\r\n      } else {\r\n        for (let i = 0; i < searchTerms.length; i++) {\r\n          if (titleCanon.indexOf(searchTerms[i]) >= 0) {\r\n            matches.push(bt);\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (exactMatch !== undefined) {\r\n      const newMatches = [exactMatch];\r\n\r\n      for (let i = 0; i < matches.length; i++) {\r\n        newMatches.push(matches[i]);\r\n      }\r\n\r\n      matches = newMatches;\r\n    }\r\n\r\n    return matches;\r\n  }\r\n\r\n  static ensureBlockType(name: string) {\r\n    name = MinecraftUtilities.canonicalizeName(name);\r\n\r\n    let blockType = Database.blockTypes[name];\r\n\r\n    if (blockType == null && Database.vanillaCatalog != null) {\r\n      blockType = new BlockType(name);\r\n\r\n      Database.blockTypes[name] = blockType;\r\n    }\r\n\r\n    return blockType;\r\n  }\r\n\r\n  static ensureBlockBaseType(name: string) {\r\n    name = MinecraftUtilities.canonicalizeName(name);\r\n\r\n    let blockBaseType = Database.blockBaseTypes[name];\r\n\r\n    if (blockBaseType == null) {\r\n      blockBaseType = new BlockBaseType(name);\r\n\r\n      Database.blockBaseTypes[name] = blockBaseType;\r\n    }\r\n\r\n    return blockBaseType;\r\n  }\r\n\r\n  static async loadContentSources() {\r\n    if (Database.isContentSourcesLoaded) {\r\n      return Database.contentSources;\r\n    }\r\n    Database.contentSources = [...Database.defaultContentSources];\r\n\r\n    if (AppServiceProxy.hasAppService) {\r\n      const contentSources = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getContentSources, \"\");\r\n\r\n      if (contentSources) {\r\n        const contentSourcesO = JSON.parse(contentSources) as IContentSource[] | undefined;\r\n\r\n        if (contentSourcesO && Array.isArray(contentSourcesO)) {\r\n          Database.contentSources.push(...contentSourcesO);\r\n        }\r\n      }\r\n    }\r\n\r\n    Database.isContentSourcesLoaded = true;\r\n\r\n    return Database.contentSources;\r\n  }\r\n\r\n  static async loadContent() {\r\n    if (Database.contentFolder !== null) {\r\n      return;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.contentWebRoot)) {\r\n      const storage = Database.local.createStorage(\"data/content/\");\r\n\r\n      if (storage) {\r\n        if (!storage.rootFolder.isLoaded) {\r\n          await storage.rootFolder.load();\r\n        }\r\n\r\n        Database.contentFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + \"data/content/\");\r\n\r\n      if (!storage.rootFolder.isLoaded) {\r\n        await storage.rootFolder.load();\r\n      }\r\n\r\n      Database.contentFolder = storage.rootFolder;\r\n    }\r\n  }\r\n\r\n  static async initSnippetsFolder(): Promise<void> {\r\n    if (Database.snippetsFolder !== null) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingSnippets) {\r\n      const pendingLoad = this._pendingLoadSnippetsRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      return;\r\n    } else {\r\n      this._isLoadingSnippets = true;\r\n\r\n      let folder: IFolder | undefined;\r\n\r\n      if (\r\n        Database.local &&\r\n        (CreatorToolsHost.fullLocalStorage ||\r\n          !CreatorToolsHost.contentWebRoot ||\r\n          !CreatorToolsHost.retrieveDataFromWebContentRoot)\r\n      ) {\r\n        const storage = Database.local.createStorage(\"data/snippets/\");\r\n\r\n        if (storage) {\r\n          folder = storage.rootFolder;\r\n        }\r\n      } else {\r\n        const storage = HttpStorage.get(CreatorToolsHost.contentWebRoot + \"data/snippets/\");\r\n\r\n        folder = storage.rootFolder;\r\n      }\r\n\r\n      if (folder === undefined) {\r\n        return;\r\n      }\r\n\r\n      if (!folder.isLoaded) {\r\n        await folder.load();\r\n      }\r\n\r\n      for (const fileName in folder.files) {\r\n        const file = folder.files[fileName];\r\n\r\n        if (file && !file.isContentLoaded) {\r\n          await file.loadContent();\r\n        }\r\n      }\r\n\r\n      Database.snippetsFolder = folder;\r\n\r\n      this._isLoadingSnippets = false;\r\n\r\n      const pendingLoad = this._pendingLoadSnippetsRequests;\r\n      this._pendingLoadSnippetsRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  public static itemMatchesSearch(item: IGalleryItem, searchString?: string) {\r\n    if (!searchString || searchString.length < 3) {\r\n      return true;\r\n    }\r\n\r\n    const searchKey = searchString.toLowerCase();\r\n\r\n    if (\r\n      (item.title && item.title.toLowerCase().indexOf(searchKey) >= 0) ||\r\n      (item.description && item.description.toLowerCase().indexOf(searchKey) >= 0)\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (item.topics) {\r\n      for (const topic of item.topics) {\r\n        if (topic.toLowerCase().indexOf(searchKey) >= 0) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async getSnippet(sampleSet: string, snippetId: string) {\r\n    if (!Database.snippetsFolder) {\r\n      await Database.initSnippetsFolder();\r\n    }\r\n\r\n    if (!Database.snippetsFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    if (Database.snippetsFolder !== null && Database.snippetsFolder.files) {\r\n      const file = Database.snippetsFolder.files[sampleSet + \".json\"];\r\n\r\n      if (file) {\r\n        const snipSet = StorageUtilities.getJsonObject(file) as { [snippetName: string]: ISnippet };\r\n\r\n        if (snipSet && snipSet[snippetId]) {\r\n          return snipSet[snippetId];\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getAddonsDocs() {\r\n    if (!Database.addonsDocs) {\r\n      Database.addonsDocs = await Database.getMetadataObject(\"/doc_modules/addons.json\");\r\n    }\r\n\r\n    return Database.addonsDocs;\r\n  }\r\n\r\n  static async getBiomesMetadata() {\r\n    if (!Database.biomesMetadata) {\r\n      Database.biomesMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-biomes.json\");\r\n    }\r\n\r\n    return Database.biomesMetadata;\r\n  }\r\n\r\n  static async getBlocksMetadata() {\r\n    if (!Database.blocksMetadata) {\r\n      Database.blocksMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-blocks.json\");\r\n    }\r\n\r\n    return Database.blocksMetadata;\r\n  }\r\n\r\n  static async getEntitiesMetadata() {\r\n    if (!Database.entitiesMetadata) {\r\n      Database.entitiesMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-entities.json\");\r\n    }\r\n\r\n    return Database.entitiesMetadata;\r\n  }\r\n\r\n  static async getItemsMetadata() {\r\n    if (!Database.itemsMetadata) {\r\n      Database.itemsMetadata = await Database.getMetadataObject(\"/vanilladata_modules/mojang-items.json\");\r\n    }\r\n\r\n    return Database.itemsMetadata;\r\n  }\r\n\r\n  static async getCommandsMetadata(): Promise<IDocCommandSet | null> {\r\n    if (!Database.commandsMetadata) {\r\n      Database.commandsMetadata = await Database.getMetadataObject(\"/command_modules/mojang-commands.json\");\r\n    }\r\n\r\n    return Database.commandsMetadata;\r\n  }\r\n\r\n  static async getMetadataObject(metaPath: string) {\r\n    await Database.loadPreviewMetadataFolder();\r\n\r\n    if (!Database.previewMetadataFolder) {\r\n      return null;\r\n    }\r\n\r\n    const jsonFile = await Database.previewMetadataFolder.getFileFromRelativePath(metaPath);\r\n\r\n    if (!jsonFile) {\r\n      Log.debug(\"Could not find metadata file: \" + metaPath);\r\n      return null;\r\n    }\r\n\r\n    if (!jsonFile.isContentLoaded) {\r\n      await jsonFile.loadContent();\r\n    }\r\n\r\n    const jsonObj = StorageUtilities.getJsonObject(jsonFile);\r\n\r\n    if (!jsonObj) {\r\n      Log.debug(\"Could not parse metadata file: \" + metaPath);\r\n      return null;\r\n    }\r\n\r\n    return jsonObj;\r\n  }\r\n\r\n  static async getPreviewVanillaFile(filePath: string) {\r\n    const vanillaFolder = await Database.getPreviewVanillaFolder();\r\n\r\n    if (!vanillaFolder) {\r\n      return null;\r\n    }\r\n\r\n    const jsonFile = await vanillaFolder.getFileFromRelativePath(filePath);\r\n\r\n    if (!jsonFile) {\r\n      // File not found is expected for custom (non-vanilla) entities\r\n      // Callers should handle null gracefully\r\n      return null;\r\n    }\r\n\r\n    if (!jsonFile.isContentLoaded) {\r\n      await jsonFile.loadContent();\r\n    }\r\n\r\n    return jsonFile;\r\n  }\r\n\r\n  static async getPreviewVanillaObject(filePath: string) {\r\n    const jsonFile = await Database.getPreviewVanillaFile(filePath);\r\n\r\n    if (!jsonFile) {\r\n      Log.unexpectedUndefined(\"GPVO\" + filePath);\r\n      return null;\r\n    }\r\n\r\n    const jsonObj = StorageUtilities.getJsonObject(jsonFile);\r\n\r\n    if (!jsonObj) {\r\n      Log.unexpectedUndefined(\"GPVA\" + filePath);\r\n      return null;\r\n    }\r\n\r\n    return jsonObj;\r\n  }\r\n\r\n  static async loadPreviewMetadataFolder() {\r\n    if (!this.previewMetadataFolder) {\r\n      if (\r\n        Database.local &&\r\n        (CreatorToolsHost.fullLocalStorage ||\r\n          !CreatorToolsHost.getVanillaContentRoot() ||\r\n          !CreatorToolsHost.retrieveDataFromWebContentRoot)\r\n      ) {\r\n        const storage = Database.local.createStorage(\"res/latest/van/preview/metadata/\");\r\n\r\n        if (storage) {\r\n          this.previewMetadataFolder = storage.rootFolder;\r\n        }\r\n      } else {\r\n        const metadataStorage = HttpStorage.get(\r\n          CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/preview/metadata/\"\r\n        );\r\n\r\n        if (!metadataStorage.rootFolder.isLoaded) {\r\n          await metadataStorage.rootFolder.load();\r\n        }\r\n\r\n        this.previewMetadataFolder = metadataStorage.rootFolder;\r\n      }\r\n    }\r\n\r\n    return this.previewMetadataFolder;\r\n  }\r\n\r\n  static async loadReleaseMetadataFolder() {\r\n    if (!this.releaseMetadataFolder) {\r\n      if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n        const storage = Database.local.createStorage(\"res/latest/van/release/metadata/\");\r\n\r\n        if (storage) {\r\n          this.releaseMetadataFolder = storage.rootFolder;\r\n        }\r\n      } else {\r\n        const metadataStorage = HttpStorage.get(\r\n          CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/metadata/\"\r\n        );\r\n\r\n        await metadataStorage.rootFolder.load();\r\n\r\n        this.releaseMetadataFolder = metadataStorage.rootFolder;\r\n      }\r\n    }\r\n\r\n    return this.releaseMetadataFolder;\r\n  }\r\n\r\n  static async getReleaseVanillaFolder() {\r\n    if (Database.releaseVanillaFolder !== null) {\r\n      return Database.releaseVanillaFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/release/\");\r\n\r\n      if (storage) {\r\n        Database.releaseVanillaFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/\");\r\n\r\n      Database.releaseVanillaFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.releaseVanillaFolder && !Database.releaseVanillaFolder.isLoaded) {\r\n      await Database.releaseVanillaFolder.load();\r\n    }\r\n\r\n    return Database.releaseVanillaFolder;\r\n  }\r\n\r\n  static async getPreviewVanillaFolder() {\r\n    if (Database.previewVanillaFolder !== null) {\r\n      return Database.previewVanillaFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/preview/\");\r\n\r\n      if (storage) {\r\n        Database.previewVanillaFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/preview/\");\r\n\r\n      Database.previewVanillaFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.previewVanillaFolder && !Database.previewVanillaFolder.isLoaded) {\r\n      await Database.previewVanillaFolder.load();\r\n    }\r\n\r\n    return Database.previewVanillaFolder;\r\n  }\r\n\r\n  static async getServeVanillaFolder() {\r\n    if (Database.serveVanillaFolder !== null) {\r\n      return Database.serveVanillaFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/serve/\");\r\n\r\n      if (storage) {\r\n        Database.serveVanillaFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/serve/\");\r\n\r\n      Database.serveVanillaFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.serveVanillaFolder && !Database.serveVanillaFolder.isLoaded) {\r\n      await Database.serveVanillaFolder.load();\r\n    }\r\n\r\n    return Database.serveVanillaFolder;\r\n  }\r\n\r\n  static async getSamplesFolder() {\r\n    if (Database.samplesFolder !== null) {\r\n      return Database.samplesFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/samples/microsoft/samples/\");\r\n\r\n      if (storage) {\r\n        Database.samplesFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(CreatorToolsHost.getVanillaContentRoot() + \"res/samples/microsoft/samples/\");\r\n\r\n      Database.samplesFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.samplesFolder) {\r\n      await Database.samplesFolder.load();\r\n    }\r\n\r\n    return Database.samplesFolder;\r\n  }\r\n\r\n  static async getReleaseVanillaBehaviorPackFolder() {\r\n    if (Database.releaseVanillaBehaviorPackFolder !== null) {\r\n      return Database.releaseVanillaBehaviorPackFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/release/behavior_pack/\");\r\n\r\n      if (storage) {\r\n        Database.releaseVanillaBehaviorPackFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(\r\n        CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/behavior_pack/\"\r\n      );\r\n\r\n      Database.releaseVanillaBehaviorPackFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.releaseVanillaBehaviorPackFolder) {\r\n      await Database.releaseVanillaBehaviorPackFolder.load();\r\n    }\r\n\r\n    return Database.releaseVanillaBehaviorPackFolder;\r\n  }\r\n\r\n  static async getReleaseVanillaResourcePackFolder() {\r\n    if (Database.releaseVanillaResourcePackFolder !== null) {\r\n      return Database.releaseVanillaResourcePackFolder;\r\n    }\r\n\r\n    if (Database.local && (CreatorToolsHost.fullLocalStorage || !CreatorToolsHost.getVanillaContentRoot())) {\r\n      const storage = Database.local.createStorage(\"res/latest/van/release/resource_pack/\");\r\n\r\n      if (storage) {\r\n        Database.releaseVanillaResourcePackFolder = storage.rootFolder;\r\n      }\r\n    } else {\r\n      const storage = HttpStorage.get(\r\n        CreatorToolsHost.getVanillaContentRoot() + \"res/latest/van/release/resource_pack/\"\r\n      );\r\n\r\n      Database.releaseVanillaResourcePackFolder = storage.rootFolder;\r\n    }\r\n\r\n    if (Database.releaseVanillaResourcePackFolder) {\r\n      await Database.releaseVanillaResourcePackFolder.load();\r\n    }\r\n\r\n    return Database.releaseVanillaResourcePackFolder;\r\n  }\r\n\r\n  static async loadUx() {}\r\n\r\n  static getComponentFormField(propertyName: string): IFormField | undefined {\r\n    if (Database.uxCatalog === undefined || Database.uxCatalog === null) {\r\n      Log.unexpectedNull();\r\n\r\n      return undefined;\r\n    }\r\n    const componentForms = Database.uxCatalog;\r\n\r\n    for (const formName in componentForms) {\r\n      const form = componentForms[formName];\r\n\r\n      if (form === undefined) {\r\n        break;\r\n      }\r\n\r\n      for (let i = 0; i < form.fields.length; i++) {\r\n        const field = form.fields[i];\r\n\r\n        if (field.id === propertyName || field.altId === propertyName) {\r\n          return {\r\n            form: form,\r\n            field: field,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getCommunitySchema(path: string) {\r\n    path = path.toLowerCase();\r\n\r\n    if (Database.schemaContents[path]) {\r\n      return Database.schemaContents[path];\r\n    }\r\n\r\n    const schemaPath = \"/\" + Database.dataPath + \"schemas/\" + path;\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(\r\n          Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) +\r\n            Utilities.ensureNotStartsWithSlash(schemaPath)\r\n        );\r\n\r\n        Database.schemaContents[path] = response.data as object;\r\n\r\n        if (!Database.schemaContents[path]) {\r\n          Log.fail(\"Could not load schema '\" + schemaPath + \"'\");\r\n        }\r\n        return Database.schemaContents[path];\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(schemaPath);\r\n\r\n        if (result !== null) {\r\n          Database.schemaContents[path] = result as object;\r\n          return Database.schemaContents[path];\r\n        } else {\r\n          Log.fail(\"Could not load schema '\" + schemaPath + \"'\");\r\n          return undefined;\r\n        }\r\n      } else {\r\n        Log.fail(\"Unexpected database config (no database available) when trying to load schema for:\" + path);\r\n        return undefined;\r\n      }\r\n    } catch (e: any) {\r\n      Log.fail(\r\n        \"Could not load Minecraft schema catalog: \" +\r\n          CreatorToolsHost.contentWebRoot +\r\n          \" - \" +\r\n          schemaPath +\r\n          \" \" +\r\n          e.toString()\r\n      );\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get a schema from the official schemas folder (public/schemas) rather than\r\n   * the community schemas folder (public/res/latest/schemas).\r\n   */\r\n  static async getOfficialSchema(path: string): Promise<object | undefined> {\r\n    path = path.toLowerCase();\r\n\r\n    if (Database.officialSchemaContents[path]) {\r\n      return Database.officialSchemaContents[path];\r\n    }\r\n\r\n    const schemaPath = \"/schemas/\" + path;\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(\r\n          Utilities.ensureEndsWithSlash(CreatorToolsHost.contentWebRoot) +\r\n            Utilities.ensureNotStartsWithSlash(schemaPath)\r\n        );\r\n\r\n        Database.officialSchemaContents[path] = response.data as object;\r\n\r\n        if (!Database.officialSchemaContents[path]) {\r\n          Log.verbose(\"Could not load official schema '\" + schemaPath + \"'\");\r\n        }\r\n        return Database.officialSchemaContents[path];\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(schemaPath);\r\n\r\n        if (result !== null) {\r\n          Database.officialSchemaContents[path] = result as object;\r\n          return Database.officialSchemaContents[path];\r\n        } else {\r\n          Log.verbose(\"Could not load official schema '\" + schemaPath + \"'\");\r\n          return undefined;\r\n        }\r\n      } else {\r\n        Log.verbose(\"Unexpected database config (no database available) when trying to load schema for:\" + path);\r\n        return undefined;\r\n      }\r\n    } catch (e: any) {\r\n      // Schema not found is expected for many file types - don't log as error\r\n      Log.verbose(\"Could not load official schema: \" + schemaPath);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  static async loadStable20ScriptTypes() {\r\n    if (Database.stable20TypeDefs) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Check for browser-like environment (works in both main thread and web workers)\r\n\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const url = CreatorToolsHost.contentWebRoot + \"data/typedefs.stable20.json\";\r\n\r\n        const response = await axios.get(url);\r\n\r\n        // Check if we got HTML instead of JSON (can happen if contentRoot is wrong)\r\n        if (typeof response.data === \"string\" && response.data.includes(\"<!DOCTYPE\")) {\r\n          throw new Error(\"Received HTML instead of JSON - check contentRoot: \" + CreatorToolsHost.contentWebRoot);\r\n        }\r\n\r\n        Database.stable20TypeDefs = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/typedefs.stable20.json\");\r\n        if (result !== null) {\r\n          Database.stable20TypeDefs = result as ITypeDefCatalog;\r\n        }\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Could not load stable 2.0 Minecraft types catalog: \" + e);\r\n    }\r\n  }\r\n\r\n  static async loadStable10ScriptTypes() {\r\n    if (Database.stable10TypeDefs) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/typedefs.stable10.json\");\r\n\r\n        Database.stable10TypeDefs = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/typedefs.stable10.json\");\r\n        if (result !== null) {\r\n          Database.stable10TypeDefs = result as ITypeDefCatalog;\r\n        }\r\n      }\r\n    } catch {\r\n      Log.fail(\"Could not load stable 1.0 Minecraft types catalog.\");\r\n    }\r\n  }\r\n\r\n  static async getLibs() {\r\n    if (Database.libs) {\r\n      return Database.libs;\r\n    }\r\n\r\n    try {\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/libs.json\");\r\n\r\n        Database.libs = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/libs.json\");\r\n        if (result !== null) {\r\n          Database.libs = result as ITypeDefCatalog;\r\n        }\r\n      }\r\n    } catch {\r\n      Log.fail(\"Could not load libraries catalog.\");\r\n    }\r\n\r\n    return Database.libs;\r\n  }\r\n\r\n  static async matchesVanillaPath(path: string) {\r\n    Log.assert(typeof path === \"string\");\r\n\r\n    const rpFolder = await Database.getReleaseVanillaResourcePackFolder();\r\n\r\n    if (rpFolder && rpFolder.folderCount > 0) {\r\n      path = Utilities.ensureStartsWithSlash(path);\r\n\r\n      const folder = await rpFolder.getFolderFromRelativePath(StorageUtilities.getFolderPath(path));\r\n\r\n      if (!folder) {\r\n        return false;\r\n      }\r\n\r\n      const exists = await folder.exists();\r\n\r\n      if (!exists) {\r\n        return false;\r\n      }\r\n\r\n      const itemName = StorageUtilities.getBaseFromName(StorageUtilities.getLeafName(path)).toLowerCase();\r\n\r\n      if (!folder.isLoaded) {\r\n        await folder.load();\r\n      }\r\n\r\n      for (let fileName in folder.files) {\r\n        if (fileName && StorageUtilities.getBaseFromName(fileName).toLowerCase() === itemName) {\r\n          return true;\r\n        }\r\n      }\r\n    } else {\r\n      let res = await Database.matchesVanillaPathFromIndex(path);\r\n\r\n      return res;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async getVanillaPathList() {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    const paths = [];\r\n\r\n    for (const path of Database.vanillaContentIndex.items) {\r\n      if (path.startsWith(\"/\")) {\r\n        paths.push(path);\r\n      }\r\n    }\r\n\r\n    return paths;\r\n  }\r\n\r\n  static async matchesVanillaPathFromIndex(path: string) {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return false;\r\n    }\r\n\r\n    let result = Database.vanillaContentIndex.hasPathMatches(path);\r\n\r\n    if (!result) {\r\n      result = await Database.isVanillaToken(path);\r\n    }\r\n\r\n    if (!result) {\r\n      path = Utilities.ensureStartsWithSlash(path);\r\n\r\n      if (!path.startsWith(\"/resource_pack/\")) {\r\n        result = Database.vanillaContentIndex.hasPathMatches(\"/resource_pack\" + path);\r\n\r\n        if (!result) {\r\n          result = await Database.isVanillaToken(\"/resource_pack\" + path);\r\n\r\n          if (!result) {\r\n            if (!path.startsWith(\"/behavior_pack/\")) {\r\n              result = Database.vanillaContentIndex.hasPathMatches(\"/behavior_pack\" + path);\r\n\r\n              if (!result) {\r\n                result = await Database.isVanillaToken(\"/behavior_pack\" + path);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  static async isVanillaToken(path: string) {\r\n    const matches = await Database.getVanillaMatches(path, true);\r\n\r\n    if (matches && matches.length > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  static async getVanillaAll(withAnnotation?: AnnotationCategory[]) {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return Database.vanillaContentIndex.getAll(withAnnotation);\r\n  }\r\n\r\n  static async getVanillaMatches(path: string, wholeTermSearch?: boolean, withAnnotation?: AnnotationCategory[]) {\r\n    if (!Database.vanillaContentIndex) {\r\n      await this.loadVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.vanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return await Database.vanillaContentIndex.getMatches(path, wholeTermSearch, withAnnotation);\r\n  }\r\n\r\n  static async getPreviewVanillaMatches(\r\n    path: string,\r\n    wholeTermSearch?: boolean,\r\n    withAnnotation?: AnnotationCategory[]\r\n  ) {\r\n    if (!Database.previewVanillaContentIndex) {\r\n      await this.loadPreviewVanillaInfoData();\r\n    }\r\n\r\n    if (!Database.previewVanillaContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return await Database.previewVanillaContentIndex.getMatches(path, wholeTermSearch, withAnnotation);\r\n  }\r\n\r\n  static async getSamplesMatches(path: string, wholeTermSearch?: boolean, withAnnotation?: AnnotationCategory[]) {\r\n    if (!Database.samplesContentIndex) {\r\n      await this.loadSampleInfoData();\r\n    }\r\n\r\n    if (!Database.samplesContentIndex) {\r\n      return undefined;\r\n    }\r\n\r\n    return await Database.samplesContentIndex.getMatches(path, wholeTermSearch, withAnnotation);\r\n  }\r\n\r\n  static async loadVanillaInfoData() {\r\n    if (Database.vanillaInfoData) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingVanillaInfoData) {\r\n      const pendingLoad = this._pendingLoadVanillaInfoDataRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingVanillaInfoData = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mci/release.mci.json.zip\", {\r\n            responseType: \"arraybuffer\",\r\n            headers: {\r\n              Accept: \"application/octet-stream, application/json, text/plain, */*\",\r\n            },\r\n          });\r\n\r\n          if (response) {\r\n            Database.vanillaInfoData = await ZipStorage.fromZipBytesToJsonObject(response.data);\r\n          }\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mci/release.mci.json\");\r\n          if (result !== null) {\r\n            Database.vanillaInfoData = result as IProjectInfoData;\r\n          }\r\n        }\r\n\r\n        if (Database.vanillaInfoData && Database.vanillaInfoData.index && !Database.vanillaContentIndex) {\r\n          Database.vanillaContentIndex = new ContentIndex();\r\n          Database.vanillaContentIndex.loadFromData(Database.vanillaInfoData.index);\r\n        }\r\n      } catch (e) {\r\n        Log.debug(\"Could not load vanilla metadata: \" + e);\r\n      }\r\n\r\n      this._isLoadingVanillaInfoData = false;\r\n\r\n      const pendingLoad = this._pendingLoadVanillaInfoDataRequests;\r\n      this._pendingLoadVanillaInfoDataRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadVanillaResourceDefinitions() {\r\n    if (this._isLoadingVanillaResourceDefinition) {\r\n      const pendingLoad = this._pendingLoadVanillaResourceDefinitionRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingVanillaResourceDefinition = true;\r\n\r\n      const folder = await Database.getReleaseVanillaResourcePackFolder();\r\n\r\n      if (folder) {\r\n        const terrainTextureFile = await folder.getFileFromRelativePath(\"/textures/terrain_texture.json\");\r\n        const blocksFile = await folder.getFileFromRelativePath(\"/blocks.json\");\r\n\r\n        if (terrainTextureFile && blocksFile) {\r\n          this.terrainTextureCatalog = await TerrainTextureCatalogDefinition.ensureOnFile(terrainTextureFile);\r\n          this.blocksCatalog = await BlocksCatalogDefinition.ensureOnFile(blocksFile);\r\n        }\r\n      }\r\n\r\n      this._isLoadingVanillaResourceDefinition = false;\r\n\r\n      const pendingLoad = this._pendingLoadVanillaResourceDefinitionRequests;\r\n      this._pendingLoadVanillaResourceDefinitionRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadPreviewVanillaInfoData() {\r\n    if (Database.previewVanillaContentIndex) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingPreviewVanillaInfoData) {\r\n      const pendingLoad = this._pendingLoadPreviewVanillaInfoDataRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingPreviewVanillaInfoData = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mci/preview.mci.json.zip\", {\r\n            responseType: \"arraybuffer\",\r\n            headers: {\r\n              Accept: \"application/octet-stream, application/json, text/plain, */*\",\r\n            },\r\n          });\r\n\r\n          if (response) {\r\n            Database.previewVanillaInfoData = await ZipStorage.fromZipBytesToJsonObject(response.data);\r\n          }\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mci/preview.mci.json\");\r\n          if (result !== null) {\r\n            Database.previewVanillaInfoData = result as IProjectInfoData;\r\n          }\r\n        }\r\n\r\n        if (\r\n          Database.previewVanillaInfoData &&\r\n          Database.previewVanillaInfoData.index &&\r\n          !Database.previewVanillaContentIndex\r\n        ) {\r\n          Database.previewVanillaContentIndex = new ContentIndex();\r\n          Database.previewVanillaContentIndex.loadFromData(Database.previewVanillaInfoData.index);\r\n        }\r\n      } catch (e: any) {\r\n        Log.fail(\"Could not load preview vanilla metadata.\" + e.toString());\r\n      }\r\n\r\n      this._isLoadingPreviewVanillaInfoData = false;\r\n\r\n      const pendingLoad = this._pendingLoadPreviewVanillaInfoDataRequests;\r\n      this._pendingLoadPreviewVanillaInfoDataRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadReleaseVanillaInfoHashes() {\r\n    if (Database.releaseVanillaContentHashes) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingReleaseVanillaHashes) {\r\n      const pendingLoad = this._pendingLoadReleaseVanillaHashRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingReleaseVanillaHashes = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mch/release.mch.json\");\r\n\r\n          if (response) {\r\n            Database.releaseVanillaContentHashes = response.data;\r\n          }\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mch/preview.mch.json\");\r\n          if (result !== null) {\r\n            Database.releaseVanillaContentHashes = result as HashCatalog;\r\n          }\r\n        }\r\n      } catch {\r\n        // Log.fail(\"Could not load preview vanilla metadata.\");\r\n      }\r\n\r\n      this._isLoadingReleaseVanillaHashes = false;\r\n\r\n      const pendingLoad = this._pendingLoadReleaseVanillaHashRequests;\r\n      this._pendingLoadReleaseVanillaHashRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadSampleInfoData() {\r\n    if (Database.samplesContentIndex) {\r\n      return;\r\n    }\r\n\r\n    if (this._isLoadingSamples) {\r\n      const pendingLoad = this._pendingLoadSamplesRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._isLoadingSamples = true;\r\n\r\n      try {\r\n        // @ts-ignore\r\n        if (typeof window !== \"undefined\") {\r\n          const response = await axios.get(CreatorToolsHost.contentWebRoot + \"data/mci/samples.mci.json\");\r\n\r\n          Database.samplesInfoData = response.data;\r\n        } else if (Database.local) {\r\n          const result = await Database.local.readJsonFile(\"data/mci/samples.mci.json\");\r\n\r\n          if (result !== null) {\r\n            Database.samplesInfoData = result as IProjectInfoData;\r\n          }\r\n        }\r\n\r\n        if (Database.samplesInfoData && Database.samplesInfoData.index && !Database.samplesContentIndex) {\r\n          Database.samplesContentIndex = new ContentIndex();\r\n          Database.samplesContentIndex.loadFromData(Database.samplesInfoData.index);\r\n        }\r\n      } catch {\r\n        // Log.fail(\"Could not load preview vanilla metadata.\");\r\n      }\r\n\r\n      this._isLoadingSamples = false;\r\n\r\n      const pendingLoad = this._pendingLoadSamplesRequests;\r\n      this._pendingLoadSamplesRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  static async loadVanillaCatalog() {\r\n    if (Database.isVanillaLoaded) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Check for browser-like environment (works in both main thread and web workers)\r\n\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        const url = CreatorToolsHost.contentWebRoot + \"data/mccat.json\";\r\n\r\n        const response = await axios.get(url);\r\n\r\n        // Check if we got HTML instead of JSON (can happen if contentRoot is wrong)\r\n        if (typeof response.data === \"string\" && response.data.includes(\"<!DOCTYPE\")) {\r\n          throw new Error(\"Received HTML instead of JSON - check contentRoot: \" + CreatorToolsHost.contentWebRoot);\r\n        }\r\n\r\n        Database.vanillaCatalog = response.data;\r\n      } else if (Database.local) {\r\n        const result = await Database.local.readJsonFile(\"data/mccat.json\");\r\n        if (result !== null) {\r\n          Database.vanillaCatalog = result as Catalog;\r\n          // Log.debugAlert(\"Loaded catalog: \" + Database.catalog.blockBaseTypes.length);\r\n        }\r\n      }\r\n\r\n      if (Database.vanillaCatalog !== null) {\r\n        Database.normalizeCatalog(Database.vanillaCatalog);\r\n\r\n        for (let i = 0; i < Database.vanillaCatalog.blockBaseTypes.length; i++) {\r\n          const blockBaseTypeData = Database.vanillaCatalog.blockBaseTypes[i];\r\n\r\n          if (!blockBaseTypeData.n) {\r\n            Log.debug(\r\n              \"Skipping blockBaseType at index \" +\r\n                i +\r\n                \" with missing name. Data: \" +\r\n                JSON.stringify(blockBaseTypeData).substring(0, 200)\r\n            );\r\n            continue; // Skip entries without a name\r\n          }\r\n\r\n          const baseTypeName = MinecraftUtilities.canonicalizeName(blockBaseTypeData.n);\r\n\r\n          const blockBaseType = new BlockBaseType(baseTypeName);\r\n          blockBaseType.data = blockBaseTypeData;\r\n\r\n          if (blockBaseTypeData.abstract === undefined || blockBaseTypeData.abstract === false) {\r\n            const newBlockType: IBlockTypeData = {\r\n              n: blockBaseTypeData.n,\r\n              lid: blockBaseTypeData.id,\r\n              ic: blockBaseTypeData.ic,\r\n              mc: blockBaseTypeData.mc,\r\n              m: blockBaseTypeData.m,\r\n            };\r\n\r\n            const blockType = this.ensureBlockType(baseTypeName);\r\n            blockType.data = newBlockType;\r\n            blockType.baseType = blockBaseType;\r\n          }\r\n\r\n          if (blockBaseTypeData.variants !== undefined) {\r\n            for (let j = 0; j < blockBaseTypeData.variants.length; j++) {\r\n              const variantBlockTypeData = blockBaseTypeData.variants[j];\r\n\r\n              let name = variantBlockTypeData.n;\r\n\r\n              if (!name) {\r\n                Log.debug(\r\n                  \"Skipping variant at index \" +\r\n                    j +\r\n                    \" of blockBaseType '\" +\r\n                    blockBaseTypeData.n +\r\n                    \"' with missing name. Data: \" +\r\n                    JSON.stringify(variantBlockTypeData).substring(0, 200)\r\n                );\r\n                continue; // Skip variants without a name\r\n              }\r\n\r\n              if (name.endsWith(\"_\")) {\r\n                name = name + (blockBaseTypeData.n || \"\");\r\n              }\r\n\r\n              const blockType = this.ensureBlockType(name);\r\n\r\n              // Check if this block type already has a proper baseType with shape data\r\n              // (i.e., it was created from a specific standalone entry like oak_stairs with sh:2)\r\n              const existingShape = blockType.baseType?.shape;\r\n              const hasSpecificBaseType = existingShape !== undefined && existingShape !== BlockShape.custom;\r\n\r\n              if (hasSpecificBaseType) {\r\n                // The block already has good shape data from a specific entry, skip this variant\r\n                continue;\r\n              }\r\n\r\n              // Apply variant data\r\n              if (!variantBlockTypeData.lid && blockBaseTypeData.id) {\r\n                variantBlockTypeData.lid = blockBaseTypeData.id;\r\n              }\r\n\r\n              if (!variantBlockTypeData.ic && blockBaseTypeData.ic) {\r\n                variantBlockTypeData.ic = blockBaseTypeData.ic;\r\n              }\r\n\r\n              if (!variantBlockTypeData.mc && blockBaseTypeData.mc) {\r\n                variantBlockTypeData.mc = blockBaseTypeData.mc;\r\n              }\r\n\r\n              blockType.data = variantBlockTypeData;\r\n              blockType.baseType = blockBaseType;\r\n            }\r\n          }\r\n        }\r\n\r\n        await Database.extendCatalog();\r\n\r\n        Database.isVanillaLoaded = true;\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Could not load Minecraft types catalog. \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Normalizes a catalog from the old unabbreviated format (name, icon, mapColor, shape)\r\n   * to the current abbreviated format (n, ic, mc, sh). This allows loading catalogs\r\n   * produced by older tooling or external repos that haven't migrated yet.\r\n   */\r\n  private static normalizeCatalog(catalog: Catalog) {\r\n    for (const entry of catalog.blockBaseTypes) {\r\n      const e = entry as any;\r\n\r\n      if (!entry.n && e.name) {\r\n        entry.n = e.name;\r\n      }\r\n      if (!entry.ic && e.icon) {\r\n        entry.ic = e.icon;\r\n      }\r\n      if (!entry.mc && e.mapColor) {\r\n        entry.mc = e.mapColor;\r\n      }\r\n      if (entry.sh === undefined && e.shape !== undefined) {\r\n        entry.sh = e.shape;\r\n      }\r\n      if (!entry.t && e.title) {\r\n        entry.t = e.title;\r\n      }\r\n\r\n      if (entry.variants) {\r\n        for (const variant of entry.variants) {\r\n          const v = variant as any;\r\n\r\n          if (!variant.n && v.name) {\r\n            variant.n = v.name;\r\n          }\r\n          if (!variant.ic && v.icon) {\r\n            variant.ic = v.icon;\r\n          }\r\n          if (!variant.mc && v.mapColor) {\r\n            variant.mc = v.mapColor;\r\n          }\r\n          if (variant.lid === undefined && v.id !== undefined) {\r\n            variant.lid = v.id;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private static async extendCatalog() {\r\n    const blockMetatadata = await Database.getBlocksMetadata();\r\n\r\n    if (blockMetatadata && Database.vanillaCatalog) {\r\n      for (const blockMetaDef of blockMetatadata.data_items) {\r\n        const blockType = this.ensureBlockType(blockMetaDef.name);\r\n\r\n        if (blockType && blockMetaDef) {\r\n          if (blockMetaDef.raw_id !== undefined && blockType.numericId === undefined) {\r\n            blockType.numericId = blockMetaDef.raw_id;\r\n          }\r\n\r\n          if (blockMetaDef.properties) {\r\n            for (const prop of blockMetaDef.properties) {\r\n              let propName = prop.name;\r\n              if (propName && blockMetatadata.block_properties) {\r\n                for (const propDef of blockMetatadata.block_properties) {\r\n                  if (propDef.name === propName) {\r\n                    blockType.ensurePropertyDefinition(propName, propDef);\r\n                    break;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IEntityTypeBehaviorPack from \"./IEntityTypeBehaviorPack\";\r\nimport IEntityTypeWrapper from \"./IEntityTypeWrapper\";\r\nimport IFile from \"../storage/IFile\";\r\nimport Log from \"../core/Log\";\r\nimport IManagedComponentSetItem from \"./IManagedComponentSetItem\";\r\nimport IComponent from \"./IComponent\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\nimport ScriptGen from \"../script/ScriptGen\";\r\nimport ManagedComponentGroup from \"./ManagedComponentGroup\";\r\nimport IManagedComponent from \"./IManagedComponent\";\r\nimport { ManagedComponent } from \"./ManagedComponent\";\r\nimport IEventAction from \"./IEventAction\";\r\nimport IEventActionSet from \"./IEventActionSet\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Database from \"./Database\";\r\nimport MinecraftUtilities from \"./MinecraftUtilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectItem from \"../app/ProjectItem\";\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport RelationsIndex from \"../app/RelationsIndex\";\r\nimport EntityTypeResourceDefinition from \"./EntityTypeResourceDefinition\";\r\nimport SpawnRulesBehaviorDefinition from \"./SpawnRulesBehaviorDefinition\";\r\nimport IDefinition from \"./IDefinition\";\r\nimport IEventWrapper from \"./IEventWrapper\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport IComponentGroup from \"./IComponentGroup\";\r\n\r\nexport enum EntityTypeComponentCategory {\r\n  attribute = 0,\r\n  complex = 1,\r\n  behavior = 2,\r\n  trigger = 3,\r\n}\r\n\r\nexport enum EntityTypeComponentExtendedCategory {\r\n  attribute = 0,\r\n  complex = 1,\r\n  movementComplex = 2,\r\n  combatAndHealthComplex = 3,\r\n  sensorComponents = 4,\r\n  trigger = 5,\r\n  behavior = 6,\r\n  movementBehavior = 7,\r\n  mobSpecificBehavior = 8,\r\n}\r\n\r\nexport const AttributeComponents: { [id: string]: string } = {\r\n  \"minecraft:body_rotation_blocked\": \"b\",\r\n  \"minecraft:can_climb\": \"b\",\r\n  \"minecraft:can_fly\": \"b\",\r\n  \"minecraft:can_power_jump\": \"b\",\r\n  \"minecraft:cannot_be_attacked\": \"b\",\r\n  \"minecraft:color\": \"s\",\r\n  \"minecraft:color2\": \"s\",\r\n  \"minecraft:default_look_angle\": \"f\",\r\n  \"minecraft:fire_immune\": \"b\",\r\n  \"minecraft:floats_in_liquid\": \"b\",\r\n  \"minecraft:flying_speed\": \"f\",\r\n  \"minecraft:friction_modifier\": \"f\",\r\n  \"minecraft:ground_offset\": \"f\",\r\n  \"minecraft:ignore_cannot_be_attacked\": \"b\",\r\n  \"minecraft:input_ground_controlled\": \"b\",\r\n  \"minecraft:is_baby\": \"b\",\r\n  \"minecraft:is_charged\": \"b\",\r\n  \"minecraft:is_chested\": \"b\",\r\n  \"minecraft:is_dyeable\": \"b\",\r\n  \"minecraft:is_hidden_when_invisible\": \"b\",\r\n  \"minecraft:is_ignited\": \"b\",\r\n  \"minecraft:is_illager_captain\": \"b\",\r\n  \"minecraft:is_pregnant\": \"b\",\r\n  \"minecraft:is_saddled\": \"b\",\r\n  \"minecraft:is_sheared\": \"b\",\r\n  \"minecraft:is_stackable\": \"b\",\r\n  \"minecraft:is_stunned\": \"b\",\r\n  \"minecraft:is_tamed\": \"b\",\r\n  \"minecraft:mark_variant\": \"i\",\r\n  \"minecraft:movement_sound_distance_offset\": \"f\",\r\n  \"minecraft:push_through\": \"f\",\r\n  \"minecraft:renders_when_invisible\": \"b\",\r\n  \"minecraft:scale\": \"f\",\r\n  \"minecraft:skin_id\": \"i\",\r\n  \"minecraft:sound_volume\": \"f\",\r\n  \"minecraft:type_family\": \"family\",\r\n  \"minecraft:variant\": \"i\",\r\n  \"minecraft:walk_animation_speed\": \"f\",\r\n  \"minecraft:wants_jockey\": \"b\",\r\n};\r\n\r\nexport enum EntityPropertyType {\r\n  enum = 0,\r\n  boolean = 1,\r\n  float = 2,\r\n  int = 3,\r\n}\r\n\r\nexport default class EntityTypeDefinition implements IManagedComponentSetItem, IDefinition {\r\n  private _wrapper?: IEntityTypeWrapper;\r\n  private _file?: IFile;\r\n  private _id?: string;\r\n  private _isLoaded: boolean = false;\r\n  private _loadedWithComments: boolean = false;\r\n  /** Set during persist() so the resulting onFileContentUpdated event doesn't wipe our already-current in-memory state. */\r\n  private _isSelfPersisting: boolean = false;\r\n\r\n  private _managedComponents: { [id: string]: IManagedComponent | undefined } = {};\r\n\r\n  public _data?: IEntityTypeBehaviorPack;\r\n\r\n  public _componentGroups: { [name: string]: ManagedComponentGroup } = {};\r\n  public _events: { [name: string]: IEventAction | IEventActionSet } = {};\r\n\r\n  private _onLoaded = new EventDispatcher<EntityTypeDefinition, EntityTypeDefinition>();\r\n\r\n  private _onComponentAdded = new EventDispatcher<EntityTypeDefinition, IManagedComponent>();\r\n  private _onComponentRemoved = new EventDispatcher<EntityTypeDefinition, string>();\r\n  private _onComponentChanged = new EventDispatcher<EntityTypeDefinition, IManagedComponent>();\r\n\r\n  public get data() {\r\n    return this._data;\r\n  }\r\n\r\n  public get componentGroups() {\r\n    return this._componentGroups;\r\n  }\r\n\r\n  public static getFormIdFromComponentId(componentId: string) {\r\n    return componentId.replace(/:/gi, \"_\").replace(/\\./gi, \"_\");\r\n  }\r\n\r\n  public static getComponentCategory(id: string) {\r\n    if (id.startsWith(\"minecraft:behavior\")) {\r\n      return EntityTypeComponentCategory.behavior;\r\n    } else if (id.startsWith(\"minecraft:on_\")) {\r\n      return EntityTypeComponentCategory.trigger;\r\n    } else if (AttributeComponents[id] !== undefined) {\r\n      return EntityTypeComponentCategory.attribute;\r\n    }\r\n\r\n    return EntityTypeComponentCategory.complex;\r\n  }\r\n\r\n  public static getExtendedComponentCategory(id: string) {\r\n    if (\r\n      id.startsWith(\"minecraft:behavior.move\") ||\r\n      id.startsWith(\"minecraft:behavior.jump\") ||\r\n      id.startsWith(\"minecraft:behavior.go\") ||\r\n      id.startsWith(\"minecraft:behavior.follow\") ||\r\n      id.startsWith(\"minecraft:behavior.circle\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.movementBehavior;\r\n    } else if (\r\n      id.startsWith(\"minecraft:behavior.dragon\") ||\r\n      id.startsWith(\"minecraft:behavior.enderman\") ||\r\n      id.startsWith(\"minecraft:behavior.guardian\") ||\r\n      id.startsWith(\"minecraft:behavior.ocelot\") ||\r\n      id.startsWith(\"minecraft:behavior.silverfish\") ||\r\n      id.startsWith(\"minecraft:behavior.skeleton\") ||\r\n      id.startsWith(\"minecraft:behavior.slime\") ||\r\n      id.startsWith(\"minecraft:behavior.squid\") ||\r\n      id.startsWith(\"minecraft:behavior.vex\") ||\r\n      id.startsWith(\"minecraft:behavior.wither\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.mobSpecificBehavior;\r\n    } else if (id.startsWith(\"minecraft:behavior\")) {\r\n      return EntityTypeComponentExtendedCategory.behavior;\r\n    } else if (id.startsWith(\"minecraft:on_\")) {\r\n      return EntityTypeComponentExtendedCategory.trigger;\r\n    } else if (AttributeComponents[id] !== undefined) {\r\n      return EntityTypeComponentExtendedCategory.attribute;\r\n    } else if (id.indexOf(\"sensor\") >= 0) {\r\n      return EntityTypeComponentExtendedCategory.sensorComponents;\r\n    } else if (\r\n      id.indexOf(\"jump\") >= 0 ||\r\n      id.indexOf(\"climb\") >= 0 ||\r\n      id.indexOf(\"move\") >= 0 ||\r\n      id.startsWith(\"minecraft:navigation\") ||\r\n      id.startsWith(\"minecraft:flying\") ||\r\n      id.startsWith(\"minecraft:friction\") ||\r\n      id.startsWith(\"minecraft:walk_animation\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.movementComplex;\r\n    } else if (\r\n      id.indexOf(\"attack\") >= 0 ||\r\n      id.indexOf(\"combat\") >= 0 ||\r\n      id.indexOf(\"damage\") >= 0 ||\r\n      id.startsWith(\"minecraft:health\") ||\r\n      id.startsWith(\"minecraft:healable\") ||\r\n      id.startsWith(\"minecraft:hurt_on\")\r\n    ) {\r\n      return EntityTypeComponentExtendedCategory.combatAndHealthComplex;\r\n    }\r\n    return EntityTypeComponentExtendedCategory.complex;\r\n  }\r\n\r\n  get formatVersion() {\r\n    return this._wrapper?.format_version;\r\n  }\r\n\r\n  static getComponentFromBaseFileName(name: string) {\r\n    let canonName = name;\r\n\r\n    if (canonName.startsWith(\"minecraft_\")) {\r\n      canonName = canonName.substring(10);\r\n      if (canonName.startsWith(\"behavior_\")) {\r\n        canonName = \"behavior.\" + canonName.substring(9);\r\n      }\r\n      if (canonName.startsWith(\"movement_\")) {\r\n        canonName = \"movement.\" + canonName.substring(9);\r\n      }\r\n      if (canonName.startsWith(\"navigation_\")) {\r\n        canonName = \"navigation.\" + canonName.substring(11);\r\n      }\r\n      if (canonName.startsWith(\"player_\")) {\r\n        canonName = \"player.\" + canonName.substring(7);\r\n      }\r\n      if (canonName.startsWith(\"jump_\")) {\r\n        canonName = \"jump.\" + canonName.substring(5);\r\n      }\r\n      if (canonName.startsWith(\"horse_\")) {\r\n        canonName = \"horse.\" + canonName.substring(6);\r\n      }\r\n      if (canonName.startsWith(\"annotation_\")) {\r\n        canonName = \"annotation.\" + canonName.substring(11);\r\n      }\r\n    }\r\n\r\n    return canonName;\r\n  }\r\n\r\n  public static getComponentCategoryDescription(category: EntityTypeComponentCategory) {\r\n    switch (category) {\r\n      case EntityTypeComponentCategory.behavior:\r\n        return \"Behavior\";\r\n      case EntityTypeComponentCategory.attribute:\r\n        return \"Attribute\";\r\n      case EntityTypeComponentCategory.trigger:\r\n        return \"Trigger\";\r\n      default:\r\n        return \"Component\";\r\n    }\r\n  }\r\n\r\n  public static getPluralComponentCategoryDescription(category: EntityTypeComponentCategory) {\r\n    switch (category) {\r\n      case EntityTypeComponentCategory.behavior:\r\n        return \"Behaviors (AI)\";\r\n      case EntityTypeComponentCategory.attribute:\r\n        return \"Attributes\";\r\n      case EntityTypeComponentCategory.trigger:\r\n        return \"Triggers\";\r\n      default:\r\n        return \"Components\";\r\n    }\r\n  }\r\n\r\n  public get onComponentAdded() {\r\n    return this._onComponentAdded.asEvent();\r\n  }\r\n\r\n  public get onComponentRemoved() {\r\n    return this._onComponentRemoved.asEvent();\r\n  }\r\n\r\n  public get onComponentChanged() {\r\n    return this._onComponentChanged.asEvent();\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get behaviorPackFile() {\r\n    return this._file;\r\n  }\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public set behaviorPackFile(newFile: IFile | undefined) {\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.unsubscribe(this._handleFileUpdated);\r\n    }\r\n\r\n    this._file = newFile;\r\n\r\n    if (this._file) {\r\n      this._file.onFileContentUpdated.subscribe(this._handleFileUpdated);\r\n    }\r\n  }\r\n\r\n  _handleFileUpdated(file: IFile, fileB: IFile) {\r\n    // Skip when this update came from our own persist() call \u2014 the in-memory\r\n    // state already matches what we just wrote, so resetting it (and forcing a\r\n    // re-parse) would leave the editor stuck on \"Loading mob definition...\"\r\n    // until the next prop change.\r\n    if (this._isSelfPersisting) {\r\n      return;\r\n    }\r\n    this._data = undefined;\r\n    this._isLoaded = false;\r\n    this._wrapper = undefined;\r\n    this._managedComponents = {};\r\n  }\r\n\r\n  public get id() {\r\n    if (this._id === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this._id;\r\n  }\r\n\r\n  public set id(newId: string) {\r\n    this._id = newId;\r\n\r\n    if (this._data && this._data.description) {\r\n      this._data.description.identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get runtimeIdentifier() {\r\n    if (this._data && this._data.description) {\r\n      return this._data.description.runtime_identifier;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public set runtimeIdentifier(newId: string | undefined) {\r\n    if (this._data && this._data.description) {\r\n      this._data.description.runtime_identifier = newId;\r\n    }\r\n  }\r\n\r\n  public get aliases() {\r\n    if (!this._data || !this._data.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.description.aliases;\r\n  }\r\n\r\n  public get properties() {\r\n    if (!this._data || !this._data.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.description.properties;\r\n  }\r\n\r\n  constructor() {\r\n    this._handleFileUpdated = this._handleFileUpdated.bind(this);\r\n  }\r\n\r\n  public async getFormatVersionIsCurrent() {\r\n    const fv = this.getFormatVersionAsNumberArray();\r\n\r\n    if (fv === undefined || fv.length !== 3) {\r\n      return false;\r\n    }\r\n\r\n    return await Database.isRecentVersionFromVersionArray(fv);\r\n  }\r\n\r\n  public getFormatVersionAsNumberArray(): number[] | undefined {\r\n    if (!this._wrapper) {\r\n      return undefined;\r\n    }\r\n\r\n    return MinecraftUtilities.getVersionArrayFrom(this._wrapper.format_version);\r\n  }\r\n\r\n  public removeProperty(propertyName: string) {\r\n    if (this._data?.description?.properties) {\r\n      this._data.description.properties[propertyName] = undefined;\r\n    }\r\n  }\r\n\r\n  public get shortId() {\r\n    if (this._id !== undefined) {\r\n      let val = this._id;\r\n\r\n      if (val.startsWith(\"minecraft:\")) {\r\n        return val.substring(10, this._id.length);\r\n      }\r\n\r\n      const firstColon = val.indexOf(\":\");\r\n\r\n      if (firstColon >= 0) {\r\n        val = val.substring(firstColon + 1);\r\n      }\r\n\r\n      return val;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getComponent(id: string) {\r\n    if (this._data === undefined || this._data.components === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!Utilities.isUsableAsObjectKey(id)) {\r\n      Log.unsupportedToken(id);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._managedComponents[id]) {\r\n      const comp = this._data.components[id];\r\n\r\n      if (comp) {\r\n        this._managedComponents[id] = new ManagedComponent(this._data.components, id, comp);\r\n      }\r\n    }\r\n\r\n    return this._managedComponents[id];\r\n  }\r\n\r\n  getComponentsInBaseAndGroups(id: string): IManagedComponent[] {\r\n    if (this._data === undefined) {\r\n      return [];\r\n    }\r\n\r\n    let results: IManagedComponent[] = [];\r\n\r\n    let comp = this.getComponent(id);\r\n\r\n    if (comp) {\r\n      results.push(comp);\r\n    }\r\n\r\n    for (const componentGroupName in this._componentGroups) {\r\n      const group = this._componentGroups[componentGroupName];\r\n      if (group) {\r\n        comp = group.getComponent(id);\r\n\r\n        if (comp) {\r\n          results.push(comp);\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  public getCoreAndComponentGroupList() {\r\n    const componentSets: IManagedComponentSetItem[] = [this];\r\n\r\n    const cgs = this.getComponentGroups();\r\n\r\n    componentSets.push(...cgs);\r\n\r\n    return componentSets;\r\n  }\r\n\r\n  getAllComponents(): IManagedComponent[] {\r\n    if (this._data === undefined) {\r\n      return [];\r\n    }\r\n\r\n    let results: IManagedComponent[] = this.getComponents();\r\n\r\n    for (const componentGroupName in this._componentGroups) {\r\n      const group = this._componentGroups[componentGroupName];\r\n      if (group) {\r\n        for (const comp of group.getComponents()) {\r\n          if (comp) {\r\n            results.push(comp);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return results;\r\n  }\r\n\r\n  get behaviorPackFormatVersion() {\r\n    if (!this._wrapper || !this._wrapper.format_version) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._wrapper.format_version;\r\n  }\r\n\r\n  setBehaviorPackFormatVersion(versionStr: string) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    if (this._wrapper) {\r\n      this._wrapper.format_version = versionStr;\r\n    }\r\n  }\r\n\r\n  notifyComponentUpdated(id: string) {\r\n    const component = this.getComponent(id);\r\n\r\n    if (component === undefined) {\r\n      Log.unexpectedUndefined(\"ETNCU\");\r\n    } else {\r\n      this._onComponentChanged.dispatch(this, component);\r\n    }\r\n  }\r\n\r\n  getComponents(): IManagedComponent[] {\r\n    const componentSet: IManagedComponent[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentName in this._data.components) {\r\n        const component = this.getComponent(componentName);\r\n\r\n        if (component !== undefined) {\r\n          componentSet.push(component);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentSet;\r\n  }\r\n\r\n  getComponentGroupsComponentUsedIn(componentName: string): ManagedComponentGroup[] {\r\n    const componentGroups = this.getComponentGroups();\r\n    const cgsUsedIn: ManagedComponentGroup[] = [];\r\n\r\n    for (const cg of componentGroups) {\r\n      if (cg && cg.getComponent(componentName)) {\r\n        cgsUsedIn.push(cg);\r\n      }\r\n    }\r\n\r\n    return cgsUsedIn;\r\n  }\r\n\r\n  getComponentGroup(componentGroupName: string): ManagedComponentGroup | undefined {\r\n    if (this._data && this._data.component_groups) {\r\n      if (!this._componentGroups[componentGroupName] && this._data.component_groups[componentGroupName]) {\r\n        const componentGroupData = this._data.component_groups[componentGroupName];\r\n\r\n        const cg = new ManagedComponentGroup(componentGroupData, componentGroupName);\r\n\r\n        this._componentGroups[componentGroupName] = cg;\r\n      }\r\n\r\n      return this._componentGroups[componentGroupName];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getComponentGroups(): ManagedComponentGroup[] {\r\n    const componentGroups: ManagedComponentGroup[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const componentGroupName in this._data.component_groups) {\r\n        if (!this._componentGroups[componentGroupName]) {\r\n          const componentGroupData = this._data.component_groups[componentGroupName];\r\n\r\n          const cg = new ManagedComponentGroup(componentGroupData, componentGroupName);\r\n\r\n          this._componentGroups[componentGroupName] = cg;\r\n\r\n          componentGroups.push(cg);\r\n        } else {\r\n          componentGroups.push(this._componentGroups[componentGroupName]);\r\n        }\r\n      }\r\n    }\r\n\r\n    return componentGroups;\r\n  }\r\n\r\n  getEvent(eventName: string): IEventActionSet | IEventAction | undefined {\r\n    try {\r\n      if (this._data !== undefined && Utilities.isUsableAsObjectKey(eventName)) {\r\n        if (!this._events[eventName]) {\r\n          const eventData = this._data.events[eventName];\r\n\r\n          this._events[eventName] = eventData;\r\n        }\r\n\r\n        return this._events[eventName];\r\n      }\r\n    } catch (e) {\r\n      Log.verbose(\"Error getting event \" + eventName + \": \" + e);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getEffectiveComponents(componentGroupAddRemoveList: string[]) {\r\n    const componentState = JSON.parse(JSON.stringify(this._data?.components)); // clone\r\n\r\n    for (let componentGroupId of componentGroupAddRemoveList) {\r\n      let isAdd = true;\r\n      if (componentGroupId.startsWith(\"-\")) {\r\n        componentGroupId = componentGroupId.substring(1);\r\n        isAdd = false;\r\n      } else if (componentGroupId.startsWith(\"+\")) {\r\n        componentGroupId = componentGroupId.substring(1);\r\n      }\r\n\r\n      const componentGroup = this.getComponentGroup(componentGroupId);\r\n\r\n      if (componentGroup) {\r\n        const cgComps = componentGroup.getComponents();\r\n        if (isAdd) {\r\n          for (const cgComp of cgComps) {\r\n            componentState[cgComp.id] = cgComp.getData();\r\n          }\r\n        } else if (!isAdd) {\r\n          for (const cgComp of cgComps) {\r\n            componentState[cgComp.id] = undefined;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return new ManagedComponentGroup(componentState, this.id);\r\n  }\r\n\r\n  getEvents(): IEventWrapper[] {\r\n    const events: IEventWrapper[] = [];\r\n\r\n    if (this._data !== undefined) {\r\n      for (const eventName in this._data.events) {\r\n        if (!this._events[eventName] && Utilities.isUsableAsObjectKey(eventName)) {\r\n          const eventData = this._data.events[eventName];\r\n\r\n          this._events[eventName] = eventData;\r\n\r\n          events.push({ id: eventName, event: eventData });\r\n        } else {\r\n          events.push({ id: eventName, event: this._events[eventName] });\r\n        }\r\n      }\r\n    }\r\n\r\n    return events;\r\n  }\r\n\r\n  addComponent(\r\n    id: string,\r\n    componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined\r\n  ) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    const bpData = this._data as IEntityTypeBehaviorPack;\r\n\r\n    const mc =\r\n      componentOrData instanceof ManagedComponent\r\n        ? componentOrData\r\n        : new ManagedComponent(bpData.components, id, componentOrData);\r\n\r\n    bpData.components[id] = mc.getData();\r\n    this._managedComponents[id] = mc;\r\n\r\n    this._onComponentAdded.dispatch(this, mc);\r\n\r\n    return mc;\r\n  }\r\n\r\n  addComponentGroup(id?: string, componentOrData?: ManagedComponentGroup | IComponentGroup | undefined) {\r\n    this._ensureBehaviorPackDataInitialized();\r\n\r\n    if (id === undefined) {\r\n      id = \"group\";\r\n      let increment = 0;\r\n\r\n      let cg = this.getComponentGroup(id);\r\n\r\n      while (cg !== undefined && increment < 100) {\r\n        increment++;\r\n        id = \"group\" + increment;\r\n\r\n        cg = this.getComponentGroup(id);\r\n      }\r\n    }\r\n\r\n    if (componentOrData === undefined) {\r\n      componentOrData = {};\r\n    }\r\n\r\n    const bpData = this._data as IEntityTypeBehaviorPack;\r\n\r\n    const mcg =\r\n      componentOrData instanceof ManagedComponentGroup\r\n        ? componentOrData\r\n        : new ManagedComponentGroup(componentOrData, id);\r\n\r\n    const cgData = mcg.getData();\r\n\r\n    if (cgData) {\r\n      bpData.component_groups[id] = cgData;\r\n    }\r\n\r\n    this._componentGroups[id] = mcg;\r\n\r\n    return mcg;\r\n  }\r\n\r\n  removeComponent(id: string) {\r\n    if (this._data === undefined) {\r\n      return;\r\n    }\r\n\r\n    const newBehaviorPacks: {\r\n      [name: string]: string | string[] | boolean | number[] | number | IComponent | undefined;\r\n    } = {};\r\n    const newManagedComponents: { [name: string]: IManagedComponent | undefined } = {};\r\n\r\n    for (const name in this._data.components) {\r\n      if (name !== id && Utilities.isUsableAsObjectKey(name)) {\r\n        const componentData = this._data.components[name];\r\n\r\n        newBehaviorPacks[name] = componentData;\r\n      }\r\n    }\r\n\r\n    for (const name in this._managedComponents) {\r\n      if (name !== id && this._managedComponents[name] && Utilities.isUsableAsObjectKey(name)) {\r\n        newManagedComponents[name] = this._managedComponents[name];\r\n      }\r\n    }\r\n\r\n    this._data.components = newBehaviorPacks;\r\n    this._managedComponents = newManagedComponents;\r\n  }\r\n\r\n  _ensureBehaviorPackDataInitialized() {\r\n    if (!this._wrapper) {\r\n      this._wrapper = {\r\n        format_version: \"1.20.0\",\r\n      };\r\n    }\r\n    if (this._data === undefined) {\r\n      this._data = {\r\n        description: {\r\n          identifier: \"unknown\",\r\n          is_experimental: false,\r\n          is_spawnable: false,\r\n          is_summonable: false,\r\n        },\r\n        components: {},\r\n        component_groups: {},\r\n        events: {},\r\n      };\r\n\r\n      if (this._wrapper) {\r\n        //@ts-ignore\r\n        this._wrapper[\"minecraft:entity\"] = this._data;\r\n      }\r\n    }\r\n  }\r\n\r\n  public getProperties() {\r\n    if (!this._data || !this._data?.description) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._data.description.properties;\r\n  }\r\n\r\n  public getPropertyList() {\r\n    const props = this.getProperties();\r\n\r\n    if (!props) {\r\n      return [];\r\n    }\r\n\r\n    const propertyList = [];\r\n\r\n    for (const propName in props) {\r\n      if (props[propName] !== undefined) {\r\n        propertyList.push(propName);\r\n      }\r\n    }\r\n\r\n    return propertyList;\r\n  }\r\n\r\n  static getPropertyTypeString(stateType: EntityPropertyType) {\r\n    switch (stateType) {\r\n      case EntityPropertyType.boolean:\r\n        return \"bool\";\r\n      case EntityPropertyType.float:\r\n        return \"float\";\r\n      case EntityPropertyType.enum:\r\n        return \"enum\";\r\n    }\r\n\r\n    return \"int\";\r\n  }\r\n\r\n  public addProperty(propertyName: string, propertyType: EntityPropertyType) {\r\n    if (!this._data || !this._data.description) {\r\n      return;\r\n    }\r\n\r\n    let dataArr: string[] | number[] | undefined = undefined;\r\n    let typeStr = EntityTypeDefinition.getPropertyTypeString(propertyType);\r\n    let defaultValue: string | number | boolean = false;\r\n\r\n    if (propertyType === EntityPropertyType.float) {\r\n      dataArr = [0, 1, 2];\r\n      defaultValue = 0;\r\n    } else if (propertyType === EntityPropertyType.enum) {\r\n      dataArr = [\"value1\", \"value2\"];\r\n      defaultValue = \"value1\";\r\n    }\r\n\r\n    if (!this._data.description.properties) {\r\n      this._data.description.properties = {};\r\n    }\r\n\r\n    this._data.description.properties[propertyName] = {\r\n      type: typeStr,\r\n      values: dataArr,\r\n      default: defaultValue,\r\n    };\r\n  }\r\n\r\n  public addEvent(eventName?: string) {\r\n    if (!this._data) {\r\n      return;\r\n    }\r\n\r\n    if (!this._data.events) {\r\n      this._data.events = {};\r\n    }\r\n\r\n    if (eventName === undefined) {\r\n      eventName = \"eventName\";\r\n      let increment = 0;\r\n\r\n      let eve = this.getEvent(eventName);\r\n\r\n      while (eve !== undefined && increment < 100) {\r\n        increment++;\r\n        eventName = \"eventName\" + increment;\r\n\r\n        eve = this.getEvent(eventName);\r\n      }\r\n    }\r\n\r\n    this._data.events[eventName] = {};\r\n  }\r\n\r\n  async addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex) {\r\n    let lootTablePaths: string[] = [];\r\n\r\n    const comps = this.getComponentsInBaseAndGroups(\"minecraft:loot\");\r\n\r\n    for (const comp of comps) {\r\n      let lootTablePath = comp.getProperty(\"table\");\r\n\r\n      if (lootTablePath) {\r\n        lootTablePaths.push(lootTablePath);\r\n      }\r\n    }\r\n\r\n    // Use pre-built index for O(1) lookups when available\r\n    if (index && this.id) {\r\n      // Entity resources matching this entity's ID\r\n      const matchingResources = index.getItemsById(index.entityResourcesById, this.id);\r\n      for (const candItem of matchingResources) {\r\n        item.addChildItem(candItem);\r\n      }\r\n\r\n      // Spawn rules matching this entity's ID\r\n      const matchingSpawnRules = index.getItemsById(index.spawnRulesById, this.id);\r\n      for (const candItem of matchingSpawnRules) {\r\n        item.addChildItem(candItem);\r\n      }\r\n\r\n      // Loot tables by path suffix match\r\n      if (lootTablePaths.length > 0) {\r\n        const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n        for (const candItem of lootTableItems) {\r\n          for (const lootTablePath of lootTablePaths) {\r\n            if (candItem.projectPath?.endsWith(lootTablePath)) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      // Fallback: scan items when index is not available\r\n      const entityResourceItems = project.getItemsByType(ProjectItemType.entityTypeResource);\r\n      for (const candItem of entityResourceItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const etrd = await EntityTypeResourceDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (etrd) {\r\n            const id = etrd.id;\r\n\r\n            if (id === this.id) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      const spawnRuleItems = project.getItemsByType(ProjectItemType.spawnRuleBehavior);\r\n      for (const candItem of spawnRuleItems) {\r\n        if (!candItem.isContentLoaded) {\r\n          await candItem.loadContent();\r\n        }\r\n\r\n        if (candItem.primaryFile) {\r\n          const srb = await SpawnRulesBehaviorDefinition.ensureOnFile(candItem.primaryFile);\r\n\r\n          if (srb) {\r\n            const id = srb.id;\r\n\r\n            if (id === this.id) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (lootTablePaths.length > 0) {\r\n        const lootTableItems = project.getItemsByType(ProjectItemType.lootTableBehavior);\r\n        for (const candItem of lootTableItems) {\r\n          for (const lootTablePath of lootTablePaths) {\r\n            if (candItem.projectPath?.endsWith(lootTablePath)) {\r\n              item.addChildItem(candItem);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  static async ensureOnFile(\r\n    behaviorPackFile: IFile,\r\n    loadHandler?: IEventHandler<EntityTypeDefinition, EntityTypeDefinition>,\r\n    preserveComments?: boolean\r\n  ) {\r\n    let et: EntityTypeDefinition | undefined;\r\n\r\n    if (behaviorPackFile.manager === undefined) {\r\n      et = new EntityTypeDefinition();\r\n\r\n      et.behaviorPackFile = behaviorPackFile;\r\n\r\n      behaviorPackFile.manager = et;\r\n    }\r\n\r\n    if (behaviorPackFile.manager !== undefined && behaviorPackFile.manager instanceof EntityTypeDefinition) {\r\n      et = behaviorPackFile.manager as EntityTypeDefinition;\r\n\r\n      if (!et.isLoaded || (preserveComments && !et._loadedWithComments)) {\r\n        if (loadHandler) {\r\n          et.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await et.load(preserveComments);\r\n      }\r\n    }\r\n\r\n    return et;\r\n  }\r\n\r\n  getScript(isTypeScript: boolean) {\r\n    if (this.shortId === undefined) {\r\n      return;\r\n    }\r\n\r\n    const className = ScriptGen.getClassName(this.shortId);\r\n    const results = [];\r\n\r\n    results.push(\"import * as mc from '@minecraft/server';\");\r\n\r\n    results.push(\"export default class \" + className + \"Base\");\r\n    results.push(\"{\");\r\n\r\n    if (isTypeScript) {\r\n      results.push(\"  _entity : mc.Entity;\");\r\n      results.push(\"  constructor(entity : mc.Entity) {\");\r\n    } else {\r\n      results.push(\"  _entity;\\n\");\r\n      results.push(\"  constructor(entity) {\");\r\n    }\r\n\r\n    results.push(\"    this._entity = entity;\");\r\n    results.push(\"  }\\n\\n\");\r\n\r\n    if (isTypeScript) {\r\n      results.push(\"  static spawn(location : mc.Vector3) {\");\r\n    } else {\r\n      results.push(\"  static spawn(location) {\");\r\n    }\r\n\r\n    results.push('    const entity = world.getDimension(\"overworld\").spawnEntity(\"' + this.id + '\", location);');\r\n    results.push(\"    const \" + ScriptGen.getInstanceName(this.shortId) + \" = new \" + className + \"(entity);\");\r\n    results.push(\"    return \" + ScriptGen.getInstanceName(this.shortId) + \";\");\r\n    results.push(\"  }\\n\");\r\n\r\n    if (this._data !== undefined) {\r\n      const healthC = this._data.components[\"minecraft:health\"];\r\n\r\n      if (healthC !== undefined) {\r\n        results.push(\"  fullyHeal() {\");\r\n        results.push('    this._entity.getComponent(\"minecraft:health\").resetToMaxValue();');\r\n        results.push(\"  }\\n\");\r\n        if (isTypeScript) {\r\n          results.push(\"  setHealth(newValue : number) {\");\r\n        } else {\r\n          results.push(\"  setHealth(newValue) {\");\r\n        }\r\n\r\n        results.push('    this._entity.getComponent(\"minecraft:health\").setCurrent(newValue);');\r\n        results.push(\"  }\\n\");\r\n      }\r\n\r\n      const rideableC = this._data.components[\"minecraft:rideable\"];\r\n      if (rideableC !== undefined) {\r\n        if (isTypeScript) {\r\n          results.push(\"  addRider(newRider : mc.Entity) {\");\r\n        } else {\r\n          results.push(\"  addRider(newRider) {\");\r\n        }\r\n\r\n        results.push('    this._entity.getComponent(\"minecraft:rideable\").addRider(newRider);');\r\n        results.push(\"  }\\n\");\r\n\r\n        if (isTypeScript) {\r\n          results.push(\"  ejectRider(rider : mc.Entity) {\");\r\n        } else {\r\n          results.push(\"  ejectRider(rider) {\");\r\n        }\r\n        results.push('    this._entity.getComponent(\"minecraft:rideable\").addRider(rider);');\r\n        results.push(\"  }\\n\");\r\n      }\r\n\r\n      const tameableC = this._data.components[\"minecraft:tameable\"];\r\n      if (tameableC !== undefined) {\r\n        results.push(\"  tame() {\");\r\n        results.push('    return this._entity.getComponent(\"minecraft:tameable\").tame();');\r\n        results.push(\"  }\\n\");\r\n      }\r\n    }\r\n\r\n    results.push(\"}\");\r\n\r\n    return results.join(\"\\n\");\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n    Log.assert(!this._isLoaded || this._wrapper !== null, \"ETDP\");\r\n\r\n    if (!this._wrapper) {\r\n      return false;\r\n    }\r\n\r\n    this._isSelfPersisting = true;\r\n    try {\r\n      return this._file.setObjectContentIfSemanticallyDifferent(this._wrapper);\r\n    } finally {\r\n      this._isSelfPersisting = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Loads the entity type definition from the file.\r\n   * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.\r\n   *                         If false (default), uses efficient standard JSON parsing.\r\n   *                         Can be called again with true to \"upgrade\" a read-only load to read/write.\r\n   */\r\n  async load(preserveComments: boolean = false) {\r\n    // If already loaded with comments, we have the \"best\" version - nothing more to do\r\n    if (this._isLoaded && this._loadedWithComments) {\r\n      return;\r\n    }\r\n\r\n    // If already loaded without comments and caller doesn't need comments, we're done\r\n    if (this._isLoaded && !preserveComments) {\r\n      return;\r\n    }\r\n\r\n    // If we get here and _isLoaded is true, we need to \"upgrade\" from read-only to read/write\r\n    // by re-parsing with comment preservation\r\n\r\n    if (this._file === undefined) {\r\n      Log.unexpectedUndefined(\"ETBPF\");\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (!this._file.content || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    let data: any = {};\r\n\r\n    // Use comment-preserving parser only when needed for editing\r\n    let result = preserveComments\r\n      ? StorageUtilities.getJsonObjectWithComments(this._file)\r\n      : StorageUtilities.getJsonObject(this._file);\r\n\r\n    if (result) {\r\n      data = result;\r\n    }\r\n\r\n    this._wrapper = data;\r\n\r\n    const entity = data[\"minecraft:entity\"];\r\n\r\n    if (entity && entity.description) {\r\n      this.id = entity.description.identifier;\r\n    }\r\n\r\n    this._data = entity;\r\n\r\n    if (this._data) {\r\n      if (this._data.components) {\r\n        for (const compName in this._data.components) {\r\n          const comp = this._data.components[compName];\r\n\r\n          if (comp) {\r\n            this._managedComponents[compName] = new ManagedComponent(this._data.components, compName, comp);\r\n          }\r\n        }\r\n      }\r\n      if (this._data.component_groups) {\r\n        for (const compGroupName in this._data.component_groups) {\r\n          const compGroup = this._data.component_groups[compGroupName];\r\n\r\n          if (compGroup) {\r\n            this._componentGroups[compGroupName] = new ManagedComponentGroup(compGroup, compGroupName);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._loadedWithComments = preserveComments;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ProjectItemCreationType, ProjectItemErrorStatus } from \"./IProjectItemData\";\r\n\r\nexport enum ProjectItemVariantType {\r\n  general = 0,\r\n  subPack = 1,\r\n  versionSlice = 2,\r\n  versionSliceAlt = 3,\r\n  versionSliceAltPacks = 4,\r\n}\r\n\r\nexport const MaxVariantCounts = 4;\r\n\r\nexport default interface IProjectItemVariant {\r\n  label: string;\r\n  variantType: ProjectItemVariantType;\r\n  projectPath?: string;\r\n  creationType?: ProjectItemCreationType;\r\n  errorMessage?: string;\r\n  errorStatus?: ProjectItemErrorStatus;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { ProjectItemErrorStatus, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport IProjectItemVariant, { ProjectItemVariantType } from \"./IProjectItemVariant\";\r\nimport ProjectItem from \"./ProjectItem\";\r\nimport ProjectVariant from \"./ProjectVariant\";\r\nimport Log from \"../core/Log\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport { StorageErrorStatus } from \"../storage/IStorage\";\r\nimport { PackType } from \"../minecraft/Pack\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\n\r\nexport default class ProjectItemVariant {\r\n  private _item: ProjectItem;\r\n  private _data: IProjectItemVariant;\r\n  private _file: IFile | null = null;\r\n  private _folder: IFolder | null = null;\r\n  private _projectVariant: ProjectVariant;\r\n  private _isFileContentProcessed = false;\r\n  private _isLoaded = false;\r\n  private _onFileRetrieved = new EventDispatcher<ProjectItemVariant, IFile>();\r\n  private _onFolderRetrieved = new EventDispatcher<ProjectItemVariant, IFolder>();\r\n  private _onLoaded = new EventDispatcher<ProjectItemVariant, ProjectItemVariant>();\r\n\r\n  private _isDefault: boolean;\r\n\r\n  constructor(parentItem: ProjectItem, data: IProjectItemVariant, projectVariant: ProjectVariant) {\r\n    this._item = parentItem;\r\n    this._data = data;\r\n    this._projectVariant = projectVariant;\r\n\r\n    this._isDefault = this._data.label === \"\";\r\n  }\r\n\r\n  get projectVariant() {\r\n    return this._projectVariant;\r\n  }\r\n\r\n  get errorMessage() {\r\n    return this._data.errorMessage;\r\n  }\r\n\r\n  set errorMessage(newErrorMessage: string | undefined) {\r\n    this._data.errorMessage = newErrorMessage;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onFileRetrieved() {\r\n    return this._onFileRetrieved.asEvent();\r\n  }\r\n\r\n  public get onFolderRetrieved() {\r\n    return this._onFolderRetrieved.asEvent();\r\n  }\r\n\r\n  get label() {\r\n    return this._data.label;\r\n  }\r\n\r\n  get variantType() {\r\n    return this._data.variantType;\r\n  }\r\n\r\n  get file() {\r\n    if (this._isDefault) {\r\n      return this._item.defaultFile;\r\n    }\r\n\r\n    return this._file;\r\n  }\r\n\r\n  setFile(file: IFile | null) {\r\n    this._file = file;\r\n  }\r\n\r\n  get itemType() {\r\n    return this._item.itemType;\r\n  }\r\n\r\n  get projectPath() {\r\n    return this._data.projectPath;\r\n  }\r\n\r\n  set variantType(newVariantType: ProjectItemVariantType) {\r\n    this._data.variantType = newVariantType;\r\n  }\r\n\r\n  set projectPath(newProjectPath: string | undefined) {\r\n    this._data.projectPath = newProjectPath;\r\n  }\r\n\r\n  get folder() {\r\n    if (this._isDefault) {\r\n      return this._item.defaultFolder;\r\n    }\r\n\r\n    return this._folder;\r\n  }\r\n\r\n  setFolder(file: IFolder | null) {\r\n    this._folder = file;\r\n  }\r\n\r\n  _handleMCWorldLoaded(world: MCWorld, worldA: MCWorld) {\r\n    this._fireLoadedEvent();\r\n  }\r\n\r\n  _fireLoadedEvent() {\r\n    if (this._onLoaded && this.isLoaded) {\r\n      this._onLoaded.dispatch(this, this);\r\n    }\r\n  }\r\n\r\n  get errorStatus() {\r\n    return this._data.errorStatus;\r\n  }\r\n\r\n  set errorStatus(errorStatus: ProjectItemErrorStatus | undefined) {\r\n    this._data.errorStatus = errorStatus;\r\n  }\r\n\r\n  async ensureFileStorage() {\r\n    if (\r\n      this._item.storageType === ProjectItemStorageType.singleFile &&\r\n      this._file === null &&\r\n      this.projectPath !== null &&\r\n      this.projectPath !== undefined &&\r\n      this.projectPath.startsWith(\"/\") &&\r\n      this._item.project.projectFolder !== null &&\r\n      this._item.project.projectFolder !== undefined\r\n    ) {\r\n      const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n      if (prefixPaths.length > 1) {\r\n        let folderToLoadFrom: IFolder | undefined = this._item.project.projectFolder;\r\n\r\n        for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n          if (folderToLoadFrom) {\r\n            const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n            await zipFile.loadContent();\r\n\r\n            if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n              if (!zipFile.fileContainerStorage) {\r\n                const zipStorage = new ZipStorage();\r\n\r\n                zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                zipStorage.containerFile = zipFile;\r\n                zipFile.fileContainerStorage = zipStorage;\r\n              }\r\n\r\n              folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n            } else {\r\n              folderToLoadFrom = undefined;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (folderToLoadFrom) {\r\n          this._file = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[prefixPaths.length - 1]);\r\n          this._isFileContentProcessed = false;\r\n        } else {\r\n          Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.projectPath + \"'\");\r\n          return null;\r\n        }\r\n      } else {\r\n        this._file = await this._item.project.projectFolder.ensureFileFromRelativePath(this.projectPath);\r\n        this._isFileContentProcessed = false;\r\n      }\r\n    } else if (\r\n      this._item.storageType === ProjectItemStorageType.singleFile &&\r\n      this._file === null &&\r\n      (this.projectPath === null || this.projectPath === undefined) &&\r\n      this.variantType === ProjectItemVariantType.subPack &&\r\n      this._item.project.projectFolder !== null &&\r\n      this._item.project.projectFolder !== undefined\r\n    ) {\r\n      await this._item.project.ensurePacksAsync();\r\n\r\n      const pack = await this._item.getPack();\r\n\r\n      if (pack && pack.packType === PackType.resource && this._item.projectPath) {\r\n        const manifest = (await pack.ensureManifest()) as ResourceManifestDefinition | undefined;\r\n        const folder = pack.folder;\r\n\r\n        if (manifest && folder) {\r\n          const subpack = manifest.getSubpackByFolderName(this.label);\r\n\r\n          if (subpack) {\r\n            const path = this._item.projectPath;\r\n\r\n            const resourcePacksRel = path.indexOf(\"/resource_packs/\");\r\n\r\n            if (resourcePacksRel > -1) {\r\n              const file = await folder.getFileFromRelativePath(path.substring(resourcePacksRel + 15));\r\n\r\n              if (file) {\r\n                this._file = file;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return this._file;\r\n  }\r\n\r\n  async loadFileStorage() {\r\n    if (!this._isFileContentProcessed && this._file) {\r\n      /*if (this._data.creationType === ProjectItemCreationType.generated) {\r\n        await ProjectAutogeneration.updateItemAutogeneration(this, true);\r\n      } else {*/\r\n      await this._file.loadContent();\r\n\r\n      // }\r\n\r\n      //await ProjectAutogeneration.updateItemAutogeneratedSideFiles(this);\r\n\r\n      this._isFileContentProcessed = true;\r\n\r\n      this._onFileRetrieved.dispatch(this, this._file);\r\n\r\n      if (this.itemType === ProjectItemType.MCWorld || this.itemType === ProjectItemType.MCTemplate) {\r\n        const mcworld = await MCWorld.ensureOnFile(this._file, this._item.project, this._handleMCWorldLoaded);\r\n\r\n        if (mcworld) {\r\n          this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n          if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n            this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n          } else {\r\n            this.errorStatus = ProjectItemErrorStatus.none;\r\n          }\r\n        }\r\n      } else {\r\n        this._fireLoadedEvent();\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureAndLoadFileStorage() {\r\n    await this.ensureFileStorage();\r\n\r\n    await this.loadFileStorage();\r\n\r\n    return this._file;\r\n  }\r\n\r\n  async ensureFolderStorage() {\r\n    if (this._item.storageType === ProjectItemStorageType.folder) {\r\n      if (\r\n        this._folder === null &&\r\n        this.projectPath !== null &&\r\n        this.projectPath !== undefined &&\r\n        this.projectPath.startsWith(\"/\") &&\r\n        this._item.project.projectFolder !== null &&\r\n        this._item.project.projectFolder !== undefined\r\n      ) {\r\n        const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n        if (prefixPaths.length > 1) {\r\n          let folderToLoadFrom: IFolder | undefined = this._item.project.projectFolder;\r\n\r\n          for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n            if (folderToLoadFrom) {\r\n              const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n              await zipFile.loadContent();\r\n\r\n              if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n                if (!zipFile.fileContainerStorage) {\r\n                  const zipStorage = new ZipStorage();\r\n\r\n                  zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                  await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                  zipStorage.containerFile = zipFile;\r\n                  zipFile.fileContainerStorage = zipStorage;\r\n                }\r\n\r\n                folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n              } else {\r\n                folderToLoadFrom = undefined;\r\n              }\r\n            }\r\n          }\r\n\r\n          if (folderToLoadFrom) {\r\n            this._folder = await folderToLoadFrom.ensureFolderFromRelativePath(prefixPaths[prefixPaths.length - 1]);\r\n          } else {\r\n            // Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.storagePath + \"'\");\r\n            return null;\r\n          }\r\n        } else {\r\n          this._folder = await this._item.project.projectFolder.ensureFolderFromRelativePath(this.projectPath);\r\n        }\r\n\r\n        await this._folder.load();\r\n\r\n        this._onFolderRetrieved.dispatch(this, this._folder);\r\n\r\n        if (this.itemType === ProjectItemType.worldFolder) {\r\n          const mcworld = await MCWorld.ensureMCWorldOnFolder(\r\n            this._folder,\r\n            this._item.project,\r\n            this._handleMCWorldLoaded\r\n          );\r\n\r\n          if (mcworld) {\r\n            this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n            if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n              this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n            } else {\r\n              this.errorStatus = ProjectItemErrorStatus.none;\r\n            }\r\n          }\r\n        } else {\r\n          this._fireLoadedEvent();\r\n        }\r\n      }\r\n\r\n      return this._folder;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProjectVariant from \"./IProjectVariant\";\r\nimport Project from \"./Project\";\r\n\r\nexport default class ProjectVariant {\r\n  private _data: IProjectVariant;\r\n\r\n  private _isDefault: boolean;\r\n  private _project: Project;\r\n\r\n  constructor(parent: Project, data: IProjectVariant) {\r\n    this._project = parent;\r\n    this._data = data;\r\n\r\n    this._isDefault = this._data.label === \"\";\r\n  }\r\n\r\n  static canonicalizeVariantLabel(variantLabel: string) {\r\n    return variantLabel.toLowerCase().trim();\r\n  }\r\n\r\n  get isDefault() {\r\n    return this._isDefault;\r\n  }\r\n\r\n  get effectiveUnifiedTier() {\r\n    if (this.memoryPerformanceTier !== undefined) {\r\n      return this.memoryPerformanceTier;\r\n    }\r\n\r\n    if (this.memoryTier === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    // per specified mappings of previous subpack tiers (where each number corresponds to 512mb of device memory)\r\n    // to updated, broader, unified tiers that adds in device profile info\r\n    if (this.memoryTier < 11) {\r\n      return 0;\r\n    }\r\n\r\n    if (this.memoryTier <= 11) {\r\n      return 1;\r\n    }\r\n\r\n    if (this.memoryTier <= 12) {\r\n      return 2;\r\n    }\r\n\r\n    if (this.memoryTier <= 18) {\r\n      return 3;\r\n    }\r\n\r\n    if (this.memoryTier <= 31) {\r\n      return 4;\r\n    }\r\n\r\n    return 5;\r\n  }\r\n\r\n  get memoryPerformanceTier() {\r\n    return this._data.memoryPerformanceTier;\r\n  }\r\n\r\n  set memoryPerformanceTier(newTier: number | undefined) {\r\n    this._data.memoryPerformanceTier = newTier;\r\n  }\r\n\r\n  get memoryTier() {\r\n    return this._data.memoryTier;\r\n  }\r\n\r\n  set memoryTier(newTier: number | undefined) {\r\n    this._data.memoryTier = newTier;\r\n  }\r\n\r\n  get title() {\r\n    return this._data.title;\r\n  }\r\n\r\n  set title(newTitle: string | undefined) {\r\n    this._data.title = newTitle;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IProjectItemData, {\r\n  ProjectItemCreationType,\r\n  ProjectItemEditPreference,\r\n  ProjectItemErrorStatus,\r\n  ProjectItemStorageType,\r\n} from \"./IProjectItemData\";\r\nimport Log from \"./../core/Log\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport Project from \"./Project\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IGitHubInfo from \"./IGitHubInfo\";\r\nimport EntityTypeDefinition from \"../minecraft/EntityTypeDefinition\";\r\nimport { ProjectEditPreference } from \"./IProjectData\";\r\nimport MCWorld from \"../minecraft/MCWorld\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { IFileUpdateEvent, StorageErrorStatus } from \"../storage/IStorage\";\r\nimport ProjectItemUtilities from \"./ProjectItemUtilities\";\r\nimport Pack from \"../minecraft/Pack\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport ProjectItemRelationship from \"./IProjectItemRelationship\";\r\nimport IProjectItemRelationship from \"./IProjectItemRelationship\";\r\nimport IProjectItemUnfulfilledRelationship from \"./IProjectItemUnfulfilledRelationship\";\r\nimport ProjectItemRelations from \"./ProjectItemRelations\";\r\nimport ProjectItemVariant from \"./ProjectItemVariant\";\r\nimport { ProjectItemVariantType } from \"./IProjectItemVariant\";\r\nimport Database from \"../minecraft/Database\";\r\nimport ProjectVariant from \"./ProjectVariant\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\n\r\nexport interface IProjectItemContentUpdateEvent {\r\n  item: ProjectItem;\r\n  fileUpdate: IFileUpdateEvent;\r\n}\r\n\r\nexport default class ProjectItem {\r\n  private _data: IProjectItemData;\r\n  private _project: Project;\r\n  private _onPropertyChanged = new EventDispatcher<ProjectItem, string>();\r\n  private _onFileRetrieved = new EventDispatcher<ProjectItem, IFile>();\r\n  private _onFolderRetrieved = new EventDispatcher<ProjectItem, IFolder>();\r\n  private _onLoaded = new EventDispatcher<ProjectItem, ProjectItem>();\r\n  private _defaultFile: IFile | null;\r\n  private _defaultFolder: IFolder | null;\r\n  private _pendingLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _isLoading: boolean = false;\r\n  private _isFileContentProcessed: boolean = false;\r\n  private _imageUrlBase64Cache: string | undefined | null;\r\n  private _pack: Pack | undefined;\r\n  private _primaryFile?: IFile;\r\n\r\n  private _accessoryFolder: IFolder | null;\r\n\r\n  public parentItems: ProjectItemRelationship[] | undefined;\r\n  public childItems: ProjectItemRelationship[] | undefined;\r\n  public unfulfilledRelationships: IProjectItemUnfulfilledRelationship[] | undefined;\r\n\r\n  private _variants: { [label: string]: ProjectItemVariant };\r\n\r\n  constructor(parent: Project, incomingData?: IProjectItemData) {\r\n    this._project = parent;\r\n    this._defaultFile = null;\r\n    this._defaultFolder = null;\r\n    this._accessoryFolder = null;\r\n    this._isFileContentProcessed = false;\r\n    this._variants = {};\r\n    this._handleMCWorldLoaded = this._handleMCWorldLoaded.bind(this);\r\n    this.sortVariantsMostImportantFirst = this.sortVariantsMostImportantFirst.bind(this);\r\n    this.sortVariantsMostImportantLast = this.sortVariantsMostImportantLast.bind(this);\r\n    if (incomingData) {\r\n      this._data = incomingData;\r\n      // Migration: older projects may have persisted an empty-label default variant\r\n      // (label: \"\", variantType: general). The empty-label variant is purely a runtime\r\n      // placeholder for the item's default file and should not be persisted; leaving\r\n      // it in #data.variants makes _getVariantList() report a phantom entry that other\r\n      // code paths (e.g. variant.ensureFileStorage subpack lookup) can mishandle.\r\n      if (this._data.variants && this._data.variants[\"\"] !== undefined) {\r\n        delete this._data.variants[\"\"];\r\n      }\r\n    } else {\r\n      this._data = {\r\n        variants: {},\r\n        itemType: ProjectItemType.unknown,\r\n        projectPath: null,\r\n        storageType: ProjectItemStorageType.singleFile,\r\n        tags: [],\r\n        name: \"\",\r\n      };\r\n    }\r\n  }\r\n\r\n  public get parentItemCount() {\r\n    if (this.parentItems === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.parentItems.length;\r\n  }\r\n\r\n  public get childItemCount() {\r\n    if (this.childItems === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.childItems.length;\r\n  }\r\n\r\n  public get unfulfilledRelationshipsCount() {\r\n    if (this.unfulfilledRelationships === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.unfulfilledRelationships.length;\r\n  }\r\n\r\n  public get isInWorld() {\r\n    return this._data.isInWorld;\r\n  }\r\n\r\n  public set isInWorld(isInWorld: boolean | undefined) {\r\n    this._data.isInWorld = isInWorld;\r\n  }\r\n\r\n  public get project() {\r\n    return this._project;\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onFileRetrieved() {\r\n    return this._onFileRetrieved.asEvent();\r\n  }\r\n\r\n  public get onFolderRetrieved() {\r\n    return this._onFolderRetrieved.asEvent();\r\n  }\r\n\r\n  public get gitHubReference() {\r\n    return this._data.gitHubReference;\r\n  }\r\n\r\n  public get isInFileContainer() {\r\n    if (!this.projectPath) {\r\n      return false;\r\n    }\r\n\r\n    return this.projectPath.indexOf(\"#\") >= 0;\r\n  }\r\n\r\n  public get isFileContainerStorageItem() {\r\n    return (\r\n      this.itemType === ProjectItemType.zip ||\r\n      this.itemType === ProjectItemType.MCWorld ||\r\n      this.itemType === ProjectItemType.MCProject ||\r\n      this.itemType === ProjectItemType.MCAddon ||\r\n      this.itemType === ProjectItemType.MCPack ||\r\n      this.itemType === ProjectItemType.MCTemplate\r\n    );\r\n  }\r\n\r\n  hasCustomVariants() {\r\n    for (const key in this._data.variants) {\r\n      if (key !== \"\") {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  hasVersionSliceCustomVariants() {\r\n    for (const key in this._data.variants) {\r\n      const varType = this._data.variants[key].variantType;\r\n      if (\r\n        key !== \"\" &&\r\n        (varType === ProjectItemVariantType.versionSliceAltPacks ||\r\n          varType === ProjectItemVariantType.versionSlice ||\r\n          varType === ProjectItemVariantType.versionSliceAlt)\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _shouldEnsureDefaultVariant() {\r\n    return (this.defaultFile && (this.defaultFile.content || !this.hasCustomVariants())) || this.defaultFolder;\r\n  }\r\n\r\n  getVariant(variantName: string) {\r\n    if (variantName === \"\" && this._shouldEnsureDefaultVariant()) {\r\n      return this.ensureDefaultVariant();\r\n    }\r\n\r\n    return this._variants[variantName];\r\n  }\r\n\r\n  public get isWorld() {\r\n    return (\r\n      this.itemType === ProjectItemType.MCProject ||\r\n      this.itemType === ProjectItemType.MCWorld ||\r\n      this.itemType === ProjectItemType.MCTemplate ||\r\n      this.itemType === ProjectItemType.worldFolder\r\n    );\r\n  }\r\n\r\n  static getGitHubSignature(info: IGitHubInfo) {\r\n    let sig = info.owner + \"|\" + info.repoName + \"|\";\r\n\r\n    if (info.branch !== undefined) {\r\n      sig += info.branch;\r\n    }\r\n\r\n    if (info.folder !== undefined) {\r\n      sig += \"|\" + info.folder;\r\n    }\r\n\r\n    return sig;\r\n  }\r\n\r\n  get defaultVariant() {\r\n    if (this._shouldEnsureDefaultVariant()) {\r\n      return this.ensureDefaultVariant();\r\n    }\r\n\r\n    return this._variants[\"\"];\r\n  }\r\n\r\n  async ensureAccessoryFolder() {\r\n    if (this._accessoryFolder) {\r\n      return this._accessoryFolder;\r\n    }\r\n\r\n    const rootAccessoryFolder = await this.project.ensureProjectItemAccessoryFolder();\r\n\r\n    const folderPath = ProjectItemUtilities.getAccessoryFolderPathFromFilePath(this);\r\n\r\n    this._accessoryFolder = await rootAccessoryFolder.ensureFolderFromRelativePath(folderPath);\r\n\r\n    return this._accessoryFolder;\r\n  }\r\n\r\n  ensureDefaultVariant() {\r\n    return this.ensureVariant(\"\");\r\n  }\r\n\r\n  getVariantList() {\r\n    if (this.defaultFile || this.defaultFolder) {\r\n      this.ensureDefaultVariant();\r\n    }\r\n\r\n    return this._getVariantList();\r\n  }\r\n\r\n  _getVariantList() {\r\n    const vararr = [];\r\n\r\n    // The empty-label default variant is intentionally NOT persisted in\r\n    // _data.variants (see ensureVariant). If it has been instantiated as a\r\n    // runtime placeholder, include it first so callers iterating the variant\r\n    // list still see the item's default file/content.\r\n    if (this._variants[\"\"] !== undefined) {\r\n      vararr.push(this._variants[\"\"]);\r\n    }\r\n\r\n    for (const key in this._data.variants) {\r\n      if (key === \"\") {\r\n        continue;\r\n      }\r\n      const variant = this.ensureVariant(key);\r\n      vararr.push(variant);\r\n    }\r\n\r\n    return vararr;\r\n  }\r\n\r\n  getVariantListMostImportantLast() {\r\n    const vararr = [];\r\n\r\n    const varKeys = Object.keys(this._data.variants);\r\n    varKeys.sort(this.sortVariantsMostImportantLast);\r\n\r\n    for (const key of varKeys) {\r\n      const variant = this.ensureVariant(key);\r\n      vararr.push(variant);\r\n    }\r\n\r\n    return vararr;\r\n  }\r\n\r\n  getVariantListMostImportantFirst() {\r\n    const vararr = [];\r\n\r\n    const varKeys = Object.keys(this._data.variants);\r\n    varKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n    for (const key of varKeys) {\r\n      const variant = this.ensureVariant(key);\r\n      vararr.push(variant);\r\n    }\r\n\r\n    return vararr;\r\n  }\r\n\r\n  hasNonDefaultVariant() {\r\n    const vararr = this._getVariantList();\r\n\r\n    if (vararr.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    if (vararr.length > 1) {\r\n      return true;\r\n    }\r\n\r\n    if (vararr[0].label !== \"\") {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  ensureVariant(label: string) {\r\n    label = ProjectVariant.canonicalizeVariantLabel(label);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(label)) {\r\n      Log.unsupportedToken(label);\r\n      throw new Error();\r\n    }\r\n\r\n    if (!this._variants[label]) {\r\n      const pv = this.project.ensureVariant(label);\r\n\r\n      if (!this._data.variants) {\r\n        this._data.variants = {};\r\n      }\r\n\r\n      // The empty-label default variant is a runtime placeholder for the item's\r\n      // default file and is not persisted in #data.variants. Use a transient data\r\n      // object so the runtime ProjectItemVariant still works without leaking a\r\n      // phantom entry into the saved project (which historically caused\r\n      // _getVariantList() to report count=1 on items that have no real variants).\r\n      let variantData = this._data.variants[label];\r\n      if (variantData === undefined) {\r\n        variantData = { label: label, variantType: ProjectItemVariantType.general };\r\n        if (label !== \"\") {\r\n          this._data.variants[label] = variantData;\r\n        }\r\n      }\r\n\r\n      this._primaryFile = undefined;\r\n\r\n      this._variants[label] = new ProjectItemVariant(this, variantData, pv);\r\n    }\r\n\r\n    return this._variants[label];\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensureFileStorage or ensureStorage should be called before this method.\r\n  getFile(variantName?: string) {\r\n    if (variantName === undefined || variantName === \"\") {\r\n      return this._defaultFile;\r\n    }\r\n\r\n    const variant = this.ensureVariant(variantName);\r\n\r\n    return variant.file;\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensureFolderStorage or ensureStorage should be called before this method.\r\n  getFolder(variantName?: string) {\r\n    if (variantName === undefined || variantName === \"\") {\r\n      return this._defaultFolder;\r\n    }\r\n\r\n    const variant = this.ensureVariant(variantName);\r\n\r\n    return variant.folder;\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensure*Storage should be called before this method.\r\n  async getPack() {\r\n    if (this._pack) {\r\n      return this._pack;\r\n    }\r\n\r\n    let thisPath = undefined;\r\n\r\n    if (this._defaultFile) {\r\n      thisPath = this._defaultFile.storageRelativePath;\r\n    } else if (this._defaultFolder) {\r\n      thisPath = this._defaultFolder.storageRelativePath;\r\n    }\r\n\r\n    if (thisPath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    thisPath = StorageUtilities.canonicalizePath(thisPath);\r\n\r\n    await this.project.ensurePacks();\r\n\r\n    for (const pack of this.project.packs) {\r\n      if (thisPath.startsWith(StorageUtilities.canonicalizePath(pack.folder.storageRelativePath))) {\r\n        this._pack = pack;\r\n        return this._pack;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  addUnfulfilledRelationship(path: string, itemType: ProjectItemType, isVanillaDependent?: boolean) {\r\n    let pir: IProjectItemUnfulfilledRelationship = {\r\n      parentItem: this,\r\n      path: path,\r\n      itemType: itemType,\r\n      isVanillaDependent: isVanillaDependent === true,\r\n    };\r\n\r\n    if (this.unfulfilledRelationships === undefined) {\r\n      this.unfulfilledRelationships = [];\r\n    }\r\n\r\n    this.unfulfilledRelationships.push(pir);\r\n  }\r\n\r\n  async ensureDependencies() {\r\n    await ProjectItemRelations.calculateForItem(this);\r\n  }\r\n\r\n  addChildItem(childItem: ProjectItem) {\r\n    if (this.childItems) {\r\n      for (const rel of this.childItems) {\r\n        if (rel.childItem === childItem && rel.parentItem === this) {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (childItem === this) {\r\n      return;\r\n    }\r\n\r\n    if (ProjectItemUtilities.wouldBeCircular(childItem)) {\r\n      return;\r\n    }\r\n\r\n    let hasChild = false;\r\n    let childHasParent = false;\r\n\r\n    if (this.childItems === undefined) {\r\n      this.childItems = [];\r\n    }\r\n\r\n    if (childItem.parentItems === undefined) {\r\n      childItem.parentItems = [];\r\n    }\r\n\r\n    for (const existingRelation of this.childItems) {\r\n      if (existingRelation.childItem === childItem && existingRelation.parentItem === this) {\r\n        hasChild = true;\r\n      }\r\n    }\r\n\r\n    for (const existingRelation of childItem.parentItems) {\r\n      if (existingRelation.childItem === childItem && existingRelation.parentItem === this) {\r\n        childHasParent = true;\r\n      }\r\n    }\r\n\r\n    const pir: IProjectItemRelationship = {\r\n      parentItem: this,\r\n      childItem: childItem,\r\n    };\r\n\r\n    if (!hasChild) {\r\n      this.childItems.push(pir);\r\n    }\r\n\r\n    if (!childHasParent) {\r\n      childItem.parentItems.push(pir);\r\n    }\r\n  }\r\n\r\n  addParentItem(parentItem: ProjectItem) {\r\n    if (ProjectItemUtilities.wouldBeCircular(parentItem)) {\r\n      return;\r\n    }\r\n\r\n    if (parentItem === this) {\r\n      return;\r\n    }\r\n\r\n    if (this.parentItems === undefined) {\r\n      this.parentItems = [];\r\n    }\r\n\r\n    if (parentItem.childItems === undefined) {\r\n      parentItem.childItems = [];\r\n    }\r\n\r\n    let hasParent = false;\r\n    let parentHasChild = false;\r\n\r\n    for (const existingRelation of this.parentItems) {\r\n      if (existingRelation.parentItem === parentItem && existingRelation.childItem === this) {\r\n        hasParent = true;\r\n      }\r\n    }\r\n\r\n    for (const existingRelation of parentItem.childItems) {\r\n      if (existingRelation.parentItem === parentItem && existingRelation.childItem === this) {\r\n        parentHasChild = true;\r\n      }\r\n    }\r\n\r\n    const pir: IProjectItemRelationship = {\r\n      parentItem: parentItem,\r\n      childItem: this,\r\n    };\r\n\r\n    if (!hasParent) {\r\n      this.parentItems.push(pir);\r\n    }\r\n\r\n    if (!parentHasChild) {\r\n      parentItem.childItems.push(pir);\r\n    }\r\n  }\r\n\r\n  toString() {\r\n    return this.itemType + \": \" + this.projectPath;\r\n  }\r\n\r\n  /// NOTE: ProjectItem.ensure*Storage should be called before this method.\r\n  async getPackRelativePath() {\r\n    const pack = await this.getPack();\r\n\r\n    if (!pack) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._defaultFile) {\r\n      return this._defaultFile.getFolderRelativePath(pack.folder);\r\n    } else if (this._defaultFolder) {\r\n      return this._defaultFolder.getFolderRelativePath(pack.folder);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static gitHubReferencesEqual(refA: IGitHubInfo | undefined, refB: IGitHubInfo | undefined) {\r\n    if (refA === refB) {\r\n      return true;\r\n    }\r\n\r\n    if (refA === undefined && refB === undefined) {\r\n      return true;\r\n    }\r\n\r\n    if (\r\n      refA !== undefined &&\r\n      refB !== undefined &&\r\n      refA.owner === refB.owner &&\r\n      refA.repoName === refB.repoName &&\r\n      refA.folder === refB.folder &&\r\n      refA.branch === refB.branch\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public set gitHubReference(value: IGitHubInfo | undefined) {\r\n    if (ProjectItem.gitHubReferencesEqual(this._data.gitHubReference, value)) {\r\n      return;\r\n    }\r\n\r\n    this._data.gitHubReference = value;\r\n\r\n    this._project.notifyProjectItemChanged(this);\r\n  }\r\n\r\n  get title() {\r\n    return (\r\n      StorageUtilities.getContaineredFileLeafPath(this.projectPath) +\r\n      \" (\" +\r\n      ProjectItemUtilities.getDescriptionForType(this._data.itemType).toLowerCase() +\r\n      \")\"\r\n    );\r\n  }\r\n\r\n  get typeTitle() {\r\n    return ProjectItemUtilities.getDescriptionForType(this._data.itemType);\r\n  }\r\n\r\n  getPackFolderName() {\r\n    if (this.projectPath === undefined || this.projectPath === null) {\r\n      return undefined;\r\n    }\r\n    let folderStoragePath = StorageUtilities.getFolderPath(this.projectPath);\r\n\r\n    if (folderStoragePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    let folderStoragePathLower = folderStoragePath.toLowerCase();\r\n\r\n    if (this.project.packs.length > 2) {\r\n      const endOfPacks = folderStoragePathLower.indexOf(\"_packs/\");\r\n\r\n      if (endOfPacks > 0) {\r\n        const endOfPacksSegment = folderStoragePathLower.indexOf(\"/\", endOfPacks + 7);\r\n\r\n        if (endOfPacksSegment > 0) {\r\n          return folderStoragePath.substring(endOfPacks + 7, endOfPacksSegment);\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get folderPath() {\r\n    if (this.projectPath === undefined || this.projectPath === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return StorageUtilities.getFolderPath(this.projectPath);\r\n  }\r\n\r\n  getFolderGroupingPath() {\r\n    if (this.projectPath === undefined || this.projectPath === null) {\r\n      return undefined;\r\n    }\r\n\r\n    let folderStoragePath = StorageUtilities.getFolderPath(this.projectPath);\r\n\r\n    if (folderStoragePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    folderStoragePath = MinecraftUtilities.clearCommonTerms(folderStoragePath);\r\n    let folderStoragePathLower = folderStoragePath.toLowerCase();\r\n\r\n    const folderTypeRoots = [...ProjectItemUtilities.getFolderRootsForType(this.itemType)];\r\n\r\n    folderTypeRoots.push(\"zip\");\r\n\r\n    for (const folderTypeRoot of folderTypeRoots) {\r\n      if (this.project.hasMultiplePacksOfSameType) {\r\n        folderStoragePath = Utilities.replaceAllCaseInsensitive(folderStoragePath, \"/\" + folderTypeRoot + \"/\", \"/\");\r\n      } else {\r\n        const start = folderStoragePathLower.indexOf(\"/\" + folderTypeRoot + \"/\");\r\n\r\n        if (start >= 0) {\r\n          let packPrefix = this.getPackFolderName();\r\n\r\n          if (packPrefix === undefined) {\r\n            packPrefix = \"\";\r\n          } else {\r\n            packPrefix += \" \";\r\n          }\r\n\r\n          folderStoragePath = packPrefix + folderStoragePath.substring(start + 2 + folderTypeRoot.length);\r\n          folderStoragePathLower = folderStoragePath.toLowerCase();\r\n        }\r\n      }\r\n    }\r\n\r\n    folderStoragePath = folderStoragePath.replace(/#/gi, \" \").trim();\r\n\r\n    return folderStoragePath;\r\n  }\r\n\r\n  getCommunitySchemaPath() {\r\n    return ProjectItemUtilities.getCommunitySchemaPathForType(this.itemType);\r\n  }\r\n\r\n  getOfficialSchemaPath() {\r\n    return ProjectItemUtilities.getOfficialSchemaPathForType(this.itemType);\r\n  }\r\n\r\n  getFormPath() {\r\n    // For geometry files, check if this is a legacy format (format_version 1.8.0 with \"geometry.<name>\" keys)\r\n    // vs modern format (format_version 1.21.0 with \"minecraft:geometry\")\r\n    if (this.itemType === ProjectItemType.modelGeometryJson && this.primaryFile) {\r\n      const content = StorageUtilities.getJsonObject(this.primaryFile);\r\n      if (content) {\r\n        // Check if any root key starts with \"geometry.\" (legacy format)\r\n        const rootKeys = Object.keys(content);\r\n        const hasLegacyGeometry = rootKeys.some((key) => key.toLowerCase().startsWith(\"geometry.\"));\r\n        if (hasLegacyGeometry) {\r\n          return \"visual/geometry.v1.8.0\";\r\n        }\r\n      }\r\n    }\r\n\r\n    return ProjectItemUtilities.getFormPathForType(this.itemType);\r\n  }\r\n\r\n  get errorStatus() {\r\n    return this._data.errorStatus;\r\n  }\r\n\r\n  set errorStatus(newErrorStatus: ProjectItemErrorStatus | undefined) {\r\n    this._data.errorStatus = newErrorStatus;\r\n  }\r\n\r\n  get source() {\r\n    return this._data.source;\r\n  }\r\n\r\n  set source(newSource: string | undefined) {\r\n    this._data.source = newSource;\r\n  }\r\n\r\n  get errorMessage() {\r\n    return this._data.errorMessage;\r\n  }\r\n\r\n  set errorMessage(newErrorMessage: string | undefined) {\r\n    this._data.errorMessage = newErrorMessage;\r\n  }\r\n\r\n  get projectPath() {\r\n    if (this._data.projectPath === undefined && this._data.storagePath) {\r\n      this._data.projectPath = this._data.storagePath;\r\n\r\n      return this._data.storagePath;\r\n    }\r\n\r\n    return this._data.projectPath;\r\n  }\r\n\r\n  set projectPath(newBasePath: string | undefined | null) {\r\n    this._data.projectPath = newBasePath;\r\n  }\r\n\r\n  get effectiveEditPreference() {\r\n    const ep = this.editPreference;\r\n\r\n    if (ep === ProjectItemEditPreference.projectDefault) {\r\n      return this._project.effectiveEditPreference;\r\n    } else if (ep === ProjectItemEditPreference.forceRaw) {\r\n      return ProjectEditPreference.raw;\r\n    } else {\r\n      return ProjectEditPreference.summarized;\r\n    }\r\n  }\r\n\r\n  get editPreference() {\r\n    if (this._data.editPreference === undefined) {\r\n      return ProjectItemEditPreference.projectDefault;\r\n    }\r\n\r\n    return this._data.editPreference;\r\n  }\r\n\r\n  set editPreference(newEditPreference: ProjectItemEditPreference) {\r\n    this._data.editPreference = newEditPreference;\r\n  }\r\n\r\n  get storageType() {\r\n    if (this._data.storageType === undefined) {\r\n      return ProjectItemStorageType.singleFile;\r\n    }\r\n\r\n    return this._data.storageType;\r\n  }\r\n\r\n  set storageType(newStorageType: ProjectItemStorageType) {\r\n    this._data.storageType = newStorageType;\r\n  }\r\n\r\n  get creationType() {\r\n    return this._data.creationType;\r\n  }\r\n\r\n  set creationType(newCreationType: ProjectItemCreationType | undefined) {\r\n    this._data.creationType = newCreationType;\r\n  }\r\n\r\n  get itemType() {\r\n    return this._data.itemType;\r\n  }\r\n\r\n  get defaultFile() {\r\n    return this._defaultFile;\r\n  }\r\n\r\n  /**\r\n   * Get the cached thumbnail data URL for this item.\r\n   * Returns undefined if no thumbnail has been generated.\r\n   */\r\n  get cachedThumbnail(): string | undefined {\r\n    return this._data.cachedThumbnail;\r\n  }\r\n\r\n  /**\r\n   * Set the cached thumbnail for this item.\r\n   * Also updates the thumbnailGeneratedAt timestamp and clears the imageUrl cache.\r\n   */\r\n  set cachedThumbnail(value: string | undefined) {\r\n    this._data.cachedThumbnail = value;\r\n    this._data.thumbnailGeneratedAt = value ? Date.now() : undefined;\r\n    // Clear the cached imageUrl so it picks up the new thumbnail\r\n    this._imageUrlBase64Cache = undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the timestamp when the thumbnail was last generated.\r\n   */\r\n  get thumbnailGeneratedAt(): number | undefined {\r\n    return this._data.thumbnailGeneratedAt;\r\n  }\r\n\r\n  /**\r\n   * Get the thumbnail link - path to another item whose thumbnail should be used.\r\n   */\r\n  get thumbnailLink(): string | undefined {\r\n    return this._data.thumbnailLink;\r\n  }\r\n\r\n  /**\r\n   * Set the thumbnail link - path to another item whose thumbnail should be used.\r\n   */\r\n  set thumbnailLink(value: string | undefined) {\r\n    this._data.thumbnailLink = value;\r\n  }\r\n\r\n  /**\r\n   * Check if this item type supports thumbnail generation.\r\n   */\r\n  get supportsThumbnail(): boolean {\r\n    return this.itemType === ProjectItemType.modelGeometryJson;\r\n  }\r\n\r\n  /**\r\n   * Clear the cached thumbnail and imageUrl cache.\r\n   * Call this when the file content changes.\r\n   */\r\n  clearThumbnailCache() {\r\n    this._data.cachedThumbnail = undefined;\r\n    this._data.thumbnailGeneratedAt = undefined;\r\n    this._imageUrlBase64Cache = undefined;\r\n  }\r\n\r\n  sortVariantsMostImportantLast(a: string, b: string) {\r\n    if (!this._variants) {\r\n      this._getVariantList();\r\n    }\r\n\r\n    if (!this._variants) {\r\n      return Utilities.staticCompare(a, b);\r\n    }\r\n\r\n    const va = this._variants[a];\r\n    const vb = this._variants[b];\r\n\r\n    if (!va || !vb || !va.label || !vb.label) {\r\n      return 0;\r\n    }\r\n\r\n    if (\r\n      (va.variantType === ProjectItemVariantType.versionSlice &&\r\n        vb.variantType === ProjectItemVariantType.versionSlice) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAlt &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAlt) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAltPacks &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAltPacks)\r\n    ) {\r\n      const versionIndexA = Database.getVersionIndexFromVersionStr(va.label);\r\n      const versionIndexB = Database.getVersionIndexFromVersionStr(vb.label);\r\n\r\n      return versionIndexA - versionIndexB;\r\n    }\r\n\r\n    return Utilities.staticCompare(va.label.toString(), vb.label.toString());\r\n  }\r\n\r\n  sortVariantsMostImportantFirst(a: string, b: string) {\r\n    if (!this._variants) {\r\n      this._getVariantList();\r\n    }\r\n\r\n    if (!this._variants) {\r\n      return Utilities.staticCompare(a, b);\r\n    }\r\n\r\n    const va = this._variants[a];\r\n    const vb = this._variants[b];\r\n\r\n    if (!va || !vb || !va.label || !vb.label) {\r\n      return 0;\r\n    }\r\n\r\n    if (\r\n      (va.variantType === ProjectItemVariantType.versionSlice &&\r\n        vb.variantType === ProjectItemVariantType.versionSlice) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAlt &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAlt) ||\r\n      (va.variantType === ProjectItemVariantType.versionSliceAltPacks &&\r\n        vb.variantType === ProjectItemVariantType.versionSliceAltPacks)\r\n    ) {\r\n      const versionIndexA = Database.getVersionIndexFromVersionStr(va.label);\r\n      const versionIndexB = Database.getVersionIndexFromVersionStr(vb.label);\r\n\r\n      return versionIndexB - versionIndexA;\r\n    }\r\n\r\n    return vb.label.localeCompare(va.label);\r\n  }\r\n\r\n  get primaryVariantLabel(): string | undefined {\r\n    const variantKeys = Object.keys(this._variants);\r\n\r\n    // if we have version slices, return the latest one that has a file\r\n    if (this.hasVersionSliceCustomVariants()) {\r\n      variantKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n      for (const variantName of variantKeys) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (\r\n          variant.variantType === ProjectItemVariantType.versionSlice ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAlt ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAltPacks\r\n        ) {\r\n          if (variant.file) {\r\n            return variant.label;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._defaultFile) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const variantName of variantKeys) {\r\n      if (variantName) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (variant.file) {\r\n          return variant.label;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get primaryFile(): IFile | null {\r\n    if (this._primaryFile) {\r\n      return this._primaryFile;\r\n    }\r\n\r\n    // if we have version slices, return the latest one that has a file\r\n    if (this.hasVersionSliceCustomVariants()) {\r\n      const variantKeys = Object.keys(this._variants);\r\n\r\n      variantKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n      for (const variantName of variantKeys) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (\r\n          variant.variantType === ProjectItemVariantType.versionSlice ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAlt ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAltPacks\r\n        ) {\r\n          if (variant.file) {\r\n            this._primaryFile = variant.file;\r\n            return this._primaryFile;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this._defaultFile && (!this._defaultFile.isContentLoaded || this._defaultFile.content)) {\r\n      return this._defaultFile;\r\n    }\r\n\r\n    const variantKeys = Object.keys(this._variants);\r\n\r\n    variantKeys.sort(this.sortVariantsMostImportantFirst);\r\n\r\n    for (const variantName of variantKeys) {\r\n      if (variantName) {\r\n        const variant = this._variants[variantName];\r\n\r\n        if (variant.file) {\r\n          this._primaryFile = variant.file;\r\n          return this._primaryFile;\r\n        }\r\n      }\r\n    }\r\n\r\n    // as a last fallback, return an assumedly content-less default file\r\n    if (this._defaultFile) {\r\n      this._primaryFile = this._defaultFile;\r\n      return this._primaryFile;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  get defaultFolder() {\r\n    return this._defaultFolder;\r\n  }\r\n\r\n  set itemType(newItemType) {\r\n    this._data.itemType = newItemType;\r\n\r\n    this._onPropertyChanged.dispatch(this, \"itemType\");\r\n\r\n    this._project.notifyProjectItemChanged(this);\r\n  }\r\n\r\n  get isContentLoaded() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      if (!this.defaultFolder) {\r\n        return false;\r\n      }\r\n\r\n      if (!this.defaultFolder.isLoaded) {\r\n        return false;\r\n      }\r\n\r\n      if (this.itemType === ProjectItemType.worldFolder) {\r\n        if (!this.defaultFolder.manager || !(this.defaultFolder.manager instanceof MCWorld)) {\r\n          return false;\r\n        }\r\n\r\n        const world = this.defaultFolder.manager as MCWorld;\r\n\r\n        return world.isLoaded;\r\n      }\r\n\r\n      return true;\r\n    } else if (this.storageType === ProjectItemStorageType.singleFile) {\r\n      const itemFile = this.primaryFile;\r\n\r\n      if (!itemFile) {\r\n        return false;\r\n      }\r\n\r\n      if (!itemFile.isContentLoaded) {\r\n        return false;\r\n      }\r\n\r\n      if (this.isWorld) {\r\n        if (!itemFile.manager || !(itemFile.manager instanceof MCWorld)) {\r\n          return false;\r\n        }\r\n\r\n        const world = itemFile.manager as MCWorld;\r\n\r\n        return world.isLoaded;\r\n      }\r\n\r\n      return this._isFileContentProcessed;\r\n    }\r\n\r\n    Log.unexpectedContentState();\r\n\r\n    return false;\r\n  }\r\n\r\n  get tags() {\r\n    return this._data.tags;\r\n  }\r\n\r\n  async setFile(file: IFile) {\r\n    if (file !== this._defaultFile) {\r\n      this._defaultFile = file;\r\n\r\n      this._isFileContentProcessed = false;\r\n    }\r\n  }\r\n\r\n  get needsSave() {\r\n    if (\r\n      this._defaultFile === null &&\r\n      this.creationType === ProjectItemCreationType.generated &&\r\n      this.storageType === ProjectItemStorageType.singleFile\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    if (this._defaultFile === null) {\r\n      return false;\r\n    }\r\n\r\n    let val = this._defaultFile.needsSave;\r\n\r\n    if (!val) {\r\n      if (\r\n        this.isFileContainerStorageItem &&\r\n        this._defaultFile.fileContainerStorage &&\r\n        this._defaultFile.fileContainerStorage instanceof ZipStorage\r\n      ) {\r\n        val = (this._defaultFile.fileContainerStorage as ZipStorage).isContentUpdated;\r\n      }\r\n\r\n      if (!val) {\r\n        const jsFile = this.getJavaScriptLibTwin();\r\n\r\n        if (jsFile !== undefined) {\r\n          val = jsFile.needsSave;\r\n        }\r\n      }\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  updateProjectPath() {\r\n    if (this._project && this._project.projectFolder) {\r\n      if (this._defaultFile) {\r\n        this.projectPath = this._defaultFile.getFolderRelativePath(this._project.projectFolder);\r\n      } else if (this._defaultFolder) {\r\n        this.projectPath = this._defaultFolder.getFolderRelativePath(this._project.projectFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  async rename(newFileBaseName: string) {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    await this._project.ensureProjectFolder();\r\n\r\n    if (this._project.projectFolder === undefined || this._project.projectFolder === null) {\r\n      return;\r\n    }\r\n\r\n    if (this._defaultFile !== null) {\r\n      await this._defaultFile.moveTo(\r\n        this._defaultFile.parentFolder.storageRelativePath + newFileBaseName + \".\" + this._defaultFile.type\r\n      );\r\n\r\n      this._data.name = newFileBaseName + \".\" + this._defaultFile.type;\r\n\r\n      this.projectPath = this._defaultFile.getFolderRelativePath(this._project.projectFolder);\r\n      this.storageType = ProjectItemStorageType.singleFile;\r\n    } else {\r\n      this._data.name = newFileBaseName;\r\n    }\r\n\r\n    this._onPropertyChanged.dispatch(this, \"name\");\r\n\r\n    this._project.notifyProjectItemChanged(this);\r\n  }\r\n\r\n  async deleteItem() {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n    await ProjectItemRelations.deleteLinksFromParents(this);\r\n\r\n    if (this._defaultFile !== null) {\r\n      await this._defaultFile.deleteThisFile();\r\n    }\r\n\r\n    this._project.removeItem(this);\r\n  }\r\n\r\n  get imageUrl() {\r\n    if (this._imageUrlBase64Cache === null) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this._imageUrlBase64Cache) {\r\n      return this._imageUrlBase64Cache;\r\n    }\r\n\r\n    // Check for cached thumbnail (generated by worker for geometry models, etc.)\r\n    if (this._data.cachedThumbnail) {\r\n      this._imageUrlBase64Cache = this._data.cachedThumbnail;\r\n      return this._imageUrlBase64Cache;\r\n    }\r\n\r\n    if (this.itemType === ProjectItemType.worldFolder) {\r\n      if (this.defaultFolder) {\r\n        if (this.defaultFolder.manager instanceof MCWorld) {\r\n          const world = this.defaultFolder.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            this._imageUrlBase64Cache = \"data:image/jpg;base64, \" + world.imageBase64;\r\n\r\n            return this._imageUrlBase64Cache;\r\n          }\r\n        }\r\n      }\r\n    } else if (this.isWorld) {\r\n      const itemFile = this.primaryFile;\r\n\r\n      if (itemFile) {\r\n        if (itemFile.manager instanceof MCWorld) {\r\n          const world = itemFile.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            return \"data:image/jpg;base64, \" + world.imageBase64;\r\n          }\r\n        }\r\n      }\r\n    } else if (this.projectPath && ProjectItemUtilities.isImageType(this.itemType)) {\r\n      if (this.projectPath && this.projectPath.endsWith(\".tga\")) {\r\n        // TGA files need async conversion, handled elsewhere\r\n        this._imageUrlBase64Cache = null;\r\n      } else if (this._defaultFile && this._defaultFile.content && this._defaultFile.content instanceof Uint8Array) {\r\n        if (this._defaultFile.content.length > 10000) {\r\n          this._imageUrlBase64Cache = null;\r\n          return undefined;\r\n        }\r\n\r\n        // Determine the correct MIME type based on file extension\r\n        const ext = StorageUtilities.getTypeFromName(this.projectPath || \"\");\r\n        let mimeType = \"image/png\"; // Default to PNG\r\n        if (ext === \"jpg\" || ext === \"jpeg\") {\r\n          mimeType = \"image/jpeg\";\r\n        } else if (ext === \"gif\") {\r\n          mimeType = \"image/gif\";\r\n        } else if (ext === \"webp\") {\r\n          mimeType = \"image/webp\";\r\n        }\r\n\r\n        this._imageUrlBase64Cache =\r\n          \"data:\" + mimeType + \";base64,\" + Utilities.uint8ArrayToBase64(this._defaultFile.content);\r\n\r\n        return this._imageUrlBase64Cache;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get name() {\r\n    if (this.itemType === ProjectItemType.worldFolder) {\r\n      if (this.defaultFolder) {\r\n        if (this.defaultFolder.manager instanceof MCWorld) {\r\n          const world = this.defaultFolder.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            return world.name;\r\n          }\r\n        }\r\n      }\r\n    } else if (this.itemType === ProjectItemType.MCWorld || this.itemType === ProjectItemType.MCTemplate) {\r\n      const itemFile = this.primaryFile;\r\n\r\n      if (itemFile) {\r\n        if (itemFile.manager instanceof MCWorld) {\r\n          const world = itemFile.manager as MCWorld;\r\n\r\n          if (world.isLoaded) {\r\n            return world.name;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // for certain types of project items, the name of the file is critical\r\n    if (\r\n      this.projectPath &&\r\n      (this.itemType === ProjectItemType.js ||\r\n        this.itemType === ProjectItemType.ts ||\r\n        this.itemType === ProjectItemType.testJs ||\r\n        this.itemType === ProjectItemType.structure)\r\n    ) {\r\n      return StorageUtilities.getLeafName(this.projectPath);\r\n    }\r\n\r\n    if (this._data.name !== undefined) {\r\n      return this._data.name;\r\n    }\r\n\r\n    if (this.projectPath) {\r\n      return StorageUtilities.getLeafName(this.projectPath);\r\n    }\r\n\r\n    return \"untitled\";\r\n  }\r\n\r\n  async loadFolder() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      if (\r\n        this._defaultFolder === null &&\r\n        this.projectPath !== null &&\r\n        this.projectPath !== undefined &&\r\n        this.projectPath.startsWith(\"/\") &&\r\n        this._project.projectFolder !== null &&\r\n        this._project.projectFolder !== undefined\r\n      ) {\r\n        const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n        if (prefixPaths.length > 1) {\r\n          let folderToLoadFrom: IFolder | undefined = this._project.projectFolder;\r\n\r\n          for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n            if (folderToLoadFrom) {\r\n              const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n              if (!zipFile.isContentLoaded) {\r\n                await zipFile.loadContent();\r\n              }\r\n\r\n              if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n                if (!zipFile.fileContainerStorage) {\r\n                  const zipStorage = new ZipStorage();\r\n\r\n                  zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                  await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                  zipStorage.containerFile = zipFile;\r\n                  zipFile.fileContainerStorage = zipStorage;\r\n                }\r\n\r\n                folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n              } else {\r\n                folderToLoadFrom = undefined;\r\n              }\r\n            }\r\n          }\r\n\r\n          if (folderToLoadFrom) {\r\n            this._defaultFolder = await folderToLoadFrom.ensureFolderFromRelativePath(\r\n              prefixPaths[prefixPaths.length - 1]\r\n            );\r\n          } else {\r\n            // Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.storagePath + \"'\");\r\n            return null;\r\n          }\r\n        } else {\r\n          this._defaultFolder = await this._project.projectFolder.ensureFolderFromRelativePath(this.projectPath);\r\n        }\r\n\r\n        await this._defaultFolder.load();\r\n\r\n        this._onFolderRetrieved.dispatch(this, this._defaultFolder);\r\n\r\n        if (this.itemType === ProjectItemType.worldFolder) {\r\n          const mcworld = await MCWorld.ensureMCWorldOnFolder(\r\n            this._defaultFolder,\r\n            this._project,\r\n            this._handleMCWorldLoaded\r\n          );\r\n\r\n          if (mcworld) {\r\n            this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n            if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n              this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n            } else {\r\n              this.errorStatus = ProjectItemErrorStatus.none;\r\n            }\r\n          }\r\n        } else {\r\n          this._fireLoadedEvent();\r\n        }\r\n      }\r\n\r\n      return this._defaultFolder;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  _handleMCWorldLoaded(world: MCWorld, worldA: MCWorld) {\r\n    this._fireLoadedEvent();\r\n  }\r\n\r\n  _fireLoadedEvent() {\r\n    if (this._onLoaded && this.isContentLoaded) {\r\n      this._onLoaded.dispatch(this, this);\r\n    }\r\n  }\r\n\r\n  invalidateContentProcessedState() {\r\n    if (this._defaultFile) {\r\n      this._defaultFile.manager = undefined;\r\n    }\r\n\r\n    for (const varLabel in this._variants) {\r\n      const variant = this._variants[varLabel];\r\n\r\n      if (variant.file) {\r\n        variant.file.manager = undefined;\r\n      }\r\n    }\r\n\r\n    this._isFileContentProcessed = false;\r\n  }\r\n\r\n  async getManager() {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    if (this.storageType === ProjectItemStorageType.singleFile && this._defaultFile) {\r\n      return this._defaultFile.manager;\r\n    }\r\n\r\n    if (this.storageType === ProjectItemStorageType.folder && this._defaultFolder) {\r\n      return this._defaultFolder.manager;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async ensureStorage() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      await this.loadFolder();\r\n    } else if (this.storageType === ProjectItemStorageType.singleFile) {\r\n      await this.ensureFileStorage();\r\n    }\r\n  }\r\n\r\n  get isStorageEnsured() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      return !!this._defaultFolder;\r\n    }\r\n    return !!this.primaryFile;\r\n  }\r\n\r\n  async loadContentDirect() {\r\n    if (this.storageType === ProjectItemStorageType.folder) {\r\n      await this.loadFolder();\r\n    } else if (this.storageType === ProjectItemStorageType.singleFile) {\r\n      await this.loadFileContent();\r\n    }\r\n  }\r\n\r\n  async ensureFileStorage() {\r\n    if (\r\n      this.storageType === ProjectItemStorageType.singleFile &&\r\n      this._defaultFile === null &&\r\n      this.projectPath !== null &&\r\n      this.projectPath !== undefined &&\r\n      this.projectPath.startsWith(\"/\") &&\r\n      this._project.projectFolder !== null &&\r\n      this._project.projectFolder !== undefined\r\n    ) {\r\n      const prefixPaths = this.projectPath.split(\"#\");\r\n\r\n      if (prefixPaths.length > 1) {\r\n        let folderToLoadFrom: IFolder | undefined = this._project.projectFolder;\r\n\r\n        for (let i = 0; i < prefixPaths.length - 1; i++) {\r\n          if (folderToLoadFrom) {\r\n            const zipFile: IFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[i]);\r\n\r\n            if (!zipFile.isContentLoaded) {\r\n              await zipFile.loadContent();\r\n            }\r\n\r\n            if (zipFile.content && zipFile.content instanceof Uint8Array) {\r\n              if (!zipFile.fileContainerStorage) {\r\n                const zipStorage = new ZipStorage();\r\n\r\n                zipStorage.storagePath = zipFile.storageRelativePath + \"#\";\r\n\r\n                await zipStorage.loadFromUint8Array(zipFile.content, zipFile.name);\r\n\r\n                zipStorage.containerFile = zipFile;\r\n                zipFile.fileContainerStorage = zipStorage;\r\n              }\r\n\r\n              folderToLoadFrom = zipFile.fileContainerStorage.rootFolder;\r\n            } else {\r\n              folderToLoadFrom = undefined;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (folderToLoadFrom) {\r\n          this._defaultFile = await folderToLoadFrom.ensureFileFromRelativePath(prefixPaths[prefixPaths.length - 1]);\r\n\r\n          this._isFileContentProcessed = false;\r\n        } else {\r\n          Log.debugAlert(\"Unable to parse a containerized file path of '\" + this.projectPath + \"'\");\r\n          return null;\r\n        }\r\n      } else {\r\n        this._defaultFile = await this._project.projectFolder.ensureFileFromRelativePath(this.projectPath);\r\n\r\n        this._isFileContentProcessed = false;\r\n      }\r\n    }\r\n\r\n    return this._defaultFile;\r\n  }\r\n\r\n  async loadFileContent() {\r\n    if (this._isFileContentProcessed) {\r\n      return this._defaultFile;\r\n    }\r\n\r\n    if (!this._defaultFile) {\r\n      await this.ensureFileStorage();\r\n    }\r\n\r\n    const variants = this._getVariantList();\r\n\r\n    for (const variant of variants) {\r\n      await variant.ensureAndLoadFileStorage();\r\n    }\r\n\r\n    if (this._defaultFile) {\r\n      await this.loadFileStorage();\r\n    } else if (variants.length > 0 && !this._isFileContentProcessed) {\r\n      // For variant-only items (no default file), mark as processed after\r\n      // all variant files have been loaded. Without this, isContentLoaded\r\n      // stays false forever because loadFileStorage() requires _defaultFile.\r\n      this._isFileContentProcessed = true;\r\n      this._fireLoadedEvent();\r\n    }\r\n\r\n    return this._defaultFile;\r\n  }\r\n\r\n  async loadFileStorage() {\r\n    if (!this._isFileContentProcessed && this._defaultFile) {\r\n      if (this._data.creationType === ProjectItemCreationType.generated) {\r\n        await ProjectAutogeneration.updateItemAutogeneration(this, true);\r\n      } else {\r\n        if (!this._defaultFile.isContentLoaded) {\r\n          await this._defaultFile.loadContent();\r\n        }\r\n      }\r\n\r\n      await ProjectAutogeneration.updateItemAutogeneratedSideFiles(this);\r\n\r\n      this._isFileContentProcessed = true;\r\n\r\n      this._onFileRetrieved.dispatch(this, this._defaultFile);\r\n\r\n      if (this.itemType === ProjectItemType.MCWorld || this.itemType === ProjectItemType.MCTemplate) {\r\n        const mcworld = await MCWorld.ensureOnFile(this._defaultFile, this._project, this._handleMCWorldLoaded);\r\n\r\n        if (mcworld) {\r\n          this.errorMessage = mcworld.storageErrorMessage;\r\n\r\n          if (mcworld.storageErrorStatus === StorageErrorStatus.unprocessable) {\r\n            this.errorStatus = ProjectItemErrorStatus.unprocessable;\r\n          } else {\r\n            this.errorStatus = ProjectItemErrorStatus.none;\r\n          }\r\n        }\r\n      } else if (this.itemType === ProjectItemType.entityTypeBehavior) {\r\n        await EntityTypeDefinition.ensureOnFile(this._defaultFile);\r\n\r\n        this._fireLoadedEvent();\r\n      } else {\r\n        this._fireLoadedEvent();\r\n      }\r\n    }\r\n  }\r\n\r\n  async getJsonObject(): Promise<object | undefined> {\r\n    let strContent = await this.getStringContent();\r\n\r\n    if (!strContent) {\r\n      return undefined;\r\n    }\r\n\r\n    let obj = undefined;\r\n\r\n    try {\r\n      strContent = Utilities.fixJsonContent(strContent);\r\n      obj = JSON.parse(strContent);\r\n    } catch (e) {\r\n      Log.debug(\"Could not parse content '\" + strContent + \"': \" + e, this.project.name);\r\n    }\r\n\r\n    return obj;\r\n  }\r\n\r\n  async getStringContent(): Promise<string | undefined> {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    const pf = this.primaryFile;\r\n\r\n    if (!pf) {\r\n      return undefined;\r\n    }\r\n\r\n    if (!pf.isContentLoaded) {\r\n      await pf.loadContent();\r\n    }\r\n\r\n    if (pf.content instanceof Uint8Array || pf.content === null) {\r\n      return undefined;\r\n    }\r\n\r\n    return pf.content;\r\n  }\r\n\r\n  async getContentAsJson(): Promise<any | null> {\r\n    const file = await this.loadFileContent();\r\n    return file && (await StorageUtilities.getJsonObject(file));\r\n  }\r\n\r\n  async loadContent() {\r\n    if (this.isContentLoaded) {\r\n      return true;\r\n    }\r\n\r\n    if (this._isLoading) {\r\n      const pendingLoad = this._pendingLoadRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      return true;\r\n    } else {\r\n      this._isLoading = true;\r\n\r\n      await this.loadContentDirect();\r\n\r\n      this._isLoading = false;\r\n\r\n      const pendingLoad = this._pendingLoadRequests;\r\n      this._pendingLoadRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }\r\n\r\n  async prepareToSave() {\r\n    if (!this.isContentLoaded) {\r\n      await this.loadContent();\r\n    }\r\n\r\n    await ProjectAutogeneration.updateItemAutogeneration(this);\r\n    await ProjectAutogeneration.updateItemAutogeneratedSideFiles(this);\r\n\r\n    if (\r\n      !this.isInFileContainer &&\r\n      this.isFileContainerStorageItem &&\r\n      this.primaryFile &&\r\n      this.primaryFile.fileContainerStorage &&\r\n      this.primaryFile.fileContainerStorage instanceof ZipStorage\r\n    ) {\r\n      const zs = this.primaryFile.fileContainerStorage as ZipStorage;\r\n\r\n      if (zs.isContentUpdated && (zs.errorStatus === undefined || zs.errorStatus === StorageErrorStatus.none)) {\r\n        const op = await this._project.creatorTools.notifyOperationStarted(\r\n          \"Zipping file '\" + this.primaryFile.storageRelativePath + \"'...\"\r\n        );\r\n        const bytes = await zs.generateUint8ArrayAsync();\r\n        await this._project.creatorTools.notifyOperationEnded(\r\n          op,\r\n          \"Done zipping file '\" + this.primaryFile.storageRelativePath + \"'.\"\r\n        );\r\n\r\n        this.primaryFile.setContent(bytes, FileUpdateType.versionlessEdit);\r\n      }\r\n    }\r\n  }\r\n\r\n  getJavaScriptLibTwin() {\r\n    if (!this._defaultFile) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.itemType === ProjectItemType.ts) {\r\n      const libScriptsFolder = this.project.getLibScriptsFolder();\r\n\r\n      if (!libScriptsFolder) {\r\n        return undefined;\r\n      }\r\n\r\n      const jsTwinName = StorageUtilities.canonicalizeName(\r\n        StorageUtilities.getBaseFromName(this._defaultFile.name) + \".js\"\r\n      );\r\n\r\n      return libScriptsFolder.ensureFile(jsTwinName);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getFunctionTwin() {\r\n    if (!this._defaultFile) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.itemType === ProjectItemType.actionSet) {\r\n      const functionTwinName = StorageUtilities.canonicalizeName(\r\n        StorageUtilities.getBaseFromName(this._defaultFile.name) + \".mcfunction\"\r\n      );\r\n\r\n      let functionFolder = this._defaultFile.parentFolder;\r\n\r\n      if (functionFolder.name === \"scripts\" && functionFolder.parentFolder) {\r\n        functionFolder = functionFolder.parentFolder.ensureFolder(\"functions\");\r\n      }\r\n\r\n      return functionFolder.files[functionTwinName];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async saveContent() {\r\n    if (this._defaultFile) {\r\n      await this._defaultFile.saveContent();\r\n\r\n      // these next two are associated with action set\r\n      const jsFile = this.getJavaScriptLibTwin();\r\n\r\n      if (jsFile !== undefined && jsFile.needsSave) {\r\n        await jsFile.saveContent();\r\n      }\r\n\r\n      const functionFile = this.getFunctionTwin();\r\n\r\n      if (functionFile !== undefined && functionFile.needsSave) {\r\n        await functionFile.saveContent();\r\n      }\r\n    }\r\n  }\r\n\r\n  hasTag(name: string) {\r\n    return this.tags.includes(name);\r\n  }\r\n\r\n  ensureTag(name: string) {\r\n    if (this.hasTag(name)) {\r\n      return;\r\n    }\r\n\r\n    this.tags.push(name);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { Difficulty, GameType, Generator, PlayerPermissionsLevel } from \"./WorldLevelDat\";\r\n\r\nexport enum BackupType {\r\n  none,\r\n  startStopOnly,\r\n  every5Minutes,\r\n  every2Minutes,\r\n}\r\n\r\nexport interface IPackageReference {\r\n  name: string;\r\n  hash?: string;\r\n  behaviorPackReferences: { uuid: string; version: number[]; priority?: number }[];\r\n  resourcePackReferences: { uuid: string; version: number[]; priority?: number }[];\r\n}\r\n\r\nexport interface IWorldSettings {\r\n  gameType?: GameType;\r\n  generator?: Generator;\r\n  difficulty?: Difficulty;\r\n  maxPlayerCount?: number;\r\n  cheatsEnabled?: boolean;\r\n  permissionLevel?: PlayerPermissionsLevel;\r\n  playerPermissionLevel?: PlayerPermissionsLevel;\r\n  randomSeed?: string;\r\n  worldContentPath?: string;\r\n  name?: string;\r\n  commandsEnabled?: boolean; // same as 'cheats enabled'.\r\n  backupType?: BackupType;\r\n  useCustomSettings?: boolean;\r\n  betaApisExperiment?: boolean;\r\n  lastPlayed?: bigint;\r\n  deferredTechnicalPreviewExperiment?: boolean;\r\n  isEditor?: boolean;\r\n  deployCreatorToolsInfrastructure?: boolean;\r\n  worldTemplateReferences?: IPackageReference[];\r\n  packageReferences?: IPackageReference[];\r\n  onlineMode?: boolean;\r\n  emitServerTelemetry?: boolean;\r\n  enableDebugger?: boolean;\r\n  enableDebuggerStreaming?: boolean;\r\n  /**\r\n   * When true, the world is treated as transient/ephemeral:\r\n   * - World data is not backed up on reprovisioning\r\n   * - Each deployment starts with a fresh world (no leveldb copied)\r\n   * - Useful for development scenarios where you always want a clean slate\r\n   */\r\n  transientWorld?: boolean;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport { EventDispatcher, IEventHandler } from \"ste-events\";\r\n\r\nimport LocToken from \"./LocToken\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class Lang {\r\n  private _file?: IFile;\r\n  private _containerName?: string;\r\n  private _language?: string;\r\n  private _isLoaded: boolean = false;\r\n\r\n  public tokens: { [name: string]: LocToken } = {};\r\n\r\n  private _onLoaded = new EventDispatcher<Lang, Lang>();\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get file() {\r\n    return this._file;\r\n  }\r\n\r\n  public set file(newFile: IFile | undefined) {\r\n    this._file = newFile;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get containerName() {\r\n    return this._containerName;\r\n  }\r\n\r\n  public get language() {\r\n    return this._language;\r\n  }\r\n\r\n  public getLocKeys(): string[] {\r\n    return Object.keys(this.tokens);\r\n  }\r\n\r\n  static async ensureOnFile(file: IFile, loadHandler?: IEventHandler<Lang, Lang>) {\r\n    let lang: Lang | undefined;\r\n\r\n    if (file.manager === undefined) {\r\n      lang = new Lang();\r\n\r\n      lang.file = file;\r\n\r\n      file.manager = lang;\r\n    }\r\n\r\n    if (file.manager !== undefined && file.manager instanceof Lang) {\r\n      lang = file.manager as Lang;\r\n\r\n      if (!lang.isLoaded) {\r\n        if (loadHandler) {\r\n          lang.onLoaded.subscribe(loadHandler);\r\n        }\r\n\r\n        await lang.load();\r\n      }\r\n    }\r\n\r\n    return lang;\r\n  }\r\n\r\n  persist(): boolean {\r\n    if (this._file === undefined) {\r\n      return false;\r\n    }\r\n\r\n    let content = this._file.content;\r\n\r\n    if (content === undefined || content === null || content instanceof Uint8Array) {\r\n      content = \"\";\r\n    }\r\n\r\n    for (const tokName in this.tokens) {\r\n      const tok = this.tokens[tokName];\r\n\r\n      if (tok && tok.isModified) {\r\n        const tokStart: number = content.indexOf(tokName + \"=\");\r\n\r\n        if (tokStart >= 0) {\r\n          const tokEndR = content.indexOf(\"\\r\", tokStart + tokName.length + 1);\r\n          let tokEnd = content.indexOf(\"\\n\", tokStart + tokName.length + 1);\r\n\r\n          if (tokEndR > tokStart && tokEndR === tokEnd - 1) {\r\n            tokEnd = tokEndR;\r\n          }\r\n\r\n          if (tokEnd < 0) {\r\n            tokEnd = content.length;\r\n          }\r\n\r\n          content = content.substring(0, tokStart + tokName.length + 1) + tok.value + content.substring(tokEnd);\r\n        } else {\r\n          // Try to insert a new token into areas that are similarly named.\r\n          const periodInName = tokName.lastIndexOf(\".\");\r\n          let wasInserted = false;\r\n\r\n          if (periodInName >= 0) {\r\n            const findSimilar: number = content.lastIndexOf(\"\\n\" + tokName.substring(0, periodInName + 1));\r\n\r\n            if (findSimilar >= 0) {\r\n              content =\r\n                content.substring(0, findSimilar + 1) +\r\n                tokName +\r\n                \"=\" +\r\n                tok.value +\r\n                \"\\n\" +\r\n                content.substring(findSimilar + 1);\r\n              wasInserted = true;\r\n            }\r\n          }\r\n\r\n          if (!wasInserted) {\r\n            content += \"\\n\" + tokName + \"=\" + tok.value;\r\n          }\r\n        }\r\n\r\n        tok.isModified = false;\r\n      }\r\n    }\r\n\r\n    return this._file.setContent(content);\r\n  }\r\n\r\n  async save() {\r\n    if (this._file === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this.persist()) {\r\n      await this._file.saveContent(false);\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this._file === undefined || this._isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this._file.isContentLoaded) {\r\n      await this._file.loadContent();\r\n    }\r\n\r\n    if (this._file.content === null || this._file.content instanceof Uint8Array) {\r\n      this._isLoaded = true;\r\n      this._onLoaded.dispatch(this, this);\r\n      return;\r\n    }\r\n\r\n    const content = this._file.content;\r\n\r\n    this._language = StorageUtilities.getBaseFromName(this._file.name);\r\n    let dir = this._file.parentFolder;\r\n\r\n    if (dir) {\r\n      if (dir.name === \"texts\" && dir.parentFolder) {\r\n        dir = dir.parentFolder;\r\n      }\r\n\r\n      if (dir.name === \"\" && !dir.parentFolder && (dir.storage as ZipStorage).name) {\r\n        this._containerName = (dir.storage as ZipStorage).name;\r\n      } else {\r\n        this._containerName = dir.name;\r\n      }\r\n    }\r\n\r\n    const lines = content.split(\"\\n\");\r\n\r\n    for (let line of lines) {\r\n      line = line.trim();\r\n      const lastEqual = line.indexOf(\"=\");\r\n\r\n      if (lastEqual > 0 && lastEqual < line.length - 1) {\r\n        const tokenName = line.substring(0, lastEqual);\r\n        let tokenVal = line.substring(lastEqual + 1);\r\n\r\n        let comment = undefined;\r\n        let lastHash = tokenVal.indexOf(\"#\");\r\n\r\n        if (lastHash >= 0) {\r\n          comment = tokenVal.substring(lastHash + 1);\r\n          tokenVal = tokenVal.substring(0, lastHash).trim();\r\n        }\r\n\r\n        if (Utilities.isUsableAsObjectKey(tokenName)) {\r\n          this.tokens[tokenName] = {\r\n            value: tokenVal,\r\n            comment: comment,\r\n            isModified: false,\r\n          };\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { ProjectItemType } from \"../app/IProjectItemData\";\r\nimport Project from \"../app/Project\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Log from \"../core/Log\";\r\nimport Lang from \"./Lang\";\r\nimport LocToken from \"./LocToken\";\r\n\r\nexport default class LocManager {\r\n  private _project: Project;\r\n  private _isLoaded: boolean;\r\n  private _languages: { [language: string]: Lang[] } = {};\r\n\r\n  public tokens: { [name: string]: { [locale: string]: { [packContainer: string]: LocToken } } } = {};\r\n\r\n  constructor(project: Project) {\r\n    this._project = project;\r\n    this._isLoaded = false;\r\n  }\r\n\r\n  async getTokenValue(tokenName: string) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    return this.getTokenValueOrDefault(tokenName);\r\n  }\r\n\r\n  getAllTokenKeys() {\r\n    return Object.keys(this.tokens);\r\n  }\r\n\r\n  getAllLanguages(): Lang[] {\r\n    let langs: Lang[] = [];\r\n\r\n    for (const langKey in this._languages) {\r\n      langs.push(...this._languages[langKey]);\r\n    }\r\n\r\n    return langs;\r\n  }\r\n\r\n  static canonicalizeLanguageKey(locKey: string) {\r\n    return locKey.toLowerCase().trim();\r\n  }\r\n\r\n  getEnUsLang(): Lang[] | undefined {\r\n    const primary = this._languages[\"en_us\"];\r\n\r\n    Log.assert(!!primary, \"No en-us language found.\");\r\n\r\n    return primary;\r\n  }\r\n\r\n  getNonEnUsLangs(): Lang[] {\r\n    let langs: Lang[] = [];\r\n\r\n    for (const langKey in this._languages) {\r\n      if (LocManager.canonicalizeLanguageKey(langKey) !== \"en_us\") {\r\n        langs.push(...this._languages[langKey]);\r\n      }\r\n    }\r\n\r\n    return langs;\r\n  }\r\n\r\n  getExpandedValue(tokenName: string): string {\r\n    if (!this._isLoaded) {\r\n      return tokenName;\r\n    }\r\n\r\n    const tok = this.getToken(tokenName);\r\n\r\n    if (!tok) {\r\n      return tokenName;\r\n    }\r\n\r\n    return tok.value + \" - (\" + tokenName + \")\";\r\n  }\r\n\r\n  getTokenValueOrDefault(tokenName: string): string {\r\n    if (!this._isLoaded) {\r\n      return tokenName;\r\n    }\r\n\r\n    const tok = this.getToken(tokenName);\r\n\r\n    if (!tok) {\r\n      return tokenName;\r\n    }\r\n\r\n    return tok.value;\r\n  }\r\n\r\n  getToken(tokenName: string, locale?: string, packContainer?: string): LocToken | undefined {\r\n    const tokenSets = this.tokens[tokenName];\r\n\r\n    if (tokenSets) {\r\n      if (!locale) {\r\n        locale = \"en_US\";\r\n      }\r\n\r\n      const tokenSetByLocale = tokenSets[LocManager.canonicalizeLanguageKey(locale)];\r\n\r\n      if (tokenSetByLocale) {\r\n        if (packContainer) {\r\n          return tokenSetByLocale[packContainer];\r\n        }\r\n\r\n        // return the first available token\r\n        for (const containerName in tokenSetByLocale) {\r\n          return tokenSetByLocale[containerName];\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async load(force?: boolean) {\r\n    if (this._isLoaded && !force) {\r\n      return;\r\n    }\r\n\r\n    await this._project.ensureLoadedProjectFolder();\r\n\r\n    this.tokens = {};\r\n\r\n    const itemsCopy = this._project.getItemsCopy();\r\n\r\n    for (const pi of itemsCopy) {\r\n      if (pi.itemType === ProjectItemType.lang) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          const lang = await Lang.ensureOnFile(pi.primaryFile);\r\n\r\n          if (lang) {\r\n            await lang.load();\r\n\r\n            if (lang.language && lang.containerName !== undefined && Utilities.isUsableAsObjectKey(lang.language)) {\r\n              const language = LocManager.canonicalizeLanguageKey(lang.language);\r\n\r\n              if (!this._languages[language]) {\r\n                this._languages[language] = [];\r\n              }\r\n\r\n              this._languages[language].push(lang);\r\n\r\n              for (const tokenName in lang.tokens) {\r\n                if (Utilities.isUsableAsObjectKey(tokenName)) {\r\n                  if (this.tokens[tokenName] === undefined) {\r\n                    this.tokens[tokenName] = {};\r\n                  }\r\n\r\n                  if (Utilities.isUsableAsObjectKey(lang.containerName)) {\r\n                    if (this.tokens[tokenName][language] === undefined) {\r\n                      this.tokens[tokenName][language] = {};\r\n                    }\r\n\r\n                    this.tokens[tokenName][language][lang.containerName] = lang.tokens[tokenName];\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this._isLoaded = true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Stub telemetry service for non-vscweb builds\r\n * All methods are no-ops to ensure telemetry is disabled\r\n */\r\n\r\nimport type {\r\n  TelemetryEventName,\r\n  TelemetryPropertyKey,\r\n  TelemetryMeasurementKey,\r\n  TelemetrySeverityLevel,\r\n} from \"./TelemetryConstants\";\r\n\r\nexport interface TelemetryEvent {\r\n  name: TelemetryEventName;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nexport interface TelemetryException {\r\n  exception: Error;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  severityLevel?: TelemetrySeverityLevel;\r\n}\r\n\r\nexport interface TelemetryPageView {\r\n  name: string;\r\n  uri?: string;\r\n  properties?: Partial<Record<TelemetryPropertyKey, any>>;\r\n  measurements?: Partial<Record<TelemetryMeasurementKey, number>>;\r\n}\r\n\r\nclass TelemetryStubService {\r\n  public setActiveProjectCount(_count: number): void {}\r\n  public isEnabled(): boolean {\r\n    return false;\r\n  }\r\n  public trackEvent(_event: TelemetryEvent): void {}\r\n  public trackPageView(_pageView: TelemetryPageView): void {}\r\n  public trackException(_exception: TelemetryException): void {}\r\n  public trackMetric(\r\n    _name: TelemetryMeasurementKey,\r\n    _value: number,\r\n    _properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {}\r\n  public trackTrace(\r\n    _message: string,\r\n    _severityLevel?: TelemetrySeverityLevel,\r\n    _properties?: Partial<Record<TelemetryPropertyKey, any>>\r\n  ): void {}\r\n  public flush(): void {}\r\n  public setAuthenticatedUserContext(_authenticatedUserId: string, _accountId?: string): void {}\r\n  public clearAuthenticatedUserContext(): void {}\r\n}\r\n\r\nexport default new TelemetryStubService();\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Project from \"./Project\";\r\n\r\nexport default class ProjectDeploySync {\r\n  private project: Project;\r\n  private folder: IFolder;\r\n  public constructor(project: Project, folder: IFolder) {\r\n    this.project = project;\r\n    this.folder = folder;\r\n  }\r\n\r\n  async fullIngestIntoProject() {\r\n    if (!this.project.projectFolder) {\r\n      return;\r\n    }\r\n\r\n    await StorageUtilities.syncFolderTo(this.folder, this.project.projectFolder, true, true, false);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { IAnnotatedValue } from \"../core/AnnotatedValue\";\r\nimport { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport ISimpleReference from \"../dataform/ISimpleReference\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport VanillaProjectManager from \"../minecraft/VanillaProjectManager\";\r\nimport Database from \"../minecraft/Database\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\n\r\nexport default class LookupUtilities {\r\n  static blockTypeRefs: ISimpleReference[] | undefined = undefined;\r\n  static entityTypeRefs: ISimpleReference[] | undefined = undefined;\r\n  static itemTypeRefs: ISimpleReference[] | undefined = undefined;\r\n  static soundDefRefs: ISimpleReference[] | undefined = undefined;\r\n  static terrainTextureRefs: ISimpleReference[] | undefined = undefined;\r\n  static itemTextureRefs: ISimpleReference[] | undefined = undefined;\r\n\r\n  static async getLookup(lookupId: string): Promise<ISimpleReference[] | undefined> {\r\n    switch (lookupId) {\r\n      case \"blockType\":\r\n        return await this.getBlockTypeReferences();\r\n\r\n      case \"entityType\":\r\n        return await this.getEntityTypeReferences();\r\n\r\n      case \"itemType\":\r\n        return await this.getItemTypeReferences();\r\n\r\n      case \"soundDefinition\":\r\n        return await this.getSoundDefinitionReferences();\r\n\r\n      case \"terrainTexture\":\r\n        return await this.getTerrainTextureReferences();\r\n\r\n      case \"entityTypeEvents\":\r\n        break;\r\n\r\n      case \"difficulty\":\r\n        break;\r\n\r\n      case \"damageCause\":\r\n        break;\r\n\r\n      case \"lootTable\":\r\n        break;\r\n\r\n      case \"entityTypePlusVariants\":\r\n        break;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getSoundDefinitionReferences() {\r\n    if (this.soundDefRefs) {\r\n      return this.soundDefRefs;\r\n    }\r\n\r\n    const soundData = await VanillaProjectManager.getSoundDefinitionCatalog();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (soundData) {\r\n      const soundSets = soundData.getSoundDefinitionSetNameList();\r\n\r\n      if (soundSets) {\r\n        for (const soundSet of soundSets) {\r\n          refs.push({\r\n            id: soundSet,\r\n            title: Utilities.humanifyMinecraftName(soundSet),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.soundDefRefs = refs;\r\n\r\n    return this.soundDefRefs;\r\n  }\r\n\r\n  static async getItemTextureReferences() {\r\n    if (this.itemTextureRefs) {\r\n      return this.itemTextureRefs;\r\n    }\r\n\r\n    const itemData = await VanillaProjectManager.getItemTexturesCatalog();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (itemData) {\r\n      const textureRefs = itemData.getTextureReferences();\r\n\r\n      if (textureRefs) {\r\n        for (const textureRef of textureRefs) {\r\n          refs.push({\r\n            id: textureRef,\r\n            title: Utilities.humanifyMinecraftName(textureRef),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.itemTextureRefs = refs;\r\n\r\n    return this.itemTextureRefs;\r\n  }\r\n\r\n  static async getTerrainTextureReferences() {\r\n    if (this.terrainTextureRefs) {\r\n      return this.terrainTextureRefs;\r\n    }\r\n\r\n    const terrainData = await VanillaProjectManager.getTerrainTexturesCatalog();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (terrainData) {\r\n      const textureRefs = terrainData.getTextureReferences();\r\n\r\n      if (textureRefs) {\r\n        for (const textureRef of textureRefs) {\r\n          refs.push({\r\n            id: textureRef,\r\n            title: Utilities.humanifyMinecraftName(textureRef),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.terrainTextureRefs = refs;\r\n\r\n    return this.terrainTextureRefs;\r\n  }\r\n\r\n  static async getBlockTypeReferences() {\r\n    if (this.blockTypeRefs) {\r\n      return this.blockTypeRefs;\r\n    }\r\n\r\n    const blockData = await Database.getBlocksMetadata();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (blockData && blockData.data_items) {\r\n      for (const dataItem of blockData.data_items) {\r\n        if (dataItem.name && MinecraftUtilities.isBedrockItem(dataItem.name)) {\r\n          const iconImage = MinecraftUtilities.getBlockDefaultTexturePath(dataItem.name);\r\n\r\n          refs.push({\r\n            id: dataItem.name,\r\n            title: Utilities.humanifyMinecraftName(dataItem.name),\r\n            iconImage: iconImage ? \"/res/latest/van/serve/resource_pack/\" + iconImage + \".png\" : undefined,\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    this.blockTypeRefs = refs;\r\n\r\n    return this.blockTypeRefs;\r\n  }\r\n\r\n  static async getEntityTypeReferences() {\r\n    if (this.entityTypeRefs) {\r\n      return this.entityTypeRefs;\r\n    }\r\n\r\n    const entitiesData = await Database.getEntitiesMetadata();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (entitiesData && entitiesData.data_items) {\r\n      for (const dataItem of entitiesData.data_items) {\r\n        if (dataItem.name && MinecraftUtilities.isBedrockItem(dataItem.name)) {\r\n          refs.push({\r\n            id: dataItem.name,\r\n            title: Utilities.humanifyMinecraftName(dataItem.name),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    LookupUtilities.entityTypeRefs = refs;\r\n\r\n    return LookupUtilities.entityTypeRefs;\r\n  }\r\n\r\n  static async getItemTypeReferences() {\r\n    if (this.itemTypeRefs) {\r\n      return this.itemTypeRefs;\r\n    }\r\n\r\n    const itemsData = await Database.getItemsMetadata();\r\n\r\n    const refs: ISimpleReference[] = [];\r\n\r\n    if (itemsData && itemsData.data_items) {\r\n      for (const dataItem of itemsData.data_items) {\r\n        if (dataItem.name && MinecraftUtilities.isBedrockItem(dataItem.name)) {\r\n          refs.push({\r\n            id: dataItem.name,\r\n            title: Utilities.humanifyMinecraftName(dataItem.name),\r\n          });\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(refs);\r\n\r\n    LookupUtilities.itemTypeRefs = refs;\r\n\r\n    return LookupUtilities.itemTypeRefs;\r\n  }\r\n\r\n  static appendReferences(core: ISimpleReference[], references: ISimpleReference[] | undefined) {\r\n    if (references === undefined) {\r\n      return;\r\n    }\r\n\r\n    for (const ref of references) {\r\n      let foundRef = false;\r\n\r\n      for (const targetRef of core) {\r\n        if (targetRef.id === ref.id) {\r\n          foundRef = true;\r\n        }\r\n      }\r\n\r\n      if (!foundRef) {\r\n        core.push(ref);\r\n      }\r\n    }\r\n  }\r\n\r\n  static sortReferences(references: ISimpleReference[]) {\r\n    references.sort((a: ISimpleReference, b: ISimpleReference) => {\r\n      if (a.title && b.title) {\r\n        return a.title.localeCompare(b.title);\r\n      }\r\n\r\n      if (a.id && b.id) {\r\n        return Utilities.staticCompare(a.id.toString(), b.id.toString());\r\n      }\r\n\r\n      return 0;\r\n    });\r\n  }\r\n\r\n  static getReferencesFromAnnotatedValues(\r\n    paths: { [name: string]: IAnnotatedValue[] } | undefined,\r\n    annotationCategory?: AnnotationCategory,\r\n    description?: string,\r\n    startsWithFilter?: string\r\n  ) {\r\n    if (!paths) {\r\n      return undefined;\r\n    }\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    for (let path in paths) {\r\n      const val = paths[path];\r\n\r\n      if (path && val && (!startsWithFilter || path.startsWith(startsWithFilter))) {\r\n        if (startsWithFilter) {\r\n          path = path.substring(startsWithFilter.length);\r\n        }\r\n\r\n        for (const annotatedVal of val) {\r\n          if (annotatedVal.annotation === annotationCategory) {\r\n            simpleRefs.push({\r\n              id: path,\r\n              title: Utilities.humanifyMinecraftName(path),\r\n              description: description\r\n                ? Utilities.stringFormat(description, Utilities.humanifyMinecraftName(path))\r\n                : undefined,\r\n            });\r\n            continue;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (simpleRefs && simpleRefs.length === 0) {\r\n      return undefined;\r\n    }\r\n\r\n    return simpleRefs;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { AnnotationCategory } from \"../core/ContentIndex\";\r\nimport ISimpleReference from \"../dataform/ISimpleReference\";\r\nimport FeatureDefinition from \"../minecraft/FeatureDefinition\";\r\nimport { ProjectItemType } from \"./IProjectItemData\";\r\nimport LookupUtilities from \"./LookupUtilities\";\r\nimport Project from \"./Project\";\r\n\r\nexport default class ProjectLookupUtilities {\r\n  static referenceCache: { [key: string]: ISimpleReference[] | undefined } = {};\r\n  static cacheIteration: number = 0;\r\n\r\n  static async getLookup(project: Project, lookupId: string): Promise<ISimpleReference[] | undefined> {\r\n    switch (lookupId.toLowerCase()) {\r\n      case \"blocktype\":\r\n        return await this.getBlockTypeReferences(project);\r\n\r\n      case \"entitytype\":\r\n        return await this.getEntityTypeReferences(project);\r\n\r\n      case \"itemtype\":\r\n        return await this.getItemTypeReferences(project);\r\n\r\n      case \"entitytypeevents\":\r\n        break;\r\n\r\n      case \"difficulty\":\r\n        break;\r\n\r\n      case \"damagecause\":\r\n        break;\r\n\r\n      case \"loottable\":\r\n        break;\r\n\r\n      case \"sounddefinition\":\r\n        return await this.getSoundDefinitionReferences(project);\r\n\r\n      case \"itemtexture\":\r\n        return await this.getItemTextureReferences(project);\r\n\r\n      case \"terraintexture\":\r\n        return await this.getTerrainTextureReferences(project);\r\n\r\n      case \"feature\":\r\n        return await this.getFeatureReferences(project);\r\n\r\n      case \"entitytypeplusvariants\":\r\n        break;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static async getBlockTypeReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"blockType\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"blockType\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.blockTypeSource,\r\n      \"{0} block type from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"blockType\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"blockType\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getEntityTypeReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"entityType\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"entityType\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.entityTypeSource,\r\n      \"{0} entity type from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"entityType\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"entityType\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getItemTypeReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"itemType\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"itemType\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.itemTypeSource,\r\n      \"{0} item type from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"itemType\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"itemType\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getSoundDefinitionReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"soundDefinition\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"soundDefinition\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.blockTypeSource]),\r\n      AnnotationCategory.blockTypeSource,\r\n      \"{0} sound from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"soundDefinition\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"soundDefinition\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getTerrainTextureReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"terrainTexture\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"terrainTexture\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.terrainTextureSource]),\r\n      AnnotationCategory.terrainTextureSource,\r\n      \"{0} terrain texture from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"terrainTexture\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"terrainTexture\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getItemTextureReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (project.indevInfoSet.contentIndex.iteration !== ProjectLookupUtilities.cacheIteration) {\r\n      ProjectLookupUtilities.cacheIteration = project.indevInfoSet.contentIndex.iteration;\r\n      ProjectLookupUtilities.referenceCache = {};\r\n    }\r\n\r\n    if (ProjectLookupUtilities.referenceCache[\"itemTexture\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"itemTexture\"];\r\n    }\r\n\r\n    await project.ensureIndevInfoSetGenerated();\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    const refs = LookupUtilities.getReferencesFromAnnotatedValues(\r\n      project.indevInfoSet.contentIndex.getAll([AnnotationCategory.itemTextureSource]),\r\n      AnnotationCategory.itemTextureSource,\r\n      \"{0} item texture from \" + project.name\r\n    );\r\n\r\n    if (refs) {\r\n      LookupUtilities.sortReferences(refs);\r\n\r\n      simpleRefs = refs;\r\n    }\r\n\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"itemTexture\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"itemTexture\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n\r\n  static async getFeatureReferences(project: Project): Promise<ISimpleReference[] | undefined> {\r\n    if (ProjectLookupUtilities.referenceCache[\"feature\"]) {\r\n      return ProjectLookupUtilities.referenceCache[\"feature\"];\r\n    }\r\n\r\n    let simpleRefs: ISimpleReference[] = [];\r\n\r\n    // Get features directly from project items\r\n    const itemsCopy = project.getItemsCopy();\r\n\r\n    for (const item of itemsCopy) {\r\n      if (item.itemType === ProjectItemType.featureBehavior) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        if (item.primaryFile) {\r\n          const featureDef = await FeatureDefinition.ensureOnFile(item.primaryFile);\r\n\r\n          if (featureDef && featureDef.id) {\r\n            simpleRefs.push({\r\n              id: featureDef.id,\r\n              description: featureDef.id + \" feature from \" + project.name,\r\n            });\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    LookupUtilities.sortReferences(simpleRefs);\r\n\r\n    // Also append vanilla feature references\r\n    LookupUtilities.appendReferences(simpleRefs, await LookupUtilities.getLookup(\"feature\"));\r\n\r\n    ProjectLookupUtilities.referenceCache[\"feature\"] = simpleRefs;\r\n\r\n    return simpleRefs;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport { ProjectInfoSuite } from \"../info/IProjectInfoData\";\r\nimport { IRelationsResultData, ISerializableInfoItem } from \"../workers/IProjectWorkerMessage\";\r\n\r\n/**\r\n * Result of combined relations + info set processing in worker.\r\n */\r\nexport interface IProcessRelationsAndInfoSetWorkerResult {\r\n  relationsApplied: boolean;\r\n  infoItems?: ProjectInfoItem[];\r\n  thumbnails?: { [projectPath: string]: string };\r\n  thumbnailLinks?: { [projectPath: string]: string };\r\n}\r\n\r\n/**\r\n * Progress callback type for worker operations.\r\n */\r\nexport type WorkerProgressCallback = (message: string, percent?: number) => void;\r\n\r\n/**\r\n * Callback when relations calculation completes (streaming).\r\n */\r\nexport type RelationsCompleteCallback = (relationsData: IRelationsResultData) => void;\r\n\r\n/**\r\n * Callback when validation completes (streaming).\r\n * Can be async to allow processing like preloading forms.\r\n */\r\nexport type ValidationCompleteCallback = (infoItems: ISerializableInfoItem[]) => void | Promise<void>;\r\n\r\n/**\r\n * Callback when a batch of thumbnails completes (streaming).\r\n */\r\nexport type ThumbnailBatchCallback = (\r\n  thumbnails: { [projectPath: string]: string },\r\n  thumbnailLinks: { [projectPath: string]: string } | undefined,\r\n  completed: number,\r\n  total: number\r\n) => void;\r\n\r\n/**\r\n * Callback when all thumbnails are finished (streaming).\r\n */\r\nexport type ThumbnailsFinishedCallback = (cancelled: boolean, totalGenerated: number) => void;\r\n\r\n/**\r\n * Streaming callbacks for combined worker operations.\r\n * Results are delivered via these callbacks as they complete,\r\n * rather than waiting for all operations to finish.\r\n */\r\nexport interface IStreamingCallbacks {\r\n  /**\r\n   * Called when relations calculation completes.\r\n   * This is the first callback to fire - allows UI to unblock early.\r\n   */\r\n  onRelationsComplete?: RelationsCompleteCallback;\r\n\r\n  /**\r\n   * Called when validation completes.\r\n   * Contains all info items (errors, warnings, recommendations).\r\n   */\r\n  onValidationComplete?: ValidationCompleteCallback;\r\n\r\n  /**\r\n   * Called when a batch of thumbnails completes.\r\n   * Thumbnails are generated in batches (default 20 at a time) to avoid blocking.\r\n   * This callback is for internal tracking only - NOT shown in user-visible progress.\r\n   */\r\n  onThumbnailBatch?: ThumbnailBatchCallback;\r\n\r\n  /**\r\n   * Called when all thumbnails have finished (or were cancelled).\r\n   */\r\n  onThumbnailsFinished?: ThumbnailsFinishedCallback;\r\n}\r\n\r\n/**\r\n * Minimal project interface for worker manager operations.\r\n * This avoids circular dependencies with the full Project class.\r\n */\r\nexport interface IProjectForWorker {\r\n  readonly name: string;\r\n  readonly projectFolder: import(\"../storage/IFolder\").default | null;\r\n  getItemsCopy(): import(\"./ProjectItem\").default[];\r\n}\r\n\r\n/**\r\n * Interface for project worker manager implementations.\r\n * This abstracts the web worker functionality so that Project.ts doesn't\r\n * have a direct dependency on the workers folder.\r\n *\r\n * Architecture notes:\r\n * - Single persistent worker instance per app\r\n * - Worker caches the project to avoid re-hydration on subsequent requests\r\n * - Results are streamed back: relations -> validation -> thumbnails (low-priority)\r\n * - Project is disposed on switch (new project) or after idle timeout (5 min)\r\n */\r\nexport interface IProjectWorkerManager {\r\n  /**\r\n   * Whether web workers are supported in the current environment\r\n   */\r\n  readonly isSupported: boolean;\r\n\r\n  /**\r\n   * Generate info set in a web worker.\r\n   * @returns Array of ProjectInfoItem if successful, undefined to fall back to main thread\r\n   */\r\n  generateInfoSetInWorker(\r\n    project: IProjectForWorker,\r\n    suite: ProjectInfoSuite,\r\n    onProgress?: WorkerProgressCallback\r\n  ): Promise<ProjectInfoItem[] | undefined>;\r\n\r\n  /**\r\n   * Process item relations AND generate info set in a single worker operation.\r\n   * Uses streaming architecture - results are delivered via callbacks as they complete:\r\n   * 1. onRelationsComplete - called as soon as relations are calculated (unblocks waiters)\r\n   * 2. onValidationComplete - called after validation finishes\r\n   * 3. onThumbnailBatch - called as thumbnail batches complete (silently in background)\r\n   * 4. onThumbnailsFinished - called when all thumbnails are done\r\n   *\r\n   * @param project The project to process\r\n   * @param suite The validation suite to run\r\n   * @param callbacks Streaming callbacks for receiving results as they complete\r\n   * @param onProgress Optional progress callback (for user-visible progress)\r\n   * @returns Promise that resolves when validation is complete (thumbnails may still be generating)\r\n   */\r\n  processRelationsAndGenerateInfoSetInWorker(\r\n    project: IProjectForWorker,\r\n    suite: ProjectInfoSuite,\r\n    callbacks?: IStreamingCallbacks,\r\n    onProgress?: WorkerProgressCallback\r\n  ): Promise<IProcessRelationsAndInfoSetWorkerResult | undefined>;\r\n\r\n  /**\r\n   * Cancel pending thumbnail generation in the worker.\r\n   * Called when switching projects to stop background thumbnail work.\r\n   */\r\n  cancelPendingThumbnails(): void;\r\n\r\n  /**\r\n   * Dispose the cached project in the worker to free memory.\r\n   * Called when switching projects or on idle timeout.\r\n   */\r\n  disposeWorkerProject(): void;\r\n\r\n  /**\r\n   * Terminate the worker.\r\n   */\r\n  terminate(): void;\r\n}\r\n\r\n/**\r\n * Singleton holder for the project worker manager instance.\r\n * This allows ProjectWorkerManager to register itself when loaded,\r\n * without Project.ts needing to import it directly.\r\n */\r\nlet _registeredWorkerManager: IProjectWorkerManager | undefined;\r\n\r\n/**\r\n * Register a project worker manager implementation.\r\n * Called by ProjectWorkerManager when it's loaded.\r\n */\r\nexport function registerProjectWorkerManager(manager: IProjectWorkerManager): void {\r\n  _registeredWorkerManager = manager;\r\n}\r\n\r\n/**\r\n * Get the registered project worker manager, if available.\r\n * Returns undefined if no worker manager has been registered or workers aren't supported.\r\n */\r\nexport function getProjectWorkerManager(): IProjectWorkerManager | undefined {\r\n  return _registeredWorkerManager;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n * ==========================================================================================\r\n * PROJECT - CORE PROJECT MANAGEMENT NOTES\r\n * ==========================================================================================\r\n *\r\n * OVERVIEW:\r\n * ---------\r\n * Project is the central class for managing a Minecraft content project. It handles:\r\n * - Project structure (behavior packs, resource packs, worlds, scripts)\r\n * - Item discovery and inference from folder structure\r\n * - Pack management (BehaviorManifest, ResourceManifest)\r\n * - Validation integration via ProjectInfoSet\r\n * - Export/deployment coordination\r\n *\r\n * PROJECT STRUCTURE:\r\n * ------------------\r\n * A project typically contains:\r\n * - behaviorPacksContainer/ - Behavior pack folders\r\n * - resourcePacksContainer/ - Resource pack folders\r\n * - worldContainer/ - World folders\r\n * - docsContainer/ - Documentation\r\n * - defaultBehaviorPackFolder, defaultResourcePackFolder - Primary packs\r\n *\r\n * KEY METHOD: _inferProjectItemsFromFolder():\r\n * -------------------------------------------\r\n * This is the monster recursive function that scans a folder tree and creates\r\n * ProjectItem objects based on file type and location. Logic includes:\r\n * - Path-based type inference (items/ folder \u2192 itemTypeBehaviorJson)\r\n * - Extension-based inference (.mcfunction, .json, .ts)\r\n * - Manifest detection for pack identification\r\n * - World detection from level.dat\r\n *\r\n * PROJECTITEM RELATIONSHIP:\r\n * -------------------------\r\n * - Project contains ProjectItem[] in #items\r\n * - Items indexed by #itemsByProjectPath (canonicalized storage path)\r\n * - Items grouped by #itemsByType for quick type lookups\r\n * - Each ProjectItem has storagePath relative to project root\r\n * - Items link to IFile via file property, with .manager for type-specific logic\r\n *\r\n * PACK MANAGEMENT:\r\n * ----------------\r\n * - #packs: Pack[] - All discovered packs (behavior, resource, skin, world)\r\n * - Pack objects wrap manifest files and provide pack-level operations\r\n * - hasMultiplePacksOfSameType affects folder structure assumptions\r\n *\r\n * VARIANTS:\r\n * ---------\r\n * - variants: { [label]: ProjectVariant } - Alternative configurations\r\n * - Used for multi-target builds (different Minecraft versions, platforms)\r\n * - ProjectItemVariantCreateManager handles variant-specific item creation\r\n *\r\n * LOADING SEQUENCE FOR EXTERNAL USERS:\r\n * ------------------------------------\r\n * 1. new Project(creatorTools, folder, prefsFile) - Basic setup\r\n * 2. loadPreferencesAndFolder() - Basic loading from prefsFile JSON (isLoaded)\r\n * 3. inferProjectItemsFromFolder() - Create ProjectItems from files.\r\n *     This is a somewhat expensive operation, and only needs to be done on\r\n *     first instantiation on a folder, or if the folder/file set structure\r\n *     changes\r\n * 4. ensureInflate() - Load file contents and initialize managers (isInflated)\r\n *\r\n * OPTIONAL ADDITION THINGS YOU SHOULD DO:\r\n * ---------------------------------------\r\n *\r\n * The web app, for example, does these asynchronously after first load.\r\n * These operations can take minutes to run, depending on project size.\r\n *\r\n * processRelations() - Build cross-item dependency graph (best done async)\r\n *\r\n *\r\n * INTERNAL FUNCTIONS\r\n * ------------------\r\n * loadFolderStructure() - Discover folder hierarchy and rough mapping\r\n *\r\n * EVENTS:\r\n * -------\r\n * - onPropertyChanged: Project metadata changed\r\n * - onLoaded: Folder structure loaded\r\n * - onInflated: All items loaded\r\n * - onItemChanged/Added/Removed: Item list modifications\r\n * - onItemContentChanged: Item file content changed\r\n * - onNeedsSaveChanged: Dirty state changed\r\n *\r\n * WORLD SETTINGS:\r\n * ---------------\r\n * - worldSettings: IWorldSettings - Default world configuration\r\n * - editorWorldSettings: Settings for Editor API worlds\r\n * - ensureWorldSettings() / ensureEditorWorldSettings() - Lazy initialization\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - ProjectItem.ts: Individual item management\r\n * - ProjectUtilities.ts: Static helper methods (moved from Project)\r\n * - ProjectExporter.ts: Export/packaging logic\r\n * - ProjectInfoSet.ts: Validation integration\r\n * - Pack.ts: Pack-level operations\r\n * - ProjectItemInference.ts: Item type inference logic\r\n *\r\n * FOLDER CONTEXTS (FolderContext enum):\r\n * -------------------------------------\r\n * Used to identify folder purpose during inference:\r\n * - behaviorPack (1), resourcePack (2), skinPack (3)\r\n * - world (5), docs (4), typeDefs (6)\r\n * - distBuildFolder (7), vscodeFolder (8)\r\n * - mctoolsWorkingFolder (13), designPack (14)\r\n *\r\n * COMMON PATTERNS:\r\n * ----------------\r\n * - Get item: project.getItemByProjectPath(storagePath)\r\n * - Get items by type: project.getItemsByType(ProjectItemType.entityTypeBehaviorJson)\r\n * - Ensure folder: project.ensureDefaultBehaviorPackFolder()\r\n * - Save project: project.save()\r\n *\r\n * ==========================================================================================\r\n */\r\n\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport IProjectData, {\r\n  ProjectEditPreference,\r\n  ProjectRole,\r\n  ProjectScriptLanguage,\r\n  ProjectScriptVersion,\r\n} from \"./IProjectData\";\r\nimport { ProjectDataType, ProjectFocus } from \"./IProjectData\";\r\nimport ProjectItem, { IProjectItemContentUpdateEvent } from \"./ProjectItem\";\r\nimport IProjectItemData, { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from \"./IProjectItemData\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport DifferenceSet from \"../storage/DifferenceSet\";\r\nimport IProjectScriptState from \"./IProjectScriptState\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport IStorage, { IFileUpdateEvent, IFolderMove } from \"../storage/IStorage\";\r\nimport { GameType, Generator } from \"../minecraft/WorldLevelDat\";\r\nimport { BackupType } from \"../minecraft/IWorldSettings\";\r\nimport BehaviorManifestDefinition from \"../minecraft/BehaviorManifestDefinition\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport LocManager from \"../minecraft/LocManager\";\r\nimport ProjectInfoSet from \"../info/ProjectInfoSet\";\r\nimport ProjectInfoItem from \"../info/ProjectInfoItem\";\r\nimport ProjectUpdateRunner from \"../updates/ProjectUpdateRunner\";\r\nimport ProjectUpdateResult from \"../updates/ProjectUpdateResult\";\r\nimport InfoGeneratorTopicUtilities from \"../info/InfoGeneratorTopicUtilities\";\r\nimport GeneratorRegistrations from \"../info/registration/GeneratorRegistrations\";\r\n\r\nimport TelemetryImpl from \"../analytics/Telemetry\";\r\nimport TelemetryStub from \"../analytics/TelemetryStub\";\r\n\r\nlet telemetry = TelemetryStub;\r\n\r\n// @ts-ignore - ENABLE_ANALYTICS is injected by webpack and vite configs\r\nif (typeof ENABLE_ANALYTICS !== \"undefined\" && ENABLE_ANALYTICS === true) {\r\n  telemetry = TelemetryImpl;\r\n}\r\n\r\nimport { TelemetryEvents, TelemetryProperties } from \"../analytics/TelemetryConstants\";\r\nimport { StatusTopic, StatusType } from \"./Status\";\r\nimport { ProjectInfoSuite } from \"../info/IProjectInfoData\";\r\nimport Pack, { PackType } from \"../minecraft/Pack\";\r\nimport { IErrorable } from \"../core/IErrorable\";\r\nimport ProjectDeploySync from \"./ProjectDeploySync\";\r\nimport { CreatorToolsEditPreference, MinecraftTrack } from \"./ICreatorToolsData\";\r\nimport ProjectItemRelations from \"./ProjectItemRelations\";\r\nimport ResourceManifestDefinition from \"../minecraft/ResourceManifestDefinition\";\r\nimport ISimpleReference from \"../dataform/ISimpleReference\";\r\nimport ProjectLookupUtilities from \"./ProjectLookupUtilities\";\r\nimport ProjectVariant from \"./ProjectVariant\";\r\nimport { ProjectItemVariantType } from \"./IProjectItemVariant\";\r\nimport ProjectItemInference from \"./ProjectItemInference\";\r\nimport IVersionContent from \"../storage/IVersionContent\";\r\nimport { getProjectWorkerManager } from \"./IProjectWorkerManager\";\r\nimport { ScriptModuleInfoProvider } from \"../langcore/javascript/ScriptModuleInfo\";\r\n\r\nexport enum ProjectAutoDeploymentMode {\r\n  deployOnSave = 0,\r\n  noAutoDeployment = 1,\r\n}\r\n\r\nexport enum ProjectErrorState {\r\n  noError = 0,\r\n  projectFolderOrFileDoesNotExist = 1,\r\n  cabinetFileCouldNotBeProcessed = 2,\r\n}\r\n\r\nexport enum FolderContext {\r\n  unknown = 0,\r\n  behaviorPack = 1,\r\n  resourcePack = 2,\r\n  skinPack = 3,\r\n  docs = 4,\r\n  world = 5,\r\n  typeDefs = 6,\r\n  distBuildFolder = 7,\r\n  vscodeFolder = 8,\r\n  resourcePackSubPack = 9,\r\n  metaData = 10,\r\n  libFolder = 11,\r\n  persona = 12,\r\n  mctoolsWorkingFolder = 13,\r\n  designPack = 14,\r\n}\r\n\r\nexport const ProjectTargetStrings = [\r\n  \"<default>\",\r\n  \"Latest Minecraft Bedrock\",\r\n  \"Latest Minecraft Bedrock preview\",\r\n  \"Latest Minecraft Education\",\r\n  \"Latest Minecraft Education preview\",\r\n];\r\n\r\nexport const AUTOGENERATED_CONTENT_TOKEN = \"==== AUTOGENERATED\";\r\nexport const AUTOGENERATED_JS_SEPARATOR =\r\n  \"\\n// ===== AUTOGENERATED CONTENT ===== CONTENT AT OR BELOW THIS LINE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\nexport const AUTOGENERATED_WHOLEFILE_JS_SEPARATOR =\r\n  \"// ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\nexport const AUTOGENERATED_WHOLEFILE_MCFUNCTION_SEPARATOR =\r\n  \"# ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\nexport const AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR =\r\n  \"===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING\";\r\n\r\nexport const minecraftScriptModules: {\r\n  id: string;\r\n  module_name?: string;\r\n  uuid?: string;\r\n  preferredVersion: string | number[];\r\n}[] = [\r\n  {\r\n    id: \"@minecraft/server\",\r\n    module_name: \"@minecraft/server\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server\", true) || \"1.17.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-gametest\",\r\n    module_name: \"@minecraft/server-gametest\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-gametest\", true) || \"1.0.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-ui\",\r\n    module_name: \"@minecraft/server-ui\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-ui\", true) || \"1.5.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-admin\",\r\n    module_name: \"@minecraft/server-admin\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-admin\", true) || \"1.0.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-net\",\r\n    module_name: \"@minecraft/server-net\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-net\", true) || \"1.0.0-beta\",\r\n  },\r\n  {\r\n    id: \"@minecraft/server-editor\",\r\n    module_name: \"@minecraft/server-editor\",\r\n    preferredVersion: ScriptModuleInfoProvider.getLatestVersion(\"server-editor\", true) || \"0.1.0-beta\",\r\n  },\r\n];\r\n\r\nexport const remappedMinecraftScriptModules: { [oldModuleName: string]: string } = {\r\n  \"mojang-minecraft\": \"@minecraft/server\",\r\n  \"mojang-gametest\": \"@minecraft/server-gametest\",\r\n  \"mojang-minecraft-ui\": \"@minecraft/server-ui\",\r\n  \"mojang-server-admin\": \"@minecraft/server-admin\",\r\n  \"mojang-net\": \"@minecraft/server-net\",\r\n  \"@minecraft/server-editor-bindings\": \"@minecraft/server-editor\",\r\n};\r\n\r\nexport const vanillaSliceFolderSeeds = [\"vanilla\", \"chemistry\"];\r\nconst ProcessItemRelationsBatchSize = 400;\r\n\r\nexport default class Project {\r\n  #data: IProjectData;\r\n  #preferencesFile: IFile | null;\r\n  #creatorTools: CreatorTools;\r\n  loc: LocManager;\r\n  #errorState = ProjectErrorState.noError;\r\n  #errorMessage?: string | undefined;\r\n  #indevInfoSet: ProjectInfoSet | null = null;\r\n\r\n  public differencesFromGitHub?: DifferenceSet;\r\n\r\n  /** Transient action to perform after this project first opens in the editor (not persisted). */\r\n  public pendingPostCreateAction?: string;\r\n\r\n  /** Transient content definition to generate after this project first opens in the editor (not persisted). */\r\n  public pendingContentDefinition?: any;\r\n\r\n  #hasMultiplePacksOfSameType: boolean | undefined;\r\n  #relationsProcessed: boolean = false;\r\n\r\n  #folderStructureLoaded: boolean = false;\r\n  #indevInfoSetNeedsUpdating: boolean = false;\r\n\r\n  // Promise to track in-progress info set generation (allows callers to wait for existing operation)\r\n  #infoSetGenerationPromise: Promise<ProjectInfoSet> | null = null;\r\n\r\n  /**\r\n   * Debounce timer for batching external file changes.\r\n   * When files are added/removed externally (e.g., by MCP),\r\n   * we batch them into a single re-inference pass.\r\n   */\r\n  #externalChangeDebounceTimer: NodeJS.Timeout | ReturnType<typeof setTimeout> | null = null;\r\n\r\n  /** Pending external file additions, keyed by storage path */\r\n  #pendingExternalAdds: Set<string> = new Set();\r\n\r\n  /** Pending external file removals, keyed by storage path */\r\n  #pendingExternalRemoves: Set<string> = new Set();\r\n\r\n  /** Debounce time for external file changes in milliseconds */\r\n  static readonly EXTERNAL_CHANGE_DEBOUNCE_MS = 500;\r\n\r\n  #mainDeployFolder: IFolder | null = null;\r\n  #projectFolder: IFolder | null;\r\n  #projectCabinetFile: IFile | null = null;\r\n\r\n  #distBuildFolder: IFolder | null = null;\r\n  #libFolder: IFolder | null = null;\r\n\r\n  #distBuildScriptsFolder: IFolder | null = null;\r\n  #libScriptsFolder: IFolder | null = null;\r\n\r\n  docsContainer: IFolder | null;\r\n\r\n  worldContainer: IFolder | null = null;\r\n\r\n  #mainDeploySync: ProjectDeploySync | null = null;\r\n\r\n  #isDisposed: boolean = false;\r\n\r\n  behaviorPacksContainer: IFolder | null;\r\n  defaultBehaviorPackFolder: IFolder | null;\r\n\r\n  skinPacksContainer: IFolder | null;\r\n  defaultSkinPackFolder: IFolder | null;\r\n\r\n  personaPacksContainer: IFolder | null;\r\n  defaultPersonaPackFolder: IFolder | null;\r\n\r\n  designPacksContainer: IFolder | null;\r\n  defaultDesignPackFolder: IFolder | null;\r\n  projectItemAccessoryFolder: IFolder | null;\r\n\r\n  #packs: Pack[] = [];\r\n\r\n  #containerFiles: IFile[] = [];\r\n\r\n  defaultWorldFolder: IFolder | null;\r\n\r\n  #defaultScriptsFolder: IFolder | null;\r\n\r\n  resourcePacksContainer: IFolder | null;\r\n  defaultResourcePackFolder: IFolder | null;\r\n\r\n  creationTime: number;\r\n\r\n  #items: ProjectItem[];\r\n  #itemsByProjectPath: Map<string, ProjectItem | undefined> = new Map();\r\n  #itemsByType: Map<number, ProjectItem[] | undefined> = new Map();\r\n\r\n  public changedFilesSinceLastSaved: { [storagePath: string]: IFile | undefined } = {};\r\n\r\n  #isLoaded = false;\r\n  #isInflated = false;\r\n\r\n  #isProjectFolderEnsured = false;\r\n  #useProjectNameInProjectStorage = false;\r\n\r\n  #accessoryFilePaths: string[] | undefined;\r\n  #accessoryFoldersForFilePaths: IFolder[] | null = null;\r\n\r\n  #accessoryFolders: IFolder[] | null = null;\r\n\r\n  private _onPropertyChanged = new EventDispatcher<Project, string>();\r\n  private _onLoaded = new EventDispatcher<Project, Project>();\r\n  private _onInflated = new EventDispatcher<Project, Project>();\r\n  private _onSaved = new EventDispatcher<Project, Project>();\r\n  private _onNeedsSaveChanged = new EventDispatcher<Project, Project>();\r\n  private _onItemChanged = new EventDispatcher<Project, ProjectItem>();\r\n  private _onItemContentChanged = new EventDispatcher<Project, IProjectItemContentUpdateEvent>();\r\n  private _onItemAdded = new EventDispatcher<Project, ProjectItem>();\r\n  private _onItemRemoved = new EventDispatcher<Project, ProjectItem>();\r\n\r\n  #isProcessingRelations: boolean = false;\r\n  #relationsBatchOperId: number = -1;\r\n  #itemsToBeProcessed: number = 0;\r\n  #itemsProcessed: number = 0;\r\n  #pendingProcessingRelationsRequests: ((value: unknown) => void)[] = [];\r\n\r\n  public variants: { [label: string]: ProjectVariant };\r\n\r\n  hasInferredFiles = false;\r\n  #readOnlySafety = false;\r\n  #isVanillaEditSession: boolean | undefined;\r\n\r\n  get unknownFiles(): IFile[] {\r\n    return [...this._unknownFiles];\r\n  }\r\n\r\n  private _unknownFiles = new Set<IFile>();\r\n\r\n  addUnknownFile(file: IFile) {\r\n    this._unknownFiles.add(file);\r\n  }\r\n\r\n  get hasMultiplePacksOfSameType() {\r\n    if (this.#hasMultiplePacksOfSameType !== undefined) {\r\n      return this.#hasMultiplePacksOfSameType;\r\n    }\r\n\r\n    // Determine if there are multiple packs of the same type\r\n    const packTypes: number[] = [];\r\n    for (const pack of this.#packs) {\r\n      if (packTypes[pack.packType] !== undefined) {\r\n        this.#hasMultiplePacksOfSameType = true;\r\n        return true;\r\n      } else {\r\n        packTypes[pack.packType] = 1;\r\n      }\r\n    }\r\n\r\n    this.#hasMultiplePacksOfSameType = false;\r\n    return false;\r\n  }\r\n\r\n  public get readOnlySafety() {\r\n    return this.#readOnlySafety;\r\n  }\r\n\r\n  public set readOnlySafety(newReadOnly: boolean) {\r\n    this.#readOnlySafety = newReadOnly;\r\n\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.storage.readOnly = this.#readOnlySafety;\r\n    }\r\n  }\r\n\r\n  public get creatorTools() {\r\n    return this.#creatorTools;\r\n  }\r\n\r\n  /**\r\n   * Get the project data for persistence.\r\n   * This includes chat session and other project metadata.\r\n   */\r\n  public get projectData(): IProjectData {\r\n    return this.#data;\r\n  }\r\n\r\n  public get role() {\r\n    if (this.#data.role === undefined) {\r\n      return ProjectRole.general;\r\n    }\r\n\r\n    return this.#data.role;\r\n  }\r\n\r\n  public set role(newRole: ProjectRole) {\r\n    this.#data.role = newRole;\r\n  }\r\n\r\n  public get errorState() {\r\n    return this.#errorState;\r\n  }\r\n\r\n  public get errorMessage() {\r\n    return this.#errorMessage;\r\n  }\r\n\r\n  public get preferencesFile() {\r\n    return this.#preferencesFile;\r\n  }\r\n\r\n  public get accessoryFolders() {\r\n    return this.#accessoryFolders;\r\n  }\r\n\r\n  public set accessoryFolders(folders: IFolder[] | null) {\r\n    this.#accessoryFolders = folders;\r\n  }\r\n\r\n  public get accessoryFilePaths() {\r\n    return this.#accessoryFilePaths;\r\n  }\r\n\r\n  public set accessoryFilePaths(files: string[] | undefined) {\r\n    this.#accessoryFilePaths = files;\r\n  }\r\n\r\n  // This property is a maintained and updated \"in development\" info set\r\n  // that contains errors and validation information useful while a project is\r\n  // in develpoment. For other validator suites, instantiate a ProjectInfoSet\r\n  // with this project in its constructor\r\n  public get indevInfoSet() {\r\n    if (!this.#indevInfoSet) {\r\n      this.#indevInfoSet = new ProjectInfoSet(this, ProjectInfoSuite.defaultInDevelopment);\r\n    }\r\n\r\n    return this.#indevInfoSet;\r\n  }\r\n\r\n  public get collapsedStoragePaths() {\r\n    if (!this.#data.collapsedStoragePaths) {\r\n      this.#data.collapsedStoragePaths = [];\r\n    }\r\n\r\n    return this.#data.collapsedStoragePaths;\r\n  }\r\n\r\n  public set collapsedStoragePaths(newCollapsedPaths: string[]) {\r\n    this.#data.collapsedStoragePaths = newCollapsedPaths;\r\n  }\r\n\r\n  public get packs() {\r\n    return this.#packs;\r\n  }\r\n\r\n  public hasUnsavedChanges() {\r\n    for (const filePath in this.changedFilesSinceLastSaved) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public getBehaviorPackCount() {\r\n    let count = 0;\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public getResourcePackCount() {\r\n    let count = 0;\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        count++;\r\n      }\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  public getIsPackFolderManaged() {\r\n    let rpCount = 0;\r\n    let bpCount = 0;\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        bpCount++;\r\n      } else if (projectItem.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        rpCount++;\r\n      }\r\n    }\r\n\r\n    return bpCount < 2 && rpCount < 2;\r\n  }\r\n\r\n  public get key() {\r\n    if (this.localFilePath) {\r\n      return StorageUtilities.canonicalizePath(this.localFilePath);\r\n    }\r\n\r\n    if (this.#projectFolder) {\r\n      if (this.#projectFolder.name && this.#projectFolder.name.length > 0) {\r\n        return this.#projectFolder.name;\r\n      }\r\n\r\n      return StorageUtilities.canonicalizePath(this.#projectFolder.fullPath);\r\n    }\r\n\r\n    if (this.#preferencesFile) {\r\n      return StorageUtilities.canonicalizePath(this.#preferencesFile.name);\r\n    }\r\n\r\n    return this.title;\r\n  }\r\n\r\n  public get containerName() {\r\n    if (this.localFilePath) {\r\n      return StorageUtilities.getLeafName(this.localFilePath);\r\n    }\r\n\r\n    if (this.#projectFolder) {\r\n      if (this.#projectFolder.name && this.#projectFolder.name.length > 0) {\r\n        return this.#projectFolder.name;\r\n      }\r\n\r\n      return StorageUtilities.getLeafName(this.#projectFolder.fullPath);\r\n    }\r\n\r\n    if (this.#preferencesFile) {\r\n      return StorageUtilities.getBaseFromName(this.#preferencesFile.name);\r\n    }\r\n\r\n    return this.title;\r\n  }\r\n\r\n  public get defaultNamespace(): string | undefined {\r\n    return this.#data.defaultNamespace;\r\n  }\r\n\r\n  public get effectiveDefaultNamespace(): string {\r\n    if (this.#data.defaultNamespace || this.#data.defaultNamespace === \"\") {\r\n      return this.#data.defaultNamespace;\r\n    }\r\n\r\n    return this.effectiveShortName;\r\n  }\r\n\r\n  public set defaultNamespace(newDefaultNamespace: string | undefined) {\r\n    if (newDefaultNamespace !== this.#data.defaultNamespace) {\r\n      this.#data.defaultNamespace = newDefaultNamespace;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultNamespace\");\r\n    }\r\n  }\r\n\r\n  public get scriptEntryPoint(): string {\r\n    if (this.#data.scriptEntryPoint || this.#data.scriptEntryPoint === \"\") {\r\n      return this.#data.scriptEntryPoint;\r\n    }\r\n\r\n    return this.scriptEntryPoint;\r\n  }\r\n\r\n  public set scriptEntryPoint(newScriptEntryPoint: string) {\r\n    if (newScriptEntryPoint !== this.#data.scriptEntryPoint) {\r\n      this.#data.scriptEntryPoint = newScriptEntryPoint;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"scriptEntryPoint\");\r\n    }\r\n  }\r\n\r\n  public get worldSettings() {\r\n    return this.#data.worldSettings;\r\n  }\r\n\r\n  public get editorWorldSettings() {\r\n    return this.#data.editorWorldSettings;\r\n  }\r\n\r\n  public get isMinecraftCreator(): boolean {\r\n    return this.#data.creator?.toLowerCase() === \"minecraft\";\r\n  }\r\n\r\n  public async getLookupChoices(lookupId: string): Promise<ISimpleReference[] | undefined> {\r\n    return await ProjectLookupUtilities.getLookup(this, lookupId);\r\n  }\r\n\r\n  public ensureWorldSettings() {\r\n    if (this.#data.worldSettings === undefined) {\r\n      if (this.creatorTools.worldSettings) {\r\n        this.#data.worldSettings = this.creatorTools.worldSettings;\r\n      } else {\r\n        this.initializeWorldSettings();\r\n\r\n        if (this.#data.worldSettings === undefined) {\r\n          throw new Error();\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.#data.worldSettings;\r\n  }\r\n\r\n  public ensureEditorWorldSettings() {\r\n    if (this.#data.editorWorldSettings === undefined) {\r\n      if (this.creatorTools.editorWorldSettings) {\r\n        this.#data.editorWorldSettings = this.creatorTools.editorWorldSettings;\r\n      } else {\r\n        this.initializeEditorWorldSettings();\r\n\r\n        if (this.#data.editorWorldSettings === undefined) {\r\n          throw new Error();\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.#data.editorWorldSettings;\r\n  }\r\n\r\n  public get usesCustomWorldSettings() {\r\n    return this.#data.usesCustomWorldSettings;\r\n  }\r\n\r\n  public set usesCustomWorldSettings(newValue: boolean | undefined) {\r\n    this.#data.usesCustomWorldSettings = newValue;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this.#isLoaded;\r\n  }\r\n\r\n  public get isInflated() {\r\n    return this.#isInflated;\r\n  }\r\n\r\n  public get isRelationsProcessed() {\r\n    return this.#relationsProcessed;\r\n  }\r\n\r\n  public get distBuildFolder() {\r\n    return this.#distBuildFolder;\r\n  }\r\n\r\n  public set distBuildFolder(folder: IFolder | null) {\r\n    this.#distBuildFolder = folder;\r\n  }\r\n\r\n  public get libFolder() {\r\n    return this.#libFolder;\r\n  }\r\n\r\n  public set libFolder(folder: IFolder | null) {\r\n    this.#libFolder = folder;\r\n  }\r\n\r\n  public get distScriptsFolder() {\r\n    return this.#distBuildScriptsFolder;\r\n  }\r\n\r\n  public get libScriptsFolder() {\r\n    return this.#libScriptsFolder;\r\n  }\r\n\r\n  public get useProjectNameInRootProjectStorage() {\r\n    return this.#useProjectNameInProjectStorage;\r\n  }\r\n\r\n  public set useProjectNameInRootProjectStorage(newVal: boolean) {\r\n    this.#useProjectNameInProjectStorage = newVal;\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onInflated() {\r\n    return this._onInflated.asEvent();\r\n  }\r\n\r\n  public get onSaved() {\r\n    return this._onSaved.asEvent();\r\n  }\r\n\r\n  public get onNeedsSaveChanged() {\r\n    return this._onNeedsSaveChanged.asEvent();\r\n  }\r\n\r\n  public get onItemChanged() {\r\n    return this._onItemChanged.asEvent();\r\n  }\r\n\r\n  public get onItemContentChanged() {\r\n    return this._onItemContentChanged.asEvent();\r\n  }\r\n\r\n  public get onItemAdded() {\r\n    return this._onItemAdded.asEvent();\r\n  }\r\n\r\n  public get onItemRemoved() {\r\n    return this._onItemRemoved.asEvent();\r\n  }\r\n\r\n  get projectFolderTitle(): string | undefined {\r\n    return this.#data.projectFolderTitle;\r\n  }\r\n\r\n  set projectFolderTitle(newTitle: string | undefined) {\r\n    this.#data.projectFolderTitle = newTitle;\r\n  }\r\n\r\n  get projectFolder(): IFolder | null {\r\n    return this.#projectFolder;\r\n  }\r\n\r\n  get accessoryFoldersForFilePaths(): IFolder[] | null {\r\n    return this.#accessoryFoldersForFilePaths;\r\n  }\r\n\r\n  get localFolderPath(): string | undefined {\r\n    return this.#data.localFolderPath;\r\n  }\r\n\r\n  set localFolderPath(newPath: string | undefined) {\r\n    this.#data.localFolderPath = newPath;\r\n  }\r\n\r\n  get mainDeployFolderPath(): string | undefined {\r\n    return this.#data.mainDeployFolderPath;\r\n  }\r\n\r\n  set mainDeployFolderPath(newPath: string | undefined) {\r\n    this.#data.mainDeployFolderPath = newPath;\r\n  }\r\n\r\n  get localFilePath(): string | undefined {\r\n    return this.#data.localFilePath;\r\n  }\r\n\r\n  set localFilePath(newPath: string | undefined) {\r\n    this.#data.localFilePath = newPath;\r\n  }\r\n\r\n  get items(): ProjectItem[] {\r\n    return this.#items;\r\n  }\r\n\r\n  get gitHubReferences() {\r\n    if (this.#data.gitHubReferences === undefined) {\r\n      this.#data.gitHubReferences = [];\r\n    }\r\n\r\n    return this.#data.gitHubReferences;\r\n  }\r\n\r\n  async getBehaviorPackScriptsFolder() {\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    return bpFolder.folders[\"scripts\"];\r\n  }\r\n\r\n  async ensureBehaviorPackScriptsFolder() {\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    return bpFolder.ensureFolder(\"scripts\");\r\n  }\r\n\r\n  async getMainScriptsFolder() {\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    return this.#projectFolder.folders[\"scripts\"];\r\n  }\r\n\r\n  async ensureProjectItemAccessoryFolder() {\r\n    if (this.projectItemAccessoryFolder) {\r\n      return this.projectItemAccessoryFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    const defaultDesignFolder = await this.ensureDefaultDesignPackFolder();\r\n\r\n    this.projectItemAccessoryFolder = defaultDesignFolder.ensureFolder(\"project_item_data\");\r\n\r\n    return this.projectItemAccessoryFolder;\r\n  }\r\n\r\n  async ensureMainScriptsFolder() {\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    return this.#projectFolder.ensureFolder(\"scripts\");\r\n  }\r\n\r\n  async ensureScriptGenFolder() {\r\n    const scriptsFolder = await this.ensureMainScriptsFolder();\r\n\r\n    if (!scriptsFolder) {\r\n      throw new Error(\"Unexpectedly could not create a main scripts folder\");\r\n    }\r\n\r\n    return scriptsFolder.ensureFolder(\"_gen\");\r\n  }\r\n\r\n  get preferredScriptLanguage() {\r\n    if (\r\n      this.#data.preferredScriptLanguage === undefined ||\r\n      this.#data.preferredScriptLanguage === ProjectScriptLanguage.typeScript\r\n    ) {\r\n      return ProjectScriptLanguage.typeScript;\r\n    }\r\n\r\n    return this.#data.preferredScriptLanguage;\r\n  }\r\n\r\n  set preferredScriptLanguage(newLanguage: ProjectScriptLanguage) {\r\n    this.#data.preferredScriptLanguage = newLanguage;\r\n  }\r\n\r\n  get scriptVersion() {\r\n    if (this.#data.scriptVersion === undefined) {\r\n      return ProjectScriptVersion.latestStable;\r\n    }\r\n\r\n    return this.#data.scriptVersion;\r\n  }\r\n\r\n  get messages() {\r\n    return this.#data.messages;\r\n  }\r\n\r\n  set scriptVersion(newVersion: ProjectScriptVersion) {\r\n    this.#data.scriptVersion = newVersion;\r\n  }\r\n\r\n  get effectiveEditPreference() {\r\n    if (this.editPreference === ProjectEditPreference.default || !this.editPreference) {\r\n      if (this.creatorTools.editPreference === CreatorToolsEditPreference.raw) {\r\n        return ProjectEditPreference.raw;\r\n      } else if (this.creatorTools.editPreference === CreatorToolsEditPreference.editors) {\r\n        return ProjectEditPreference.editors;\r\n      } else if (this.creatorTools.editPreference === CreatorToolsEditPreference.summarized) {\r\n        if (this.isVanillaEditSession) {\r\n          return ProjectEditPreference.editors;\r\n        }\r\n        return ProjectEditPreference.summarized;\r\n      }\r\n\r\n      return ProjectEditPreference.editors;\r\n    }\r\n\r\n    return this.editPreference;\r\n  }\r\n\r\n  get editPreference() {\r\n    if (this.#data.editPreference === undefined) {\r\n      return ProjectEditPreference.default;\r\n    }\r\n\r\n    return this.#data.editPreference;\r\n  }\r\n\r\n  set editPreference(newEditPreference: ProjectEditPreference) {\r\n    this.#data.editPreference = newEditPreference;\r\n  }\r\n\r\n  get contentsModified() {\r\n    let val = this.#data.contentsModified;\r\n\r\n    if (val === null) {\r\n      return null;\r\n    }\r\n\r\n    if (!(val instanceof Date)) {\r\n      val = new Date(val);\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  get created() {\r\n    let val = this.#data.created;\r\n\r\n    if (!val) {\r\n      return null;\r\n    }\r\n\r\n    if (!(val instanceof Date)) {\r\n      val = new Date(val);\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  set created(value: Date | null) {\r\n    this.#data.created = value;\r\n  }\r\n\r\n  get lastOpened() {\r\n    let val = this.#data.lastOpened;\r\n\r\n    if (!val) {\r\n      return null;\r\n    }\r\n\r\n    if (!(val instanceof Date)) {\r\n      val = new Date(val);\r\n    }\r\n\r\n    return val;\r\n  }\r\n\r\n  set lastOpened(value: Date | null) {\r\n    this.#data.lastOpened = value;\r\n  }\r\n\r\n  getItemsCopy(): ProjectItem[] {\r\n    return this.#items.slice();\r\n  }\r\n\r\n  getItemsByType(itemType: ProjectItemType): ProjectItem[] {\r\n    let itemsByTypeArr: ProjectItem[] | undefined = this.#itemsByType.get(itemType);\r\n\r\n    if (itemsByTypeArr) {\r\n      return itemsByTypeArr;\r\n    }\r\n\r\n    itemsByTypeArr = [];\r\n\r\n    for (const item of this.#items) {\r\n      if (item.itemType === itemType) {\r\n        itemsByTypeArr.push(item);\r\n      }\r\n    }\r\n\r\n    this.#itemsByType.set(itemType, itemsByTypeArr);\r\n\r\n    return itemsByTypeArr;\r\n  }\r\n\r\n  public initializeWorldSettings() {\r\n    if (this.#data.worldSettings === undefined) {\r\n      this.#data.worldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        randomSeed: \"2000\",\r\n        isEditor: false,\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n      };\r\n\r\n      this.ensureDefaultWorldName();\r\n    }\r\n  }\r\n\r\n  private ensureDefaultWorldName() {\r\n    if (this.worldSettings && this.worldSettings.name === undefined) {\r\n      this.worldSettings.name = this.name + \" \" + Utilities.getDateStr(new Date());\r\n    }\r\n  }\r\n\r\n  public initializeEditorWorldSettings() {\r\n    if (this.#data.editorWorldSettings === undefined) {\r\n      this.#data.editorWorldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        randomSeed: \"2000\",\r\n        isEditor: true,\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n      };\r\n\r\n      this.ensureDefaultEditorWorldName();\r\n    }\r\n  }\r\n\r\n  private ensureDefaultEditorWorldName() {\r\n    if (this.editorWorldSettings && this.editorWorldSettings.name === undefined) {\r\n      this.editorWorldSettings.name = this.name + \" \" + Utilities.getDateStr(new Date());\r\n\r\n      this.save();\r\n    }\r\n  }\r\n\r\n  public addMessage(message: string, context?: string, operation?: string, type?: StatusType, topic?: StatusTopic) {\r\n    if (this.#data.messages === undefined) {\r\n      this.#data.messages = [];\r\n    }\r\n\r\n    if (type === undefined) {\r\n      type = StatusType.message;\r\n    }\r\n\r\n    const messageCanon = message.trim().toLowerCase();\r\n\r\n    if (messageCanon.length > 1) {\r\n      const status = {\r\n        time: new Date(),\r\n        message: message,\r\n        context: context,\r\n        operation: operation,\r\n        topic: topic,\r\n        type: type,\r\n      };\r\n\r\n      this.#data.messages.push(status);\r\n    }\r\n  }\r\n\r\n  public appendErrors(errorable: IErrorable, operation?: string) {\r\n    if (!errorable.errorMessages) {\r\n      return;\r\n    }\r\n\r\n    for (const err of errorable.errorMessages) {\r\n      this.creatorTools.notifyStatusUpdate(err.message, StatusTopic.general);\r\n\r\n      this.addMessage(err.message, err.context, operation, StatusType.message);\r\n    }\r\n  }\r\n\r\n  removeItem(item: ProjectItem) {\r\n    const newArr: ProjectItem[] = [];\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      if (this.items[i] !== item) {\r\n        newArr.push(this.items[i]);\r\n      }\r\n    }\r\n    const path = ProjectUtilities.canonicalizeStoragePath(item.projectPath);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(path)) {\r\n      return;\r\n    }\r\n\r\n    this.#itemsByProjectPath.delete(path);\r\n    this.#itemsByType.delete(item.itemType);\r\n\r\n    this.#items = newArr;\r\n\r\n    const newDataArr: IProjectItemData[] = [];\r\n\r\n    for (let i = 0; i < this.#data.items.length; i++) {\r\n      if (this.#data.items[i].projectPath !== item.projectPath) {\r\n        newDataArr.push(this.#data.items[i]);\r\n      }\r\n    }\r\n\r\n    this.#data.items = newDataArr;\r\n    this.#indevInfoSetNeedsUpdating = true;\r\n\r\n    this._onItemRemoved.dispatch(this, item);\r\n  }\r\n\r\n  updateContentsModified() {\r\n    this.#data.contentsModified = new Date();\r\n  }\r\n\r\n  get modified(): Date | null {\r\n    if (this.#preferencesFile != null && this.#preferencesFile.latestModified != null) {\r\n      if (this.contentsModified != null && this.contentsModified > this.#preferencesFile.latestModified) {\r\n        return this.contentsModified;\r\n      }\r\n\r\n      return this.#preferencesFile.latestModified;\r\n    } else {\r\n      return this.contentsModified;\r\n    }\r\n  }\r\n\r\n  get effectiveShowHiddenItems() {\r\n    if (\r\n      this.#data.showHiddenItems === true ||\r\n      this.effectiveEditPreference === ProjectEditPreference.raw ||\r\n      this.effectiveEditPreference === ProjectEditPreference.editors\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get showDevFiles() {\r\n    return this.#data.showDevFiles === true;\r\n  }\r\n\r\n  set showDevFiles(show: boolean) {\r\n    if (show !== this.showDevFiles) {\r\n      this.#data.showDevFiles = show;\r\n      this._onPropertyChanged.dispatch(this, \"showDevFiles\");\r\n    }\r\n  }\r\n\r\n  get showHiddenItems() {\r\n    if (this.#data.showHiddenItems === true) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  set showHiddenItems(showItems: boolean) {\r\n    if (showItems !== this.showHiddenItems) {\r\n      this.#data.showHiddenItems = showItems;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showHiddenItems\");\r\n    }\r\n  }\r\n\r\n  get showFunctions() {\r\n    if (this.#data.showFunctions === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.showFunctions;\r\n  }\r\n\r\n  set showFunctions(showFunctions: boolean) {\r\n    if (showFunctions !== this.showFunctions) {\r\n      this.#data.showFunctions = showFunctions;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showFunctions\");\r\n    }\r\n  }\r\n\r\n  get showAssets() {\r\n    if (this.#data.showAssets === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.showAssets;\r\n  }\r\n\r\n  set showAssets(showAssets: boolean) {\r\n    if (showAssets !== this.showAssets) {\r\n      this.#data.showAssets = showAssets;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showAssets\");\r\n    }\r\n  }\r\n\r\n  get showTypes() {\r\n    if (this.#data.showTypes === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.showTypes;\r\n  }\r\n\r\n  set showTypes(showTypes: boolean) {\r\n    if (showTypes !== this.showTypes) {\r\n      this.#data.showTypes = showTypes;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"showTypes\");\r\n    }\r\n  }\r\n\r\n  get name(): string {\r\n    return this.#data.name;\r\n  }\r\n\r\n  get simplifiedName() {\r\n    return ProjectUtilities.getSimplifiedProjectName(this.#data.name);\r\n  }\r\n\r\n  set name(newName: string) {\r\n    this.#data.name = newName;\r\n  }\r\n\r\n  get lastMapDeployedHash(): string | undefined {\r\n    return this.#data.lastMapDeployedHash;\r\n  }\r\n\r\n  get lastMapDeployedDate(): Date | undefined {\r\n    return this.#data.lastMapDeployedDate;\r\n  }\r\n\r\n  set lastMapDeployedHash(newValue: string | undefined) {\r\n    this.#data.lastMapDeployedHash = newValue;\r\n  }\r\n\r\n  set lastMapDeployedDate(newValue: Date | undefined) {\r\n    this.#data.lastMapDeployedDate = newValue;\r\n  }\r\n\r\n  get deployWorldId(): string {\r\n    if (!this.#data.deployWorldId) {\r\n      this.#data.deployWorldId = Utilities.createUuid();\r\n    }\r\n\r\n    return this.#data.deployWorldId;\r\n  }\r\n\r\n  set deployWorldId(newValue: string) {\r\n    this.#data.deployWorldId = newValue;\r\n  }\r\n\r\n  get previewImageBase64(): string | undefined {\r\n    return this.#data.previewImageBase64;\r\n  }\r\n\r\n  set previewImageBase64(newValue: string | undefined) {\r\n    this.#data.previewImageBase64 = newValue;\r\n  }\r\n\r\n  get effectiveCreator(): string {\r\n    if (this.#data.creator && this.#data.creator.length > 0) {\r\n      return this.#data.creator;\r\n    }\r\n\r\n    if (this.creatorTools.creator && this.creatorTools.creator.length > 0) {\r\n      return this.creatorTools.creator;\r\n    }\r\n\r\n    return \"contoso\";\r\n  }\r\n\r\n  get effectiveShortName(): string {\r\n    if (this.#data.shortName && this.#data.shortName.length > 0) {\r\n      return this.#data.shortName;\r\n    }\r\n    if (this.effectiveCreator.length > 0 && this.#data.name && this.#data.name.length > 0) {\r\n      return ProjectUtilities.getSuggestedProjectShortName(this.effectiveCreator, this.#data.name);\r\n    }\r\n\r\n    return \"cont_game\";\r\n  }\r\n\r\n  get shortName(): string | undefined {\r\n    return this.#data.shortName;\r\n  }\r\n\r\n  set shortName(newShortName: string | undefined) {\r\n    if (this.#data.shortName !== newShortName) {\r\n      this.#data.shortName = newShortName;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"shortName\");\r\n    }\r\n  }\r\n\r\n  get creator(): string | undefined {\r\n    return this.#data.creator;\r\n  }\r\n\r\n  set creator(newCreator: string | undefined) {\r\n    if (this.#data.creator !== newCreator) {\r\n      this.#data.creator = newCreator;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"creator\");\r\n    }\r\n  }\r\n\r\n  get title(): string {\r\n    if (this.#data.title) {\r\n      return this.#data.title;\r\n    }\r\n\r\n    return this.name;\r\n  }\r\n\r\n  set title(newTitle: string) {\r\n    if (this.#data.title !== newTitle) {\r\n      this.#data.title = newTitle;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"title\");\r\n    }\r\n  }\r\n\r\n  get track(): MinecraftTrack | undefined {\r\n    return this.#data.track;\r\n  }\r\n\r\n  set track(newTrack: MinecraftTrack | undefined) {\r\n    if (newTrack !== this.#data.track) {\r\n      this.#data.track = newTrack;\r\n      this._onPropertyChanged.dispatch(this, \"track\");\r\n    }\r\n  }\r\n\r\n  get effectiveTrack(): MinecraftTrack {\r\n    if (this.#data.track !== undefined) {\r\n      return this.#data.track;\r\n    }\r\n\r\n    return this.#creatorTools.effectiveTrack;\r\n  }\r\n\r\n  set originalFullPath(newOriginalPath: string | undefined) {\r\n    if (this.#data.originalFullPath !== newOriginalPath) {\r\n      this.#data.originalFullPath = newOriginalPath;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalFullPath\");\r\n    }\r\n  }\r\n\r\n  get originalFullPath(): string | undefined {\r\n    return this.#data.originalFullPath;\r\n  }\r\n\r\n  set originalFileList(newFileList: string[] | undefined) {\r\n    if (this.#data.originalFileList !== newFileList) {\r\n      this.#data.originalFileList = newFileList;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalFileList\");\r\n    }\r\n  }\r\n\r\n  get originalFileList(): string[] | undefined {\r\n    return this.#data.originalFileList;\r\n  }\r\n\r\n  set originalGitHubOwner(newGitHubOwner: string | undefined) {\r\n    if (this.#data.originalGitHubOwner !== newGitHubOwner) {\r\n      this.#data.originalGitHubOwner = newGitHubOwner;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubOwner\");\r\n    }\r\n  }\r\n\r\n  set originalGalleryId(newGalleryId: string | undefined) {\r\n    if (this.#data.originalGalleryId !== newGalleryId) {\r\n      this.#data.originalGalleryId = newGalleryId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGalleryId\");\r\n    }\r\n  }\r\n\r\n  get originalGalleryId(): string | undefined {\r\n    return this.#data.originalGalleryId;\r\n  }\r\n\r\n  set originalSampleId(newSampleId: string | undefined) {\r\n    if (this.#data.originalSampleId !== newSampleId) {\r\n      this.#data.originalSampleId = newSampleId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalSampleId\");\r\n    }\r\n  }\r\n\r\n  get originalSampleId(): string | undefined {\r\n    return this.#data.originalSampleId;\r\n  }\r\n\r\n  get originalGitHubOwner(): string | undefined {\r\n    return this.#data.originalGitHubOwner;\r\n  }\r\n\r\n  set originalGitHubFolder(newGitHubFolder: string | undefined) {\r\n    if (this.#data.originalGitHubFolder !== newGitHubFolder) {\r\n      this.#data.originalGitHubFolder = newGitHubFolder;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubFolder\");\r\n    }\r\n  }\r\n\r\n  get originalGitHubFolder(): string | undefined {\r\n    return this.#data.originalGitHubFolder;\r\n  }\r\n\r\n  set originalGitHubRepoName(newGitHubRepoName: string | undefined) {\r\n    if (this.#data.originalGitHubRepoName !== newGitHubRepoName) {\r\n      this.#data.originalGitHubRepoName = newGitHubRepoName;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubRepoName\");\r\n    }\r\n  }\r\n\r\n  get originalGitHubRepoName(): string | undefined {\r\n    return this.#data.originalGitHubRepoName;\r\n  }\r\n\r\n  set originalGitHubBranch(newGitHubBranch: string | undefined) {\r\n    if (this.#data.originalGitHubBranch !== newGitHubBranch) {\r\n      this.#data.originalGitHubBranch = newGitHubBranch;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"originalGitHubBranch\");\r\n    }\r\n  }\r\n\r\n  get originalGitHubBranch(): string | undefined {\r\n    return this.#data.originalGitHubBranch;\r\n  }\r\n\r\n  set gitHubOwner(newGitHubOwner: string | undefined) {\r\n    if (this.#data.gitHubOwner !== newGitHubOwner) {\r\n      this.#data.gitHubOwner = newGitHubOwner;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubOwner\");\r\n    }\r\n  }\r\n\r\n  get gitHubOwner(): string | undefined {\r\n    return this.#data.gitHubOwner;\r\n  }\r\n\r\n  set gitHubFolder(newGitHubFolder: string | undefined) {\r\n    if (this.#data.gitHubFolder !== newGitHubFolder) {\r\n      this.#data.gitHubFolder = newGitHubFolder;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubFolder\");\r\n    }\r\n  }\r\n\r\n  get gitHubFolder(): string | undefined {\r\n    return this.#data.gitHubFolder;\r\n  }\r\n\r\n  set gitHubRepoName(newGitHubRepoName: string | undefined) {\r\n    if (this.#data.gitHubRepoName !== newGitHubRepoName) {\r\n      this.#data.gitHubRepoName = newGitHubRepoName;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubRepoName\");\r\n    }\r\n  }\r\n\r\n  get gitHubRepoName(): string | undefined {\r\n    return this.#data.gitHubRepoName;\r\n  }\r\n\r\n  set gitHubBranch(newGitHubBranch: string | undefined) {\r\n    if (this.#data.gitHubBranch !== newGitHubBranch) {\r\n      this.#data.gitHubBranch = newGitHubBranch;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"gitHubBranch\");\r\n    }\r\n  }\r\n\r\n  get gitHubBranch(): string | undefined {\r\n    return this.#data.gitHubBranch;\r\n  }\r\n\r\n  get description(): string {\r\n    return this.#data.description;\r\n  }\r\n\r\n  set description(newDescription: string) {\r\n    if (this.#data.description !== newDescription) {\r\n      this.#data.description = newDescription;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"description\");\r\n    }\r\n  }\r\n\r\n  public async applyDescription(newTitle: string) {\r\n    this.title = newTitle;\r\n\r\n    if (this.editPreference === ProjectEditPreference.summarized && this.defaultBehaviorPackUniqueId) {\r\n      for (const projectItem of this.items) {\r\n        const itemFile = projectItem.primaryFile;\r\n\r\n        if (itemFile && projectItem.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n          const manifestJson = await BehaviorManifestDefinition.ensureOnFile(itemFile);\r\n\r\n          if (\r\n            manifestJson &&\r\n            manifestJson.definition &&\r\n            Utilities.uuidEqual(manifestJson.definition.header.uuid, this.defaultBehaviorPackUniqueId)\r\n          ) {\r\n            const header = manifestJson.ensureHeader(this.title, this.description);\r\n\r\n            header.name = newTitle;\r\n\r\n            await manifestJson.save();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  get autoDeploymentMode(): ProjectAutoDeploymentMode {\r\n    if (this.#data.autoDeploymentMode === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.autoDeploymentMode as ProjectAutoDeploymentMode;\r\n  }\r\n\r\n  set autoDeploymentMode(newMode: ProjectAutoDeploymentMode) {\r\n    if (this.#data.autoDeploymentMode !== newMode) {\r\n      this.#data.autoDeploymentMode = newMode;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"autoDeploymentMode\");\r\n    }\r\n  }\r\n\r\n  get versionAsArray(): number[] {\r\n    let vmj = this.#data.versionMajor;\r\n    if (vmj === undefined) {\r\n      vmj = 0;\r\n    }\r\n\r\n    let vmi = this.#data.versionMinor;\r\n    if (vmi === undefined) {\r\n      vmi = 0;\r\n    }\r\n\r\n    let vmp = this.#data.versionPatch;\r\n    if (vmp === undefined) {\r\n      vmp = 0;\r\n    }\r\n\r\n    return [vmj, vmi, vmp];\r\n  }\r\n\r\n  get versionAsString(): string {\r\n    let vmj = this.#data.versionMajor;\r\n    if (vmj === undefined) {\r\n      vmj = 0;\r\n    }\r\n\r\n    let vmi = this.#data.versionMinor;\r\n    if (vmi === undefined) {\r\n      vmi = 0;\r\n    }\r\n\r\n    let vmp = this.#data.versionPatch;\r\n    if (vmp === undefined) {\r\n      vmp = 0;\r\n    }\r\n\r\n    return vmj + \".\" + vmi + \".\" + vmp;\r\n  }\r\n\r\n  get versionMajor(): number | undefined {\r\n    return this.#data.versionMajor;\r\n  }\r\n\r\n  set versionMajor(newVersion: number | undefined) {\r\n    if (this.#data.versionMajor !== newVersion) {\r\n      this.#data.versionMajor = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"versionMajor\");\r\n    }\r\n  }\r\n\r\n  get versionMinor(): number | undefined {\r\n    return this.#data.versionMinor;\r\n  }\r\n\r\n  set versionMinor(newVersion: number | undefined) {\r\n    if (this.#data.versionMinor !== newVersion) {\r\n      this.#data.versionMinor = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"versionMinor\");\r\n    }\r\n  }\r\n\r\n  get versionPatch(): number | undefined {\r\n    return this.#data.versionPatch;\r\n  }\r\n\r\n  set versionPatch(newVersion: number | undefined) {\r\n    if (this.#data.versionPatch !== newVersion) {\r\n      this.#data.versionPatch = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"versionPatch\");\r\n    }\r\n  }\r\n\r\n  get defaultResourcePackUniqueId(): string {\r\n    return this.#data.defaultResourcePackUniqueId;\r\n  }\r\n\r\n  set defaultResourcePackUniqueId(newId: string) {\r\n    if (this.#data.defaultResourcePackUniqueId !== newId) {\r\n      this.#data.defaultResourcePackUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultResourcePackUniqueId\");\r\n    }\r\n  }\r\n\r\n  async setDefaultResourcePackUniqueIdAndUpdateDependencies(newId: string) {\r\n    if (this.#data.defaultResourcePackUniqueId !== newId) {\r\n      const oldId = this.#data.defaultResourcePackUniqueId;\r\n\r\n      this.#data.defaultResourcePackUniqueId = newId;\r\n\r\n      if (oldId && oldId.length > 4) {\r\n        await ResourceManifestDefinition.setNewResourcePackId(this, newId, oldId);\r\n      }\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultResourcePackUniqueId\");\r\n    }\r\n  }\r\n\r\n  get defaultResourcePackVersion(): number[] {\r\n    if (this.#data.defaultResourcePackVersion === undefined) {\r\n      const vMajor = this.versionMajor ? this.versionMajor : 0;\r\n      const vMinor = this.versionMinor ? this.versionMinor : 0;\r\n      const vPatch = this.versionPatch ? this.versionPatch : 1;\r\n\r\n      return [vMajor, vMinor, vPatch];\r\n    }\r\n\r\n    return this.#data.defaultResourcePackVersion;\r\n  }\r\n\r\n  set defaultResourcePackVersion(newVersion: number[]) {\r\n    if (this.#data.defaultResourcePackVersion !== newVersion) {\r\n      this.#data.defaultResourcePackVersion = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultResourcePackVersion\");\r\n    }\r\n  }\r\n\r\n  get defaultBehaviorPackUniqueId(): string {\r\n    return this.#data.defaultBehaviorPackUniqueId;\r\n  }\r\n\r\n  set defaultBehaviorPackUniqueId(newId: string) {\r\n    if (this.#data.defaultBehaviorPackUniqueId !== newId) {\r\n      this.#data.defaultBehaviorPackUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultBehaviorPackUniqueId\");\r\n    }\r\n  }\r\n\r\n  async setDefaultBehaviorPackUniqueIdAndUpdateDependencies(newId: string) {\r\n    if (this.#data.defaultBehaviorPackUniqueId !== newId) {\r\n      const oldId = this.#data.defaultBehaviorPackUniqueId;\r\n      this.#data.defaultBehaviorPackUniqueId = newId;\r\n\r\n      if (oldId && oldId.length > 4) {\r\n        await BehaviorManifestDefinition.setNewBehaviorPackId(this, newId, oldId);\r\n      }\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultBehaviorPackUniqueId\");\r\n    }\r\n  }\r\n\r\n  get defaultBehaviorPackVersion(): number[] {\r\n    if (this.#data.defaultBehaviorPackVersion === undefined) {\r\n      const vMajor = this.versionMajor ? this.versionMajor : 0;\r\n      const vMinor = this.versionMinor ? this.versionMinor : 0;\r\n      const vPatch = this.versionPatch ? this.versionPatch : 1;\r\n\r\n      return [vMajor, vMinor, vPatch];\r\n    }\r\n\r\n    return this.#data.defaultBehaviorPackVersion;\r\n  }\r\n\r\n  set defaultBehaviorPackVersion(newVersion: number[]) {\r\n    if (this.#data.defaultBehaviorPackVersion !== newVersion) {\r\n      this.#data.defaultBehaviorPackVersion = newVersion;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultBehaviorPackVersion\");\r\n    }\r\n  }\r\n\r\n  get defaultDataUniqueId(): string {\r\n    return this.#data.defaultDataUniqueId;\r\n  }\r\n\r\n  set defaultDataUniqueId(newId: string) {\r\n    if (this.#data.defaultDataUniqueId !== newId) {\r\n      this.#data.defaultDataUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultDataUniqueId\");\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if an info set generation is currently in progress.\r\n   * Can be used by UI to show waiting state.\r\n   */\r\n  public get isInfoSetGenerationInProgress(): boolean {\r\n    return this.#infoSetGenerationPromise !== null;\r\n  }\r\n\r\n  public async ensureIndevInfoSetGenerated() {\r\n    const infoSet = this.indevInfoSet;\r\n\r\n    if (infoSet.completedGeneration) {\r\n      return infoSet;\r\n    }\r\n\r\n    // If a generation is already in progress, wait for it instead of starting a new one\r\n    // This allows the Inspector view to wait for an existing worker operation\r\n    if (this.#infoSetGenerationPromise) {\r\n      Log.verbose(\"Info set generation already in progress, waiting for existing operation...\");\r\n      return this.#infoSetGenerationPromise;\r\n    }\r\n\r\n    // Create a promise that will be resolved when generation completes\r\n    // This allows other callers to wait for the same operation\r\n    this.#infoSetGenerationPromise = this._performInfoSetGeneration(infoSet);\r\n\r\n    try {\r\n      return await this.#infoSetGenerationPromise;\r\n    } finally {\r\n      // Clear the promise when done (success or failure)\r\n      this.#infoSetGenerationPromise = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Internal method that performs the actual info set generation.\r\n   * Separated from ensureInfoSetGenerated to allow tracking via promise.\r\n   */\r\n  private async _performInfoSetGeneration(infoSet: ProjectInfoSet): Promise<ProjectInfoSet> {\r\n    // Track the worker-tracked operation across the entire try/catch so we can\r\n    // guarantee it is ended in the finally block. Without this, edge cases where\r\n    // the worker resolves but doesn't fire both streaming callbacks (or where any\r\n    // statement between notifyOperationStarted and the success branch throws) would\r\n    // leak the operation, leaving the status-bar pickaxe progress indicator stuck\r\n    // visible \"forever\" with a stale tooltip from whatever last status got pushed\r\n    // (often \"Done loading project files for '<title>'\").\r\n    let workerOperationId: number | undefined;\r\n\r\n    // Try to use combined worker operation in browser environments\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\" && !this.#relationsProcessed) {\r\n      try {\r\n        const workerManager = getProjectWorkerManager();\r\n        if (workerManager && workerManager.isSupported) {\r\n          // Start an operation on the main thread to track progress\r\n          workerOperationId = await this.#creatorTools.notifyOperationStarted(\r\n            `Validating '${this.simplifiedName}' (0%)`,\r\n            StatusTopic.validation\r\n          );\r\n          const operationId = workerOperationId;\r\n\r\n          // Create progress callback that forwards to CreatorTools status updates\r\n          const onProgress = (message: string, percent?: number) => {\r\n            // Floor the percent to ensure integer values for status bar regex matching\r\n            const statusMessage = percent !== undefined ? `${message} (${Math.floor(percent)}%)` : message;\r\n            this.#creatorTools.notifyOperationUpdate(operationId, statusMessage, StatusTopic.validation);\r\n          };\r\n\r\n          // Track if we received streamed results\r\n          let relationsComplete = false;\r\n          let validationComplete = false;\r\n\r\n          // Streaming callbacks for receiving results as they complete\r\n          const streamingCallbacks = {\r\n            onRelationsComplete: () => {\r\n              // Relations are applied automatically by the worker manager\r\n              this.#relationsProcessed = true;\r\n              relationsComplete = true;\r\n              Log.verbose(\"[Project] Relations streamed from worker\");\r\n              // Notify UI so data-relations-complete attribute updates immediately\r\n              this._onPropertyChanged.dispatch(this, \"relationsProcessed\");\r\n            },\r\n            onValidationComplete: async (\r\n              serializedInfoItems: import(\"../workers/IProjectWorkerMessage\").ISerializableInfoItem[]\r\n            ) => {\r\n              // Preload topic forms in main thread so aggregateFeatures can look up proper titles\r\n              const allGeneratorIds = [\r\n                ...GeneratorRegistrations.projectGenerators.map((g) => g.id),\r\n                ...GeneratorRegistrations.itemGenerators.map((g) => g.id),\r\n                ...GeneratorRegistrations.fileGenerators.map((g) => g.id),\r\n              ];\r\n              await InfoGeneratorTopicUtilities.preloadAllForms(allGeneratorIds);\r\n\r\n              // Deserialize info items and apply to infoSet\r\n              const items = this.getItemsCopy();\r\n              const itemsByPath = new Map<string, ProjectItem>();\r\n              for (const item of items) {\r\n                if (item.projectPath) {\r\n                  itemsByPath.set(item.projectPath, item);\r\n                }\r\n              }\r\n\r\n              infoSet.items = serializedInfoItems.map((s) => {\r\n                const infoItem = new ProjectInfoItem(\r\n                  s.itemType,\r\n                  s.generatorId,\r\n                  s.generatorIndex,\r\n                  s.message,\r\n                  s.projectItemStoragePath ? itemsByPath.get(s.projectItemStoragePath) : undefined,\r\n                  s.data,\r\n                  s.content\r\n                );\r\n                if (s.featureSets) {\r\n                  infoItem.featureSets = s.featureSets;\r\n                }\r\n                return infoItem;\r\n              });\r\n\r\n              await infoSet.markGenerationCompleteAsync();\r\n              validationComplete = true;\r\n              Log.verbose(`[Project] Validation streamed from worker: ${infoSet.items.length} items`);\r\n            },\r\n            onThumbnailBatch: (\r\n              thumbnails: { [projectPath: string]: string },\r\n              thumbnailLinks?: { [projectPath: string]: string }\r\n            ) => {\r\n              // Thumbnails are applied automatically by the worker manager.\r\n              // Notify the UI to re-render so thumbnails appear in the sidebar.\r\n              const thumbnailCount = Object.keys(thumbnails).length;\r\n              const linkCount = thumbnailLinks ? Object.keys(thumbnailLinks).length : 0;\r\n              Log.debug(`[Project] Thumbnail batch received: ${thumbnailCount} thumbnails, ${linkCount} links`);\r\n              if (thumbnailCount > 0 || linkCount > 0) {\r\n                // Fire a property change to trigger sidebar re-render\r\n                this._onPropertyChanged.dispatch(this, \"thumbnails\");\r\n              }\r\n            },\r\n            onThumbnailsFinished: (cancelled: boolean, totalGenerated: number) => {\r\n              Log.debug(`[Project] Thumbnails finished: ${totalGenerated} generated, cancelled=${cancelled}`);\r\n            },\r\n          };\r\n\r\n          try {\r\n            const result = await workerManager.processRelationsAndGenerateInfoSetInWorker(\r\n              this,\r\n              infoSet.suite,\r\n              streamingCallbacks,\r\n              onProgress\r\n            );\r\n            if (result && relationsComplete && validationComplete) {\r\n              // Worker successfully processed relations and validation via streaming\r\n              this.#indevInfoSetNeedsUpdating = false;\r\n\r\n              // End the operation - progress bar disappears immediately\r\n              await this.#creatorTools.notifyOperationEnded(operationId, \"\", StatusTopic.validation);\r\n              workerOperationId = undefined;\r\n\r\n              return infoSet;\r\n            } else if (!result) {\r\n              // Worker didn't support the operation - fall through to main thread\r\n              await this.#creatorTools.notifyOperationEnded(operationId, \"\", StatusTopic.validation);\r\n              workerOperationId = undefined;\r\n            } else {\r\n              // Edge case: worker resolved but at least one streaming callback\r\n              // (relationsComplete / validationComplete) didn't fire as expected.\r\n              // Treat as a partial failure and fall back to main-thread processing.\r\n              // The finally block below will end the operation so the status-bar\r\n              // progress indicator clears.\r\n              Log.verbose(\r\n                `[Project] Worker streaming incomplete (relations=${relationsComplete}, validation=${validationComplete}); falling back to main thread`\r\n              );\r\n            }\r\n          } catch (e) {\r\n            // End the operation with error\r\n            await this.#creatorTools.notifyOperationEnded(\r\n              operationId,\r\n              `Validation failed: ${e}`,\r\n              StatusTopic.validation,\r\n              true\r\n            );\r\n            workerOperationId = undefined;\r\n            throw e;\r\n          }\r\n        }\r\n      } catch (e) {\r\n        // Fall back to main thread processing if worker fails\r\n        Log.verbose(\"Combined worker operation not available, falling back to main thread: \" + e);\r\n      } finally {\r\n        // Safety net: if for any reason the worker-tracked operation wasn't\r\n        // already ended on a success / handled-failure path above, end it now\r\n        // so the status-bar progress indicator doesn't stay stuck visible\r\n        // forever. This protects against partial-streaming edge cases and any\r\n        // unexpected throw between notifyOperationStarted and the branches\r\n        // that end the operation explicitly.\r\n        if (workerOperationId !== undefined) {\r\n          await this.#creatorTools.notifyOperationEnded(workerOperationId, \"\", StatusTopic.validation);\r\n          workerOperationId = undefined;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Fallback: use the standard main-thread approach\r\n    await infoSet.generateForProject(this.#indevInfoSetNeedsUpdating);\r\n\r\n    this.#indevInfoSetNeedsUpdating = false;\r\n\r\n    return infoSet;\r\n  }\r\n\r\n  async ensureScriptInDestination() {\r\n    const bpScriptsFolder = await this.ensureBehaviorPackScriptsFolder();\r\n\r\n    if (bpScriptsFolder === undefined) {\r\n      return;\r\n    }\r\n\r\n    const coreScriptsFolderPath = StorageUtilities.canonicalizePath(bpScriptsFolder.storageRelativePath);\r\n\r\n    for (const pi of this.#items) {\r\n      if ((pi.itemType === ProjectItemType.testJs || pi.itemType === ProjectItemType.js) && pi.projectPath) {\r\n        let spath = StorageUtilities.canonicalizePath(pi.projectPath);\r\n        if (!spath.startsWith(coreScriptsFolderPath)) {\r\n          const scriptsTokenIndex = spath.indexOf(\"/scripts/\");\r\n          if (scriptsTokenIndex >= 0) {\r\n            spath = spath.substring(scriptsTokenIndex + 8);\r\n          }\r\n\r\n          if (!pi.isContentLoaded) {\r\n            await pi.loadContent();\r\n          }\r\n\r\n          const itemFile = pi.primaryFile;\r\n\r\n          if (itemFile && itemFile.content) {\r\n            const buildProcessedJsItem = this.ensureItemByProjectPath(\r\n              StorageUtilities.ensureEndsWithDelimiter(coreScriptsFolderPath) +\r\n                StorageUtilities.ensureNotStartsWithDelimiter(spath),\r\n              ProjectItemStorageType.singleFile,\r\n              StorageUtilities.getLeafName(spath),\r\n              ProjectItemType.buildProcessedJs,\r\n              FolderContext.behaviorPack,\r\n              undefined,\r\n              ProjectItemCreationType.normal\r\n            );\r\n\r\n            if (!buildProcessedJsItem.isContentLoaded) {\r\n              buildProcessedJsItem.loadContent();\r\n            }\r\n\r\n            if (buildProcessedJsItem.primaryFile) {\r\n              buildProcessedJsItem.primaryFile.setContentIfSemanticallyDifferent(itemFile.content);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async hasScript() {\r\n    for (const pi of this.#items) {\r\n      if (\r\n        pi.itemType === ProjectItemType.actionSet ||\r\n        pi.itemType === ProjectItemType.testJs ||\r\n        pi.itemType === ProjectItemType.js ||\r\n        pi.itemType === ProjectItemType.buildProcessedJs ||\r\n        pi.itemType === ProjectItemType.ts\r\n      ) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    const scriptsFolder = await this.getBehaviorPackScriptsFolder();\r\n    if (!scriptsFolder) {\r\n      return false;\r\n    }\r\n\r\n    await scriptsFolder.load();\r\n\r\n    if (scriptsFolder.fileCount > 0 || scriptsFolder.folderCount > 0) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get projectCabinetFile() {\r\n    return this.#projectCabinetFile;\r\n  }\r\n\r\n  get defaultScriptModuleUniqueId(): string {\r\n    return this.#data.defaultScriptModuleUniqueId;\r\n  }\r\n\r\n  set defaultScriptModuleUniqueId(newId: string) {\r\n    if (this.#data.defaultScriptModuleUniqueId !== newId) {\r\n      this.#data.defaultScriptModuleUniqueId = newId;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"defaultScriptModuleUniqueId\");\r\n    }\r\n  }\r\n\r\n  get focus(): ProjectFocus {\r\n    return this.#data.focus;\r\n  }\r\n\r\n  set focus(newFocus: ProjectFocus) {\r\n    if (this.#data.focus !== newFocus) {\r\n      this.#data.focus = newFocus;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"focus\");\r\n    }\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools, name: string, preferencesFile: IFile | null, sanitizeName?: boolean) {\r\n    this.creationTime = Date.now();\r\n\r\n    this._handleDeployUpdated = this._handleDeployUpdated.bind(this);\r\n    this._handleProjectFileContentsUpdated = this._handleProjectFileContentsUpdated.bind(this);\r\n    this._handleProjectFileAdded = this._handleProjectFileAdded.bind(this);\r\n    this._handleProjectFileRemoved = this._handleProjectFileRemoved.bind(this);\r\n    this._flushExternalChanges = this._flushExternalChanges.bind(this);\r\n    this.applyUpdate = this.applyUpdate.bind(this);\r\n    this.loadPreferencesAndFolder = this.loadPreferencesAndFolder.bind(this);\r\n    this.ensureProjectFolder = this.ensureProjectFolder.bind(this);\r\n    this._handleProjectFolderMoved = this._handleProjectFolderMoved.bind(this);\r\n\r\n    this.loc = new LocManager(this);\r\n\r\n    let sanName = name;\r\n\r\n    if (sanitizeName) {\r\n      sanName = ProjectUtilities.sanitizeProjectName(sanName);\r\n    }\r\n\r\n    this.#data = {\r\n      dataType: ProjectDataType.clientStorage,\r\n      variants: {},\r\n      storageBasePath: \"\",\r\n      contentsModified: null,\r\n      created: new Date(),\r\n      lastOpened: new Date(),\r\n      dataStorageRelativePath: \"/\" + name + \"/\",\r\n      editPreference: ProjectEditPreference.default,\r\n      name: sanName,\r\n      title: sanName,\r\n      description: sanName + \" description\",\r\n      defaultBehaviorPackUniqueId: Utilities.createUuid(),\r\n      defaultResourcePackUniqueId: Utilities.createUuid(),\r\n      defaultScriptModuleUniqueId: Utilities.createUuid(),\r\n      defaultDataUniqueId: Utilities.createUuid(),\r\n      focus: ProjectFocus.general,\r\n      items: [],\r\n    };\r\n\r\n    this.#preferencesFile = preferencesFile;\r\n\r\n    this.#projectFolder = null;\r\n    this.defaultBehaviorPackFolder = null;\r\n    this.defaultWorldFolder = null;\r\n    this.defaultSkinPackFolder = null;\r\n    this.defaultDesignPackFolder = null;\r\n    this.#defaultScriptsFolder = null;\r\n    this.behaviorPacksContainer = null;\r\n    this.docsContainer = null;\r\n    this.defaultResourcePackFolder = null;\r\n    this.resourcePacksContainer = null;\r\n    this.designPacksContainer = null;\r\n    this.skinPacksContainer = null;\r\n    this.worldContainer = null;\r\n    this.defaultPersonaPackFolder = null;\r\n    this.personaPacksContainer = null;\r\n    this.projectItemAccessoryFolder = null;\r\n    this.#creatorTools = creatorTools;\r\n    this.#items = [];\r\n    this.variants = {};\r\n  }\r\n\r\n  notifyProjectItemChanged(item: ProjectItem) {\r\n    this._onItemChanged.dispatch(this, item);\r\n  }\r\n\r\n  notifyProjectItemContentChanged(item: ProjectItem, fileUpdate: IFileUpdateEvent) {\r\n    this._onItemContentChanged.dispatch(this, { item: item, fileUpdate: fileUpdate });\r\n  }\r\n\r\n  clearFolders() {\r\n    this._unapplyFromProjectFolder();\r\n\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.clearAllManagers();\r\n    }\r\n\r\n    this.#projectFolder = null;\r\n    this.defaultBehaviorPackFolder = null;\r\n    this.defaultWorldFolder = null;\r\n    this.defaultSkinPackFolder = null;\r\n    this.defaultDesignPackFolder = null;\r\n    this.#defaultScriptsFolder = null;\r\n    this.behaviorPacksContainer = null;\r\n    this.docsContainer = null;\r\n    this.defaultResourcePackFolder = null;\r\n    this.resourcePacksContainer = null;\r\n    this.skinPacksContainer = null;\r\n    this.worldContainer = null;\r\n\r\n    this.#packs = [];\r\n  }\r\n\r\n  ensureVariant(label: string) {\r\n    label = ProjectVariant.canonicalizeVariantLabel(label);\r\n\r\n    if (!this.variants[label]) {\r\n      if (!this.#data.variants) {\r\n        this.#data.variants = {};\r\n      }\r\n\r\n      if (Utilities.isUsableAsObjectKey(label)) {\r\n        if (this.#data.variants[label] === undefined) {\r\n          this.#data.variants[label] = { label: label };\r\n        }\r\n\r\n        this.variants[label] = new ProjectVariant(this, this.#data.variants[label]);\r\n      }\r\n    }\r\n\r\n    return this.variants[label];\r\n  }\r\n\r\n  async ensureWorldContainer() {\r\n    if (!this.worldContainer) {\r\n      const pf = await this.ensureProjectFolder();\r\n\r\n      if (pf) {\r\n        await pf.load(false);\r\n\r\n        if (pf.folders[\"worlds\"]) {\r\n          this.worldContainer = pf.folders[\"worlds\"];\r\n        } else if (pf.folders[\"minecraftWorlds\"]) {\r\n          this.worldContainer = pf.folders[\"minecraftWorlds\"];\r\n        } else {\r\n          this.worldContainer = pf;\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.worldContainer;\r\n  }\r\n\r\n  async ensureCatalogIndex() {\r\n    if (!this.hasScript) {\r\n      return;\r\n    }\r\n\r\n    const scriptsFolder = await this.ensureBehaviorPackScriptsFolder();\r\n\r\n    if (!scriptsFolder) {\r\n      return;\r\n    }\r\n\r\n    this.ensureItemByTag(\r\n      \"jsindex\",\r\n      \"index.js\",\r\n      ProjectItemType.catalogIndexJs,\r\n      StorageUtilities.ensureEndsWithDelimiter(scriptsFolder.storageRelativePath) + \"index.js\",\r\n      ProjectItemStorageType.singleFile,\r\n      ProjectItemCreationType.generated\r\n    );\r\n  }\r\n\r\n  async getDefaultScriptsFile() {\r\n    const defaultBehaviorPack = await this.getDefaultBehaviorPack();\r\n\r\n    if (defaultBehaviorPack) {\r\n      if (defaultBehaviorPack.manifest) {\r\n        const manifest = defaultBehaviorPack.manifest as BehaviorManifestDefinition;\r\n\r\n        const scriptMod = manifest.getScriptModule();\r\n\r\n        if (scriptMod && scriptMod.entry && scriptMod.entry.toLowerCase().startsWith(\"scripts/\")) {\r\n          let scriptsFolder = await this.getMainScriptsFolder();\r\n\r\n          let scriptsText = scriptMod.entry.substring(8);\r\n\r\n          if (scriptsText.toLowerCase().endsWith(\".js\")) {\r\n            scriptsText = scriptsText.substring(0, scriptsText.length - 3);\r\n          }\r\n\r\n          if (scriptsFolder) {\r\n            let file = scriptsFolder.files[scriptsText + \".ts\"];\r\n\r\n            if (!file) {\r\n              file = scriptsFolder.files[scriptsText + \".js\"];\r\n            }\r\n\r\n            return file;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async inferProjectItemsFromFilesRootFolder(force?: boolean, processingCallback?: (area: string) => void) {\r\n    const rootFolder = await this.ensureProjectFolder();\r\n\r\n    const operId = await this.creatorTools.notifyOperationStarted(\r\n      \"Loading project files for '\" + this.name + \"'\",\r\n      StatusTopic.projectLoad\r\n    );\r\n\r\n    if (this.#projectFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        this,\r\n        rootFolder,\r\n        \"\",\r\n        FolderContext.unknown,\r\n        undefined,\r\n        false,\r\n        this.#projectFolder,\r\n        0,\r\n        undefined,\r\n        force,\r\n        processingCallback\r\n      );\r\n\r\n      if (processingCallback) {\r\n        processingCallback(\"Analyzing \" + this.items.length + \" project items...\");\r\n      }\r\n    }\r\n\r\n    await this.creatorTools.notifyOperationEnded(\r\n      operId,\r\n      \"Done loading project files for '\" + this.title + \"'\",\r\n      StatusTopic.projectLoad\r\n    );\r\n\r\n    this.hasInferredFiles = true;\r\n  }\r\n\r\n  async ensureAutogeneratedBehaviorPackManifest() {\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (!bpFolder) {\r\n      return;\r\n    }\r\n\r\n    this.ensureItemByTag(\r\n      \"manifestjson\",\r\n      \"behaviorpackmanifest\",\r\n      ProjectItemType.behaviorPackManifestJson,\r\n      StorageUtilities.ensureEndsWithDelimiter(bpFolder.storageRelativePath) + \"manifest.json\",\r\n      ProjectItemStorageType.singleFile,\r\n      ProjectItemCreationType.generated\r\n    );\r\n  }\r\n\r\n  dispose() {\r\n    if (this.#projectFolder) {\r\n      this._unapplyFromProjectFolder();\r\n      this.#projectFolder.dispose();\r\n      this.#projectFolder = null;\r\n    }\r\n\r\n    if (this.#projectCabinetFile) {\r\n      this.#projectCabinetFile.dispose();\r\n      this.#projectCabinetFile = null;\r\n    }\r\n\r\n    if (this.#distBuildFolder) {\r\n      this.#distBuildFolder.dispose();\r\n      this.#distBuildFolder = null;\r\n    }\r\n\r\n    if (this.#libFolder) {\r\n      this.#libFolder.dispose();\r\n      this.#libFolder = null;\r\n    }\r\n\r\n    if (this.#distBuildScriptsFolder) {\r\n      this.#distBuildScriptsFolder.dispose();\r\n      this.#distBuildScriptsFolder = null;\r\n    }\r\n\r\n    if (this.#libScriptsFolder) {\r\n      this.#libScriptsFolder.dispose();\r\n      this.#libScriptsFolder = null;\r\n    }\r\n\r\n    if (this.docsContainer) {\r\n      this.docsContainer.dispose();\r\n      this.docsContainer = null;\r\n    }\r\n\r\n    if (this.worldContainer) {\r\n      this.worldContainer.dispose();\r\n      this.worldContainer = null;\r\n    }\r\n\r\n    if (this.behaviorPacksContainer) {\r\n      this.behaviorPacksContainer.dispose();\r\n      this.behaviorPacksContainer = null;\r\n    }\r\n\r\n    if (this.defaultBehaviorPackFolder) {\r\n      this.defaultBehaviorPackFolder.dispose();\r\n      this.defaultBehaviorPackFolder = null;\r\n    }\r\n\r\n    if (this.#defaultScriptsFolder) {\r\n      this.#defaultScriptsFolder.dispose();\r\n      this.#defaultScriptsFolder = null;\r\n    }\r\n\r\n    if (this.resourcePacksContainer) {\r\n      this.resourcePacksContainer.dispose();\r\n      this.resourcePacksContainer = null;\r\n    }\r\n\r\n    if (this.defaultResourcePackFolder) {\r\n      this.defaultResourcePackFolder.dispose();\r\n      this.defaultResourcePackFolder = null;\r\n    }\r\n\r\n    this.#isDisposed = true;\r\n  }\r\n\r\n  resetProjectItems() {\r\n    const newProjectItems: ProjectItem[] = [];\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem.itemType !== ProjectItemType.unknown && projectItem.itemType !== ProjectItemType.unknownJson) {\r\n        newProjectItems.push(projectItem);\r\n      }\r\n    }\r\n\r\n    this.#items = newProjectItems;\r\n  }\r\n\r\n  ensureStoragePathIsCollapsed(storagePath: string) {\r\n    for (const pathCollapsed of this.collapsedStoragePaths) {\r\n      if (pathCollapsed === storagePath) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.collapsedStoragePaths.push(storagePath);\r\n  }\r\n\r\n  get isVanillaSourceProject() {\r\n    return this.defaultBehaviorPackUniqueId === \"ee649bcf-256c-4013-9068-6a802b89d756\";\r\n  }\r\n\r\n  get isVanillaEditSession(): boolean {\r\n    if (this.#isVanillaEditSession !== undefined) {\r\n      return this.#isVanillaEditSession;\r\n    }\r\n\r\n    this.computeIsVanillaEditSession();\r\n    return this.#isVanillaEditSession!;\r\n  }\r\n\r\n  computeIsVanillaEditSession() {\r\n    for (const pack of this.#packs) {\r\n      if (pack.folder && pack.folder.name === \"vanilla\") {\r\n        this.#isVanillaEditSession = true;\r\n        return;\r\n      }\r\n    }\r\n\r\n    for (const item of this.items) {\r\n      for (const variant of item.getVariantList()) {\r\n        if (\r\n          variant.variantType === ProjectItemVariantType.versionSlice ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAlt ||\r\n          variant.variantType === ProjectItemVariantType.versionSliceAltPacks\r\n        ) {\r\n          this.#isVanillaEditSession = true;\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.#isVanillaEditSession = false;\r\n  }\r\n\r\n  ensureStoragePathIsNotCollapsed(storagePath: string) {\r\n    const newCollapsedPaths: string[] = [];\r\n\r\n    for (const pathCollapsed of this.collapsedStoragePaths) {\r\n      if (pathCollapsed !== storagePath) {\r\n        newCollapsedPaths.push(pathCollapsed);\r\n      }\r\n    }\r\n\r\n    this.#data.collapsedStoragePaths = newCollapsedPaths;\r\n  }\r\n\r\n  async inferProjectItemsFromFiles(\r\n    force?: boolean,\r\n    processingCallback?: (area: string) => void,\r\n    deepScanJson?: boolean\r\n  ) {\r\n    if (!this.hasInferredFiles || force) {\r\n      // Reset cached vanilla-edit-session flag so it's recomputed after items are inferred\r\n      this.#isVanillaEditSession = undefined;\r\n\r\n      await this.ensureProjectFolder();\r\n\r\n      if (this.projectCabinetFile !== null) {\r\n        const operId = await this.creatorTools.notifyOperationStarted(\r\n          \"Loading project files for '\" + this.name + \"' from '\" + this.projectCabinetFile.fullPath + \"'\",\r\n          StatusTopic.projectLoad\r\n        );\r\n\r\n        await this.ensureProjectFolderFromCabinet();\r\n        /*await project._inferProjectItemsFromZipFile(\r\n          project.#projectCabinetFile.storageRelativePath,\r\n          project.#projectCabinetFile,\r\n          false\r\n        );*/\r\n\r\n        if (this.projectFolder) {\r\n          await ProjectItemInference.inferProjectItemsFromFolder(\r\n            this,\r\n            this.projectFolder,\r\n            \"\",\r\n            FolderContext.unknown,\r\n            undefined,\r\n            false,\r\n            this.projectFolder,\r\n            0,\r\n            undefined,\r\n            force\r\n          );\r\n        }\r\n\r\n        await this.creatorTools.notifyOperationEnded(\r\n          operId,\r\n          \"Done loading project files for '\" + this.title + \"' from file '\" + this.projectCabinetFile.fullPath + \"'\",\r\n          StatusTopic.projectLoad\r\n        );\r\n\r\n        this.hasInferredFiles = true;\r\n      } else {\r\n        await this.inferProjectItemsFromFilesRootFolder(false, processingCallback);\r\n      }\r\n\r\n      if (this.#accessoryFolders) {\r\n        for (let i = 0; i < this.#accessoryFolders.length; i++) {\r\n          await ProjectItemInference.inferProjectItemsFromFolder(\r\n            this,\r\n            this.#accessoryFolders[i],\r\n            \"\",\r\n            FolderContext.unknown,\r\n            undefined,\r\n            false,\r\n            this.#accessoryFolders[i],\r\n            0,\r\n            \"o.\" + this.#accessoryFolders[i].name,\r\n            force,\r\n            processingCallback\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureProjectFolderFromCabinet() {\r\n    if (!this.#projectCabinetFile) {\r\n      Log.unexpectedUndefined(\"EPFFC\");\r\n      return;\r\n    }\r\n\r\n    if (!this.#projectCabinetFile.isContentLoaded) {\r\n      await this.#projectCabinetFile.loadContent();\r\n    }\r\n\r\n    const rootFolder = await StorageUtilities.getFileStorageFolder(this.#projectCabinetFile);\r\n\r\n    if (rootFolder && typeof rootFolder === \"string\") {\r\n      this.#errorState = ProjectErrorState.cabinetFileCouldNotBeProcessed;\r\n      this.#errorMessage = rootFolder;\r\n    } else if (rootFolder !== this.#projectFolder && typeof rootFolder !== \"string\") {\r\n      this._unapplyFromProjectFolder();\r\n      if (rootFolder) {\r\n        this.#projectFolder = rootFolder;\r\n\r\n        this._applyToProjectFolder();\r\n      } else {\r\n        this.#projectFolder = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  async inferProjectItemsFromZipFile(projectPath: string, file: IFile, force?: boolean): Promise<string | undefined> {\r\n    let operId = await this.creatorTools.notifyOperationStarted(\"Loading package file \" + file.name);\r\n\r\n    if (!file.isContentLoaded) {\r\n      await file.loadContent();\r\n    }\r\n\r\n    const rootFolder = await StorageUtilities.getFileStorageFolder(file);\r\n\r\n    if (typeof rootFolder === \"string\") {\r\n      return rootFolder;\r\n    } else if (rootFolder) {\r\n      await ProjectItemInference.inferProjectItemsFromFolder(\r\n        this,\r\n        rootFolder,\r\n        projectPath + \"#\",\r\n        FolderContext.unknown,\r\n        undefined,\r\n        false,\r\n        rootFolder,\r\n        0,\r\n        undefined,\r\n        force\r\n      );\r\n    }\r\n\r\n    await this.creatorTools.notifyOperationEnded(operId, \"Done loading package file \" + file.name);\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async processRelations(force?: boolean) {\r\n    if (this.#relationsProcessed && !force) {\r\n      return;\r\n    }\r\n\r\n    if (this.#isProcessingRelations) {\r\n      const pendingProcessing = this.#pendingProcessingRelationsRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingProcessing.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n\r\n      return;\r\n    } else {\r\n      this.#isProcessingRelations = true;\r\n\r\n      this.#relationsBatchOperId = await this.creatorTools.notifyOperationStarted(\r\n        \"Processing relations for '\" + this.name + \"'\",\r\n        StatusTopic.processing\r\n      );\r\n\r\n      const items = this.getItemsCopy();\r\n\r\n      ProjectItemRelations.clearDependenciesForItems(items);\r\n\r\n      this.#itemsToBeProcessed = items.length;\r\n      this.#itemsProcessed = 0;\r\n\r\n      // Note: Relation processing in worker is now handled by the combined\r\n      // processRelationsAndGenerateInfoSetInWorker method when validation is requested.\r\n      // For standalone relation processing, we use the main thread to avoid complexity.\r\n\r\n      // Process on main thread\r\n      // @ts-ignore\r\n      if (items.length < ProcessItemRelationsBatchSize || typeof window === \"undefined\") {\r\n        await ProjectItemRelations.calculateForItems(items);\r\n        this.#itemsProcessed = this.#itemsToBeProcessed;\r\n        await this.completeProcessItemRelationsBatchProcessing();\r\n      } else {\r\n        // batch through setTimeout -- with small breaks in between -- to ensure the browser remains responsive\r\n        const batches = Math.floor(items.length / ProcessItemRelationsBatchSize);\r\n\r\n        for (let i = 0; i < batches; i++) {\r\n          // @ts-ignore\r\n          window.setTimeout(async () => {\r\n            await ProjectItemRelations.calculateForItems(\r\n              items.slice(i * ProcessItemRelationsBatchSize, (i + 1) * ProcessItemRelationsBatchSize)\r\n            );\r\n\r\n            this.#itemsProcessed += ProcessItemRelationsBatchSize;\r\n            await this.completeProcessItemRelationsBatchProcessing();\r\n          }, 0);\r\n        }\r\n\r\n        const leftOver = items.length % ProcessItemRelationsBatchSize;\r\n\r\n        if (leftOver > 0) {\r\n          // @ts-ignore\r\n          window.setTimeout(async () => {\r\n            await ProjectItemRelations.calculateForItems(items.slice(batches * ProcessItemRelationsBatchSize));\r\n\r\n            this.#itemsProcessed += leftOver;\r\n            await this.completeProcessItemRelationsBatchProcessing();\r\n          }, 0);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async completeProcessItemRelationsBatchProcessing() {\r\n    Log.verbose(\r\n      `[Thumbnails] completeProcessItemRelationsBatchProcessing called: ${this.#itemsProcessed}/${\r\n        this.#itemsToBeProcessed\r\n      }`\r\n    );\r\n    if (this.#itemsToBeProcessed > ProcessItemRelationsBatchSize * 2) {\r\n      await this.creatorTools.notifyOperationUpdate(\r\n        this.#relationsBatchOperId,\r\n        \"Processing relations for '\" +\r\n          this.name +\r\n          \"' (\" +\r\n          String(Math.floor((this.#itemsProcessed / this.#itemsToBeProcessed) * 100)) +\r\n          \"%)\",\r\n        StatusTopic.processing\r\n      );\r\n    }\r\n\r\n    if (this.#itemsProcessed >= this.#itemsToBeProcessed) {\r\n      this.#relationsProcessed = true;\r\n\r\n      if (this.#relationsBatchOperId !== undefined) {\r\n        await this.creatorTools.notifyOperationEnded(\r\n          this.#relationsBatchOperId,\r\n          \"Completed processing of '\" + this.name + \"'\",\r\n          StatusTopic.processing\r\n        );\r\n      }\r\n\r\n      this.#isProcessingRelations = false;\r\n\r\n      const pendingProcessing = this.#pendingProcessingRelationsRequests;\r\n      this.#pendingProcessingRelationsRequests = [];\r\n\r\n      for (const prom of pendingProcessing) {\r\n        prom(undefined);\r\n      }\r\n\r\n      // Note: Thumbnail generation is now handled in the combined relations+validation worker task\r\n      // (processRelationsAndGenerateInfoSet) as a low-priority background queue for efficiency.\r\n    }\r\n  }\r\n\r\n  async ensureJsIndexFile() {\r\n    if (this.projectFolder === null) {\r\n      throw new Error(\"Could not find project folder\");\r\n    }\r\n\r\n    const bpFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    const defaultPath = bpFolder.getFolderRelativePath(this.projectFolder);\r\n\r\n    this.ensureItemByTag(\r\n      \"jsindex\",\r\n      \"index.js\",\r\n      ProjectItemType.catalogIndexJs,\r\n      defaultPath + \"scripts/index.js\",\r\n      ProjectItemStorageType.singleFile,\r\n      ProjectItemCreationType.generated\r\n    );\r\n  }\r\n\r\n  async applyUpdate(updaterId: string, updaterIndex: number): Promise<ProjectUpdateResult[]> {\r\n    const pur = new ProjectUpdateRunner(this);\r\n\r\n    return await pur.update(updaterId, updaterIndex);\r\n  }\r\n\r\n  async getScriptState() {\r\n    const state: IProjectScriptState = {\r\n      hasScript: false,\r\n      hasModule: {},\r\n    };\r\n\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const pi = this.#items[i];\r\n\r\n      if (\r\n        pi.itemType === ProjectItemType.js ||\r\n        pi.itemType === ProjectItemType.buildProcessedJs ||\r\n        pi.itemType === ProjectItemType.testJs ||\r\n        pi.itemType === ProjectItemType.ts ||\r\n        pi.itemType === ProjectItemType.worldTest\r\n      ) {\r\n        state.hasScript = true;\r\n\r\n        if (\r\n          (pi.itemType === ProjectItemType.js ||\r\n            pi.itemType === ProjectItemType.buildProcessedJs ||\r\n            pi.itemType === ProjectItemType.testJs ||\r\n            pi.itemType === ProjectItemType.ts) &&\r\n          pi.primaryFile\r\n        ) {\r\n          if (!pi.primaryFile.isContentLoaded) {\r\n            await pi.primaryFile.loadContent();\r\n          }\r\n          const content = pi.primaryFile.content;\r\n\r\n          if (content && typeof content === \"string\") {\r\n            for (let i = 0; i < minecraftScriptModules.length; i++) {\r\n              const mod = minecraftScriptModules[i];\r\n\r\n              if (content.indexOf(mod.id) >= 0) {\r\n                if (Utilities.isUsableAsObjectKey(mod.id)) {\r\n                  state.hasModule[mod.id] = true;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return state;\r\n  }\r\n\r\n  getFirstItemByType(itemType: ProjectItemType) {\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const pi = this.#items[i];\r\n\r\n      if (pi.itemType === itemType) {\r\n        return pi;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  hasAddonJson() {\r\n    return false;\r\n  }\r\n\r\n  private async loadFolderStructure() {\r\n    Log.assert(!this.#isDisposed, \"PLFS\");\r\n\r\n    if (this.#folderStructureLoaded) {\r\n      return;\r\n    }\r\n\r\n    const projectFolder = await this.ensureProjectFolder();\r\n\r\n    const containerFiles: IFile[] = [];\r\n\r\n    await this.processProjectFolder(projectFolder, containerFiles);\r\n\r\n    this.#containerFiles = containerFiles;\r\n\r\n    this.#folderStructureLoaded = true;\r\n  }\r\n\r\n  public setToVersion(versionId: string) {\r\n    if (this.#projectFolder?.storage) {\r\n      this.#projectFolder.storage.setToVersion(versionId);\r\n    }\r\n\r\n    for (const containerFile of this.#containerFiles) {\r\n      if (containerFile.fileContainerStorage) {\r\n        containerFile.fileContainerStorage.setToVersion(versionId);\r\n      }\r\n    }\r\n  }\r\n\r\n  public getChangeList(): IVersionContent[] {\r\n    if (!this.#projectFolder) {\r\n      return [];\r\n    }\r\n\r\n    if (this.#containerFiles.length === 0) {\r\n      return this.#projectFolder.storage.priorVersions;\r\n    }\r\n\r\n    const changeList: IVersionContent[] = [];\r\n\r\n    for (const change of this.#projectFolder.storage.priorVersions) {\r\n      if (!StorageUtilities.isContainerFile(change.file.fullPath)) {\r\n        changeList.push(change);\r\n      }\r\n    }\r\n\r\n    for (const containerFile of this.#containerFiles) {\r\n      if (containerFile.fileContainerStorage) {\r\n        changeList.push(...containerFile.fileContainerStorage.priorVersions);\r\n      }\r\n    }\r\n\r\n    StorageUtilities.sortChangeList(changeList);\r\n\r\n    return changeList;\r\n  }\r\n\r\n  private async processProjectFolder(folder: IFolder, containerFiles: IFile[]) {\r\n    await folder.load();\r\n\r\n    let manifest = folder.files[\"manifest.json\"];\r\n\r\n    if (manifest === undefined) {\r\n      manifest = folder.files[\"pack_manifest.json\"];\r\n    }\r\n\r\n    if (!this.#projectFolder) {\r\n      throw new Error(\"Unexpectedly could not find a project folder.\");\r\n    }\r\n\r\n    if (manifest) {\r\n      let parentFolder = folder.parentFolder;\r\n\r\n      if (parentFolder === this.#projectFolder.parentFolder) {\r\n        parentFolder = null;\r\n      }\r\n\r\n      let folderContext = FolderContext.behaviorPack;\r\n      let isWorld = false;\r\n\r\n      if (parentFolder !== null) {\r\n        if (MinecraftUtilities.pathLooksLikeResourcePackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.resourcePack;\r\n        } else if (MinecraftUtilities.pathLooksLikeDesignPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.designPack;\r\n        } else if (MinecraftUtilities.pathLooksLikeSkinPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.skinPack;\r\n        } else if (MinecraftUtilities.pathLooksLikePersonaPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.persona;\r\n        } else if (MinecraftUtilities.pathLooksLikePersonaPackName(parentFolder.fullPath)) {\r\n          folderContext = FolderContext.persona;\r\n        }\r\n      }\r\n\r\n      const levelDat = folder.files[\"level.dat\"];\r\n\r\n      if (levelDat) {\r\n        isWorld = true;\r\n      }\r\n\r\n      if (isWorld && this.defaultWorldFolder === null) {\r\n        this.defaultWorldFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.worldContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.resourcePack && this.defaultResourcePackFolder === null) {\r\n        this.defaultResourcePackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.resourcePacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.designPack && this.defaultDesignPackFolder === null) {\r\n        this.defaultDesignPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.designPacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.skinPack && this.defaultSkinPackFolder === null) {\r\n        this.defaultSkinPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.skinPacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.persona && this.defaultPersonaPackFolder === null) {\r\n        this.defaultPersonaPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.personaPacksContainer = parentFolder;\r\n        }\r\n      } else if (!isWorld && folderContext === FolderContext.behaviorPack && this.defaultBehaviorPackFolder === null) {\r\n        this.defaultBehaviorPackFolder = folder;\r\n\r\n        if (parentFolder !== null) {\r\n          this.behaviorPacksContainer = parentFolder;\r\n        }\r\n      }\r\n    } else {\r\n      for (const folderName in folder.folders) {\r\n        const childFolder = folder.folders[folderName];\r\n\r\n        if (childFolder !== undefined && !childFolder.errorStatus) {\r\n          await this.processProjectFolder(childFolder, containerFiles);\r\n        }\r\n      }\r\n\r\n      for (const fileName in folder.files) {\r\n        const childFile = folder.files[fileName];\r\n\r\n        if (childFile && StorageUtilities.isContainerFile(childFile.fullPath)) {\r\n          let storageFolder = undefined;\r\n\r\n          storageFolder = await StorageUtilities.getFileStorageFolder(childFile);\r\n\r\n          if (childFile.fileContainerStorage && storageFolder && typeof storageFolder !== \"string\") {\r\n            containerFiles.push(childFile);\r\n\r\n            childFile.fileContainerStorage.onFileContentsUpdated.subscribe(this._handleProjectFileContentsUpdated);\r\n\r\n            await this.processProjectFolder(storageFolder, containerFiles);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public getItemByFile(file: IFile) {\r\n    let projectItem = this.getItemByProjectPath(file.storageRelativePath);\r\n\r\n    if (projectItem !== undefined) {\r\n      return projectItem;\r\n    }\r\n\r\n    return this.getItemByExtendedOrProjectPath(file.extendedPath);\r\n  }\r\n\r\n  public getItemByProjectPath(projectPath: string): ProjectItem | undefined {\r\n    return this.#itemsByProjectPath.get(ProjectUtilities.canonicalizeStoragePath(projectPath));\r\n  }\r\n\r\n  public getItemByExtendedOrProjectPath(storagePath: string): ProjectItem | undefined {\r\n    let path = ProjectUtilities.canonicalizeStoragePath(storagePath);\r\n    let result = this.#itemsByProjectPath.get(path);\r\n\r\n    if (result) {\r\n      return result;\r\n    }\r\n\r\n    let nextSlash = path.indexOf(\"/\", 1);\r\n\r\n    if (nextSlash > 1) {\r\n      result = this.#itemsByProjectPath.get(path.substring(nextSlash));\r\n\r\n      if (result) {\r\n        return result;\r\n      }\r\n    }\r\n\r\n    nextSlash = path.indexOf(\"root/\", 1);\r\n\r\n    if (nextSlash > 1) {\r\n      nextSlash = path.indexOf(\"/\", nextSlash + 5);\r\n\r\n      if (nextSlash > 1) {\r\n        result = this.#itemsByProjectPath.get(path.substring(nextSlash));\r\n\r\n        if (result) {\r\n          return result;\r\n        }\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureItemFromFile(\r\n    file: IFile,\r\n    itemType: ProjectItemType,\r\n    folderContext: FolderContext,\r\n    creationType?: ProjectItemCreationType\r\n  ) {\r\n    if (this.projectFolder) {\r\n      const projectPath = file.getFolderRelativePath(this.projectFolder);\r\n\r\n      if (projectPath) {\r\n        return this.ensureItemByProjectPath(\r\n          projectPath,\r\n          ProjectItemStorageType.singleFile,\r\n          file.name,\r\n          itemType,\r\n          folderContext,\r\n          undefined,\r\n          creationType ? creationType : ProjectItemCreationType.normal,\r\n          file\r\n        );\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  public ensureItemByProjectPath(\r\n    projectPath: string,\r\n    storageType: ProjectItemStorageType,\r\n    name: string,\r\n    itemType: ProjectItemType,\r\n    context: FolderContext,\r\n    source?: string,\r\n    creationType?: ProjectItemCreationType,\r\n    file?: IFile,\r\n    tag?: string,\r\n    isInWorld?: boolean\r\n  ) {\r\n    let variantName = undefined;\r\n    let originalPath = projectPath;\r\n    let targetVariantType: ProjectItemVariantType = ProjectItemVariantType.general;\r\n    const projectPathLower = projectPath.toLowerCase();\r\n\r\n    if (context === FolderContext.resourcePackSubPack) {\r\n      const indexOfSubpacks = projectPathLower.indexOf(\"/subpacks/\");\r\n\r\n      if (indexOfSubpacks >= 0) {\r\n        const nextSlash = projectPath.indexOf(\"/\", indexOfSubpacks + 10);\r\n\r\n        if (nextSlash >= 0) {\r\n          targetVariantType = ProjectItemVariantType.subPack;\r\n          variantName = projectPath.substring(indexOfSubpacks + 10, nextSlash);\r\n          projectPath = projectPath.substring(0, indexOfSubpacks) + projectPath.substring(nextSlash);\r\n        }\r\n      }\r\n    } else {\r\n      const staticAssetsPos = projectPathLower.indexOf(\"/static-assets\");\r\n      const packRootPos = projectPathLower.indexOf(\"_pack/\");\r\n      if (staticAssetsPos >= 0 && packRootPos >= 0) {\r\n        const previousSlash = projectPath.lastIndexOf(\"/\", staticAssetsPos - 1);\r\n\r\n        if (previousSlash >= 0) {\r\n          let packFolderName = projectPath.substring(previousSlash + 1, staticAssetsPos);\r\n\r\n          const lastUnderscore = packFolderName.lastIndexOf(\"_\");\r\n          if (lastUnderscore > 0) {\r\n            const potentialVersionSection = packFolderName.substring(lastUnderscore + 1);\r\n\r\n            if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n              variantName = potentialVersionSection;\r\n              targetVariantType = ProjectItemVariantType.versionSliceAlt;\r\n              projectPath = projectPath.replace(\"_\" + potentialVersionSection + \"/\", \"/\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      const packsRoot = projectPathLower.indexOf(\"_packs/\");\r\n      if (packsRoot >= 0) {\r\n        const packFolderNameEnd = projectPathLower.indexOf(\"/\", packsRoot + 7);\r\n\r\n        if (packFolderNameEnd > 0) {\r\n          const packFolderName = projectPath.substring(packsRoot + 7, packFolderNameEnd);\r\n\r\n          const lastUnderscore = packFolderName.lastIndexOf(\"_\");\r\n          if (lastUnderscore > 0) {\r\n            const potentialVersionSection = packFolderName.substring(lastUnderscore + 1);\r\n\r\n            if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n              variantName = potentialVersionSection;\r\n              targetVariantType = ProjectItemVariantType.versionSlice;\r\n\r\n              projectPath = projectPath.replace(\"_\" + potentialVersionSection + \"/\", \"/\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!variantName) {\r\n        for (const variantFolderSeed of vanillaSliceFolderSeeds) {\r\n          let variantSource = projectPathLower.indexOf(\"/\" + variantFolderSeed.toLowerCase() + \"_\");\r\n          if (variantSource >= 0) {\r\n            let startOfSection = variantSource + variantFolderSeed.length + 2;\r\n            let nextSlash = projectPath.indexOf(\"/\", startOfSection);\r\n\r\n            if (nextSlash >= startOfSection) {\r\n              {\r\n                const potentialVersionSection = projectPathLower.substring(startOfSection, nextSlash);\r\n\r\n                if (Utilities.isNumericIsh(potentialVersionSection) && potentialVersionSection.indexOf(\".\") > 0) {\r\n                  variantName = potentialVersionSection;\r\n                  targetVariantType = ProjectItemVariantType.versionSliceAltPacks;\r\n\r\n                  projectPath = projectPath.replace(\"_\" + potentialVersionSection + \"/\", \"/\");\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    let pi = this.getItemByProjectPath(projectPath);\r\n\r\n    if (pi !== undefined) {\r\n      if (variantName) {\r\n        const piv = pi.ensureVariant(variantName);\r\n\r\n        piv.projectPath = originalPath;\r\n        piv.variantType = targetVariantType;\r\n\r\n        if (!piv.file && file) {\r\n          piv.setFile(file);\r\n        }\r\n      } else {\r\n        if (!pi.defaultFile && file) {\r\n          pi.setFile(file);\r\n        }\r\n      }\r\n\r\n      return pi;\r\n    }\r\n\r\n    const tags = [];\r\n\r\n    if (tag) {\r\n      tags.push(tag);\r\n    }\r\n\r\n    pi = this.createItem({\r\n      itemType: itemType,\r\n      variants: {},\r\n      projectPath: projectPath,\r\n      storageType: storageType,\r\n      creationType: creationType,\r\n      source: source,\r\n      tags: tags,\r\n      name: name,\r\n    });\r\n\r\n    if (variantName) {\r\n      const piv = pi.ensureVariant(variantName);\r\n\r\n      piv.variantType = targetVariantType;\r\n      piv.projectPath = originalPath;\r\n\r\n      if (file) {\r\n        piv.setFile(file);\r\n      }\r\n    } else if (file) {\r\n      pi.setFile(file);\r\n    }\r\n\r\n    if (isInWorld !== undefined) {\r\n      pi.isInWorld = isInWorld;\r\n    }\r\n\r\n    if (pi.itemType === ProjectItemType.unknownJson && itemType !== ProjectItemType.unknownJson) {\r\n      pi.itemType = itemType;\r\n    }\r\n\r\n    return pi;\r\n  }\r\n\r\n  public getItemByTag(tag: string): ProjectItem | null {\r\n    for (const projectItem of this.#items) {\r\n      if (projectItem.hasTag(tag)) {\r\n        return projectItem;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public hasItemOfType(type: ProjectItemType): boolean {\r\n    for (const projectItem of this.#items) {\r\n      if (projectItem.itemType === type) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public ensureItemByTag(\r\n    tag: string,\r\n    name: string,\r\n    itemType: ProjectItemType,\r\n    storagePath?: string,\r\n    storageType?: ProjectItemStorageType,\r\n    creationType?: ProjectItemCreationType,\r\n    file?: IFile,\r\n    isInWorld?: boolean\r\n  ) {\r\n    let pi = this.getItemByTag(tag);\r\n\r\n    if (pi != null) {\r\n      return pi;\r\n    }\r\n\r\n    pi = this.createItem({\r\n      itemType: itemType,\r\n      variants: {},\r\n      projectPath: storagePath,\r\n      storageType: storageType,\r\n      creationType: creationType,\r\n      tags: [tag],\r\n      name: name,\r\n    });\r\n\r\n    if (file) {\r\n      pi.setFile(file);\r\n    }\r\n\r\n    if (pi.itemType === ProjectItemType.unknownJson && itemType !== ProjectItemType.unknownJson) {\r\n      pi.itemType = itemType;\r\n    }\r\n\r\n    return pi;\r\n  }\r\n\r\n  async ensureWorkingFolderForFile(file: IFile) {\r\n    if (!this.projectFolder) {\r\n      return undefined;\r\n    }\r\n\r\n    let relativePath = file.getFolderRelativePath(this.projectFolder);\r\n\r\n    if (relativePath === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    relativePath = StorageUtilities.canonicalizePath(relativePath);\r\n\r\n    relativePath = StorageUtilities.ensureEndsWithDelimiter(relativePath.replace(/\\./gi, \"_\"));\r\n\r\n    const workingFolder = this.projectFolder.ensureFolder(\".working\");\r\n\r\n    return await workingFolder.ensureFolderFromRelativePath(relativePath);\r\n  }\r\n\r\n  createItem(initialSettings: IProjectItemData) {\r\n    this.#data.items.push(initialSettings);\r\n\r\n    const pi = new ProjectItem(this, initialSettings);\r\n\r\n    const path = ProjectUtilities.canonicalizeStoragePath(pi.projectPath);\r\n\r\n    if (Utilities.isUsableAsObjectKey(path)) {\r\n      this.#itemsByProjectPath.set(path, pi);\r\n      this.#itemsByType.set(initialSettings.itemType, undefined);\r\n\r\n      this.#items.push(pi);\r\n      this.#indevInfoSetNeedsUpdating = true;\r\n      this._onItemAdded.dispatch(this, pi);\r\n\r\n      const telemetryProperties: Record<string, any> = {\r\n        [TelemetryProperties.ITEM_TYPE]: initialSettings.itemType,\r\n      };\r\n\r\n      if (initialSettings.source) {\r\n        telemetryProperties[TelemetryProperties.TEMPLATE] = initialSettings.source;\r\n      }\r\n\r\n      telemetry.trackEvent({\r\n        name: TelemetryEvents.ADD_NEW_PROJECT_ITEM,\r\n        properties: telemetryProperties,\r\n      });\r\n    }\r\n\r\n    return pi;\r\n  }\r\n\r\n  async loadPreferencesAndFolder() {\r\n    Log.assert(!this.#isDisposed, \"PLF\");\r\n\r\n    if (this.#isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (this.#preferencesFile === null) {\r\n      return;\r\n    }\r\n\r\n    if (!this.#preferencesFile.isContentLoaded) {\r\n      await this.#preferencesFile.loadContent(false);\r\n    }\r\n\r\n    this.hasInferredFiles = false;\r\n    this.#items = [];\r\n    this.#itemsByProjectPath = new Map();\r\n    this.#data.items = [];\r\n\r\n    if (Utilities.isString(this.#preferencesFile.content) && this.#preferencesFile.content != null) {\r\n      try {\r\n        this.#data = JSON.parse(this.#preferencesFile.content as string);\r\n      } catch (e) {\r\n        Log.debug(\"Failed to parse project preferences JSON: \" + e);\r\n      }\r\n    }\r\n\r\n    await this.ensureProjectFolder();\r\n\r\n    this.#isLoaded = true;\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n  }\r\n\r\n  /**\r\n   * Loads just the project preferences file (lightweight - doesn't load project folder).\r\n   * Useful for displaying project metadata in lists without full project initialization.\r\n   */\r\n  async ensurePreferencesLoaded() {\r\n    if (this.#preferencesFile === null) {\r\n      return;\r\n    }\r\n\r\n    if (!this.#preferencesFile.isContentLoaded) {\r\n      await this.#preferencesFile.loadContent(false);\r\n    }\r\n\r\n    if (Utilities.isString(this.#preferencesFile.content) && this.#preferencesFile.content != null) {\r\n      try {\r\n        this.#data = JSON.parse(this.#preferencesFile.content as string);\r\n      } catch (e) {\r\n        Log.debug(\"Failed to parse project preferences JSON: \" + e);\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensureInflated() {\r\n    Log.assert(!this.#isDisposed, \"PLINF\");\r\n\r\n    if (this.#isInflated) {\r\n      return;\r\n    }\r\n\r\n    await this.loadPreferencesAndFolder();\r\n\r\n    this.#items = [];\r\n    this.#itemsByProjectPath = new Map();\r\n\r\n    if (this.#data) {\r\n      for (let i = 0; i < this.#data.items.length; i++) {\r\n        const projectItemData = this.#data.items[i];\r\n\r\n        const projectItem = new ProjectItem(this, projectItemData);\r\n        const path = ProjectUtilities.canonicalizeStoragePath(projectItem.projectPath);\r\n\r\n        if (Utilities.isUsableAsObjectKey(path)) {\r\n          this.#itemsByProjectPath.set(path, projectItem);\r\n          this.#itemsByType.set(projectItem.itemType, undefined);\r\n\r\n          this.#items.push(projectItem);\r\n\r\n          this._onItemAdded.dispatch(this, projectItem);\r\n        }\r\n      }\r\n    }\r\n\r\n    this._onInflated.dispatch(this, this);\r\n\r\n    this.initializeWorldSettings();\r\n    this.ensureDefaultWorldName();\r\n\r\n    this.#isInflated = true;\r\n\r\n    // Freshly loaded content is, by definition, not user-modified yet. Any file-update\r\n    // events that fired while subscriptions were being wired up during load/inflate\r\n    // (e.g., default-item generation, auto-migrations, template population) represent\r\n    // the loaded state, not user edits. Clear the change tracker so dirty/change\r\n    // indicators only light up in response to actual user actions after load.\r\n    this.changedFilesSinceLastSaved = {};\r\n  }\r\n\r\n  async deletePreferencesFile() {\r\n    if (this.#preferencesFile) {\r\n      await this.#preferencesFile.deleteThisFile();\r\n    }\r\n  }\r\n\r\n  async deleteThisProject() {\r\n    await this.deletePreferencesFile();\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.projectFolder) {\r\n      await this.#projectFolder?.deleteThisFolder();\r\n    }\r\n  }\r\n\r\n  async saveToFile() {\r\n    Log.assert(!this.#isDisposed, \"PSF\");\r\n\r\n    if (this.#preferencesFile === null) {\r\n      return;\r\n    }\r\n\r\n    if (this.#preferencesFile.setObjectContentIfSemanticallyDifferent(this.#data, FileUpdateType.versionlessEdit)) {\r\n      await this.#preferencesFile.saveContent();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates the project's preview image from available pack icons or textures.\r\n   * Priority: (1) behavior pack icon, (2) resource pack icon, (3) skin pack icon, (4) any texture\r\n   */\r\n  async updatePreviewImageIfNeeded(): Promise<boolean> {\r\n    // Skip if we already have a preview image\r\n    if (this.#data.previewImageBase64) {\r\n      return false;\r\n    }\r\n\r\n    // Ensure folder structure is loaded so we have access to all items\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    // Try to find a suitable preview image in priority order\r\n    let imageFile: IFile | undefined;\r\n\r\n    // 1. Look for pack icon images (behavior pack, resource pack, skin pack icons)\r\n    const packIconItems = this.getItemsByType(ProjectItemType.packIconImage);\r\n    for (const iconItem of packIconItems) {\r\n      if (!iconItem.isContentLoaded) {\r\n        await iconItem.loadContent();\r\n      }\r\n      if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n        // Prefer behavior pack icons first (check if in behavior_packs folder)\r\n        const path = iconItem.projectPath?.toLowerCase() || \"\";\r\n        if (path.includes(\"behavior_pack\") || path.includes(\"bp\")) {\r\n          imageFile = iconItem.primaryFile;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // 2. If no behavior pack icon, try resource pack icon\r\n    if (!imageFile) {\r\n      for (const iconItem of packIconItems) {\r\n        if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n          const path = iconItem.projectPath?.toLowerCase() || \"\";\r\n          if (path.includes(\"resource_pack\") || path.includes(\"rp\")) {\r\n            imageFile = iconItem.primaryFile;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // 3. If no resource pack icon, try skin pack icon\r\n    if (!imageFile) {\r\n      for (const iconItem of packIconItems) {\r\n        if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n          const path = iconItem.projectPath?.toLowerCase() || \"\";\r\n          if (path.includes(\"skin_pack\") || path.includes(\"skin\")) {\r\n            imageFile = iconItem.primaryFile;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // 4. If still no icon, use any pack icon we found\r\n    if (!imageFile) {\r\n      for (const iconItem of packIconItems) {\r\n        if (iconItem.primaryFile && iconItem.primaryFile.content) {\r\n          imageFile = iconItem.primaryFile;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // 5. If no pack icons at all, try to find any texture image\r\n    if (!imageFile) {\r\n      const textureItems = this.getItemsByType(ProjectItemType.texture);\r\n      for (const textureItem of textureItems) {\r\n        // Skip very large textures or non-PNG files\r\n        if (!textureItem.primaryFile?.name.toLowerCase().endsWith(\".png\")) {\r\n          continue;\r\n        }\r\n        if (!textureItem.isContentLoaded) {\r\n          await textureItem.loadContent();\r\n        }\r\n        if (textureItem.primaryFile && textureItem.primaryFile.content) {\r\n          // Only use reasonably sized textures (under 256KB) to avoid huge base64 strings\r\n          if (textureItem.primaryFile.content.length < 256 * 1024) {\r\n            imageFile = textureItem.primaryFile;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Convert the image to base64 if we found one\r\n    if (imageFile && imageFile.content) {\r\n      const content = imageFile.content;\r\n      if (content instanceof Uint8Array) {\r\n        this.#data.previewImageBase64 = Utilities.uint8ArrayToBase64(content);\r\n        return true;\r\n      } else if (typeof content === \"string\") {\r\n        // If content is already a string, it might already be base64 or we skip it\r\n        // For PNG files, binary content should always be Uint8Array after loading\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private _handleDeployUpdated(message: string) {\r\n    this.#creatorTools.notifyStatusUpdate(message);\r\n  }\r\n\r\n  async save(force?: boolean) {\r\n    Log.assert(!this.#isDisposed, \"PSFA\");\r\n\r\n    if (this.#readOnlySafety) {\r\n      throw new Error(\"Attempting to save project in read-only mode.\");\r\n    }\r\n\r\n    await this.ensureProjectFolder();\r\n\r\n    // Update preview image from pack icons/textures if not already set\r\n    await this.updatePreviewImageIfNeeded();\r\n\r\n    // save all things inside of file containers first\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const projectItem = this.#items[i];\r\n\r\n      if ((projectItem.needsSave || force) && projectItem.isInFileContainer) {\r\n        await projectItem.prepareToSave();\r\n\r\n        this.updateContentsModified();\r\n\r\n        await this.#items[i].saveContent();\r\n      }\r\n    }\r\n\r\n    // save non container files\r\n    for (let i = 0; i < this.#items.length; i++) {\r\n      const projectItem = this.#items[i];\r\n\r\n      if ((projectItem.needsSave || force) && !projectItem.isInFileContainer) {\r\n        await projectItem.prepareToSave();\r\n\r\n        this.updateContentsModified();\r\n\r\n        await this.#items[i].saveContent();\r\n      }\r\n    }\r\n\r\n    await this.saveToFile();\r\n\r\n    this.changedFilesSinceLastSaved = {};\r\n\r\n    if (this.projectFolder) {\r\n      // we should have saved everything with individual project saves, but we should also allow folders to save their state.\r\n      await this.projectFolder.saveAll();\r\n    }\r\n\r\n    if (\r\n      this.autoDeploymentMode === ProjectAutoDeploymentMode.deployOnSave &&\r\n      this.#creatorTools.deploymentStorage !== null &&\r\n      this.#creatorTools.activeMinecraft\r\n    ) {\r\n      await this.#creatorTools.activeMinecraft.syncWithDeployment();\r\n    }\r\n\r\n    this._onSaved.dispatch(this, this);\r\n\r\n    if (this.#creatorTools.activeOperations.length === 0) {\r\n      await this.#creatorTools.notifyStatusUpdate(\"Save complete\");\r\n    }\r\n  }\r\n\r\n  async autoCompleteProject() {\r\n    await this.ensureScriptInDestination();\r\n    await this.ensureCatalogIndex();\r\n    await this.ensureAutogeneratedBehaviorPackManifest();\r\n  }\r\n\r\n  updateProjectItemsFromContent() {\r\n    this.#itemsByProjectPath = new Map();\r\n\r\n    for (const projectItem of this.items) {\r\n      if (projectItem && projectItem.projectPath) {\r\n        projectItem.updateProjectPath();\r\n\r\n        this.#itemsByProjectPath.set(ProjectUtilities.canonicalizeStoragePath(projectItem.projectPath), projectItem);\r\n      }\r\n    }\r\n  }\r\n\r\n  setProjectFolder(newFolder: IFolder) {\r\n    if (this.#projectFolder !== newFolder) {\r\n      this._unapplyFromProjectFolder();\r\n\r\n      this.#projectFolder = newFolder;\r\n      this.#folderStructureLoaded = false;\r\n      this._applyToProjectFolder();\r\n    }\r\n\r\n    this.#isProjectFolderEnsured = true;\r\n  }\r\n\r\n  async attemptToLoadPreferences() {\r\n    if (!this.#preferencesFile && this.#projectFolder) {\r\n      const file = await this.#projectFolder.getFileFromRelativePath(\"/.mct/prefs.mctp.json\");\r\n\r\n      if (file && (await file.exists())) {\r\n        this.#preferencesFile = file;\r\n\r\n        await this.loadPreferencesAndFolder();\r\n      }\r\n    }\r\n  }\r\n\r\n  _unapplyFromProjectFolder() {\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.storage.onFileContentsUpdated.unsubscribe(this._handleProjectFileContentsUpdated);\r\n      this.#projectFolder.storage.onFileAdded.unsubscribe(this._handleProjectFileAdded);\r\n      this.#projectFolder.storage.onFileRemoved.unsubscribe(this._handleProjectFileRemoved);\r\n      this.#projectFolder.onChildFolderMoved.unsubscribe(this._handleProjectFolderMoved);\r\n    }\r\n\r\n    // Clear any pending debounce timer\r\n    if (this.#externalChangeDebounceTimer) {\r\n      clearTimeout(this.#externalChangeDebounceTimer);\r\n      this.#externalChangeDebounceTimer = null;\r\n    }\r\n    this.#pendingExternalAdds.clear();\r\n    this.#pendingExternalRemoves.clear();\r\n  }\r\n\r\n  _applyToProjectFolder() {\r\n    if (this.#projectFolder) {\r\n      this.#projectFolder.storage.readOnly = this.#readOnlySafety;\r\n\r\n      this.#projectFolder.storage.onFileContentsUpdated.subscribe(this._handleProjectFileContentsUpdated);\r\n      this.#projectFolder.storage.onFileAdded.subscribe(this._handleProjectFileAdded);\r\n      this.#projectFolder.storage.onFileRemoved.subscribe(this._handleProjectFileRemoved);\r\n      this.#projectFolder.onChildFolderMoved.subscribe(this._handleProjectFolderMoved);\r\n    }\r\n  }\r\n\r\n  async ensureProjectFolder(force?: boolean): Promise<IFolder> {\r\n    if (!force && this.#projectFolder !== null && this.#isProjectFolderEnsured) {\r\n      return this.#projectFolder;\r\n    }\r\n\r\n    if (\r\n      this.#data.localFolderPath !== undefined &&\r\n      this.#creatorTools.ensureLocalFolder !== undefined &&\r\n      this.#creatorTools.localFolderExists !== undefined\r\n    ) {\r\n      const folderExists = await this.#creatorTools.localFolderExists(this.#data.localFolderPath);\r\n\r\n      if (folderExists) {\r\n        const folder = this.#creatorTools.ensureLocalFolder(this.#data.localFolderPath);\r\n\r\n        if (folder !== this.#projectFolder) {\r\n          this._unapplyFromProjectFolder();\r\n\r\n          await folder.ensureExists();\r\n\r\n          this.#projectFolder = folder;\r\n          this.#folderStructureLoaded = false;\r\n\r\n          this._applyToProjectFolder();\r\n        }\r\n      } else {\r\n        const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n          StorageUtilities.convertFolderPlaceholders(ProjectUtilities.canonicalizeStoragePath(this.#data.name))\r\n        );\r\n\r\n        if (folder !== this.#projectFolder) {\r\n          this._unapplyFromProjectFolder();\r\n\r\n          await folder.ensureExists();\r\n\r\n          this.#projectFolder = folder;\r\n          this.#folderStructureLoaded = false;\r\n\r\n          this._applyToProjectFolder();\r\n          Log.debug(\r\n            \"Using project storage root folder as a backup because local folder path \" +\r\n              this.#data.localFolderPath +\r\n              \" could not be found: \" +\r\n              this.#projectFolder.fullPath\r\n          );\r\n        }\r\n\r\n        this.#errorState = ProjectErrorState.projectFolderOrFileDoesNotExist;\r\n      }\r\n    } else if (\r\n      this.#data.mainDeployFolderPath !== undefined &&\r\n      this.#creatorTools.ensureLocalFolder !== undefined &&\r\n      this.#creatorTools.localFolderExists !== undefined\r\n    ) {\r\n      const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n        ProjectUtilities.canonicalizeStoragePath(this.#data.name)\r\n      );\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n\r\n        await folder.ensureExists();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n\r\n      const deployFolderExists = await this.#creatorTools.localFolderExists(this.#data.mainDeployFolderPath);\r\n\r\n      if (deployFolderExists) {\r\n        const folder = this.#creatorTools.ensureLocalFolder(this.#data.mainDeployFolderPath);\r\n\r\n        if (folder !== this.#mainDeployFolder) {\r\n          this.#mainDeployFolder = folder;\r\n\r\n          this.#mainDeploySync = new ProjectDeploySync(this, folder);\r\n\r\n          await this.#mainDeploySync.fullIngestIntoProject();\r\n        }\r\n      }\r\n    } else if (\r\n      this.#data.mainDeployFolderPath !== undefined &&\r\n      this.#creatorTools.isDeployingToMinecraft &&\r\n      this.#creatorTools.deploymentStorage\r\n    ) {\r\n      const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n        ProjectUtilities.canonicalizeStoragePath(this.#data.name)\r\n      );\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n        await folder.ensureExists();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n\r\n      const deployFolder = await this.#creatorTools.defaultDeploymentStorage.ensureFolderFromStorageRelativePath(\r\n        this.#data.mainDeployFolderPath\r\n      );\r\n\r\n      const deployFolderExists = await deployFolder.exists();\r\n\r\n      if (deployFolderExists) {\r\n        if (deployFolder !== this.#mainDeployFolder) {\r\n          this.#mainDeployFolder = folder;\r\n          this.#mainDeploySync = new ProjectDeploySync(this, deployFolder);\r\n\r\n          await this.#mainDeploySync.fullIngestIntoProject();\r\n        }\r\n      }\r\n    } else if (\r\n      this.#data.localFilePath !== undefined &&\r\n      this.#creatorTools.ensureLocalFolder !== undefined &&\r\n      this.#creatorTools.localFileExists !== undefined &&\r\n      this.#creatorTools.localFolderExists !== undefined\r\n    ) {\r\n      const folderPath = StorageUtilities.getFolderPath(this.#data.localFilePath);\r\n      const fileName = StorageUtilities.getLeafName(this.#data.localFilePath);\r\n\r\n      if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) {\r\n        throw new Error(\"Could not process file with path: `\" + this.#data.localFilePath + \"`\");\r\n      }\r\n\r\n      const containingFolder = this.#creatorTools.ensureLocalFolder(folderPath);\r\n\r\n      const file = containingFolder.ensureFile(fileName);\r\n\r\n      const fileExists = await file.exists();\r\n\r\n      if (fileExists) {\r\n        this.#projectCabinetFile = file;\r\n\r\n        await this.ensureProjectFolderFromCabinet();\r\n\r\n        Log.assert(\r\n          this.#projectFolder !== null && this.#projectFolder !== undefined,\r\n          \"Could not create a project folder from \" + this.#data.localFilePath + \".\" + this.errorMessage\r\n            ? \" \" + this.errorMessage\r\n            : \"\"\r\n        );\r\n\r\n        if (this.#accessoryFilePaths && this.#projectFolder) {\r\n          for (let i = 0; i < this.#accessoryFilePaths.length; i++) {\r\n            if (\r\n              (this.#accessoryFilePaths[i].startsWith(\"\\\\\") || this.#accessoryFilePaths[i].indexOf(\":\") >= 0) &&\r\n              this.creatorTools.localFileExists &&\r\n              this.creatorTools.ensureLocalFolder\r\n            ) {\r\n              if (StorageUtilities.isUsableFile(this.#accessoryFilePaths[i])) {\r\n                const exists = await this.creatorTools.localFileExists(this.#accessoryFilePaths[i]);\r\n\r\n                if (exists) {\r\n                  const folder = this.creatorTools.ensureLocalFolder(\r\n                    StorageUtilities.getFolderPath(this.#accessoryFilePaths[i])\r\n                  );\r\n\r\n                  if (folder) {\r\n                    folder.storage.readOnly = true;\r\n\r\n                    const fileName = StorageUtilities.getLeafName(this.#accessoryFilePaths[i]);\r\n                    await folder.load();\r\n                    const file = folder.files[fileName];\r\n\r\n                    if (file && (await file.exists())) {\r\n                      if (this.#accessoryFoldersForFilePaths === null) {\r\n                        this.#accessoryFoldersForFilePaths = [];\r\n                      }\r\n                      this.#accessoryFoldersForFilePaths.push(file.parentFolder);\r\n                      this._inferProjectItemFromFile(file, file.parentFolder, file.storageRelativePath);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            } else {\r\n              const addFile = containingFolder.ensureFile(this.#accessoryFilePaths[i]);\r\n\r\n              const additionalFileExists = await addFile.exists();\r\n              if (additionalFileExists) {\r\n                let isChildOfExistingFolder = false;\r\n\r\n                if (this.#accessoryFoldersForFilePaths === null) {\r\n                  this.#accessoryFoldersForFilePaths = [];\r\n                }\r\n\r\n                for (let j = 0; j < this.#accessoryFoldersForFilePaths.length; j++) {\r\n                  let addFileStoragePath = addFile.getFolderRelativePath(this.#accessoryFoldersForFilePaths[j]);\r\n\r\n                  if (addFileStoragePath) {\r\n                    isChildOfExistingFolder = true;\r\n                    this._inferProjectItemFromFile(addFile, this.#accessoryFoldersForFilePaths[j], addFileStoragePath);\r\n                  }\r\n                }\r\n\r\n                if (!isChildOfExistingFolder) {\r\n                  if (addFile.parentFolder) {\r\n                    let addFileStoragePath = addFile.getFolderRelativePath(addFile.parentFolder);\r\n                    if (addFileStoragePath) {\r\n                      this.#accessoryFoldersForFilePaths.push(addFile.parentFolder);\r\n                      this._inferProjectItemFromFile(addFile, addFile.parentFolder, addFileStoragePath);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!this.#projectFolder) {\r\n        const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(\r\n          ProjectUtilities.canonicalizeStoragePath(this.#data.name)\r\n        );\r\n        if (folder !== this.#projectFolder) {\r\n          this._unapplyFromProjectFolder();\r\n\r\n          this.#projectFolder = folder;\r\n          this.#folderStructureLoaded = false;\r\n\r\n          this._applyToProjectFolder();\r\n        }\r\n\r\n        this.#errorState = ProjectErrorState.projectFolderOrFileDoesNotExist;\r\n      }\r\n    } else if (this.#useProjectNameInProjectStorage) {\r\n      const folder = this.#creatorTools.projectsStorage.rootFolder.ensureFolder(this.name);\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n    } else {\r\n      // Log.debug(\"Using project storage root folder subfolder: \" + this.#data.dataStorageRelativePath);\r\n\r\n      const folder = await this.#creatorTools.projectsStorage.ensureFolderFromStorageRelativePath(\r\n        this.#data.dataStorageRelativePath\r\n      );\r\n\r\n      if (folder !== this.#projectFolder) {\r\n        this._unapplyFromProjectFolder();\r\n\r\n        this.#projectFolder = folder;\r\n        this.#folderStructureLoaded = false;\r\n\r\n        this._applyToProjectFolder();\r\n      }\r\n    }\r\n\r\n    const result = await this.#projectFolder.ensureExists();\r\n\r\n    this.#isProjectFolderEnsured = result;\r\n\r\n    return this.#projectFolder;\r\n  }\r\n\r\n  async _inferProjectItemFromFile(file: IFile, folder: IFolder, fileStoragePath: string) {\r\n    const fileName = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    if (fileName.endsWith(\".data.json\")) {\r\n      this.ensureItemByProjectPath(\r\n        fileStoragePath,\r\n        ProjectItemStorageType.singleFile,\r\n        file.name,\r\n        ProjectItemType.projectSummaryMetadata,\r\n        FolderContext.metaData,\r\n        undefined,\r\n        ProjectItemCreationType.normal,\r\n        file\r\n      );\r\n    } else if (fileName.endsWith(\".tags.json\")) {\r\n      this.ensureItemByProjectPath(\r\n        fileStoragePath,\r\n        ProjectItemStorageType.singleFile,\r\n        file.name,\r\n        ProjectItemType.tagsMetadata,\r\n        FolderContext.metaData,\r\n        undefined,\r\n        ProjectItemCreationType.normal,\r\n        file\r\n      );\r\n    }\r\n  }\r\n\r\n  _handleProjectFolderMoved(folder: IFolder, folderMove: IFolderMove) {\r\n    // refresh project paths from files/folders where possible\r\n    this.updateProjectItemsFromContent();\r\n\r\n    if (folderMove.previousStoragePath && this.#projectFolder) {\r\n      const newProjectPath = folderMove.folder.getFolderRelativePath(this.#projectFolder);\r\n\r\n      if (newProjectPath) {\r\n        const storageRelativeComponent = this.#projectFolder.fullPath.substring(\r\n          0,\r\n          folderMove.folder.fullPath.length - newProjectPath.length + 1\r\n        );\r\n\r\n        let previousPath = folderMove.previousStoragePath;\r\n\r\n        if (previousPath.startsWith(storageRelativeComponent)) {\r\n          previousPath = previousPath.substring(storageRelativeComponent.length);\r\n        }\r\n\r\n        for (const item of this.items) {\r\n          if (item && item.projectPath && item.projectPath.startsWith(previousPath)) {\r\n            item.projectPath = newProjectPath + item.projectPath.substring(previousPath.length);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async _handleProjectFileContentsUpdated(storage: IStorage, fileUpdate: IFileUpdateEvent) {\r\n    if (!this.#projectFolder) {\r\n      return;\r\n    }\r\n\r\n    let rootRelativePath = fileUpdate.file.storageRelativePath;\r\n    this.#indevInfoSetNeedsUpdating = true;\r\n\r\n    if (\r\n      this.#projectFolder.storageRelativePath.length > 0 &&\r\n      rootRelativePath.startsWith(this.#projectFolder.storageRelativePath)\r\n    ) {\r\n      rootRelativePath = rootRelativePath.substring(this.#projectFolder.storageRelativePath.length - 1);\r\n    }\r\n\r\n    let storagePath = ProjectUtilities.canonicalizeStoragePath(rootRelativePath);\r\n\r\n    if (storage.containerFile && this.projectFolder) {\r\n      storagePath = storage.containerFile.getFolderRelativePath(this.projectFolder) + \"#\" + storagePath;\r\n    }\r\n\r\n    if (Utilities.isUsableAsObjectKey(storagePath)) {\r\n      if (!this.changedFilesSinceLastSaved[storagePath]) {\r\n        this.changedFilesSinceLastSaved[storagePath] = fileUpdate.file;\r\n\r\n        this._onNeedsSaveChanged.dispatch(this, this);\r\n      }\r\n\r\n      const item = this.#itemsByProjectPath.get(storagePath);\r\n      if (item) {\r\n        if (\r\n          fileUpdate.updateType === FileUpdateType.versionRestorationRetainCurrent ||\r\n          fileUpdate.updateType === FileUpdateType.versionRestoration ||\r\n          fileUpdate.updateType === FileUpdateType.externalChange\r\n        ) {\r\n          item.invalidateContentProcessedState();\r\n        }\r\n\r\n        this.notifyProjectItemContentChanged(item, fileUpdate);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles a file being added externally (e.g., by MCP saving a new model).\r\n   * Uses debouncing to batch multiple rapid additions into a single re-inference pass.\r\n   */\r\n  async _handleProjectFileAdded(storage: IStorage, file: IFile) {\r\n    if (!this.#projectFolder || this.#isDisposed) {\r\n      return;\r\n    }\r\n\r\n    const storagePath = ProjectUtilities.canonicalizeStoragePath(file.storageRelativePath);\r\n\r\n    // Add to pending set\r\n    this.#pendingExternalAdds.add(storagePath);\r\n\r\n    // If this path was pending removal, cancel the removal (quick delete+recreate)\r\n    this.#pendingExternalRemoves.delete(storagePath);\r\n\r\n    // Reset the debounce timer\r\n    this._scheduleExternalChangeFlush();\r\n  }\r\n\r\n  /**\r\n   * Handles a file being removed externally.\r\n   * Uses debouncing to batch multiple rapid removals into a single cleanup pass.\r\n   */\r\n  async _handleProjectFileRemoved(storage: IStorage, filePath: string) {\r\n    if (!this.#projectFolder || this.#isDisposed) {\r\n      return;\r\n    }\r\n\r\n    // Convert the full path to a storage-relative path\r\n    let relativePath = filePath;\r\n    if (this.#projectFolder.storage.rootFolder.fullPath) {\r\n      const rootPath = this.#projectFolder.storage.rootFolder.fullPath;\r\n      if (filePath.startsWith(rootPath)) {\r\n        relativePath = filePath.substring(rootPath.length);\r\n      }\r\n    }\r\n\r\n    const storagePath = ProjectUtilities.canonicalizeStoragePath(relativePath);\r\n\r\n    // If this path was pending addition, just remove from pending adds (never existed in project)\r\n    if (this.#pendingExternalAdds.has(storagePath)) {\r\n      this.#pendingExternalAdds.delete(storagePath);\r\n      return;\r\n    }\r\n\r\n    // Add to pending removals\r\n    this.#pendingExternalRemoves.add(storagePath);\r\n\r\n    // Reset the debounce timer\r\n    this._scheduleExternalChangeFlush();\r\n  }\r\n\r\n  /**\r\n   * Schedules the debounced flush of external file changes.\r\n   */\r\n  private _scheduleExternalChangeFlush() {\r\n    if (this.#externalChangeDebounceTimer) {\r\n      clearTimeout(this.#externalChangeDebounceTimer);\r\n    }\r\n\r\n    this.#externalChangeDebounceTimer = setTimeout(() => {\r\n      this._flushExternalChanges();\r\n    }, Project.EXTERNAL_CHANGE_DEBOUNCE_MS);\r\n  }\r\n\r\n  /**\r\n   * Processes all pending external file additions and removals.\r\n   * Called after the debounce timer expires.\r\n   */\r\n  async _flushExternalChanges() {\r\n    if (this.#isDisposed || !this.#projectFolder) {\r\n      return;\r\n    }\r\n\r\n    this.#externalChangeDebounceTimer = null;\r\n\r\n    const addedPaths = Array.from(this.#pendingExternalAdds);\r\n    const removedPaths = Array.from(this.#pendingExternalRemoves);\r\n\r\n    this.#pendingExternalAdds.clear();\r\n    this.#pendingExternalRemoves.clear();\r\n\r\n    // Handle removals first - find and remove corresponding ProjectItems\r\n    for (const removedPath of removedPaths) {\r\n      const item = this.#itemsByProjectPath.get(removedPath);\r\n      if (item) {\r\n        // Remove the item from the project\r\n        const index = this.#items.indexOf(item);\r\n        if (index >= 0) {\r\n          this.#items.splice(index, 1);\r\n        }\r\n        this.#itemsByProjectPath.delete(removedPath);\r\n\r\n        // Notify listeners\r\n        this._onItemRemoved.dispatch(this, item);\r\n      }\r\n    }\r\n\r\n    // Handle additions - re-infer project items from files\r\n    // Only if there were additions (don't re-scan if only removals)\r\n    if (addedPaths.length > 0) {\r\n      const itemCountBefore = this.#items.length;\r\n\r\n      // Re-infer project items from the root folder.\r\n      // Use force=true so that already-loaded folders are re-scanned from disk,\r\n      // picking up files created externally (e.g., by MCP tools or other processes).\r\n      await this.inferProjectItemsFromFilesRootFolder(true);\r\n\r\n      // Find the newly created items and notify listeners\r\n      let matchedCount = 0;\r\n      for (const addedPath of addedPaths) {\r\n        const item = this.#itemsByProjectPath.get(addedPath);\r\n        if (item) {\r\n          this._onItemAdded.dispatch(this, item);\r\n          matchedCount++;\r\n        }\r\n      }\r\n\r\n      // If inference added items but path-based lookup didn't find them\r\n      // (e.g., due to path format differences), dispatch a generic property\r\n      // change to ensure the UI still refreshes.\r\n      if (matchedCount === 0 && this.#items.length > itemCountBefore) {\r\n        this._onPropertyChanged.dispatch(this, \"items\");\r\n      }\r\n    }\r\n\r\n    // Mark info set as needing update\r\n    this.#indevInfoSetNeedsUpdating = true;\r\n  }\r\n\r\n  async ensureDistFolder(): Promise<IFolder> {\r\n    if (this.#distBuildFolder) {\r\n      return this.#distBuildFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.#distBuildFolder === null) {\r\n      this.#distBuildFolder = this.#projectFolder.ensureFolder(\"dist\");\r\n      await this.#distBuildFolder.ensureExists();\r\n    }\r\n\r\n    return this.#distBuildFolder;\r\n  }\r\n\r\n  async ensureDistBuildScriptsFolder(): Promise<IFolder> {\r\n    if (this.#distBuildScriptsFolder) {\r\n      return this.#distBuildScriptsFolder;\r\n    }\r\n\r\n    await this.ensureDistFolder();\r\n\r\n    if (this.#distBuildFolder === undefined || this.#distBuildFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create dist folder\");\r\n    }\r\n\r\n    if (this.#distBuildScriptsFolder === null) {\r\n      this.#distBuildScriptsFolder = this.#distBuildFolder.ensureFolder(\"scripts\");\r\n      await this.#distBuildScriptsFolder.ensureExists();\r\n    }\r\n\r\n    return this.#distBuildScriptsFolder;\r\n  }\r\n\r\n  getLibFolder(): IFolder | null {\r\n    if (this.#libFolder) {\r\n      return this.#libFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.#libFolder === null) {\r\n      this.#libFolder = this.#projectFolder.ensureFolder(\"lib\");\r\n    }\r\n\r\n    return this.#libFolder;\r\n  }\r\n\r\n  getDistBuildFolder(): IFolder | null {\r\n    if (this.#distBuildFolder) {\r\n      return this.#distBuildFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      return null;\r\n    }\r\n\r\n    if (this.#distBuildFolder === null) {\r\n      this.#distBuildFolder = this.#projectFolder.ensureFolder(\"dist\");\r\n    }\r\n\r\n    return this.#distBuildFolder;\r\n  }\r\n\r\n  async ensureLibFolder(): Promise<IFolder> {\r\n    if (this.#libFolder) {\r\n      return this.#libFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.#libFolder === null) {\r\n      this.#libFolder = this.#projectFolder.ensureFolder(\"lib\");\r\n      await this.#libFolder.ensureExists();\r\n    }\r\n\r\n    return this.#libFolder;\r\n  }\r\n\r\n  getLibScriptsFolder(): IFolder | null {\r\n    if (this.#libScriptsFolder) {\r\n      return this.#libScriptsFolder;\r\n    }\r\n\r\n    const libFolder = this.getLibFolder();\r\n\r\n    if (libFolder) {\r\n      this.#libScriptsFolder = libFolder.ensureFolder(\"scripts\");\r\n    }\r\n\r\n    return this.#libScriptsFolder;\r\n  }\r\n\r\n  getDistBuildScriptsFolder(): IFolder | null {\r\n    if (this.#distBuildScriptsFolder) {\r\n      return this.#distBuildScriptsFolder;\r\n    }\r\n\r\n    const distFolder = this.getDistBuildFolder();\r\n\r\n    if (distFolder) {\r\n      this.#distBuildScriptsFolder = distFolder.ensureFolder(\"scripts\");\r\n    }\r\n\r\n    return this.#distBuildScriptsFolder;\r\n  }\r\n\r\n  async ensureLibScriptsFolder(): Promise<IFolder> {\r\n    if (this.#libScriptsFolder) {\r\n      return this.#libScriptsFolder;\r\n    }\r\n\r\n    await this.ensureLibFolder();\r\n\r\n    if (this.#libFolder === undefined || this.#libFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create dist folder\");\r\n    }\r\n\r\n    if (this.#libScriptsFolder === null) {\r\n      this.#libScriptsFolder = this.#libFolder.ensureFolder(\"scripts\");\r\n      await this.#libScriptsFolder.ensureExists();\r\n    }\r\n\r\n    return this.#libScriptsFolder;\r\n  }\r\n\r\n  async ensureDocsFolder(): Promise<IFolder> {\r\n    if (this.docsContainer !== null) {\r\n      return this.docsContainer;\r\n    }\r\n\r\n    const rootFolder = await this.ensureProjectFolder();\r\n\r\n    this.docsContainer = rootFolder.ensureFolder(\"docs\");\r\n\r\n    return this.docsContainer;\r\n  }\r\n\r\n  async ensureDefaultScriptsFolder(): Promise<IFolder> {\r\n    if (this.#defaultScriptsFolder !== null) {\r\n      return this.#defaultScriptsFolder;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.js || pi.itemType === ProjectItemType.ts) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.#defaultScriptsFolder = pi.primaryFile.parentFolder;\r\n\r\n          if (this.#defaultScriptsFolder !== null) {\r\n            return this.#defaultScriptsFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.#defaultScriptsFolder !== null) {\r\n      return this.#defaultScriptsFolder;\r\n    }\r\n\r\n    if (this.#defaultScriptsFolder === null) {\r\n      await this.#projectFolder.load();\r\n\r\n      const rootScriptsFolder = this.#projectFolder.folders[\"scripts\"];\r\n\r\n      if (rootScriptsFolder) {\r\n        const rootScriptsFolderExists = await rootScriptsFolder.exists();\r\n\r\n        if (rootScriptsFolderExists) {\r\n          this.#defaultScriptsFolder = rootScriptsFolder;\r\n          return this.#defaultScriptsFolder;\r\n        }\r\n      }\r\n    }\r\n\r\n    const defaultBehaviorPackFolder = await this.ensureDefaultBehaviorPackFolder();\r\n\r\n    if (!defaultBehaviorPackFolder) {\r\n      return this.#projectFolder.ensureFolder(\"scripts\");\r\n    }\r\n\r\n    const defaultBehaviorPackScriptsFolder = defaultBehaviorPackFolder.ensureFolder(\"scripts\");\r\n\r\n    await defaultBehaviorPackScriptsFolder.ensureExists();\r\n\r\n    this.#defaultScriptsFolder = defaultBehaviorPackScriptsFolder;\r\n\r\n    return this.#defaultScriptsFolder;\r\n  }\r\n\r\n  async getDefaultWorldFolder(): Promise<IFolder | null> {\r\n    if (this.defaultWorldFolder !== null) {\r\n      return this.defaultWorldFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    return this.defaultWorldFolder;\r\n  }\r\n\r\n  async ensurePacks() {\r\n    for (const item of this.items) {\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.behavior, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.resource, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.skin, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.designPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.design, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.personaManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.persona, item.isInWorld === true);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async ensurePacksAsync() {\r\n    for (const item of this.items) {\r\n      if (item.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.behavior, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.resource, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.skin, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.designPackManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.design, item.isInWorld === true);\r\n        }\r\n      } else if (item.itemType === ProjectItemType.personaManifestJson) {\r\n        if (!item.isContentLoaded) {\r\n          await item.loadContent();\r\n        }\r\n\r\n        const file = item.primaryFile;\r\n\r\n        if (file && file.parentFolder) {\r\n          await this.ensurePackByFolder(file.parentFolder, PackType.persona, item.isInWorld === true);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  async getDefaultBehaviorPackFolder(force?: boolean, preventEnsureFileStorage?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultBehaviorPackFolder !== null && !force) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultBehaviorPackFolder !== null && !force) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultBehaviorPackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.behaviorPackManifestJson) {\r\n        if (!preventEnsureFileStorage) {\r\n          // this is an option to avoid stack overflows of ensureFileStorage -> updateAutogenerated -> ensureFileStorage\r\n          await pi.loadFileContent();\r\n        }\r\n\r\n        const itemFile = pi.primaryFile;\r\n\r\n        if (itemFile) {\r\n          this.defaultBehaviorPackFolder = itemFile.parentFolder;\r\n\r\n          this.ensurePackByFolder(this.defaultBehaviorPackFolder, PackType.behavior, pi.isInWorld === true);\r\n\r\n          if (this.defaultBehaviorPackFolder !== null) {\r\n            return this.defaultBehaviorPackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.defaultBehaviorPackFolder;\r\n  }\r\n\r\n  async getDefaultBehaviorPack(): Promise<Pack | undefined> {\r\n    const folder = await this.getDefaultBehaviorPackFolder(false, false);\r\n\r\n    if (!folder) {\r\n      return undefined;\r\n    }\r\n\r\n    return await this.ensurePackByFolder(folder, PackType.behavior, false);\r\n  }\r\n\r\n  async ensureDefaultBehaviorPackFolder(force?: boolean): Promise<IFolder> {\r\n    if (this.defaultBehaviorPackFolder !== null && !force) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    await this.getDefaultBehaviorPackFolder(force);\r\n\r\n    if (this.defaultBehaviorPackFolder !== null) {\r\n      return this.defaultBehaviorPackFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.behaviorPacksContainer === null) {\r\n      this.behaviorPacksContainer = this.#projectFolder.ensureFolder(\"behavior_packs\");\r\n      await this.behaviorPacksContainer.ensureExists();\r\n    }\r\n\r\n    this.defaultBehaviorPackFolder = this.behaviorPacksContainer.ensureFolder(\r\n      MinecraftUtilities.makeNameFolderSafe(this.effectiveShortName + \"_bp\")\r\n    );\r\n\r\n    await this.defaultBehaviorPackFolder.ensureExists();\r\n\r\n    const pack = await this.ensurePackByFolder(this.defaultBehaviorPackFolder, PackType.behavior, false);\r\n    await pack.ensureManifest();\r\n\r\n    return this.defaultBehaviorPackFolder;\r\n  }\r\n\r\n  async ensureDefaultDesignPackFolder(force?: boolean): Promise<IFolder> {\r\n    if (this.defaultDesignPackFolder !== null && !force) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    await this.getDefaultDesignPackFolder(force);\r\n\r\n    if (this.defaultDesignPackFolder !== null) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.designPacksContainer === null) {\r\n      this.designPacksContainer = this.#projectFolder.ensureFolder(\"design_packs\");\r\n      await this.designPacksContainer.ensureExists();\r\n    }\r\n\r\n    this.defaultDesignPackFolder = this.designPacksContainer.ensureFolder(\r\n      MinecraftUtilities.makeNameFolderSafe(this.effectiveShortName + \"_dp\")\r\n    );\r\n\r\n    await this.defaultDesignPackFolder.ensureExists();\r\n\r\n    await this.ensurePackByFolder(this.defaultDesignPackFolder, PackType.design, false);\r\n\r\n    return this.defaultDesignPackFolder;\r\n  }\r\n\r\n  async ensurePackByFolder(folder: IFolder, packType: PackType, isInWorld: boolean) {\r\n    const targetPath = StorageUtilities.canonicalizePath(folder.extendedPath);\r\n\r\n    if (!this.projectFolder) {\r\n      throw new Error(\"PEPBF\");\r\n    }\r\n\r\n    for (const pack of this.#packs) {\r\n      if (pack.folder === folder) {\r\n        return pack;\r\n      }\r\n\r\n      if (pack.folder && StorageUtilities.canonicalizePath(pack.folder.extendedPath) === targetPath) {\r\n        return pack;\r\n      }\r\n    }\r\n\r\n    let itemType = ProjectItemType.behaviorPackFolder;\r\n    let folderContext = FolderContext.behaviorPack;\r\n\r\n    if (packType === PackType.resource) {\r\n      itemType = ProjectItemType.resourcePackFolder;\r\n      folderContext = FolderContext.resourcePack;\r\n    } else if (packType === PackType.skin) {\r\n      itemType = ProjectItemType.skinPackFolder;\r\n      folderContext = FolderContext.skinPack;\r\n    } else if (packType === PackType.persona) {\r\n      itemType = ProjectItemType.personaPackFolder;\r\n      folderContext = FolderContext.persona;\r\n    } else if (packType === PackType.design) {\r\n      itemType = ProjectItemType.designPackFolder;\r\n      folderContext = FolderContext.designPack;\r\n    }\r\n\r\n    const folderPath = folder.getFolderRelativePath(this.projectFolder);\r\n\r\n    if (!folderPath) {\r\n      throw new Error(\"PEBBFA\");\r\n    }\r\n\r\n    const folderProjectItem = this.ensureItemByProjectPath(\r\n      folderPath,\r\n      ProjectItemStorageType.folder,\r\n      folder.name,\r\n      itemType,\r\n      folderContext,\r\n      undefined,\r\n      ProjectItemCreationType.normal,\r\n      undefined,\r\n      undefined,\r\n      isInWorld\r\n    );\r\n\r\n    const newPack = Pack.ensureOnFolder(folder, packType, this, folderProjectItem);\r\n\r\n    if (!this.#packs.includes(newPack)) {\r\n      this.#packs.push(newPack);\r\n    }\r\n\r\n    await newPack.ensureManifest();\r\n\r\n    return newPack;\r\n  }\r\n\r\n  async getDefaultDesignPackFolder(force?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultDesignPackFolder !== null && !force) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultDesignPackFolder !== null && !force) {\r\n      return this.defaultDesignPackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultDesignPackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.designPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.defaultDesignPackFolder = pi.primaryFile.parentFolder;\r\n\r\n          await this.ensurePackByFolder(this.defaultDesignPackFolder, PackType.design, pi.isInWorld === true);\r\n\r\n          if (this.defaultDesignPackFolder !== null) {\r\n            return this.defaultDesignPackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  async getDefaultSkinPackFolder(force?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultSkinPackFolder !== null && !force) {\r\n      return this.defaultSkinPackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultSkinPackFolder !== null && !force) {\r\n      return this.defaultSkinPackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultSkinPackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.skinPackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.defaultSkinPackFolder = pi.primaryFile.parentFolder;\r\n\r\n          await this.ensurePackByFolder(this.defaultSkinPackFolder, PackType.skin, pi.isInWorld === true);\r\n\r\n          if (this.defaultSkinPackFolder !== null) {\r\n            return this.defaultSkinPackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  async getDefaultResourcePackFolder(force?: boolean): Promise<IFolder | null> {\r\n    if (this.defaultResourcePackFolder !== null && !force) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.defaultResourcePackFolder !== null && !force) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultResourcePackFolder = null;\r\n    }\r\n\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      const pi = this.items[i];\r\n\r\n      if (pi.itemType === ProjectItemType.resourcePackManifestJson) {\r\n        if (!pi.isContentLoaded) {\r\n          await pi.loadContent();\r\n        }\r\n\r\n        if (pi.primaryFile) {\r\n          this.defaultResourcePackFolder = pi.primaryFile.parentFolder;\r\n\r\n          await this.ensurePackByFolder(this.defaultResourcePackFolder, PackType.resource, pi.isInWorld === true);\r\n\r\n          if (this.defaultResourcePackFolder !== null) {\r\n            return this.defaultResourcePackFolder;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  async ensureDefaultResourcePackFolder(force?: boolean): Promise<IFolder> {\r\n    if (this.defaultResourcePackFolder !== null && !force) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (force) {\r\n      this.defaultResourcePackFolder = null;\r\n    }\r\n\r\n    await this.getDefaultResourcePackFolder(force);\r\n\r\n    if (this.defaultResourcePackFolder !== null) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (!this.#folderStructureLoaded) {\r\n      await this.loadFolderStructure();\r\n    }\r\n\r\n    if (this.#projectFolder === undefined || this.#projectFolder === null) {\r\n      throw new Error(\"Unexpectedly could not create project folder\");\r\n    }\r\n\r\n    if (this.defaultResourcePackFolder !== null) {\r\n      return this.defaultResourcePackFolder;\r\n    }\r\n\r\n    if (this.resourcePacksContainer === null) {\r\n      this.resourcePacksContainer = this.#projectFolder.ensureFolder(\"resource_packs\");\r\n      await this.resourcePacksContainer.ensureExists();\r\n    }\r\n\r\n    this.defaultResourcePackFolder = this.resourcePacksContainer.ensureFolder(\r\n      MinecraftUtilities.makeNameFolderSafe(this.effectiveShortName + \"_rp\")\r\n    );\r\n\r\n    await this.defaultResourcePackFolder.ensureExists();\r\n\r\n    await this.ensurePackByFolder(this.defaultResourcePackFolder, PackType.resource, false);\r\n\r\n    return this.defaultResourcePackFolder;\r\n  }\r\n\r\n  async ensureLoadedProjectFolder(force?: boolean): Promise<IFolder> {\r\n    const projectFolder = await this.ensureProjectFolder();\r\n\r\n    await projectFolder.load(force ? force : false);\r\n\r\n    if (!this.readOnlySafety) {\r\n      await this.save();\r\n    }\r\n\r\n    return projectFolder;\r\n  }\r\n}\r\n", "export function getUserAgent() {\n  if (typeof navigator === \"object\" && \"userAgent\" in navigator) {\n    return navigator.userAgent;\n  }\n\n  if (typeof process === \"object\" && process.version !== undefined) {\n    return `Node.js/${process.version.substr(1)} (${process.platform}; ${\n      process.arch\n    })`;\n  }\n\n  return \"<environment undetectable>\";\n}\n", "// @ts-check\n\nexport function register(state, name, method, options) {\n  if (typeof method !== \"function\") {\n    throw new Error(\"method for before hook must be a function\");\n  }\n\n  if (!options) {\n    options = {};\n  }\n\n  if (Array.isArray(name)) {\n    return name.reverse().reduce((callback, name) => {\n      return register.bind(null, state, name, callback, options);\n    }, method)();\n  }\n\n  return Promise.resolve().then(() => {\n    if (!state.registry[name]) {\n      return method(options);\n    }\n\n    return state.registry[name].reduce((method, registered) => {\n      return registered.hook.bind(null, method, options);\n    }, method)();\n  });\n}\n", "// @ts-check\n\nexport function addHook(state, kind, name, hook) {\n  const orig = hook;\n  if (!state.registry[name]) {\n    state.registry[name] = [];\n  }\n\n  if (kind === \"before\") {\n    hook = (method, options) => {\n      return Promise.resolve()\n        .then(orig.bind(null, options))\n        .then(method.bind(null, options));\n    };\n  }\n\n  if (kind === \"after\") {\n    hook = (method, options) => {\n      let result;\n      return Promise.resolve()\n        .then(method.bind(null, options))\n        .then((result_) => {\n          result = result_;\n          return orig(result, options);\n        })\n        .then(() => {\n          return result;\n        });\n    };\n  }\n\n  if (kind === \"error\") {\n    hook = (method, options) => {\n      return Promise.resolve()\n        .then(method.bind(null, options))\n        .catch((error) => {\n          return orig(error, options);\n        });\n    };\n  }\n\n  state.registry[name].push({\n    hook: hook,\n    orig: orig,\n  });\n}\n", "// @ts-check\n\nexport function removeHook(state, name, method) {\n  if (!state.registry[name]) {\n    return;\n  }\n\n  const index = state.registry[name]\n    .map((registered) => {\n      return registered.orig;\n    })\n    .indexOf(method);\n\n  if (index === -1) {\n    return;\n  }\n\n  state.registry[name].splice(index, 1);\n}\n", "// @ts-check\n\nimport { register } from \"./lib/register.js\";\nimport { addHook } from \"./lib/add.js\";\nimport { removeHook } from \"./lib/remove.js\";\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nconst bind = Function.bind;\nconst bindable = bind.bind(bind);\n\nfunction bindApi(hook, state, name) {\n  const removeHookRef = bindable(removeHook, null).apply(\n    null,\n    name ? [state, name] : [state]\n  );\n  hook.api = { remove: removeHookRef };\n  hook.remove = removeHookRef;\n  [\"before\", \"error\", \"after\", \"wrap\"].forEach((kind) => {\n    const args = name ? [state, kind, name] : [state, kind];\n    hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);\n  });\n}\n\nfunction Singular() {\n  const singularHookName = Symbol(\"Singular\");\n  const singularHookState = {\n    registry: {},\n  };\n  const singularHook = register.bind(null, singularHookState, singularHookName);\n  bindApi(singularHook, singularHookState, singularHookName);\n  return singularHook;\n}\n\nfunction Collection() {\n  const state = {\n    registry: {},\n  };\n\n  const hook = register.bind(null, state);\n  bindApi(hook, state);\n\n  return hook;\n}\n\nexport default { Singular, Collection };\n", "// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/defaults.js\nvar userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;\nvar DEFAULTS = {\n  method: \"GET\",\n  baseUrl: \"https://api.github.com\",\n  headers: {\n    accept: \"application/vnd.github.v3+json\",\n    \"user-agent\": userAgent\n  },\n  mediaType: {\n    format: \"\"\n  }\n};\n\n// pkg/dist-src/util/lowercase-keys.js\nfunction lowercaseKeys(object) {\n  if (!object) {\n    return {};\n  }\n  return Object.keys(object).reduce((newObj, key) => {\n    newObj[key.toLowerCase()] = object[key];\n    return newObj;\n  }, {});\n}\n\n// pkg/dist-src/util/is-plain-object.js\nfunction isPlainObject(value) {\n  if (typeof value !== \"object\" || value === null) return false;\n  if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n  const proto = Object.getPrototypeOf(value);\n  if (proto === null) return true;\n  const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/util/merge-deep.js\nfunction mergeDeep(defaults, options) {\n  const result = Object.assign({}, defaults);\n  Object.keys(options).forEach((key) => {\n    if (isPlainObject(options[key])) {\n      if (!(key in defaults)) Object.assign(result, { [key]: options[key] });\n      else result[key] = mergeDeep(defaults[key], options[key]);\n    } else {\n      Object.assign(result, { [key]: options[key] });\n    }\n  });\n  return result;\n}\n\n// pkg/dist-src/util/remove-undefined-properties.js\nfunction removeUndefinedProperties(obj) {\n  for (const key in obj) {\n    if (obj[key] === void 0) {\n      delete obj[key];\n    }\n  }\n  return obj;\n}\n\n// pkg/dist-src/merge.js\nfunction merge(defaults, route, options) {\n  if (typeof route === \"string\") {\n    let [method, url] = route.split(\" \");\n    options = Object.assign(url ? { method, url } : { url: method }, options);\n  } else {\n    options = Object.assign({}, route);\n  }\n  options.headers = lowercaseKeys(options.headers);\n  removeUndefinedProperties(options);\n  removeUndefinedProperties(options.headers);\n  const mergedOptions = mergeDeep(defaults || {}, options);\n  if (options.url === \"/graphql\") {\n    if (defaults && defaults.mediaType.previews?.length) {\n      mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(\n        (preview) => !mergedOptions.mediaType.previews.includes(preview)\n      ).concat(mergedOptions.mediaType.previews);\n    }\n    mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, \"\"));\n  }\n  return mergedOptions;\n}\n\n// pkg/dist-src/util/add-query-parameters.js\nfunction addQueryParameters(url, parameters) {\n  const separator = /\\?/.test(url) ? \"&\" : \"?\";\n  const names = Object.keys(parameters);\n  if (names.length === 0) {\n    return url;\n  }\n  return url + separator + names.map((name) => {\n    if (name === \"q\") {\n      return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n    }\n    return `${name}=${encodeURIComponent(parameters[name])}`;\n  }).join(\"&\");\n}\n\n// pkg/dist-src/util/extract-url-variable-names.js\nvar urlVariableRegex = /\\{[^{}}]+\\}/g;\nfunction removeNonChars(variableName) {\n  return variableName.replace(/(?:^\\W+)|(?:(?<!\\W)\\W+$)/g, \"\").split(/,/);\n}\nfunction extractUrlVariableNames(url) {\n  const matches = url.match(urlVariableRegex);\n  if (!matches) {\n    return [];\n  }\n  return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\n// pkg/dist-src/util/omit.js\nfunction omit(object, keysToOmit) {\n  const result = { __proto__: null };\n  for (const key of Object.keys(object)) {\n    if (keysToOmit.indexOf(key) === -1) {\n      result[key] = object[key];\n    }\n  }\n  return result;\n}\n\n// pkg/dist-src/util/url-template.js\nfunction encodeReserved(str) {\n  return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {\n    if (!/%[0-9A-Fa-f]/.test(part)) {\n      part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n    }\n    return part;\n  }).join(\"\");\n}\nfunction encodeUnreserved(str) {\n  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {\n    return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n  });\n}\nfunction encodeValue(operator, value, key) {\n  value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n  if (key) {\n    return encodeUnreserved(key) + \"=\" + value;\n  } else {\n    return value;\n  }\n}\nfunction isDefined(value) {\n  return value !== void 0 && value !== null;\n}\nfunction isKeyOperator(operator) {\n  return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\nfunction getValues(context, operator, key, modifier) {\n  var value = context[key], result = [];\n  if (isDefined(value) && value !== \"\") {\n    if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n      value = value.toString();\n      if (modifier && modifier !== \"*\") {\n        value = value.substring(0, parseInt(modifier, 10));\n      }\n      result.push(\n        encodeValue(operator, value, isKeyOperator(operator) ? key : \"\")\n      );\n    } else {\n      if (modifier === \"*\") {\n        if (Array.isArray(value)) {\n          value.filter(isDefined).forEach(function(value2) {\n            result.push(\n              encodeValue(operator, value2, isKeyOperator(operator) ? key : \"\")\n            );\n          });\n        } else {\n          Object.keys(value).forEach(function(k) {\n            if (isDefined(value[k])) {\n              result.push(encodeValue(operator, value[k], k));\n            }\n          });\n        }\n      } else {\n        const tmp = [];\n        if (Array.isArray(value)) {\n          value.filter(isDefined).forEach(function(value2) {\n            tmp.push(encodeValue(operator, value2));\n          });\n        } else {\n          Object.keys(value).forEach(function(k) {\n            if (isDefined(value[k])) {\n              tmp.push(encodeUnreserved(k));\n              tmp.push(encodeValue(operator, value[k].toString()));\n            }\n          });\n        }\n        if (isKeyOperator(operator)) {\n          result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n        } else if (tmp.length !== 0) {\n          result.push(tmp.join(\",\"));\n        }\n      }\n    }\n  } else {\n    if (operator === \";\") {\n      if (isDefined(value)) {\n        result.push(encodeUnreserved(key));\n      }\n    } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n      result.push(encodeUnreserved(key) + \"=\");\n    } else if (value === \"\") {\n      result.push(\"\");\n    }\n  }\n  return result;\n}\nfunction parseUrl(template) {\n  return {\n    expand: expand.bind(null, template)\n  };\n}\nfunction expand(template, context) {\n  var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n  template = template.replace(\n    /\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g,\n    function(_, expression, literal) {\n      if (expression) {\n        let operator = \"\";\n        const values = [];\n        if (operators.indexOf(expression.charAt(0)) !== -1) {\n          operator = expression.charAt(0);\n          expression = expression.substr(1);\n        }\n        expression.split(/,/g).forEach(function(variable) {\n          var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n          values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n        });\n        if (operator && operator !== \"+\") {\n          var separator = \",\";\n          if (operator === \"?\") {\n            separator = \"&\";\n          } else if (operator !== \"#\") {\n            separator = operator;\n          }\n          return (values.length !== 0 ? operator : \"\") + values.join(separator);\n        } else {\n          return values.join(\",\");\n        }\n      } else {\n        return encodeReserved(literal);\n      }\n    }\n  );\n  if (template === \"/\") {\n    return template;\n  } else {\n    return template.replace(/\\/$/, \"\");\n  }\n}\n\n// pkg/dist-src/parse.js\nfunction parse(options) {\n  let method = options.method.toUpperCase();\n  let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n  let headers = Object.assign({}, options.headers);\n  let body;\n  let parameters = omit(options, [\n    \"method\",\n    \"baseUrl\",\n    \"url\",\n    \"headers\",\n    \"request\",\n    \"mediaType\"\n  ]);\n  const urlVariableNames = extractUrlVariableNames(url);\n  url = parseUrl(url).expand(parameters);\n  if (!/^http/.test(url)) {\n    url = options.baseUrl + url;\n  }\n  const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat(\"baseUrl\");\n  const remainingParameters = omit(parameters, omittedParameters);\n  const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n  if (!isBinaryRequest) {\n    if (options.mediaType.format) {\n      headers.accept = headers.accept.split(/,/).map(\n        (format) => format.replace(\n          /application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/,\n          `application/vnd$1$2.${options.mediaType.format}`\n        )\n      ).join(\",\");\n    }\n    if (url.endsWith(\"/graphql\")) {\n      if (options.mediaType.previews?.length) {\n        const previewsFromAcceptHeader = headers.accept.match(/(?<![\\w-])[\\w-]+(?=-preview)/g) || [];\n        headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {\n          const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n          return `application/vnd.github.${preview}-preview${format}`;\n        }).join(\",\");\n      }\n    }\n  }\n  if ([\"GET\", \"HEAD\"].includes(method)) {\n    url = addQueryParameters(url, remainingParameters);\n  } else {\n    if (\"data\" in remainingParameters) {\n      body = remainingParameters.data;\n    } else {\n      if (Object.keys(remainingParameters).length) {\n        body = remainingParameters;\n      }\n    }\n  }\n  if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n    headers[\"content-type\"] = \"application/json; charset=utf-8\";\n  }\n  if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n    body = \"\";\n  }\n  return Object.assign(\n    { method, url, headers },\n    typeof body !== \"undefined\" ? { body } : null,\n    options.request ? { request: options.request } : null\n  );\n}\n\n// pkg/dist-src/endpoint-with-defaults.js\nfunction endpointWithDefaults(defaults, route, options) {\n  return parse(merge(defaults, route, options));\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldDefaults, newDefaults) {\n  const DEFAULTS2 = merge(oldDefaults, newDefaults);\n  const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);\n  return Object.assign(endpoint2, {\n    DEFAULTS: DEFAULTS2,\n    defaults: withDefaults.bind(null, DEFAULTS2),\n    merge: merge.bind(null, DEFAULTS2),\n    parse\n  });\n}\n\n// pkg/dist-src/index.js\nvar endpoint = withDefaults(null, DEFAULTS);\nexport {\n  endpoint\n};\n", "'use strict'\n\nconst NullObject = function NullObject () { }\nNullObject.prototype = Object.create(null)\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nconst paramRE = /; *([!#$%&'*+.^\\w`|~-]+)=(\"(?:[\\v\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\v\\u0020-\\u00ff])*\"|[!#$%&'*+.^\\w`|~-]+) */gu\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nconst quotedPairRE = /\\\\([\\v\\u0020-\\u00ff])/gu\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nconst mediaTypeRE = /^[!#$%&'*+.^\\w|~-]+\\/[!#$%&'*+.^\\w|~-]+$/u\n\n// default ContentType to prevent repeated object creation\nconst defaultContentType = { type: '', parameters: new NullObject() }\nObject.freeze(defaultContentType.parameters)\nObject.freeze(defaultContentType)\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} header\n * @return {Object}\n * @public\n */\n\nfunction parse (header) {\n  if (typeof header !== 'string') {\n    throw new TypeError('argument header is required and must be a string')\n  }\n\n  let index = header.indexOf(';')\n  const type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (mediaTypeRE.test(type) === false) {\n    throw new TypeError('invalid media type')\n  }\n\n  const result = {\n    type: type.toLowerCase(),\n    parameters: new NullObject()\n  }\n\n  // parse parameters\n  if (index === -1) {\n    return result\n  }\n\n  let key\n  let match\n  let value\n\n  paramRE.lastIndex = index\n\n  while ((match = paramRE.exec(header))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .slice(1, value.length - 1)\n\n      quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n    }\n\n    result.parameters[key] = value\n  }\n\n  if (index !== header.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return result\n}\n\nfunction safeParse (header) {\n  if (typeof header !== 'string') {\n    return defaultContentType\n  }\n\n  let index = header.indexOf(';')\n  const type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (mediaTypeRE.test(type) === false) {\n    return defaultContentType\n  }\n\n  const result = {\n    type: type.toLowerCase(),\n    parameters: new NullObject()\n  }\n\n  // parse parameters\n  if (index === -1) {\n    return result\n  }\n\n  let key\n  let match\n  let value\n\n  paramRE.lastIndex = index\n\n  while ((match = paramRE.exec(header))) {\n    if (match.index !== index) {\n      return defaultContentType\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .slice(1, value.length - 1)\n\n      quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n    }\n\n    result.parameters[key] = value\n  }\n\n  if (index !== header.length) {\n    return defaultContentType\n  }\n\n  return result\n}\n\nmodule.exports.default = { parse, safeParse }\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.defaultContentType = defaultContentType\n", "class RequestError extends Error {\n  name;\n  /**\n   * http status code\n   */\n  status;\n  /**\n   * Request options that lead to the error.\n   */\n  request;\n  /**\n   * Response object if a response was received\n   */\n  response;\n  constructor(message, statusCode, options) {\n    super(message, { cause: options.cause });\n    this.name = \"HttpError\";\n    this.status = Number.parseInt(statusCode);\n    if (Number.isNaN(this.status)) {\n      this.status = 0;\n    }\n    /* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist */\n    if (\"response\" in options) {\n      this.response = options.response;\n    }\n    const requestCopy = Object.assign({}, options.request);\n    if (options.request.headers.authorization) {\n      requestCopy.headers = Object.assign({}, options.request.headers, {\n        authorization: options.request.headers.authorization.replace(\n          /(?<! ) .*$/,\n          \" [REDACTED]\"\n        )\n      });\n    }\n    requestCopy.url = requestCopy.url.replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\").replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n    this.request = requestCopy;\n  }\n}\nexport {\n  RequestError\n};\n", "// pkg/dist-src/index.js\nimport { endpoint } from \"@octokit/endpoint\";\n\n// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"10.0.7\";\n\n// pkg/dist-src/defaults.js\nvar defaults_default = {\n  headers: {\n    \"user-agent\": `octokit-request.js/${VERSION} ${getUserAgent()}`\n  }\n};\n\n// pkg/dist-src/fetch-wrapper.js\nimport { safeParse } from \"fast-content-type-parse\";\n\n// pkg/dist-src/is-plain-object.js\nfunction isPlainObject(value) {\n  if (typeof value !== \"object\" || value === null) return false;\n  if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n  const proto = Object.getPrototypeOf(value);\n  if (proto === null) return true;\n  const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/fetch-wrapper.js\nimport { RequestError } from \"@octokit/request-error\";\nvar noop = () => \"\";\nasync function fetchWrapper(requestOptions) {\n  const fetch = requestOptions.request?.fetch || globalThis.fetch;\n  if (!fetch) {\n    throw new Error(\n      \"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing\"\n    );\n  }\n  const log = requestOptions.request?.log || console;\n  const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;\n  const body = isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;\n  const requestHeaders = Object.fromEntries(\n    Object.entries(requestOptions.headers).map(([name, value]) => [\n      name,\n      String(value)\n    ])\n  );\n  let fetchResponse;\n  try {\n    fetchResponse = await fetch(requestOptions.url, {\n      method: requestOptions.method,\n      body,\n      redirect: requestOptions.request?.redirect,\n      headers: requestHeaders,\n      signal: requestOptions.request?.signal,\n      // duplex must be set if request.body is ReadableStream or Async Iterables.\n      // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.\n      ...requestOptions.body && { duplex: \"half\" }\n    });\n  } catch (error) {\n    let message = \"Unknown Error\";\n    if (error instanceof Error) {\n      if (error.name === \"AbortError\") {\n        error.status = 500;\n        throw error;\n      }\n      message = error.message;\n      if (error.name === \"TypeError\" && \"cause\" in error) {\n        if (error.cause instanceof Error) {\n          message = error.cause.message;\n        } else if (typeof error.cause === \"string\") {\n          message = error.cause;\n        }\n      }\n    }\n    const requestError = new RequestError(message, 500, {\n      request: requestOptions\n    });\n    requestError.cause = error;\n    throw requestError;\n  }\n  const status = fetchResponse.status;\n  const url = fetchResponse.url;\n  const responseHeaders = {};\n  for (const [key, value] of fetchResponse.headers) {\n    responseHeaders[key] = value;\n  }\n  const octokitResponse = {\n    url,\n    status,\n    headers: responseHeaders,\n    data: \"\"\n  };\n  if (\"deprecation\" in responseHeaders) {\n    const matches = responseHeaders.link && responseHeaders.link.match(/<([^<>]+)>; rel=\"deprecation\"/);\n    const deprecationLink = matches && matches.pop();\n    log.warn(\n      `[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`\n    );\n  }\n  if (status === 204 || status === 205) {\n    return octokitResponse;\n  }\n  if (requestOptions.method === \"HEAD\") {\n    if (status < 400) {\n      return octokitResponse;\n    }\n    throw new RequestError(fetchResponse.statusText, status, {\n      response: octokitResponse,\n      request: requestOptions\n    });\n  }\n  if (status === 304) {\n    octokitResponse.data = await getResponseData(fetchResponse);\n    throw new RequestError(\"Not modified\", status, {\n      response: octokitResponse,\n      request: requestOptions\n    });\n  }\n  if (status >= 400) {\n    octokitResponse.data = await getResponseData(fetchResponse);\n    throw new RequestError(toErrorMessage(octokitResponse.data), status, {\n      response: octokitResponse,\n      request: requestOptions\n    });\n  }\n  octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;\n  return octokitResponse;\n}\nasync function getResponseData(response) {\n  const contentType = response.headers.get(\"content-type\");\n  if (!contentType) {\n    return response.text().catch(noop);\n  }\n  const mimetype = safeParse(contentType);\n  if (isJSONResponse(mimetype)) {\n    let text = \"\";\n    try {\n      text = await response.text();\n      return JSON.parse(text);\n    } catch (err) {\n      return text;\n    }\n  } else if (mimetype.type.startsWith(\"text/\") || mimetype.parameters.charset?.toLowerCase() === \"utf-8\") {\n    return response.text().catch(noop);\n  } else {\n    return response.arrayBuffer().catch(\n      /* v8 ignore next -- @preserve */\n      () => new ArrayBuffer(0)\n    );\n  }\n}\nfunction isJSONResponse(mimetype) {\n  return mimetype.type === \"application/json\" || mimetype.type === \"application/scim+json\";\n}\nfunction toErrorMessage(data) {\n  if (typeof data === \"string\") {\n    return data;\n  }\n  if (data instanceof ArrayBuffer) {\n    return \"Unknown error\";\n  }\n  if (\"message\" in data) {\n    const suffix = \"documentation_url\" in data ? ` - ${data.documentation_url}` : \"\";\n    return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(\", \")}${suffix}` : `${data.message}${suffix}`;\n  }\n  return `Unknown error: ${JSON.stringify(data)}`;\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldEndpoint, newDefaults) {\n  const endpoint2 = oldEndpoint.defaults(newDefaults);\n  const newApi = function(route, parameters) {\n    const endpointOptions = endpoint2.merge(route, parameters);\n    if (!endpointOptions.request || !endpointOptions.request.hook) {\n      return fetchWrapper(endpoint2.parse(endpointOptions));\n    }\n    const request2 = (route2, parameters2) => {\n      return fetchWrapper(\n        endpoint2.parse(endpoint2.merge(route2, parameters2))\n      );\n    };\n    Object.assign(request2, {\n      endpoint: endpoint2,\n      defaults: withDefaults.bind(null, endpoint2)\n    });\n    return endpointOptions.request.hook(request2, endpointOptions);\n  };\n  return Object.assign(newApi, {\n    endpoint: endpoint2,\n    defaults: withDefaults.bind(null, endpoint2)\n  });\n}\n\n// pkg/dist-src/index.js\nvar request = withDefaults(endpoint, defaults_default);\nexport {\n  request\n};\n/* v8 ignore next -- @preserve */\n/* v8 ignore else -- @preserve */\n", "// pkg/dist-src/index.js\nimport { request } from \"@octokit/request\";\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/with-defaults.js\nimport { request as Request2 } from \"@octokit/request\";\n\n// pkg/dist-src/graphql.js\nimport { request as Request } from \"@octokit/request\";\n\n// pkg/dist-src/error.js\nfunction _buildMessageForResponseErrors(data) {\n  return `Request failed due to following response errors:\n` + data.errors.map((e) => ` - ${e.message}`).join(\"\\n\");\n}\nvar GraphqlResponseError = class extends Error {\n  constructor(request2, headers, response) {\n    super(_buildMessageForResponseErrors(response));\n    this.request = request2;\n    this.headers = headers;\n    this.response = response;\n    this.errors = response.errors;\n    this.data = response.data;\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n  }\n  name = \"GraphqlResponseError\";\n  errors;\n  data;\n};\n\n// pkg/dist-src/graphql.js\nvar NON_VARIABLE_OPTIONS = [\n  \"method\",\n  \"baseUrl\",\n  \"url\",\n  \"headers\",\n  \"request\",\n  \"query\",\n  \"mediaType\",\n  \"operationName\"\n];\nvar FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nvar GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request2, query, options) {\n  if (options) {\n    if (typeof query === \"string\" && \"query\" in options) {\n      return Promise.reject(\n        new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`)\n      );\n    }\n    for (const key in options) {\n      if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n      return Promise.reject(\n        new Error(\n          `[@octokit/graphql] \"${key}\" cannot be used as variable name`\n        )\n      );\n    }\n  }\n  const parsedOptions = typeof query === \"string\" ? Object.assign({ query }, options) : query;\n  const requestOptions = Object.keys(\n    parsedOptions\n  ).reduce((result, key) => {\n    if (NON_VARIABLE_OPTIONS.includes(key)) {\n      result[key] = parsedOptions[key];\n      return result;\n    }\n    if (!result.variables) {\n      result.variables = {};\n    }\n    result.variables[key] = parsedOptions[key];\n    return result;\n  }, {});\n  const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;\n  if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n    requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n  }\n  return request2(requestOptions).then((response) => {\n    if (response.data.errors) {\n      const headers = {};\n      for (const key of Object.keys(response.headers)) {\n        headers[key] = response.headers[key];\n      }\n      throw new GraphqlResponseError(\n        requestOptions,\n        headers,\n        response.data\n      );\n    }\n    return response.data.data;\n  });\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(request2, newDefaults) {\n  const newRequest = request2.defaults(newDefaults);\n  const newApi = (query, options) => {\n    return graphql(newRequest, query, options);\n  };\n  return Object.assign(newApi, {\n    defaults: withDefaults.bind(null, newRequest),\n    endpoint: newRequest.endpoint\n  });\n}\n\n// pkg/dist-src/index.js\nvar graphql2 = withDefaults(request, {\n  headers: {\n    \"user-agent\": `octokit-graphql.js/${VERSION} ${getUserAgent()}`\n  },\n  method: \"POST\",\n  url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n  return withDefaults(customRequest, {\n    method: \"POST\",\n    url: \"/graphql\"\n  });\n}\nexport {\n  GraphqlResponseError,\n  graphql2 as graphql,\n  withCustomRequest\n};\n", "// pkg/dist-src/is-jwt.js\nvar b64url = \"(?:[a-zA-Z0-9_-]+)\";\nvar sep = \"\\\\.\";\nvar jwtRE = new RegExp(`^${b64url}${sep}${b64url}${sep}${b64url}$`);\nvar isJWT = jwtRE.test.bind(jwtRE);\n\n// pkg/dist-src/auth.js\nasync function auth(token) {\n  const isApp = isJWT(token);\n  const isInstallation = token.startsWith(\"v1.\") || token.startsWith(\"ghs_\");\n  const isUserToServer = token.startsWith(\"ghu_\");\n  const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n  return {\n    type: \"token\",\n    token,\n    tokenType\n  };\n}\n\n// pkg/dist-src/with-authorization-prefix.js\nfunction withAuthorizationPrefix(token) {\n  if (token.split(/\\./).length === 3) {\n    return `bearer ${token}`;\n  }\n  return `token ${token}`;\n}\n\n// pkg/dist-src/hook.js\nasync function hook(token, request, route, parameters) {\n  const endpoint = request.endpoint.merge(\n    route,\n    parameters\n  );\n  endpoint.headers.authorization = withAuthorizationPrefix(token);\n  return request(endpoint);\n}\n\n// pkg/dist-src/index.js\nvar createTokenAuth = function createTokenAuth2(token) {\n  if (!token) {\n    throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n  }\n  if (typeof token !== \"string\") {\n    throw new Error(\n      \"[@octokit/auth-token] Token passed to createTokenAuth is not a string\"\n    );\n  }\n  token = token.replace(/^(token|bearer) +/i, \"\");\n  return Object.assign(auth.bind(null, token), {\n    hook: hook.bind(null, token)\n  });\n};\nexport {\n  createTokenAuth\n};\n", "const VERSION = \"7.0.6\";\nexport {\n  VERSION\n};\n", "import { getUserAgent } from \"universal-user-agent\";\nimport Hook from \"before-after-hook\";\nimport { request } from \"@octokit/request\";\nimport { withCustomRequest } from \"@octokit/graphql\";\nimport { createTokenAuth } from \"@octokit/auth-token\";\nimport { VERSION } from \"./version.js\";\nconst noop = () => {\n};\nconst consoleWarn = console.warn.bind(console);\nconst consoleError = console.error.bind(console);\nfunction createLogger(logger = {}) {\n  if (typeof logger.debug !== \"function\") {\n    logger.debug = noop;\n  }\n  if (typeof logger.info !== \"function\") {\n    logger.info = noop;\n  }\n  if (typeof logger.warn !== \"function\") {\n    logger.warn = consoleWarn;\n  }\n  if (typeof logger.error !== \"function\") {\n    logger.error = consoleError;\n  }\n  return logger;\n}\nconst userAgentTrail = `octokit-core.js/${VERSION} ${getUserAgent()}`;\nclass Octokit {\n  static VERSION = VERSION;\n  static defaults(defaults) {\n    const OctokitWithDefaults = class extends this {\n      constructor(...args) {\n        const options = args[0] || {};\n        if (typeof defaults === \"function\") {\n          super(defaults(options));\n          return;\n        }\n        super(\n          Object.assign(\n            {},\n            defaults,\n            options,\n            options.userAgent && defaults.userAgent ? {\n              userAgent: `${options.userAgent} ${defaults.userAgent}`\n            } : null\n          )\n        );\n      }\n    };\n    return OctokitWithDefaults;\n  }\n  static plugins = [];\n  /**\n   * Attach a plugin (or many) to your Octokit instance.\n   *\n   * @example\n   * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)\n   */\n  static plugin(...newPlugins) {\n    const currentPlugins = this.plugins;\n    const NewOctokit = class extends this {\n      static plugins = currentPlugins.concat(\n        newPlugins.filter((plugin) => !currentPlugins.includes(plugin))\n      );\n    };\n    return NewOctokit;\n  }\n  constructor(options = {}) {\n    const hook = new Hook.Collection();\n    const requestDefaults = {\n      baseUrl: request.endpoint.DEFAULTS.baseUrl,\n      headers: {},\n      request: Object.assign({}, options.request, {\n        // @ts-ignore internal usage only, no need to type\n        hook: hook.bind(null, \"request\")\n      }),\n      mediaType: {\n        previews: [],\n        format: \"\"\n      }\n    };\n    requestDefaults.headers[\"user-agent\"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;\n    if (options.baseUrl) {\n      requestDefaults.baseUrl = options.baseUrl;\n    }\n    if (options.previews) {\n      requestDefaults.mediaType.previews = options.previews;\n    }\n    if (options.timeZone) {\n      requestDefaults.headers[\"time-zone\"] = options.timeZone;\n    }\n    this.request = request.defaults(requestDefaults);\n    this.graphql = withCustomRequest(this.request).defaults(requestDefaults);\n    this.log = createLogger(options.log);\n    this.hook = hook;\n    if (!options.authStrategy) {\n      if (!options.auth) {\n        this.auth = async () => ({\n          type: \"unauthenticated\"\n        });\n      } else {\n        const auth = createTokenAuth(options.auth);\n        hook.wrap(\"request\", auth.hook);\n        this.auth = auth;\n      }\n    } else {\n      const { authStrategy, ...otherOptions } = options;\n      const auth = authStrategy(\n        Object.assign(\n          {\n            request: this.request,\n            log: this.log,\n            // we pass the current octokit instance as well as its constructor options\n            // to allow for authentication strategies that return a new octokit instance\n            // that shares the same internal state as the current one. The original\n            // requirement for this was the \"event-octokit\" authentication strategy\n            // of https://github.com/probot/octokit-auth-probot.\n            octokit: this,\n            octokitOptions: otherOptions\n          },\n          options.auth\n        )\n      );\n      hook.wrap(\"request\", auth.hook);\n      this.auth = auth;\n    }\n    const classConstructor = this.constructor;\n    for (let i = 0; i < classConstructor.plugins.length; ++i) {\n      Object.assign(this, classConstructor.plugins[i](this, options));\n    }\n  }\n  // assigned during constructor\n  request;\n  graphql;\n  log;\n  hook;\n  // TODO: type `octokit.auth` based on passed options.authStrategy\n  auth;\n}\nexport {\n  Octokit\n};\n", "const VERSION = \"6.0.0\";\nexport {\n  VERSION\n};\n", "import { VERSION } from \"./version.js\";\nfunction requestLog(octokit) {\n  octokit.hook.wrap(\"request\", (request, options) => {\n    octokit.log.debug(\"request\", options);\n    const start = Date.now();\n    const requestOptions = octokit.request.endpoint.parse(options);\n    const path = requestOptions.url.replace(options.baseUrl, \"\");\n    return request(options).then((response) => {\n      const requestId = response.headers[\"x-github-request-id\"];\n      octokit.log.info(\n        `${requestOptions.method} ${path} - ${response.status} with id ${requestId} in ${Date.now() - start}ms`\n      );\n      return response;\n    }).catch((error) => {\n      const requestId = error.response?.headers[\"x-github-request-id\"] || \"UNKNOWN\";\n      octokit.log.error(\n        `${requestOptions.method} ${path} - ${error.status} with id ${requestId} in ${Date.now() - start}ms`\n      );\n      throw error;\n    });\n  });\n}\nrequestLog.VERSION = VERSION;\nexport {\n  requestLog\n};\n", "// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/normalize-paginated-list-response.js\nfunction normalizePaginatedListResponse(response) {\n  if (!response.data) {\n    return {\n      ...response,\n      data: []\n    };\n  }\n  const responseNeedsNormalization = (\"total_count\" in response.data || \"total_commits\" in response.data) && !(\"url\" in response.data);\n  if (!responseNeedsNormalization) return response;\n  const incompleteResults = response.data.incomplete_results;\n  const repositorySelection = response.data.repository_selection;\n  const totalCount = response.data.total_count;\n  const totalCommits = response.data.total_commits;\n  delete response.data.incomplete_results;\n  delete response.data.repository_selection;\n  delete response.data.total_count;\n  delete response.data.total_commits;\n  const namespaceKey = Object.keys(response.data)[0];\n  const data = response.data[namespaceKey];\n  response.data = data;\n  if (typeof incompleteResults !== \"undefined\") {\n    response.data.incomplete_results = incompleteResults;\n  }\n  if (typeof repositorySelection !== \"undefined\") {\n    response.data.repository_selection = repositorySelection;\n  }\n  response.data.total_count = totalCount;\n  response.data.total_commits = totalCommits;\n  return response;\n}\n\n// pkg/dist-src/iterator.js\nfunction iterator(octokit, route, parameters) {\n  const options = typeof route === \"function\" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);\n  const requestMethod = typeof route === \"function\" ? route : octokit.request;\n  const method = options.method;\n  const headers = options.headers;\n  let url = options.url;\n  return {\n    [Symbol.asyncIterator]: () => ({\n      async next() {\n        if (!url) return { done: true };\n        try {\n          const response = await requestMethod({ method, url, headers });\n          const normalizedResponse = normalizePaginatedListResponse(response);\n          url = ((normalizedResponse.headers.link || \"\").match(\n            /<([^<>]+)>;\\s*rel=\"next\"/\n          ) || [])[1];\n          if (!url && \"total_commits\" in normalizedResponse.data) {\n            const parsedUrl = new URL(normalizedResponse.url);\n            const params = parsedUrl.searchParams;\n            const page = parseInt(params.get(\"page\") || \"1\", 10);\n            const per_page = parseInt(params.get(\"per_page\") || \"250\", 10);\n            if (page * per_page < normalizedResponse.data.total_commits) {\n              params.set(\"page\", String(page + 1));\n              url = parsedUrl.toString();\n            }\n          }\n          return { value: normalizedResponse };\n        } catch (error) {\n          if (error.status !== 409) throw error;\n          url = \"\";\n          return {\n            value: {\n              status: 200,\n              headers: {},\n              data: []\n            }\n          };\n        }\n      }\n    })\n  };\n}\n\n// pkg/dist-src/paginate.js\nfunction paginate(octokit, route, parameters, mapFn) {\n  if (typeof parameters === \"function\") {\n    mapFn = parameters;\n    parameters = void 0;\n  }\n  return gather(\n    octokit,\n    [],\n    iterator(octokit, route, parameters)[Symbol.asyncIterator](),\n    mapFn\n  );\n}\nfunction gather(octokit, results, iterator2, mapFn) {\n  return iterator2.next().then((result) => {\n    if (result.done) {\n      return results;\n    }\n    let earlyExit = false;\n    function done() {\n      earlyExit = true;\n    }\n    results = results.concat(\n      mapFn ? mapFn(result.value, done) : result.value.data\n    );\n    if (earlyExit) {\n      return results;\n    }\n    return gather(octokit, results, iterator2, mapFn);\n  });\n}\n\n// pkg/dist-src/compose-paginate.js\nvar composePaginateRest = Object.assign(paginate, {\n  iterator\n});\n\n// pkg/dist-src/generated/paginating-endpoints.js\nvar paginatingEndpoints = [\n  \"GET /advisories\",\n  \"GET /app/hook/deliveries\",\n  \"GET /app/installation-requests\",\n  \"GET /app/installations\",\n  \"GET /assignments/{assignment_id}/accepted_assignments\",\n  \"GET /classrooms\",\n  \"GET /classrooms/{classroom_id}/assignments\",\n  \"GET /enterprises/{enterprise}/code-security/configurations\",\n  \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\",\n  \"GET /enterprises/{enterprise}/dependabot/alerts\",\n  \"GET /enterprises/{enterprise}/teams\",\n  \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\",\n  \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n  \"GET /events\",\n  \"GET /gists\",\n  \"GET /gists/public\",\n  \"GET /gists/starred\",\n  \"GET /gists/{gist_id}/comments\",\n  \"GET /gists/{gist_id}/commits\",\n  \"GET /gists/{gist_id}/forks\",\n  \"GET /installation/repositories\",\n  \"GET /issues\",\n  \"GET /licenses\",\n  \"GET /marketplace_listing/plans\",\n  \"GET /marketplace_listing/plans/{plan_id}/accounts\",\n  \"GET /marketplace_listing/stubbed/plans\",\n  \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\",\n  \"GET /networks/{owner}/{repo}/events\",\n  \"GET /notifications\",\n  \"GET /organizations\",\n  \"GET /organizations/{org}/dependabot/repository-access\",\n  \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n  \"GET /orgs/{org}/actions/hosted-runners\",\n  \"GET /orgs/{org}/actions/permissions/repositories\",\n  \"GET /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n  \"GET /orgs/{org}/actions/runner-groups\",\n  \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n  \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n  \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n  \"GET /orgs/{org}/actions/runners\",\n  \"GET /orgs/{org}/actions/secrets\",\n  \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n  \"GET /orgs/{org}/actions/variables\",\n  \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n  \"GET /orgs/{org}/attestations/repositories\",\n  \"GET /orgs/{org}/attestations/{subject_digest}\",\n  \"GET /orgs/{org}/blocks\",\n  \"GET /orgs/{org}/campaigns\",\n  \"GET /orgs/{org}/code-scanning/alerts\",\n  \"GET /orgs/{org}/code-security/configurations\",\n  \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n  \"GET /orgs/{org}/codespaces\",\n  \"GET /orgs/{org}/codespaces/secrets\",\n  \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n  \"GET /orgs/{org}/copilot/billing/seats\",\n  \"GET /orgs/{org}/copilot/metrics\",\n  \"GET /orgs/{org}/dependabot/alerts\",\n  \"GET /orgs/{org}/dependabot/secrets\",\n  \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n  \"GET /orgs/{org}/events\",\n  \"GET /orgs/{org}/failed_invitations\",\n  \"GET /orgs/{org}/hooks\",\n  \"GET /orgs/{org}/hooks/{hook_id}/deliveries\",\n  \"GET /orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}\",\n  \"GET /orgs/{org}/insights/api/subject-stats\",\n  \"GET /orgs/{org}/insights/api/user-stats/{user_id}\",\n  \"GET /orgs/{org}/installations\",\n  \"GET /orgs/{org}/invitations\",\n  \"GET /orgs/{org}/invitations/{invitation_id}/teams\",\n  \"GET /orgs/{org}/issues\",\n  \"GET /orgs/{org}/members\",\n  \"GET /orgs/{org}/members/{username}/codespaces\",\n  \"GET /orgs/{org}/migrations\",\n  \"GET /orgs/{org}/migrations/{migration_id}/repositories\",\n  \"GET /orgs/{org}/organization-roles/{role_id}/teams\",\n  \"GET /orgs/{org}/organization-roles/{role_id}/users\",\n  \"GET /orgs/{org}/outside_collaborators\",\n  \"GET /orgs/{org}/packages\",\n  \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n  \"GET /orgs/{org}/personal-access-token-requests\",\n  \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n  \"GET /orgs/{org}/personal-access-tokens\",\n  \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n  \"GET /orgs/{org}/private-registries\",\n  \"GET /orgs/{org}/projects\",\n  \"GET /orgs/{org}/projectsV2\",\n  \"GET /orgs/{org}/projectsV2/{project_number}/fields\",\n  \"GET /orgs/{org}/projectsV2/{project_number}/items\",\n  \"GET /orgs/{org}/properties/values\",\n  \"GET /orgs/{org}/public_members\",\n  \"GET /orgs/{org}/repos\",\n  \"GET /orgs/{org}/rulesets\",\n  \"GET /orgs/{org}/rulesets/rule-suites\",\n  \"GET /orgs/{org}/rulesets/{ruleset_id}/history\",\n  \"GET /orgs/{org}/secret-scanning/alerts\",\n  \"GET /orgs/{org}/security-advisories\",\n  \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n  \"GET /orgs/{org}/settings/network-configurations\",\n  \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n  \"GET /orgs/{org}/teams\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n  \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n  \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n  \"GET /orgs/{org}/teams/{team_slug}/members\",\n  \"GET /orgs/{org}/teams/{team_slug}/projects\",\n  \"GET /orgs/{org}/teams/{team_slug}/repos\",\n  \"GET /orgs/{org}/teams/{team_slug}/teams\",\n  \"GET /projects/{project_id}/collaborators\",\n  \"GET /repos/{owner}/{repo}/actions/artifacts\",\n  \"GET /repos/{owner}/{repo}/actions/caches\",\n  \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n  \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n  \"GET /repos/{owner}/{repo}/actions/runners\",\n  \"GET /repos/{owner}/{repo}/actions/runs\",\n  \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n  \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n  \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n  \"GET /repos/{owner}/{repo}/actions/secrets\",\n  \"GET /repos/{owner}/{repo}/actions/variables\",\n  \"GET /repos/{owner}/{repo}/actions/workflows\",\n  \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n  \"GET /repos/{owner}/{repo}/activity\",\n  \"GET /repos/{owner}/{repo}/assignees\",\n  \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n  \"GET /repos/{owner}/{repo}/branches\",\n  \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n  \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n  \"GET /repos/{owner}/{repo}/code-scanning/alerts\",\n  \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n  \"GET /repos/{owner}/{repo}/code-scanning/analyses\",\n  \"GET /repos/{owner}/{repo}/codespaces\",\n  \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n  \"GET /repos/{owner}/{repo}/codespaces/secrets\",\n  \"GET /repos/{owner}/{repo}/collaborators\",\n  \"GET /repos/{owner}/{repo}/comments\",\n  \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/commits\",\n  \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n  \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/status\",\n  \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n  \"GET /repos/{owner}/{repo}/compare/{basehead}\",\n  \"GET /repos/{owner}/{repo}/compare/{base}...{head}\",\n  \"GET /repos/{owner}/{repo}/contributors\",\n  \"GET /repos/{owner}/{repo}/dependabot/alerts\",\n  \"GET /repos/{owner}/{repo}/dependabot/secrets\",\n  \"GET /repos/{owner}/{repo}/deployments\",\n  \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n  \"GET /repos/{owner}/{repo}/environments\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n  \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n  \"GET /repos/{owner}/{repo}/events\",\n  \"GET /repos/{owner}/{repo}/forks\",\n  \"GET /repos/{owner}/{repo}/hooks\",\n  \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n  \"GET /repos/{owner}/{repo}/invitations\",\n  \"GET /repos/{owner}/{repo}/issues\",\n  \"GET /repos/{owner}/{repo}/issues/comments\",\n  \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/issues/events\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n  \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n  \"GET /repos/{owner}/{repo}/keys\",\n  \"GET /repos/{owner}/{repo}/labels\",\n  \"GET /repos/{owner}/{repo}/milestones\",\n  \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n  \"GET /repos/{owner}/{repo}/notifications\",\n  \"GET /repos/{owner}/{repo}/pages/builds\",\n  \"GET /repos/{owner}/{repo}/projects\",\n  \"GET /repos/{owner}/{repo}/pulls\",\n  \"GET /repos/{owner}/{repo}/pulls/comments\",\n  \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n  \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n  \"GET /repos/{owner}/{repo}/releases\",\n  \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n  \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n  \"GET /repos/{owner}/{repo}/rules/branches/{branch}\",\n  \"GET /repos/{owner}/{repo}/rulesets\",\n  \"GET /repos/{owner}/{repo}/rulesets/rule-suites\",\n  \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n  \"GET /repos/{owner}/{repo}/secret-scanning/alerts\",\n  \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n  \"GET /repos/{owner}/{repo}/security-advisories\",\n  \"GET /repos/{owner}/{repo}/stargazers\",\n  \"GET /repos/{owner}/{repo}/subscribers\",\n  \"GET /repos/{owner}/{repo}/tags\",\n  \"GET /repos/{owner}/{repo}/teams\",\n  \"GET /repos/{owner}/{repo}/topics\",\n  \"GET /repositories\",\n  \"GET /search/code\",\n  \"GET /search/commits\",\n  \"GET /search/issues\",\n  \"GET /search/labels\",\n  \"GET /search/repositories\",\n  \"GET /search/topics\",\n  \"GET /search/users\",\n  \"GET /teams/{team_id}/discussions\",\n  \"GET /teams/{team_id}/discussions/{discussion_number}/comments\",\n  \"GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n  \"GET /teams/{team_id}/discussions/{discussion_number}/reactions\",\n  \"GET /teams/{team_id}/invitations\",\n  \"GET /teams/{team_id}/members\",\n  \"GET /teams/{team_id}/projects\",\n  \"GET /teams/{team_id}/repos\",\n  \"GET /teams/{team_id}/teams\",\n  \"GET /user/blocks\",\n  \"GET /user/codespaces\",\n  \"GET /user/codespaces/secrets\",\n  \"GET /user/emails\",\n  \"GET /user/followers\",\n  \"GET /user/following\",\n  \"GET /user/gpg_keys\",\n  \"GET /user/installations\",\n  \"GET /user/installations/{installation_id}/repositories\",\n  \"GET /user/issues\",\n  \"GET /user/keys\",\n  \"GET /user/marketplace_purchases\",\n  \"GET /user/marketplace_purchases/stubbed\",\n  \"GET /user/memberships/orgs\",\n  \"GET /user/migrations\",\n  \"GET /user/migrations/{migration_id}/repositories\",\n  \"GET /user/orgs\",\n  \"GET /user/packages\",\n  \"GET /user/packages/{package_type}/{package_name}/versions\",\n  \"GET /user/public_emails\",\n  \"GET /user/repos\",\n  \"GET /user/repository_invitations\",\n  \"GET /user/social_accounts\",\n  \"GET /user/ssh_signing_keys\",\n  \"GET /user/starred\",\n  \"GET /user/subscriptions\",\n  \"GET /user/teams\",\n  \"GET /users\",\n  \"GET /users/{username}/attestations/{subject_digest}\",\n  \"GET /users/{username}/events\",\n  \"GET /users/{username}/events/orgs/{org}\",\n  \"GET /users/{username}/events/public\",\n  \"GET /users/{username}/followers\",\n  \"GET /users/{username}/following\",\n  \"GET /users/{username}/gists\",\n  \"GET /users/{username}/gpg_keys\",\n  \"GET /users/{username}/keys\",\n  \"GET /users/{username}/orgs\",\n  \"GET /users/{username}/packages\",\n  \"GET /users/{username}/projects\",\n  \"GET /users/{username}/projectsV2\",\n  \"GET /users/{username}/projectsV2/{project_number}/fields\",\n  \"GET /users/{username}/projectsV2/{project_number}/items\",\n  \"GET /users/{username}/received_events\",\n  \"GET /users/{username}/received_events/public\",\n  \"GET /users/{username}/repos\",\n  \"GET /users/{username}/social_accounts\",\n  \"GET /users/{username}/ssh_signing_keys\",\n  \"GET /users/{username}/starred\",\n  \"GET /users/{username}/subscriptions\"\n];\n\n// pkg/dist-src/paginating-endpoints.js\nfunction isPaginatingEndpoint(arg) {\n  if (typeof arg === \"string\") {\n    return paginatingEndpoints.includes(arg);\n  } else {\n    return false;\n  }\n}\n\n// pkg/dist-src/index.js\nfunction paginateRest(octokit) {\n  return {\n    paginate: Object.assign(paginate.bind(null, octokit), {\n      iterator: iterator.bind(null, octokit)\n    })\n  };\n}\npaginateRest.VERSION = VERSION;\nexport {\n  composePaginateRest,\n  isPaginatingEndpoint,\n  paginateRest,\n  paginatingEndpoints\n};\n", "export const VERSION = \"17.0.0\";\n", "import type { EndpointsDefaultsAndDecorations } from \"../types.js\";\nconst Endpoints: EndpointsDefaultsAndDecorations = {\n  actions: {\n    addCustomLabelsToSelfHostedRunnerForOrg: [\n      \"POST /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    addCustomLabelsToSelfHostedRunnerForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    addRepoAccessToSelfHostedRunnerGroupInOrg: [\n      \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\",\n    ],\n    addSelectedRepoToOrgSecret: [\n      \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    addSelectedRepoToOrgVariable: [\n      \"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n    ],\n    approveWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\",\n    ],\n    cancelWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\",\n    ],\n    createEnvironmentVariable: [\n      \"POST /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n    ],\n    createHostedRunnerForOrg: [\"POST /orgs/{org}/actions/hosted-runners\"],\n    createOrUpdateEnvironmentSecret: [\n      \"PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n    ],\n    createOrUpdateOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}\"],\n    createOrUpdateRepoSecret: [\n      \"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n    ],\n    createOrgVariable: [\"POST /orgs/{org}/actions/variables\"],\n    createRegistrationTokenForOrg: [\n      \"POST /orgs/{org}/actions/runners/registration-token\",\n    ],\n    createRegistrationTokenForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/registration-token\",\n    ],\n    createRemoveTokenForOrg: [\"POST /orgs/{org}/actions/runners/remove-token\"],\n    createRemoveTokenForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/remove-token\",\n    ],\n    createRepoVariable: [\"POST /repos/{owner}/{repo}/actions/variables\"],\n    createWorkflowDispatch: [\n      \"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\",\n    ],\n    deleteActionsCacheById: [\n      \"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\",\n    ],\n    deleteActionsCacheByKey: [\n      \"DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}\",\n    ],\n    deleteArtifact: [\n      \"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\",\n    ],\n    deleteCustomImageFromOrg: [\n      \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n    ],\n    deleteCustomImageVersionFromOrg: [\n      \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n    ],\n    deleteEnvironmentSecret: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n    ],\n    deleteEnvironmentVariable: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n    ],\n    deleteHostedRunnerForOrg: [\n      \"DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n    ],\n    deleteOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}\"],\n    deleteOrgVariable: [\"DELETE /orgs/{org}/actions/variables/{name}\"],\n    deleteRepoSecret: [\n      \"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\",\n    ],\n    deleteRepoVariable: [\n      \"DELETE /repos/{owner}/{repo}/actions/variables/{name}\",\n    ],\n    deleteSelfHostedRunnerFromOrg: [\n      \"DELETE /orgs/{org}/actions/runners/{runner_id}\",\n    ],\n    deleteSelfHostedRunnerFromRepo: [\n      \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n    ],\n    deleteWorkflowRun: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n    deleteWorkflowRunLogs: [\n      \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n    ],\n    disableSelectedRepositoryGithubActionsOrganization: [\n      \"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n    ],\n    disableWorkflow: [\n      \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\",\n    ],\n    downloadArtifact: [\n      \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\",\n    ],\n    downloadJobLogsForWorkflowRun: [\n      \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\",\n    ],\n    downloadWorkflowRunAttemptLogs: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\",\n    ],\n    downloadWorkflowRunLogs: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\",\n    ],\n    enableSelectedRepositoryGithubActionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\",\n    ],\n    enableWorkflow: [\n      \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\",\n    ],\n    forceCancelWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel\",\n    ],\n    generateRunnerJitconfigForOrg: [\n      \"POST /orgs/{org}/actions/runners/generate-jitconfig\",\n    ],\n    generateRunnerJitconfigForRepo: [\n      \"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig\",\n    ],\n    getActionsCacheList: [\"GET /repos/{owner}/{repo}/actions/caches\"],\n    getActionsCacheUsage: [\"GET /repos/{owner}/{repo}/actions/cache/usage\"],\n    getActionsCacheUsageByRepoForOrg: [\n      \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n    ],\n    getActionsCacheUsageForOrg: [\"GET /orgs/{org}/actions/cache/usage\"],\n    getAllowedActionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions/selected-actions\",\n    ],\n    getAllowedActionsRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n    ],\n    getArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n    getCustomImageForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\",\n    ],\n    getCustomImageVersionForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\",\n    ],\n    getCustomOidcSubClaimForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n    ],\n    getEnvironmentPublicKey: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key\",\n    ],\n    getEnvironmentSecret: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\",\n    ],\n    getEnvironmentVariable: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n    ],\n    getGithubActionsDefaultWorkflowPermissionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions/workflow\",\n    ],\n    getGithubActionsDefaultWorkflowPermissionsRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions/workflow\",\n    ],\n    getGithubActionsPermissionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions\",\n    ],\n    getGithubActionsPermissionsRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions\",\n    ],\n    getHostedRunnerForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n    ],\n    getHostedRunnersGithubOwnedImagesForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/github-owned\",\n    ],\n    getHostedRunnersLimitsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/limits\",\n    ],\n    getHostedRunnersMachineSpecsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/machine-sizes\",\n    ],\n    getHostedRunnersPartnerImagesForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/partner\",\n    ],\n    getHostedRunnersPlatformsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/platforms\",\n    ],\n    getJobForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/actions/secrets/public-key\"],\n    getOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}\"],\n    getOrgVariable: [\"GET /orgs/{org}/actions/variables/{name}\"],\n    getPendingDeploymentsForRun: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n    ],\n    getRepoPermissions: [\n      \"GET /repos/{owner}/{repo}/actions/permissions\",\n      {},\n      { renamed: [\"actions\", \"getGithubActionsPermissionsRepository\"] },\n    ],\n    getRepoPublicKey: [\"GET /repos/{owner}/{repo}/actions/secrets/public-key\"],\n    getRepoSecret: [\"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n    getRepoVariable: [\"GET /repos/{owner}/{repo}/actions/variables/{name}\"],\n    getReviewsForRun: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\",\n    ],\n    getSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}\"],\n    getSelfHostedRunnerForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\",\n    ],\n    getWorkflow: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\"],\n    getWorkflowAccessToRepository: [\n      \"GET /repos/{owner}/{repo}/actions/permissions/access\",\n    ],\n    getWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n    getWorkflowRunAttempt: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\",\n    ],\n    getWorkflowRunUsage: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\",\n    ],\n    getWorkflowUsage: [\n      \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\",\n    ],\n    listArtifactsForRepo: [\"GET /repos/{owner}/{repo}/actions/artifacts\"],\n    listCustomImageVersionsForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions\",\n    ],\n    listCustomImagesForOrg: [\n      \"GET /orgs/{org}/actions/hosted-runners/images/custom\",\n    ],\n    listEnvironmentSecrets: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n    ],\n    listEnvironmentVariables: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n    ],\n    listGithubHostedRunnersInGroupForOrg: [\n      \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n    ],\n    listHostedRunnersForOrg: [\"GET /orgs/{org}/actions/hosted-runners\"],\n    listJobsForWorkflowRun: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n    ],\n    listJobsForWorkflowRunAttempt: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n    ],\n    listLabelsForSelfHostedRunnerForOrg: [\n      \"GET /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    listLabelsForSelfHostedRunnerForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    listOrgSecrets: [\"GET /orgs/{org}/actions/secrets\"],\n    listOrgVariables: [\"GET /orgs/{org}/actions/variables\"],\n    listRepoOrganizationSecrets: [\n      \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n    ],\n    listRepoOrganizationVariables: [\n      \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n    ],\n    listRepoSecrets: [\"GET /repos/{owner}/{repo}/actions/secrets\"],\n    listRepoVariables: [\"GET /repos/{owner}/{repo}/actions/variables\"],\n    listRepoWorkflows: [\"GET /repos/{owner}/{repo}/actions/workflows\"],\n    listRunnerApplicationsForOrg: [\"GET /orgs/{org}/actions/runners/downloads\"],\n    listRunnerApplicationsForRepo: [\n      \"GET /repos/{owner}/{repo}/actions/runners/downloads\",\n    ],\n    listSelectedReposForOrgSecret: [\n      \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n    ],\n    listSelectedReposForOrgVariable: [\n      \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n    ],\n    listSelectedRepositoriesEnabledGithubActionsOrganization: [\n      \"GET /orgs/{org}/actions/permissions/repositories\",\n    ],\n    listSelfHostedRunnersForOrg: [\"GET /orgs/{org}/actions/runners\"],\n    listSelfHostedRunnersForRepo: [\"GET /repos/{owner}/{repo}/actions/runners\"],\n    listWorkflowRunArtifacts: [\n      \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n    ],\n    listWorkflowRuns: [\n      \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n    ],\n    listWorkflowRunsForRepo: [\"GET /repos/{owner}/{repo}/actions/runs\"],\n    reRunJobForWorkflowRun: [\n      \"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\",\n    ],\n    reRunWorkflow: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\"],\n    reRunWorkflowFailedJobs: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\",\n    ],\n    removeAllCustomLabelsFromSelfHostedRunnerForOrg: [\n      \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    removeAllCustomLabelsFromSelfHostedRunnerForRepo: [\n      \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    removeCustomLabelFromSelfHostedRunnerForOrg: [\n      \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\",\n    ],\n    removeCustomLabelFromSelfHostedRunnerForRepo: [\n      \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\",\n    ],\n    removeSelectedRepoFromOrgSecret: [\n      \"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    removeSelectedRepoFromOrgVariable: [\n      \"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\",\n    ],\n    reviewCustomGatesForRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule\",\n    ],\n    reviewPendingDeploymentsForRun: [\n      \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\",\n    ],\n    setAllowedActionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/selected-actions\",\n    ],\n    setAllowedActionsRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\",\n    ],\n    setCustomLabelsForSelfHostedRunnerForOrg: [\n      \"PUT /orgs/{org}/actions/runners/{runner_id}/labels\",\n    ],\n    setCustomLabelsForSelfHostedRunnerForRepo: [\n      \"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\",\n    ],\n    setCustomOidcSubClaimForRepo: [\n      \"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub\",\n    ],\n    setGithubActionsDefaultWorkflowPermissionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/workflow\",\n    ],\n    setGithubActionsDefaultWorkflowPermissionsRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions/workflow\",\n    ],\n    setGithubActionsPermissionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions\",\n    ],\n    setGithubActionsPermissionsRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions\",\n    ],\n    setSelectedReposForOrgSecret: [\n      \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n    ],\n    setSelectedReposForOrgVariable: [\n      \"PUT /orgs/{org}/actions/variables/{name}/repositories\",\n    ],\n    setSelectedRepositoriesEnabledGithubActionsOrganization: [\n      \"PUT /orgs/{org}/actions/permissions/repositories\",\n    ],\n    setWorkflowAccessToRepository: [\n      \"PUT /repos/{owner}/{repo}/actions/permissions/access\",\n    ],\n    updateEnvironmentVariable: [\n      \"PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\",\n    ],\n    updateHostedRunnerForOrg: [\n      \"PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\",\n    ],\n    updateOrgVariable: [\"PATCH /orgs/{org}/actions/variables/{name}\"],\n    updateRepoVariable: [\n      \"PATCH /repos/{owner}/{repo}/actions/variables/{name}\",\n    ],\n  },\n  activity: {\n    checkRepoIsStarredByAuthenticatedUser: [\"GET /user/starred/{owner}/{repo}\"],\n    deleteRepoSubscription: [\"DELETE /repos/{owner}/{repo}/subscription\"],\n    deleteThreadSubscription: [\n      \"DELETE /notifications/threads/{thread_id}/subscription\",\n    ],\n    getFeeds: [\"GET /feeds\"],\n    getRepoSubscription: [\"GET /repos/{owner}/{repo}/subscription\"],\n    getThread: [\"GET /notifications/threads/{thread_id}\"],\n    getThreadSubscriptionForAuthenticatedUser: [\n      \"GET /notifications/threads/{thread_id}/subscription\",\n    ],\n    listEventsForAuthenticatedUser: [\"GET /users/{username}/events\"],\n    listNotificationsForAuthenticatedUser: [\"GET /notifications\"],\n    listOrgEventsForAuthenticatedUser: [\n      \"GET /users/{username}/events/orgs/{org}\",\n    ],\n    listPublicEvents: [\"GET /events\"],\n    listPublicEventsForRepoNetwork: [\"GET /networks/{owner}/{repo}/events\"],\n    listPublicEventsForUser: [\"GET /users/{username}/events/public\"],\n    listPublicOrgEvents: [\"GET /orgs/{org}/events\"],\n    listReceivedEventsForUser: [\"GET /users/{username}/received_events\"],\n    listReceivedPublicEventsForUser: [\n      \"GET /users/{username}/received_events/public\",\n    ],\n    listRepoEvents: [\"GET /repos/{owner}/{repo}/events\"],\n    listRepoNotificationsForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/notifications\",\n    ],\n    listReposStarredByAuthenticatedUser: [\"GET /user/starred\"],\n    listReposStarredByUser: [\"GET /users/{username}/starred\"],\n    listReposWatchedByUser: [\"GET /users/{username}/subscriptions\"],\n    listStargazersForRepo: [\"GET /repos/{owner}/{repo}/stargazers\"],\n    listWatchedReposForAuthenticatedUser: [\"GET /user/subscriptions\"],\n    listWatchersForRepo: [\"GET /repos/{owner}/{repo}/subscribers\"],\n    markNotificationsAsRead: [\"PUT /notifications\"],\n    markRepoNotificationsAsRead: [\"PUT /repos/{owner}/{repo}/notifications\"],\n    markThreadAsDone: [\"DELETE /notifications/threads/{thread_id}\"],\n    markThreadAsRead: [\"PATCH /notifications/threads/{thread_id}\"],\n    setRepoSubscription: [\"PUT /repos/{owner}/{repo}/subscription\"],\n    setThreadSubscription: [\n      \"PUT /notifications/threads/{thread_id}/subscription\",\n    ],\n    starRepoForAuthenticatedUser: [\"PUT /user/starred/{owner}/{repo}\"],\n    unstarRepoForAuthenticatedUser: [\"DELETE /user/starred/{owner}/{repo}\"],\n  },\n  apps: {\n    addRepoToInstallation: [\n      \"PUT /user/installations/{installation_id}/repositories/{repository_id}\",\n      {},\n      { renamed: [\"apps\", \"addRepoToInstallationForAuthenticatedUser\"] },\n    ],\n    addRepoToInstallationForAuthenticatedUser: [\n      \"PUT /user/installations/{installation_id}/repositories/{repository_id}\",\n    ],\n    checkToken: [\"POST /applications/{client_id}/token\"],\n    createFromManifest: [\"POST /app-manifests/{code}/conversions\"],\n    createInstallationAccessToken: [\n      \"POST /app/installations/{installation_id}/access_tokens\",\n    ],\n    deleteAuthorization: [\"DELETE /applications/{client_id}/grant\"],\n    deleteInstallation: [\"DELETE /app/installations/{installation_id}\"],\n    deleteToken: [\"DELETE /applications/{client_id}/token\"],\n    getAuthenticated: [\"GET /app\"],\n    getBySlug: [\"GET /apps/{app_slug}\"],\n    getInstallation: [\"GET /app/installations/{installation_id}\"],\n    getOrgInstallation: [\"GET /orgs/{org}/installation\"],\n    getRepoInstallation: [\"GET /repos/{owner}/{repo}/installation\"],\n    getSubscriptionPlanForAccount: [\n      \"GET /marketplace_listing/accounts/{account_id}\",\n    ],\n    getSubscriptionPlanForAccountStubbed: [\n      \"GET /marketplace_listing/stubbed/accounts/{account_id}\",\n    ],\n    getUserInstallation: [\"GET /users/{username}/installation\"],\n    getWebhookConfigForApp: [\"GET /app/hook/config\"],\n    getWebhookDelivery: [\"GET /app/hook/deliveries/{delivery_id}\"],\n    listAccountsForPlan: [\"GET /marketplace_listing/plans/{plan_id}/accounts\"],\n    listAccountsForPlanStubbed: [\n      \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\",\n    ],\n    listInstallationReposForAuthenticatedUser: [\n      \"GET /user/installations/{installation_id}/repositories\",\n    ],\n    listInstallationRequestsForAuthenticatedApp: [\n      \"GET /app/installation-requests\",\n    ],\n    listInstallations: [\"GET /app/installations\"],\n    listInstallationsForAuthenticatedUser: [\"GET /user/installations\"],\n    listPlans: [\"GET /marketplace_listing/plans\"],\n    listPlansStubbed: [\"GET /marketplace_listing/stubbed/plans\"],\n    listReposAccessibleToInstallation: [\"GET /installation/repositories\"],\n    listSubscriptionsForAuthenticatedUser: [\"GET /user/marketplace_purchases\"],\n    listSubscriptionsForAuthenticatedUserStubbed: [\n      \"GET /user/marketplace_purchases/stubbed\",\n    ],\n    listWebhookDeliveries: [\"GET /app/hook/deliveries\"],\n    redeliverWebhookDelivery: [\n      \"POST /app/hook/deliveries/{delivery_id}/attempts\",\n    ],\n    removeRepoFromInstallation: [\n      \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\",\n      {},\n      { renamed: [\"apps\", \"removeRepoFromInstallationForAuthenticatedUser\"] },\n    ],\n    removeRepoFromInstallationForAuthenticatedUser: [\n      \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\",\n    ],\n    resetToken: [\"PATCH /applications/{client_id}/token\"],\n    revokeInstallationAccessToken: [\"DELETE /installation/token\"],\n    scopeToken: [\"POST /applications/{client_id}/token/scoped\"],\n    suspendInstallation: [\"PUT /app/installations/{installation_id}/suspended\"],\n    unsuspendInstallation: [\n      \"DELETE /app/installations/{installation_id}/suspended\",\n    ],\n    updateWebhookConfigForApp: [\"PATCH /app/hook/config\"],\n  },\n  billing: {\n    getGithubActionsBillingOrg: [\"GET /orgs/{org}/settings/billing/actions\"],\n    getGithubActionsBillingUser: [\n      \"GET /users/{username}/settings/billing/actions\",\n    ],\n    getGithubBillingPremiumRequestUsageReportOrg: [\n      \"GET /organizations/{org}/settings/billing/premium_request/usage\",\n    ],\n    getGithubBillingPremiumRequestUsageReportUser: [\n      \"GET /users/{username}/settings/billing/premium_request/usage\",\n    ],\n    getGithubBillingUsageReportOrg: [\n      \"GET /organizations/{org}/settings/billing/usage\",\n    ],\n    getGithubBillingUsageReportUser: [\n      \"GET /users/{username}/settings/billing/usage\",\n    ],\n    getGithubPackagesBillingOrg: [\"GET /orgs/{org}/settings/billing/packages\"],\n    getGithubPackagesBillingUser: [\n      \"GET /users/{username}/settings/billing/packages\",\n    ],\n    getSharedStorageBillingOrg: [\n      \"GET /orgs/{org}/settings/billing/shared-storage\",\n    ],\n    getSharedStorageBillingUser: [\n      \"GET /users/{username}/settings/billing/shared-storage\",\n    ],\n  },\n  campaigns: {\n    createCampaign: [\"POST /orgs/{org}/campaigns\"],\n    deleteCampaign: [\"DELETE /orgs/{org}/campaigns/{campaign_number}\"],\n    getCampaignSummary: [\"GET /orgs/{org}/campaigns/{campaign_number}\"],\n    listOrgCampaigns: [\"GET /orgs/{org}/campaigns\"],\n    updateCampaign: [\"PATCH /orgs/{org}/campaigns/{campaign_number}\"],\n  },\n  checks: {\n    create: [\"POST /repos/{owner}/{repo}/check-runs\"],\n    createSuite: [\"POST /repos/{owner}/{repo}/check-suites\"],\n    get: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n    getSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\"],\n    listAnnotations: [\n      \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n    ],\n    listForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\"],\n    listForSuite: [\n      \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n    ],\n    listSuitesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\"],\n    rerequestRun: [\n      \"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\",\n    ],\n    rerequestSuite: [\n      \"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\",\n    ],\n    setSuitesPreferences: [\n      \"PATCH /repos/{owner}/{repo}/check-suites/preferences\",\n    ],\n    update: [\"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n  },\n  codeScanning: {\n    commitAutofix: [\n      \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits\",\n    ],\n    createAutofix: [\n      \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n    ],\n    createVariantAnalysis: [\n      \"POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses\",\n    ],\n    deleteAnalysis: [\n      \"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}\",\n    ],\n    deleteCodeqlDatabase: [\n      \"DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n    ],\n    getAlert: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n      {},\n      { renamedParameters: { alert_id: \"alert_number\" } },\n    ],\n    getAnalysis: [\n      \"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\",\n    ],\n    getAutofix: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\",\n    ],\n    getCodeqlDatabase: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\",\n    ],\n    getDefaultSetup: [\"GET /repos/{owner}/{repo}/code-scanning/default-setup\"],\n    getSarif: [\"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\"],\n    getVariantAnalysis: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}\",\n    ],\n    getVariantAnalysisRepoTask: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}\",\n    ],\n    listAlertInstances: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n    ],\n    listAlertsForOrg: [\"GET /orgs/{org}/code-scanning/alerts\"],\n    listAlertsForRepo: [\"GET /repos/{owner}/{repo}/code-scanning/alerts\"],\n    listAlertsInstances: [\n      \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n      {},\n      { renamed: [\"codeScanning\", \"listAlertInstances\"] },\n    ],\n    listCodeqlDatabases: [\n      \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases\",\n    ],\n    listRecentAnalyses: [\"GET /repos/{owner}/{repo}/code-scanning/analyses\"],\n    updateAlert: [\n      \"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n    ],\n    updateDefaultSetup: [\n      \"PATCH /repos/{owner}/{repo}/code-scanning/default-setup\",\n    ],\n    uploadSarif: [\"POST /repos/{owner}/{repo}/code-scanning/sarifs\"],\n  },\n  codeSecurity: {\n    attachConfiguration: [\n      \"POST /orgs/{org}/code-security/configurations/{configuration_id}/attach\",\n    ],\n    attachEnterpriseConfiguration: [\n      \"POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach\",\n    ],\n    createConfiguration: [\"POST /orgs/{org}/code-security/configurations\"],\n    createConfigurationForEnterprise: [\n      \"POST /enterprises/{enterprise}/code-security/configurations\",\n    ],\n    deleteConfiguration: [\n      \"DELETE /orgs/{org}/code-security/configurations/{configuration_id}\",\n    ],\n    deleteConfigurationForEnterprise: [\n      \"DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}\",\n    ],\n    detachConfiguration: [\n      \"DELETE /orgs/{org}/code-security/configurations/detach\",\n    ],\n    getConfiguration: [\n      \"GET /orgs/{org}/code-security/configurations/{configuration_id}\",\n    ],\n    getConfigurationForRepository: [\n      \"GET /repos/{owner}/{repo}/code-security-configuration\",\n    ],\n    getConfigurationsForEnterprise: [\n      \"GET /enterprises/{enterprise}/code-security/configurations\",\n    ],\n    getConfigurationsForOrg: [\"GET /orgs/{org}/code-security/configurations\"],\n    getDefaultConfigurations: [\n      \"GET /orgs/{org}/code-security/configurations/defaults\",\n    ],\n    getDefaultConfigurationsForEnterprise: [\n      \"GET /enterprises/{enterprise}/code-security/configurations/defaults\",\n    ],\n    getRepositoriesForConfiguration: [\n      \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n    ],\n    getRepositoriesForEnterpriseConfiguration: [\n      \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\",\n    ],\n    getSingleConfigurationForEnterprise: [\n      \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}\",\n    ],\n    setConfigurationAsDefault: [\n      \"PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults\",\n    ],\n    setConfigurationAsDefaultForEnterprise: [\n      \"PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults\",\n    ],\n    updateConfiguration: [\n      \"PATCH /orgs/{org}/code-security/configurations/{configuration_id}\",\n    ],\n    updateEnterpriseConfiguration: [\n      \"PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}\",\n    ],\n  },\n  codesOfConduct: {\n    getAllCodesOfConduct: [\"GET /codes_of_conduct\"],\n    getConductCode: [\"GET /codes_of_conduct/{key}\"],\n  },\n  codespaces: {\n    addRepositoryForSecretForAuthenticatedUser: [\n      \"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    addSelectedRepoToOrgSecret: [\n      \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    checkPermissionsForDevcontainer: [\n      \"GET /repos/{owner}/{repo}/codespaces/permissions_check\",\n    ],\n    codespaceMachinesForAuthenticatedUser: [\n      \"GET /user/codespaces/{codespace_name}/machines\",\n    ],\n    createForAuthenticatedUser: [\"POST /user/codespaces\"],\n    createOrUpdateOrgSecret: [\n      \"PUT /orgs/{org}/codespaces/secrets/{secret_name}\",\n    ],\n    createOrUpdateRepoSecret: [\n      \"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n    ],\n    createOrUpdateSecretForAuthenticatedUser: [\n      \"PUT /user/codespaces/secrets/{secret_name}\",\n    ],\n    createWithPrForAuthenticatedUser: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\",\n    ],\n    createWithRepoForAuthenticatedUser: [\n      \"POST /repos/{owner}/{repo}/codespaces\",\n    ],\n    deleteForAuthenticatedUser: [\"DELETE /user/codespaces/{codespace_name}\"],\n    deleteFromOrganization: [\n      \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\",\n    ],\n    deleteOrgSecret: [\"DELETE /orgs/{org}/codespaces/secrets/{secret_name}\"],\n    deleteRepoSecret: [\n      \"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n    ],\n    deleteSecretForAuthenticatedUser: [\n      \"DELETE /user/codespaces/secrets/{secret_name}\",\n    ],\n    exportForAuthenticatedUser: [\n      \"POST /user/codespaces/{codespace_name}/exports\",\n    ],\n    getCodespacesForUserInOrg: [\n      \"GET /orgs/{org}/members/{username}/codespaces\",\n    ],\n    getExportDetailsForAuthenticatedUser: [\n      \"GET /user/codespaces/{codespace_name}/exports/{export_id}\",\n    ],\n    getForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/codespaces/secrets/public-key\"],\n    getOrgSecret: [\"GET /orgs/{org}/codespaces/secrets/{secret_name}\"],\n    getPublicKeyForAuthenticatedUser: [\n      \"GET /user/codespaces/secrets/public-key\",\n    ],\n    getRepoPublicKey: [\n      \"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\",\n    ],\n    getRepoSecret: [\n      \"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\",\n    ],\n    getSecretForAuthenticatedUser: [\n      \"GET /user/codespaces/secrets/{secret_name}\",\n    ],\n    listDevcontainersInRepositoryForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n    ],\n    listForAuthenticatedUser: [\"GET /user/codespaces\"],\n    listInOrganization: [\n      \"GET /orgs/{org}/codespaces\",\n      {},\n      { renamedParameters: { org_id: \"org\" } },\n    ],\n    listInRepositoryForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces\",\n    ],\n    listOrgSecrets: [\"GET /orgs/{org}/codespaces/secrets\"],\n    listRepoSecrets: [\"GET /repos/{owner}/{repo}/codespaces/secrets\"],\n    listRepositoriesForSecretForAuthenticatedUser: [\n      \"GET /user/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    listSecretsForAuthenticatedUser: [\"GET /user/codespaces/secrets\"],\n    listSelectedReposForOrgSecret: [\n      \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    preFlightWithRepoForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces/new\",\n    ],\n    publishForAuthenticatedUser: [\n      \"POST /user/codespaces/{codespace_name}/publish\",\n    ],\n    removeRepositoryForSecretForAuthenticatedUser: [\n      \"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    removeSelectedRepoFromOrgSecret: [\n      \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    repoMachinesForAuthenticatedUser: [\n      \"GET /repos/{owner}/{repo}/codespaces/machines\",\n    ],\n    setRepositoriesForSecretForAuthenticatedUser: [\n      \"PUT /user/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    setSelectedReposForOrgSecret: [\n      \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n    ],\n    startForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/start\"],\n    stopForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/stop\"],\n    stopInOrganization: [\n      \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\",\n    ],\n    updateForAuthenticatedUser: [\"PATCH /user/codespaces/{codespace_name}\"],\n  },\n  copilot: {\n    addCopilotSeatsForTeams: [\n      \"POST /orgs/{org}/copilot/billing/selected_teams\",\n    ],\n    addCopilotSeatsForUsers: [\n      \"POST /orgs/{org}/copilot/billing/selected_users\",\n    ],\n    cancelCopilotSeatAssignmentForTeams: [\n      \"DELETE /orgs/{org}/copilot/billing/selected_teams\",\n    ],\n    cancelCopilotSeatAssignmentForUsers: [\n      \"DELETE /orgs/{org}/copilot/billing/selected_users\",\n    ],\n    copilotMetricsForOrganization: [\"GET /orgs/{org}/copilot/metrics\"],\n    copilotMetricsForTeam: [\"GET /orgs/{org}/team/{team_slug}/copilot/metrics\"],\n    getCopilotOrganizationDetails: [\"GET /orgs/{org}/copilot/billing\"],\n    getCopilotSeatDetailsForUser: [\n      \"GET /orgs/{org}/members/{username}/copilot\",\n    ],\n    listCopilotSeats: [\"GET /orgs/{org}/copilot/billing/seats\"],\n  },\n  credentials: { revoke: [\"POST /credentials/revoke\"] },\n  dependabot: {\n    addSelectedRepoToOrgSecret: [\n      \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    createOrUpdateOrgSecret: [\n      \"PUT /orgs/{org}/dependabot/secrets/{secret_name}\",\n    ],\n    createOrUpdateRepoSecret: [\n      \"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n    ],\n    deleteOrgSecret: [\"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\"],\n    deleteRepoSecret: [\n      \"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n    ],\n    getAlert: [\"GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/dependabot/secrets/public-key\"],\n    getOrgSecret: [\"GET /orgs/{org}/dependabot/secrets/{secret_name}\"],\n    getRepoPublicKey: [\n      \"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\",\n    ],\n    getRepoSecret: [\n      \"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\",\n    ],\n    listAlertsForEnterprise: [\n      \"GET /enterprises/{enterprise}/dependabot/alerts\",\n    ],\n    listAlertsForOrg: [\"GET /orgs/{org}/dependabot/alerts\"],\n    listAlertsForRepo: [\"GET /repos/{owner}/{repo}/dependabot/alerts\"],\n    listOrgSecrets: [\"GET /orgs/{org}/dependabot/secrets\"],\n    listRepoSecrets: [\"GET /repos/{owner}/{repo}/dependabot/secrets\"],\n    listSelectedReposForOrgSecret: [\n      \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n    ],\n    removeSelectedRepoFromOrgSecret: [\n      \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\",\n    ],\n    repositoryAccessForOrg: [\n      \"GET /organizations/{org}/dependabot/repository-access\",\n    ],\n    setRepositoryAccessDefaultLevel: [\n      \"PUT /organizations/{org}/dependabot/repository-access/default-level\",\n    ],\n    setSelectedReposForOrgSecret: [\n      \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n    ],\n    updateAlert: [\n      \"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\",\n    ],\n    updateRepositoryAccessForOrg: [\n      \"PATCH /organizations/{org}/dependabot/repository-access\",\n    ],\n  },\n  dependencyGraph: {\n    createRepositorySnapshot: [\n      \"POST /repos/{owner}/{repo}/dependency-graph/snapshots\",\n    ],\n    diffRange: [\n      \"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}\",\n    ],\n    exportSbom: [\"GET /repos/{owner}/{repo}/dependency-graph/sbom\"],\n  },\n  emojis: { get: [\"GET /emojis\"] },\n  enterpriseTeamMemberships: {\n    add: [\n      \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n    ],\n    bulkAdd: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add\",\n    ],\n    bulkRemove: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove\",\n    ],\n    get: [\n      \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n    ],\n    list: [\"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\"],\n    remove: [\n      \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\",\n    ],\n  },\n  enterpriseTeamOrganizations: {\n    add: [\n      \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n    ],\n    bulkAdd: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add\",\n    ],\n    bulkRemove: [\n      \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove\",\n    ],\n    delete: [\n      \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n    ],\n    getAssignment: [\n      \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\",\n    ],\n    getAssignments: [\n      \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n    ],\n  },\n  enterpriseTeams: {\n    create: [\"POST /enterprises/{enterprise}/teams\"],\n    delete: [\"DELETE /enterprises/{enterprise}/teams/{team_slug}\"],\n    get: [\"GET /enterprises/{enterprise}/teams/{team_slug}\"],\n    list: [\"GET /enterprises/{enterprise}/teams\"],\n    update: [\"PATCH /enterprises/{enterprise}/teams/{team_slug}\"],\n  },\n  gists: {\n    checkIsStarred: [\"GET /gists/{gist_id}/star\"],\n    create: [\"POST /gists\"],\n    createComment: [\"POST /gists/{gist_id}/comments\"],\n    delete: [\"DELETE /gists/{gist_id}\"],\n    deleteComment: [\"DELETE /gists/{gist_id}/comments/{comment_id}\"],\n    fork: [\"POST /gists/{gist_id}/forks\"],\n    get: [\"GET /gists/{gist_id}\"],\n    getComment: [\"GET /gists/{gist_id}/comments/{comment_id}\"],\n    getRevision: [\"GET /gists/{gist_id}/{sha}\"],\n    list: [\"GET /gists\"],\n    listComments: [\"GET /gists/{gist_id}/comments\"],\n    listCommits: [\"GET /gists/{gist_id}/commits\"],\n    listForUser: [\"GET /users/{username}/gists\"],\n    listForks: [\"GET /gists/{gist_id}/forks\"],\n    listPublic: [\"GET /gists/public\"],\n    listStarred: [\"GET /gists/starred\"],\n    star: [\"PUT /gists/{gist_id}/star\"],\n    unstar: [\"DELETE /gists/{gist_id}/star\"],\n    update: [\"PATCH /gists/{gist_id}\"],\n    updateComment: [\"PATCH /gists/{gist_id}/comments/{comment_id}\"],\n  },\n  git: {\n    createBlob: [\"POST /repos/{owner}/{repo}/git/blobs\"],\n    createCommit: [\"POST /repos/{owner}/{repo}/git/commits\"],\n    createRef: [\"POST /repos/{owner}/{repo}/git/refs\"],\n    createTag: [\"POST /repos/{owner}/{repo}/git/tags\"],\n    createTree: [\"POST /repos/{owner}/{repo}/git/trees\"],\n    deleteRef: [\"DELETE /repos/{owner}/{repo}/git/refs/{ref}\"],\n    getBlob: [\"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\"],\n    getCommit: [\"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\"],\n    getRef: [\"GET /repos/{owner}/{repo}/git/ref/{ref}\"],\n    getTag: [\"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\"],\n    getTree: [\"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\"],\n    listMatchingRefs: [\"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\"],\n    updateRef: [\"PATCH /repos/{owner}/{repo}/git/refs/{ref}\"],\n  },\n  gitignore: {\n    getAllTemplates: [\"GET /gitignore/templates\"],\n    getTemplate: [\"GET /gitignore/templates/{name}\"],\n  },\n  hostedCompute: {\n    createNetworkConfigurationForOrg: [\n      \"POST /orgs/{org}/settings/network-configurations\",\n    ],\n    deleteNetworkConfigurationFromOrg: [\n      \"DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n    ],\n    getNetworkConfigurationForOrg: [\n      \"GET /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n    ],\n    getNetworkSettingsForOrg: [\n      \"GET /orgs/{org}/settings/network-settings/{network_settings_id}\",\n    ],\n    listNetworkConfigurationsForOrg: [\n      \"GET /orgs/{org}/settings/network-configurations\",\n    ],\n    updateNetworkConfigurationForOrg: [\n      \"PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}\",\n    ],\n  },\n  interactions: {\n    getRestrictionsForAuthenticatedUser: [\"GET /user/interaction-limits\"],\n    getRestrictionsForOrg: [\"GET /orgs/{org}/interaction-limits\"],\n    getRestrictionsForRepo: [\"GET /repos/{owner}/{repo}/interaction-limits\"],\n    getRestrictionsForYourPublicRepos: [\n      \"GET /user/interaction-limits\",\n      {},\n      { renamed: [\"interactions\", \"getRestrictionsForAuthenticatedUser\"] },\n    ],\n    removeRestrictionsForAuthenticatedUser: [\"DELETE /user/interaction-limits\"],\n    removeRestrictionsForOrg: [\"DELETE /orgs/{org}/interaction-limits\"],\n    removeRestrictionsForRepo: [\n      \"DELETE /repos/{owner}/{repo}/interaction-limits\",\n    ],\n    removeRestrictionsForYourPublicRepos: [\n      \"DELETE /user/interaction-limits\",\n      {},\n      { renamed: [\"interactions\", \"removeRestrictionsForAuthenticatedUser\"] },\n    ],\n    setRestrictionsForAuthenticatedUser: [\"PUT /user/interaction-limits\"],\n    setRestrictionsForOrg: [\"PUT /orgs/{org}/interaction-limits\"],\n    setRestrictionsForRepo: [\"PUT /repos/{owner}/{repo}/interaction-limits\"],\n    setRestrictionsForYourPublicRepos: [\n      \"PUT /user/interaction-limits\",\n      {},\n      { renamed: [\"interactions\", \"setRestrictionsForAuthenticatedUser\"] },\n    ],\n  },\n  issues: {\n    addAssignees: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n    ],\n    addBlockedByDependency: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n    ],\n    addLabels: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n    addSubIssue: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n    ],\n    checkUserCanBeAssigned: [\"GET /repos/{owner}/{repo}/assignees/{assignee}\"],\n    checkUserCanBeAssignedToIssue: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\",\n    ],\n    create: [\"POST /repos/{owner}/{repo}/issues\"],\n    createComment: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n    ],\n    createLabel: [\"POST /repos/{owner}/{repo}/labels\"],\n    createMilestone: [\"POST /repos/{owner}/{repo}/milestones\"],\n    deleteComment: [\n      \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\",\n    ],\n    deleteLabel: [\"DELETE /repos/{owner}/{repo}/labels/{name}\"],\n    deleteMilestone: [\n      \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\",\n    ],\n    get: [\"GET /repos/{owner}/{repo}/issues/{issue_number}\"],\n    getComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n    getEvent: [\"GET /repos/{owner}/{repo}/issues/events/{event_id}\"],\n    getLabel: [\"GET /repos/{owner}/{repo}/labels/{name}\"],\n    getMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n    getParent: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/parent\"],\n    list: [\"GET /issues\"],\n    listAssignees: [\"GET /repos/{owner}/{repo}/assignees\"],\n    listComments: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n    listCommentsForRepo: [\"GET /repos/{owner}/{repo}/issues/comments\"],\n    listDependenciesBlockedBy: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n    ],\n    listDependenciesBlocking: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n    ],\n    listEvents: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/events\"],\n    listEventsForRepo: [\"GET /repos/{owner}/{repo}/issues/events\"],\n    listEventsForTimeline: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n    ],\n    listForAuthenticatedUser: [\"GET /user/issues\"],\n    listForOrg: [\"GET /orgs/{org}/issues\"],\n    listForRepo: [\"GET /repos/{owner}/{repo}/issues\"],\n    listLabelsForMilestone: [\n      \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n    ],\n    listLabelsForRepo: [\"GET /repos/{owner}/{repo}/labels\"],\n    listLabelsOnIssue: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n    ],\n    listMilestones: [\"GET /repos/{owner}/{repo}/milestones\"],\n    listSubIssues: [\n      \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n    ],\n    lock: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n    removeAllLabels: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n    ],\n    removeAssignees: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\",\n    ],\n    removeDependencyBlockedBy: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}\",\n    ],\n    removeLabel: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\",\n    ],\n    removeSubIssue: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue\",\n    ],\n    reprioritizeSubIssue: [\n      \"PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\",\n    ],\n    setLabels: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n    unlock: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n    update: [\"PATCH /repos/{owner}/{repo}/issues/{issue_number}\"],\n    updateComment: [\"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n    updateLabel: [\"PATCH /repos/{owner}/{repo}/labels/{name}\"],\n    updateMilestone: [\n      \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\",\n    ],\n  },\n  licenses: {\n    get: [\"GET /licenses/{license}\"],\n    getAllCommonlyUsed: [\"GET /licenses\"],\n    getForRepo: [\"GET /repos/{owner}/{repo}/license\"],\n  },\n  markdown: {\n    render: [\"POST /markdown\"],\n    renderRaw: [\n      \"POST /markdown/raw\",\n      { headers: { \"content-type\": \"text/plain; charset=utf-8\" } },\n    ],\n  },\n  meta: {\n    get: [\"GET /meta\"],\n    getAllVersions: [\"GET /versions\"],\n    getOctocat: [\"GET /octocat\"],\n    getZen: [\"GET /zen\"],\n    root: [\"GET /\"],\n  },\n  migrations: {\n    deleteArchiveForAuthenticatedUser: [\n      \"DELETE /user/migrations/{migration_id}/archive\",\n    ],\n    deleteArchiveForOrg: [\n      \"DELETE /orgs/{org}/migrations/{migration_id}/archive\",\n    ],\n    downloadArchiveForOrg: [\n      \"GET /orgs/{org}/migrations/{migration_id}/archive\",\n    ],\n    getArchiveForAuthenticatedUser: [\n      \"GET /user/migrations/{migration_id}/archive\",\n    ],\n    getStatusForAuthenticatedUser: [\"GET /user/migrations/{migration_id}\"],\n    getStatusForOrg: [\"GET /orgs/{org}/migrations/{migration_id}\"],\n    listForAuthenticatedUser: [\"GET /user/migrations\"],\n    listForOrg: [\"GET /orgs/{org}/migrations\"],\n    listReposForAuthenticatedUser: [\n      \"GET /user/migrations/{migration_id}/repositories\",\n    ],\n    listReposForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/repositories\"],\n    listReposForUser: [\n      \"GET /user/migrations/{migration_id}/repositories\",\n      {},\n      { renamed: [\"migrations\", \"listReposForAuthenticatedUser\"] },\n    ],\n    startForAuthenticatedUser: [\"POST /user/migrations\"],\n    startForOrg: [\"POST /orgs/{org}/migrations\"],\n    unlockRepoForAuthenticatedUser: [\n      \"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock\",\n    ],\n    unlockRepoForOrg: [\n      \"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock\",\n    ],\n  },\n  oidc: {\n    getOidcCustomSubTemplateForOrg: [\n      \"GET /orgs/{org}/actions/oidc/customization/sub\",\n    ],\n    updateOidcCustomSubTemplateForOrg: [\n      \"PUT /orgs/{org}/actions/oidc/customization/sub\",\n    ],\n  },\n  orgs: {\n    addSecurityManagerTeam: [\n      \"PUT /orgs/{org}/security-managers/teams/{team_slug}\",\n      {},\n      {\n        deprecated:\n          \"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team\",\n      },\n    ],\n    assignTeamToOrgRole: [\n      \"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n    ],\n    assignUserToOrgRole: [\n      \"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n    ],\n    blockUser: [\"PUT /orgs/{org}/blocks/{username}\"],\n    cancelInvitation: [\"DELETE /orgs/{org}/invitations/{invitation_id}\"],\n    checkBlockedUser: [\"GET /orgs/{org}/blocks/{username}\"],\n    checkMembershipForUser: [\"GET /orgs/{org}/members/{username}\"],\n    checkPublicMembershipForUser: [\"GET /orgs/{org}/public_members/{username}\"],\n    convertMemberToOutsideCollaborator: [\n      \"PUT /orgs/{org}/outside_collaborators/{username}\",\n    ],\n    createArtifactStorageRecord: [\n      \"POST /orgs/{org}/artifacts/metadata/storage-record\",\n    ],\n    createInvitation: [\"POST /orgs/{org}/invitations\"],\n    createIssueType: [\"POST /orgs/{org}/issue-types\"],\n    createWebhook: [\"POST /orgs/{org}/hooks\"],\n    customPropertiesForOrgsCreateOrUpdateOrganizationValues: [\n      \"PATCH /organizations/{org}/org-properties/values\",\n    ],\n    customPropertiesForOrgsGetOrganizationValues: [\n      \"GET /organizations/{org}/org-properties/values\",\n    ],\n    customPropertiesForReposCreateOrUpdateOrganizationDefinition: [\n      \"PUT /orgs/{org}/properties/schema/{custom_property_name}\",\n    ],\n    customPropertiesForReposCreateOrUpdateOrganizationDefinitions: [\n      \"PATCH /orgs/{org}/properties/schema\",\n    ],\n    customPropertiesForReposCreateOrUpdateOrganizationValues: [\n      \"PATCH /orgs/{org}/properties/values\",\n    ],\n    customPropertiesForReposDeleteOrganizationDefinition: [\n      \"DELETE /orgs/{org}/properties/schema/{custom_property_name}\",\n    ],\n    customPropertiesForReposGetOrganizationDefinition: [\n      \"GET /orgs/{org}/properties/schema/{custom_property_name}\",\n    ],\n    customPropertiesForReposGetOrganizationDefinitions: [\n      \"GET /orgs/{org}/properties/schema\",\n    ],\n    customPropertiesForReposGetOrganizationValues: [\n      \"GET /orgs/{org}/properties/values\",\n    ],\n    delete: [\"DELETE /orgs/{org}\"],\n    deleteAttestationsBulk: [\"POST /orgs/{org}/attestations/delete-request\"],\n    deleteAttestationsById: [\n      \"DELETE /orgs/{org}/attestations/{attestation_id}\",\n    ],\n    deleteAttestationsBySubjectDigest: [\n      \"DELETE /orgs/{org}/attestations/digest/{subject_digest}\",\n    ],\n    deleteIssueType: [\"DELETE /orgs/{org}/issue-types/{issue_type_id}\"],\n    deleteWebhook: [\"DELETE /orgs/{org}/hooks/{hook_id}\"],\n    disableSelectedRepositoryImmutableReleasesOrganization: [\n      \"DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n    ],\n    enableSelectedRepositoryImmutableReleasesOrganization: [\n      \"PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\",\n    ],\n    get: [\"GET /orgs/{org}\"],\n    getImmutableReleasesSettings: [\n      \"GET /orgs/{org}/settings/immutable-releases\",\n    ],\n    getImmutableReleasesSettingsRepositories: [\n      \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n    ],\n    getMembershipForAuthenticatedUser: [\"GET /user/memberships/orgs/{org}\"],\n    getMembershipForUser: [\"GET /orgs/{org}/memberships/{username}\"],\n    getOrgRole: [\"GET /orgs/{org}/organization-roles/{role_id}\"],\n    getOrgRulesetHistory: [\"GET /orgs/{org}/rulesets/{ruleset_id}/history\"],\n    getOrgRulesetVersion: [\n      \"GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}\",\n    ],\n    getWebhook: [\"GET /orgs/{org}/hooks/{hook_id}\"],\n    getWebhookConfigForOrg: [\"GET /orgs/{org}/hooks/{hook_id}/config\"],\n    getWebhookDelivery: [\n      \"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\",\n    ],\n    list: [\"GET /organizations\"],\n    listAppInstallations: [\"GET /orgs/{org}/installations\"],\n    listArtifactStorageRecords: [\n      \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\",\n    ],\n    listAttestationRepositories: [\"GET /orgs/{org}/attestations/repositories\"],\n    listAttestations: [\"GET /orgs/{org}/attestations/{subject_digest}\"],\n    listAttestationsBulk: [\n      \"POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}\",\n    ],\n    listBlockedUsers: [\"GET /orgs/{org}/blocks\"],\n    listFailedInvitations: [\"GET /orgs/{org}/failed_invitations\"],\n    listForAuthenticatedUser: [\"GET /user/orgs\"],\n    listForUser: [\"GET /users/{username}/orgs\"],\n    listInvitationTeams: [\"GET /orgs/{org}/invitations/{invitation_id}/teams\"],\n    listIssueTypes: [\"GET /orgs/{org}/issue-types\"],\n    listMembers: [\"GET /orgs/{org}/members\"],\n    listMembershipsForAuthenticatedUser: [\"GET /user/memberships/orgs\"],\n    listOrgRoleTeams: [\"GET /orgs/{org}/organization-roles/{role_id}/teams\"],\n    listOrgRoleUsers: [\"GET /orgs/{org}/organization-roles/{role_id}/users\"],\n    listOrgRoles: [\"GET /orgs/{org}/organization-roles\"],\n    listOrganizationFineGrainedPermissions: [\n      \"GET /orgs/{org}/organization-fine-grained-permissions\",\n    ],\n    listOutsideCollaborators: [\"GET /orgs/{org}/outside_collaborators\"],\n    listPatGrantRepositories: [\n      \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n    ],\n    listPatGrantRequestRepositories: [\n      \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n    ],\n    listPatGrantRequests: [\"GET /orgs/{org}/personal-access-token-requests\"],\n    listPatGrants: [\"GET /orgs/{org}/personal-access-tokens\"],\n    listPendingInvitations: [\"GET /orgs/{org}/invitations\"],\n    listPublicMembers: [\"GET /orgs/{org}/public_members\"],\n    listSecurityManagerTeams: [\n      \"GET /orgs/{org}/security-managers\",\n      {},\n      {\n        deprecated:\n          \"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams\",\n      },\n    ],\n    listWebhookDeliveries: [\"GET /orgs/{org}/hooks/{hook_id}/deliveries\"],\n    listWebhooks: [\"GET /orgs/{org}/hooks\"],\n    pingWebhook: [\"POST /orgs/{org}/hooks/{hook_id}/pings\"],\n    redeliverWebhookDelivery: [\n      \"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n    ],\n    removeMember: [\"DELETE /orgs/{org}/members/{username}\"],\n    removeMembershipForUser: [\"DELETE /orgs/{org}/memberships/{username}\"],\n    removeOutsideCollaborator: [\n      \"DELETE /orgs/{org}/outside_collaborators/{username}\",\n    ],\n    removePublicMembershipForAuthenticatedUser: [\n      \"DELETE /orgs/{org}/public_members/{username}\",\n    ],\n    removeSecurityManagerTeam: [\n      \"DELETE /orgs/{org}/security-managers/teams/{team_slug}\",\n      {},\n      {\n        deprecated:\n          \"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team\",\n      },\n    ],\n    reviewPatGrantRequest: [\n      \"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}\",\n    ],\n    reviewPatGrantRequestsInBulk: [\n      \"POST /orgs/{org}/personal-access-token-requests\",\n    ],\n    revokeAllOrgRolesTeam: [\n      \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}\",\n    ],\n    revokeAllOrgRolesUser: [\n      \"DELETE /orgs/{org}/organization-roles/users/{username}\",\n    ],\n    revokeOrgRoleTeam: [\n      \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\",\n    ],\n    revokeOrgRoleUser: [\n      \"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}\",\n    ],\n    setImmutableReleasesSettings: [\n      \"PUT /orgs/{org}/settings/immutable-releases\",\n    ],\n    setImmutableReleasesSettingsRepositories: [\n      \"PUT /orgs/{org}/settings/immutable-releases/repositories\",\n    ],\n    setMembershipForUser: [\"PUT /orgs/{org}/memberships/{username}\"],\n    setPublicMembershipForAuthenticatedUser: [\n      \"PUT /orgs/{org}/public_members/{username}\",\n    ],\n    unblockUser: [\"DELETE /orgs/{org}/blocks/{username}\"],\n    update: [\"PATCH /orgs/{org}\"],\n    updateIssueType: [\"PUT /orgs/{org}/issue-types/{issue_type_id}\"],\n    updateMembershipForAuthenticatedUser: [\n      \"PATCH /user/memberships/orgs/{org}\",\n    ],\n    updatePatAccess: [\"POST /orgs/{org}/personal-access-tokens/{pat_id}\"],\n    updatePatAccesses: [\"POST /orgs/{org}/personal-access-tokens\"],\n    updateWebhook: [\"PATCH /orgs/{org}/hooks/{hook_id}\"],\n    updateWebhookConfigForOrg: [\"PATCH /orgs/{org}/hooks/{hook_id}/config\"],\n  },\n  packages: {\n    deletePackageForAuthenticatedUser: [\n      \"DELETE /user/packages/{package_type}/{package_name}\",\n    ],\n    deletePackageForOrg: [\n      \"DELETE /orgs/{org}/packages/{package_type}/{package_name}\",\n    ],\n    deletePackageForUser: [\n      \"DELETE /users/{username}/packages/{package_type}/{package_name}\",\n    ],\n    deletePackageVersionForAuthenticatedUser: [\n      \"DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    deletePackageVersionForOrg: [\n      \"DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    deletePackageVersionForUser: [\n      \"DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    getAllPackageVersionsForAPackageOwnedByAnOrg: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n      {},\n      { renamed: [\"packages\", \"getAllPackageVersionsForPackageOwnedByOrg\"] },\n    ],\n    getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}/versions\",\n      {},\n      {\n        renamed: [\n          \"packages\",\n          \"getAllPackageVersionsForPackageOwnedByAuthenticatedUser\",\n        ],\n      },\n    ],\n    getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}/versions\",\n    ],\n    getAllPackageVersionsForPackageOwnedByOrg: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n    ],\n    getAllPackageVersionsForPackageOwnedByUser: [\n      \"GET /users/{username}/packages/{package_type}/{package_name}/versions\",\n    ],\n    getPackageForAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}\",\n    ],\n    getPackageForOrganization: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}\",\n    ],\n    getPackageForUser: [\n      \"GET /users/{username}/packages/{package_type}/{package_name}\",\n    ],\n    getPackageVersionForAuthenticatedUser: [\n      \"GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    getPackageVersionForOrganization: [\n      \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    getPackageVersionForUser: [\n      \"GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\",\n    ],\n    listDockerMigrationConflictingPackagesForAuthenticatedUser: [\n      \"GET /user/docker/conflicts\",\n    ],\n    listDockerMigrationConflictingPackagesForOrganization: [\n      \"GET /orgs/{org}/docker/conflicts\",\n    ],\n    listDockerMigrationConflictingPackagesForUser: [\n      \"GET /users/{username}/docker/conflicts\",\n    ],\n    listPackagesForAuthenticatedUser: [\"GET /user/packages\"],\n    listPackagesForOrganization: [\"GET /orgs/{org}/packages\"],\n    listPackagesForUser: [\"GET /users/{username}/packages\"],\n    restorePackageForAuthenticatedUser: [\n      \"POST /user/packages/{package_type}/{package_name}/restore{?token}\",\n    ],\n    restorePackageForOrg: [\n      \"POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}\",\n    ],\n    restorePackageForUser: [\n      \"POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}\",\n    ],\n    restorePackageVersionForAuthenticatedUser: [\n      \"POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\",\n    ],\n    restorePackageVersionForOrg: [\n      \"POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\",\n    ],\n    restorePackageVersionForUser: [\n      \"POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\",\n    ],\n  },\n  privateRegistries: {\n    createOrgPrivateRegistry: [\"POST /orgs/{org}/private-registries\"],\n    deleteOrgPrivateRegistry: [\n      \"DELETE /orgs/{org}/private-registries/{secret_name}\",\n    ],\n    getOrgPrivateRegistry: [\"GET /orgs/{org}/private-registries/{secret_name}\"],\n    getOrgPublicKey: [\"GET /orgs/{org}/private-registries/public-key\"],\n    listOrgPrivateRegistries: [\"GET /orgs/{org}/private-registries\"],\n    updateOrgPrivateRegistry: [\n      \"PATCH /orgs/{org}/private-registries/{secret_name}\",\n    ],\n  },\n  projects: {\n    addItemForOrg: [\"POST /orgs/{org}/projectsV2/{project_number}/items\"],\n    addItemForUser: [\n      \"POST /users/{username}/projectsV2/{project_number}/items\",\n    ],\n    deleteItemForOrg: [\n      \"DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    deleteItemForUser: [\n      \"DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    getFieldForOrg: [\n      \"GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}\",\n    ],\n    getFieldForUser: [\n      \"GET /users/{username}/projectsV2/{project_number}/fields/{field_id}\",\n    ],\n    getForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}\"],\n    getForUser: [\"GET /users/{username}/projectsV2/{project_number}\"],\n    getOrgItem: [\"GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"],\n    getUserItem: [\n      \"GET /users/{username}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    listFieldsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/fields\"],\n    listFieldsForUser: [\n      \"GET /users/{username}/projectsV2/{project_number}/fields\",\n    ],\n    listForOrg: [\"GET /orgs/{org}/projectsV2\"],\n    listForUser: [\"GET /users/{username}/projectsV2\"],\n    listItemsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/items\"],\n    listItemsForUser: [\n      \"GET /users/{username}/projectsV2/{project_number}/items\",\n    ],\n    updateItemForOrg: [\n      \"PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n    updateItemForUser: [\n      \"PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}\",\n    ],\n  },\n  pulls: {\n    checkIfMerged: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n    create: [\"POST /repos/{owner}/{repo}/pulls\"],\n    createReplyForReviewComment: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\",\n    ],\n    createReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n    createReviewComment: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n    ],\n    deletePendingReview: [\n      \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n    ],\n    deleteReviewComment: [\n      \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n    ],\n    dismissReview: [\n      \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\",\n    ],\n    get: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}\"],\n    getReview: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n    ],\n    getReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n    list: [\"GET /repos/{owner}/{repo}/pulls\"],\n    listCommentsForReview: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n    ],\n    listCommits: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\"],\n    listFiles: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\"],\n    listRequestedReviewers: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n    ],\n    listReviewComments: [\n      \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n    ],\n    listReviewCommentsForRepo: [\"GET /repos/{owner}/{repo}/pulls/comments\"],\n    listReviews: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n    merge: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n    removeRequestedReviewers: [\n      \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n    ],\n    requestReviewers: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n    ],\n    submitReview: [\n      \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\",\n    ],\n    update: [\"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\"],\n    updateBranch: [\n      \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\",\n    ],\n    updateReview: [\n      \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\",\n    ],\n    updateReviewComment: [\n      \"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\",\n    ],\n  },\n  rateLimit: { get: [\"GET /rate_limit\"] },\n  reactions: {\n    createForCommitComment: [\n      \"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n    ],\n    createForIssue: [\n      \"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n    ],\n    createForIssueComment: [\n      \"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n    ],\n    createForPullRequestReviewComment: [\n      \"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n    ],\n    createForRelease: [\n      \"POST /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n    ],\n    createForTeamDiscussionCommentInOrg: [\n      \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n    ],\n    createForTeamDiscussionInOrg: [\n      \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n    ],\n    deleteForCommitComment: [\n      \"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\",\n    ],\n    deleteForIssue: [\n      \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\",\n    ],\n    deleteForIssueComment: [\n      \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\",\n    ],\n    deleteForPullRequestComment: [\n      \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\",\n    ],\n    deleteForRelease: [\n      \"DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}\",\n    ],\n    deleteForTeamDiscussion: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}\",\n    ],\n    deleteForTeamDiscussionComment: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}\",\n    ],\n    listForCommitComment: [\n      \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n    ],\n    listForIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\"],\n    listForIssueComment: [\n      \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n    ],\n    listForPullRequestReviewComment: [\n      \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n    ],\n    listForRelease: [\n      \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n    ],\n    listForTeamDiscussionCommentInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n    ],\n    listForTeamDiscussionInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n    ],\n  },\n  repos: {\n    acceptInvitation: [\n      \"PATCH /user/repository_invitations/{invitation_id}\",\n      {},\n      { renamed: [\"repos\", \"acceptInvitationForAuthenticatedUser\"] },\n    ],\n    acceptInvitationForAuthenticatedUser: [\n      \"PATCH /user/repository_invitations/{invitation_id}\",\n    ],\n    addAppAccessRestrictions: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n      {},\n      { mapToData: \"apps\" },\n    ],\n    addCollaborator: [\"PUT /repos/{owner}/{repo}/collaborators/{username}\"],\n    addStatusCheckContexts: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n      {},\n      { mapToData: \"contexts\" },\n    ],\n    addTeamAccessRestrictions: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n      {},\n      { mapToData: \"teams\" },\n    ],\n    addUserAccessRestrictions: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n      {},\n      { mapToData: \"users\" },\n    ],\n    cancelPagesDeployment: [\n      \"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel\",\n    ],\n    checkAutomatedSecurityFixes: [\n      \"GET /repos/{owner}/{repo}/automated-security-fixes\",\n    ],\n    checkCollaborator: [\"GET /repos/{owner}/{repo}/collaborators/{username}\"],\n    checkImmutableReleases: [\"GET /repos/{owner}/{repo}/immutable-releases\"],\n    checkPrivateVulnerabilityReporting: [\n      \"GET /repos/{owner}/{repo}/private-vulnerability-reporting\",\n    ],\n    checkVulnerabilityAlerts: [\n      \"GET /repos/{owner}/{repo}/vulnerability-alerts\",\n    ],\n    codeownersErrors: [\"GET /repos/{owner}/{repo}/codeowners/errors\"],\n    compareCommits: [\"GET /repos/{owner}/{repo}/compare/{base}...{head}\"],\n    compareCommitsWithBasehead: [\n      \"GET /repos/{owner}/{repo}/compare/{basehead}\",\n    ],\n    createAttestation: [\"POST /repos/{owner}/{repo}/attestations\"],\n    createAutolink: [\"POST /repos/{owner}/{repo}/autolinks\"],\n    createCommitComment: [\n      \"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n    ],\n    createCommitSignatureProtection: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n    ],\n    createCommitStatus: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n    createDeployKey: [\"POST /repos/{owner}/{repo}/keys\"],\n    createDeployment: [\"POST /repos/{owner}/{repo}/deployments\"],\n    createDeploymentBranchPolicy: [\n      \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n    ],\n    createDeploymentProtectionRule: [\n      \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n    ],\n    createDeploymentStatus: [\n      \"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n    ],\n    createDispatchEvent: [\"POST /repos/{owner}/{repo}/dispatches\"],\n    createForAuthenticatedUser: [\"POST /user/repos\"],\n    createFork: [\"POST /repos/{owner}/{repo}/forks\"],\n    createInOrg: [\"POST /orgs/{org}/repos\"],\n    createOrUpdateEnvironment: [\n      \"PUT /repos/{owner}/{repo}/environments/{environment_name}\",\n    ],\n    createOrUpdateFileContents: [\"PUT /repos/{owner}/{repo}/contents/{path}\"],\n    createOrgRuleset: [\"POST /orgs/{org}/rulesets\"],\n    createPagesDeployment: [\"POST /repos/{owner}/{repo}/pages/deployments\"],\n    createPagesSite: [\"POST /repos/{owner}/{repo}/pages\"],\n    createRelease: [\"POST /repos/{owner}/{repo}/releases\"],\n    createRepoRuleset: [\"POST /repos/{owner}/{repo}/rulesets\"],\n    createUsingTemplate: [\n      \"POST /repos/{template_owner}/{template_repo}/generate\",\n    ],\n    createWebhook: [\"POST /repos/{owner}/{repo}/hooks\"],\n    customPropertiesForReposCreateOrUpdateRepositoryValues: [\n      \"PATCH /repos/{owner}/{repo}/properties/values\",\n    ],\n    customPropertiesForReposGetRepositoryValues: [\n      \"GET /repos/{owner}/{repo}/properties/values\",\n    ],\n    declineInvitation: [\n      \"DELETE /user/repository_invitations/{invitation_id}\",\n      {},\n      { renamed: [\"repos\", \"declineInvitationForAuthenticatedUser\"] },\n    ],\n    declineInvitationForAuthenticatedUser: [\n      \"DELETE /user/repository_invitations/{invitation_id}\",\n    ],\n    delete: [\"DELETE /repos/{owner}/{repo}\"],\n    deleteAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n    ],\n    deleteAdminBranchProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n    ],\n    deleteAnEnvironment: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}\",\n    ],\n    deleteAutolink: [\"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n    deleteBranchProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\",\n    ],\n    deleteCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}\"],\n    deleteCommitSignatureProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n    ],\n    deleteDeployKey: [\"DELETE /repos/{owner}/{repo}/keys/{key_id}\"],\n    deleteDeployment: [\n      \"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\",\n    ],\n    deleteDeploymentBranchPolicy: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n    ],\n    deleteFile: [\"DELETE /repos/{owner}/{repo}/contents/{path}\"],\n    deleteInvitation: [\n      \"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\",\n    ],\n    deleteOrgRuleset: [\"DELETE /orgs/{org}/rulesets/{ruleset_id}\"],\n    deletePagesSite: [\"DELETE /repos/{owner}/{repo}/pages\"],\n    deletePullRequestReviewProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n    ],\n    deleteRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}\"],\n    deleteReleaseAsset: [\n      \"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n    ],\n    deleteRepoRuleset: [\"DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n    deleteWebhook: [\"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\"],\n    disableAutomatedSecurityFixes: [\n      \"DELETE /repos/{owner}/{repo}/automated-security-fixes\",\n    ],\n    disableDeploymentProtectionRule: [\n      \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n    ],\n    disableImmutableReleases: [\n      \"DELETE /repos/{owner}/{repo}/immutable-releases\",\n    ],\n    disablePrivateVulnerabilityReporting: [\n      \"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting\",\n    ],\n    disableVulnerabilityAlerts: [\n      \"DELETE /repos/{owner}/{repo}/vulnerability-alerts\",\n    ],\n    downloadArchive: [\n      \"GET /repos/{owner}/{repo}/zipball/{ref}\",\n      {},\n      { renamed: [\"repos\", \"downloadZipballArchive\"] },\n    ],\n    downloadTarballArchive: [\"GET /repos/{owner}/{repo}/tarball/{ref}\"],\n    downloadZipballArchive: [\"GET /repos/{owner}/{repo}/zipball/{ref}\"],\n    enableAutomatedSecurityFixes: [\n      \"PUT /repos/{owner}/{repo}/automated-security-fixes\",\n    ],\n    enableImmutableReleases: [\"PUT /repos/{owner}/{repo}/immutable-releases\"],\n    enablePrivateVulnerabilityReporting: [\n      \"PUT /repos/{owner}/{repo}/private-vulnerability-reporting\",\n    ],\n    enableVulnerabilityAlerts: [\n      \"PUT /repos/{owner}/{repo}/vulnerability-alerts\",\n    ],\n    generateReleaseNotes: [\n      \"POST /repos/{owner}/{repo}/releases/generate-notes\",\n    ],\n    get: [\"GET /repos/{owner}/{repo}\"],\n    getAccessRestrictions: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\",\n    ],\n    getAdminBranchProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n    ],\n    getAllDeploymentProtectionRules: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\",\n    ],\n    getAllEnvironments: [\"GET /repos/{owner}/{repo}/environments\"],\n    getAllStatusCheckContexts: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n    ],\n    getAllTopics: [\"GET /repos/{owner}/{repo}/topics\"],\n    getAppsWithAccessToProtectedBranch: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n    ],\n    getAutolink: [\"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n    getBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}\"],\n    getBranchProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection\",\n    ],\n    getBranchRules: [\"GET /repos/{owner}/{repo}/rules/branches/{branch}\"],\n    getClones: [\"GET /repos/{owner}/{repo}/traffic/clones\"],\n    getCodeFrequencyStats: [\"GET /repos/{owner}/{repo}/stats/code_frequency\"],\n    getCollaboratorPermissionLevel: [\n      \"GET /repos/{owner}/{repo}/collaborators/{username}/permission\",\n    ],\n    getCombinedStatusForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/status\"],\n    getCommit: [\"GET /repos/{owner}/{repo}/commits/{ref}\"],\n    getCommitActivityStats: [\"GET /repos/{owner}/{repo}/stats/commit_activity\"],\n    getCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}\"],\n    getCommitSignatureProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\",\n    ],\n    getCommunityProfileMetrics: [\"GET /repos/{owner}/{repo}/community/profile\"],\n    getContent: [\"GET /repos/{owner}/{repo}/contents/{path}\"],\n    getContributorsStats: [\"GET /repos/{owner}/{repo}/stats/contributors\"],\n    getCustomDeploymentProtectionRule: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\",\n    ],\n    getDeployKey: [\"GET /repos/{owner}/{repo}/keys/{key_id}\"],\n    getDeployment: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n    getDeploymentBranchPolicy: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n    ],\n    getDeploymentStatus: [\n      \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\",\n    ],\n    getEnvironment: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}\",\n    ],\n    getLatestPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/latest\"],\n    getLatestRelease: [\"GET /repos/{owner}/{repo}/releases/latest\"],\n    getOrgRuleSuite: [\"GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}\"],\n    getOrgRuleSuites: [\"GET /orgs/{org}/rulesets/rule-suites\"],\n    getOrgRuleset: [\"GET /orgs/{org}/rulesets/{ruleset_id}\"],\n    getOrgRulesets: [\"GET /orgs/{org}/rulesets\"],\n    getPages: [\"GET /repos/{owner}/{repo}/pages\"],\n    getPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/{build_id}\"],\n    getPagesDeployment: [\n      \"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}\",\n    ],\n    getPagesHealthCheck: [\"GET /repos/{owner}/{repo}/pages/health\"],\n    getParticipationStats: [\"GET /repos/{owner}/{repo}/stats/participation\"],\n    getPullRequestReviewProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n    ],\n    getPunchCardStats: [\"GET /repos/{owner}/{repo}/stats/punch_card\"],\n    getReadme: [\"GET /repos/{owner}/{repo}/readme\"],\n    getReadmeInDirectory: [\"GET /repos/{owner}/{repo}/readme/{dir}\"],\n    getRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}\"],\n    getReleaseAsset: [\"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n    getReleaseByTag: [\"GET /repos/{owner}/{repo}/releases/tags/{tag}\"],\n    getRepoRuleSuite: [\n      \"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}\",\n    ],\n    getRepoRuleSuites: [\"GET /repos/{owner}/{repo}/rulesets/rule-suites\"],\n    getRepoRuleset: [\"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n    getRepoRulesetHistory: [\n      \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n    ],\n    getRepoRulesetVersion: [\n      \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}\",\n    ],\n    getRepoRulesets: [\"GET /repos/{owner}/{repo}/rulesets\"],\n    getStatusChecksProtection: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n    ],\n    getTeamsWithAccessToProtectedBranch: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n    ],\n    getTopPaths: [\"GET /repos/{owner}/{repo}/traffic/popular/paths\"],\n    getTopReferrers: [\"GET /repos/{owner}/{repo}/traffic/popular/referrers\"],\n    getUsersWithAccessToProtectedBranch: [\n      \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n    ],\n    getViews: [\"GET /repos/{owner}/{repo}/traffic/views\"],\n    getWebhook: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}\"],\n    getWebhookConfigForRepo: [\n      \"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n    ],\n    getWebhookDelivery: [\n      \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\",\n    ],\n    listActivities: [\"GET /repos/{owner}/{repo}/activity\"],\n    listAttestations: [\n      \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n    ],\n    listAutolinks: [\"GET /repos/{owner}/{repo}/autolinks\"],\n    listBranches: [\"GET /repos/{owner}/{repo}/branches\"],\n    listBranchesForHeadCommit: [\n      \"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\",\n    ],\n    listCollaborators: [\"GET /repos/{owner}/{repo}/collaborators\"],\n    listCommentsForCommit: [\n      \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n    ],\n    listCommitCommentsForRepo: [\"GET /repos/{owner}/{repo}/comments\"],\n    listCommitStatusesForRef: [\n      \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n    ],\n    listCommits: [\"GET /repos/{owner}/{repo}/commits\"],\n    listContributors: [\"GET /repos/{owner}/{repo}/contributors\"],\n    listCustomDeploymentRuleIntegrations: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n    ],\n    listDeployKeys: [\"GET /repos/{owner}/{repo}/keys\"],\n    listDeploymentBranchPolicies: [\n      \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n    ],\n    listDeploymentStatuses: [\n      \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n    ],\n    listDeployments: [\"GET /repos/{owner}/{repo}/deployments\"],\n    listForAuthenticatedUser: [\"GET /user/repos\"],\n    listForOrg: [\"GET /orgs/{org}/repos\"],\n    listForUser: [\"GET /users/{username}/repos\"],\n    listForks: [\"GET /repos/{owner}/{repo}/forks\"],\n    listInvitations: [\"GET /repos/{owner}/{repo}/invitations\"],\n    listInvitationsForAuthenticatedUser: [\"GET /user/repository_invitations\"],\n    listLanguages: [\"GET /repos/{owner}/{repo}/languages\"],\n    listPagesBuilds: [\"GET /repos/{owner}/{repo}/pages/builds\"],\n    listPublic: [\"GET /repositories\"],\n    listPullRequestsAssociatedWithCommit: [\n      \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n    ],\n    listReleaseAssets: [\n      \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n    ],\n    listReleases: [\"GET /repos/{owner}/{repo}/releases\"],\n    listTags: [\"GET /repos/{owner}/{repo}/tags\"],\n    listTeams: [\"GET /repos/{owner}/{repo}/teams\"],\n    listWebhookDeliveries: [\n      \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n    ],\n    listWebhooks: [\"GET /repos/{owner}/{repo}/hooks\"],\n    merge: [\"POST /repos/{owner}/{repo}/merges\"],\n    mergeUpstream: [\"POST /repos/{owner}/{repo}/merge-upstream\"],\n    pingWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\"],\n    redeliverWebhookDelivery: [\n      \"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\",\n    ],\n    removeAppAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n      {},\n      { mapToData: \"apps\" },\n    ],\n    removeCollaborator: [\n      \"DELETE /repos/{owner}/{repo}/collaborators/{username}\",\n    ],\n    removeStatusCheckContexts: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n      {},\n      { mapToData: \"contexts\" },\n    ],\n    removeStatusCheckProtection: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n    ],\n    removeTeamAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n      {},\n      { mapToData: \"teams\" },\n    ],\n    removeUserAccessRestrictions: [\n      \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n      {},\n      { mapToData: \"users\" },\n    ],\n    renameBranch: [\"POST /repos/{owner}/{repo}/branches/{branch}/rename\"],\n    replaceAllTopics: [\"PUT /repos/{owner}/{repo}/topics\"],\n    requestPagesBuild: [\"POST /repos/{owner}/{repo}/pages/builds\"],\n    setAdminBranchProtection: [\n      \"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\",\n    ],\n    setAppAccessRestrictions: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n      {},\n      { mapToData: \"apps\" },\n    ],\n    setStatusCheckContexts: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n      {},\n      { mapToData: \"contexts\" },\n    ],\n    setTeamAccessRestrictions: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n      {},\n      { mapToData: \"teams\" },\n    ],\n    setUserAccessRestrictions: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n      {},\n      { mapToData: \"users\" },\n    ],\n    testPushWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\"],\n    transfer: [\"POST /repos/{owner}/{repo}/transfer\"],\n    update: [\"PATCH /repos/{owner}/{repo}\"],\n    updateBranchProtection: [\n      \"PUT /repos/{owner}/{repo}/branches/{branch}/protection\",\n    ],\n    updateCommitComment: [\"PATCH /repos/{owner}/{repo}/comments/{comment_id}\"],\n    updateDeploymentBranchPolicy: [\n      \"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\",\n    ],\n    updateInformationAboutPagesSite: [\"PUT /repos/{owner}/{repo}/pages\"],\n    updateInvitation: [\n      \"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\",\n    ],\n    updateOrgRuleset: [\"PUT /orgs/{org}/rulesets/{ruleset_id}\"],\n    updatePullRequestReviewProtection: [\n      \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\",\n    ],\n    updateRelease: [\"PATCH /repos/{owner}/{repo}/releases/{release_id}\"],\n    updateReleaseAsset: [\n      \"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\",\n    ],\n    updateRepoRuleset: [\"PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n    updateStatusCheckPotection: [\n      \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n      {},\n      { renamed: [\"repos\", \"updateStatusCheckProtection\"] },\n    ],\n    updateStatusCheckProtection: [\n      \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n    ],\n    updateWebhook: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\"],\n    updateWebhookConfigForRepo: [\n      \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\",\n    ],\n    uploadReleaseAsset: [\n      \"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}\",\n      { baseUrl: \"https://uploads.github.com\" },\n    ],\n  },\n  search: {\n    code: [\"GET /search/code\"],\n    commits: [\"GET /search/commits\"],\n    issuesAndPullRequests: [\"GET /search/issues\"],\n    labels: [\"GET /search/labels\"],\n    repos: [\"GET /search/repositories\"],\n    topics: [\"GET /search/topics\"],\n    users: [\"GET /search/users\"],\n  },\n  secretScanning: {\n    createPushProtectionBypass: [\n      \"POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses\",\n    ],\n    getAlert: [\n      \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n    ],\n    getScanHistory: [\"GET /repos/{owner}/{repo}/secret-scanning/scan-history\"],\n    listAlertsForOrg: [\"GET /orgs/{org}/secret-scanning/alerts\"],\n    listAlertsForRepo: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts\"],\n    listLocationsForAlert: [\n      \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n    ],\n    listOrgPatternConfigs: [\n      \"GET /orgs/{org}/secret-scanning/pattern-configurations\",\n    ],\n    updateAlert: [\n      \"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\",\n    ],\n    updateOrgPatternConfigs: [\n      \"PATCH /orgs/{org}/secret-scanning/pattern-configurations\",\n    ],\n  },\n  securityAdvisories: {\n    createFork: [\n      \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\",\n    ],\n    createPrivateVulnerabilityReport: [\n      \"POST /repos/{owner}/{repo}/security-advisories/reports\",\n    ],\n    createRepositoryAdvisory: [\n      \"POST /repos/{owner}/{repo}/security-advisories\",\n    ],\n    createRepositoryAdvisoryCveRequest: [\n      \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve\",\n    ],\n    getGlobalAdvisory: [\"GET /advisories/{ghsa_id}\"],\n    getRepositoryAdvisory: [\n      \"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n    ],\n    listGlobalAdvisories: [\"GET /advisories\"],\n    listOrgRepositoryAdvisories: [\"GET /orgs/{org}/security-advisories\"],\n    listRepositoryAdvisories: [\"GET /repos/{owner}/{repo}/security-advisories\"],\n    updateRepositoryAdvisory: [\n      \"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}\",\n    ],\n  },\n  teams: {\n    addOrUpdateMembershipForUserInOrg: [\n      \"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n    ],\n    addOrUpdateRepoPermissionsInOrg: [\n      \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n    ],\n    checkPermissionsForRepoInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n    ],\n    create: [\"POST /orgs/{org}/teams\"],\n    createDiscussionCommentInOrg: [\n      \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n    ],\n    createDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions\"],\n    deleteDiscussionCommentInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\",\n    ],\n    deleteDiscussionInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\",\n    ],\n    deleteInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}\"],\n    getByName: [\"GET /orgs/{org}/teams/{team_slug}\"],\n    getDiscussionCommentInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\",\n    ],\n    getDiscussionInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\",\n    ],\n    getMembershipForUserInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n    ],\n    list: [\"GET /orgs/{org}/teams\"],\n    listChildInOrg: [\"GET /orgs/{org}/teams/{team_slug}/teams\"],\n    listDiscussionCommentsInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n    ],\n    listDiscussionsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions\"],\n    listForAuthenticatedUser: [\"GET /user/teams\"],\n    listMembersInOrg: [\"GET /orgs/{org}/teams/{team_slug}/members\"],\n    listPendingInvitationsInOrg: [\n      \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n    ],\n    listReposInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos\"],\n    removeMembershipForUserInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\",\n    ],\n    removeRepoInOrg: [\n      \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\",\n    ],\n    updateDiscussionCommentInOrg: [\n      \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\",\n    ],\n    updateDiscussionInOrg: [\n      \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\",\n    ],\n    updateInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}\"],\n  },\n  users: {\n    addEmailForAuthenticated: [\n      \"POST /user/emails\",\n      {},\n      { renamed: [\"users\", \"addEmailForAuthenticatedUser\"] },\n    ],\n    addEmailForAuthenticatedUser: [\"POST /user/emails\"],\n    addSocialAccountForAuthenticatedUser: [\"POST /user/social_accounts\"],\n    block: [\"PUT /user/blocks/{username}\"],\n    checkBlocked: [\"GET /user/blocks/{username}\"],\n    checkFollowingForUser: [\"GET /users/{username}/following/{target_user}\"],\n    checkPersonIsFollowedByAuthenticated: [\"GET /user/following/{username}\"],\n    createGpgKeyForAuthenticated: [\n      \"POST /user/gpg_keys\",\n      {},\n      { renamed: [\"users\", \"createGpgKeyForAuthenticatedUser\"] },\n    ],\n    createGpgKeyForAuthenticatedUser: [\"POST /user/gpg_keys\"],\n    createPublicSshKeyForAuthenticated: [\n      \"POST /user/keys\",\n      {},\n      { renamed: [\"users\", \"createPublicSshKeyForAuthenticatedUser\"] },\n    ],\n    createPublicSshKeyForAuthenticatedUser: [\"POST /user/keys\"],\n    createSshSigningKeyForAuthenticatedUser: [\"POST /user/ssh_signing_keys\"],\n    deleteAttestationsBulk: [\n      \"POST /users/{username}/attestations/delete-request\",\n    ],\n    deleteAttestationsById: [\n      \"DELETE /users/{username}/attestations/{attestation_id}\",\n    ],\n    deleteAttestationsBySubjectDigest: [\n      \"DELETE /users/{username}/attestations/digest/{subject_digest}\",\n    ],\n    deleteEmailForAuthenticated: [\n      \"DELETE /user/emails\",\n      {},\n      { renamed: [\"users\", \"deleteEmailForAuthenticatedUser\"] },\n    ],\n    deleteEmailForAuthenticatedUser: [\"DELETE /user/emails\"],\n    deleteGpgKeyForAuthenticated: [\n      \"DELETE /user/gpg_keys/{gpg_key_id}\",\n      {},\n      { renamed: [\"users\", \"deleteGpgKeyForAuthenticatedUser\"] },\n    ],\n    deleteGpgKeyForAuthenticatedUser: [\"DELETE /user/gpg_keys/{gpg_key_id}\"],\n    deletePublicSshKeyForAuthenticated: [\n      \"DELETE /user/keys/{key_id}\",\n      {},\n      { renamed: [\"users\", \"deletePublicSshKeyForAuthenticatedUser\"] },\n    ],\n    deletePublicSshKeyForAuthenticatedUser: [\"DELETE /user/keys/{key_id}\"],\n    deleteSocialAccountForAuthenticatedUser: [\"DELETE /user/social_accounts\"],\n    deleteSshSigningKeyForAuthenticatedUser: [\n      \"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}\",\n    ],\n    follow: [\"PUT /user/following/{username}\"],\n    getAuthenticated: [\"GET /user\"],\n    getById: [\"GET /user/{account_id}\"],\n    getByUsername: [\"GET /users/{username}\"],\n    getContextForUser: [\"GET /users/{username}/hovercard\"],\n    getGpgKeyForAuthenticated: [\n      \"GET /user/gpg_keys/{gpg_key_id}\",\n      {},\n      { renamed: [\"users\", \"getGpgKeyForAuthenticatedUser\"] },\n    ],\n    getGpgKeyForAuthenticatedUser: [\"GET /user/gpg_keys/{gpg_key_id}\"],\n    getPublicSshKeyForAuthenticated: [\n      \"GET /user/keys/{key_id}\",\n      {},\n      { renamed: [\"users\", \"getPublicSshKeyForAuthenticatedUser\"] },\n    ],\n    getPublicSshKeyForAuthenticatedUser: [\"GET /user/keys/{key_id}\"],\n    getSshSigningKeyForAuthenticatedUser: [\n      \"GET /user/ssh_signing_keys/{ssh_signing_key_id}\",\n    ],\n    list: [\"GET /users\"],\n    listAttestations: [\"GET /users/{username}/attestations/{subject_digest}\"],\n    listAttestationsBulk: [\n      \"POST /users/{username}/attestations/bulk-list{?per_page,before,after}\",\n    ],\n    listBlockedByAuthenticated: [\n      \"GET /user/blocks\",\n      {},\n      { renamed: [\"users\", \"listBlockedByAuthenticatedUser\"] },\n    ],\n    listBlockedByAuthenticatedUser: [\"GET /user/blocks\"],\n    listEmailsForAuthenticated: [\n      \"GET /user/emails\",\n      {},\n      { renamed: [\"users\", \"listEmailsForAuthenticatedUser\"] },\n    ],\n    listEmailsForAuthenticatedUser: [\"GET /user/emails\"],\n    listFollowedByAuthenticated: [\n      \"GET /user/following\",\n      {},\n      { renamed: [\"users\", \"listFollowedByAuthenticatedUser\"] },\n    ],\n    listFollowedByAuthenticatedUser: [\"GET /user/following\"],\n    listFollowersForAuthenticatedUser: [\"GET /user/followers\"],\n    listFollowersForUser: [\"GET /users/{username}/followers\"],\n    listFollowingForUser: [\"GET /users/{username}/following\"],\n    listGpgKeysForAuthenticated: [\n      \"GET /user/gpg_keys\",\n      {},\n      { renamed: [\"users\", \"listGpgKeysForAuthenticatedUser\"] },\n    ],\n    listGpgKeysForAuthenticatedUser: [\"GET /user/gpg_keys\"],\n    listGpgKeysForUser: [\"GET /users/{username}/gpg_keys\"],\n    listPublicEmailsForAuthenticated: [\n      \"GET /user/public_emails\",\n      {},\n      { renamed: [\"users\", \"listPublicEmailsForAuthenticatedUser\"] },\n    ],\n    listPublicEmailsForAuthenticatedUser: [\"GET /user/public_emails\"],\n    listPublicKeysForUser: [\"GET /users/{username}/keys\"],\n    listPublicSshKeysForAuthenticated: [\n      \"GET /user/keys\",\n      {},\n      { renamed: [\"users\", \"listPublicSshKeysForAuthenticatedUser\"] },\n    ],\n    listPublicSshKeysForAuthenticatedUser: [\"GET /user/keys\"],\n    listSocialAccountsForAuthenticatedUser: [\"GET /user/social_accounts\"],\n    listSocialAccountsForUser: [\"GET /users/{username}/social_accounts\"],\n    listSshSigningKeysForAuthenticatedUser: [\"GET /user/ssh_signing_keys\"],\n    listSshSigningKeysForUser: [\"GET /users/{username}/ssh_signing_keys\"],\n    setPrimaryEmailVisibilityForAuthenticated: [\n      \"PATCH /user/email/visibility\",\n      {},\n      { renamed: [\"users\", \"setPrimaryEmailVisibilityForAuthenticatedUser\"] },\n    ],\n    setPrimaryEmailVisibilityForAuthenticatedUser: [\n      \"PATCH /user/email/visibility\",\n    ],\n    unblock: [\"DELETE /user/blocks/{username}\"],\n    unfollow: [\"DELETE /user/following/{username}\"],\n    updateAuthenticated: [\"PATCH /user\"],\n  },\n};\n\nexport default Endpoints;\n", "import type { Octokit } from \"@octokit/core\";\nimport type { EndpointOptions, RequestParameters, Route } from \"@octokit/types\";\nimport ENDPOINTS from \"./generated/endpoints.js\";\nimport type { RestEndpointMethods } from \"./generated/method-types.js\";\nimport type { EndpointDecorations } from \"./types.js\";\n\n// The following code was refactored in: https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/622\n// to optimise the runtime performance of Octokit initialization.\n//\n// This optimization involves two key changes:\n// 1. Pre-Computation: The endpoint methods are pre-computed once at module load\n//    time instead of each invocation of `endpointsToMethods()`.\n// 2. Lazy initialization and caching: We use a Proxy for each scope to only\n//    initialize methods that are actually called. This reduces runtime overhead\n//    as the initialization involves deep merging of objects. The initialized\n//    methods are then cached for future use.\n\nconst endpointMethodsMap = new Map();\nfor (const [scope, endpoints] of Object.entries(ENDPOINTS)) {\n  for (const [methodName, endpoint] of Object.entries(endpoints)) {\n    const [route, defaults, decorations] = endpoint;\n    const [method, url] = route.split(/ /);\n    const endpointDefaults = Object.assign(\n      {\n        method,\n        url,\n      },\n      defaults,\n    );\n\n    if (!endpointMethodsMap.has(scope)) {\n      endpointMethodsMap.set(scope, new Map());\n    }\n\n    endpointMethodsMap.get(scope).set(methodName, {\n      scope,\n      methodName,\n      endpointDefaults,\n      decorations,\n    });\n  }\n}\n\ntype ProxyTarget = {\n  octokit: Octokit;\n  scope: string;\n  cache: Record<string, (...args: any[]) => any>;\n};\n\nconst handler = {\n  has({ scope }: ProxyTarget, methodName: string) {\n    return endpointMethodsMap.get(scope).has(methodName);\n  },\n  getOwnPropertyDescriptor(target: ProxyTarget, methodName: string) {\n    return {\n      value: this.get(target, methodName), // ensures method is in the cache\n      configurable: true,\n      writable: true,\n      enumerable: true,\n    };\n  },\n  defineProperty(\n    target: ProxyTarget,\n    methodName: string,\n    descriptor: PropertyDescriptor,\n  ) {\n    Object.defineProperty(target.cache, methodName, descriptor);\n    return true;\n  },\n  deleteProperty(target: ProxyTarget, methodName: string) {\n    delete target.cache[methodName];\n    return true;\n  },\n  ownKeys({ scope }: ProxyTarget) {\n    return [...endpointMethodsMap.get(scope).keys()];\n  },\n  set(target: ProxyTarget, methodName: string, value: any) {\n    return (target.cache[methodName] = value);\n  },\n  get({ octokit, scope, cache }: ProxyTarget, methodName: string) {\n    if (cache[methodName]) {\n      return cache[methodName];\n    }\n\n    const method = endpointMethodsMap.get(scope).get(methodName);\n    if (!method) {\n      return undefined;\n    }\n\n    const { endpointDefaults, decorations } = method;\n\n    if (decorations) {\n      cache[methodName] = decorate(\n        octokit,\n        scope,\n        methodName,\n        endpointDefaults,\n        decorations,\n      );\n    } else {\n      cache[methodName] = octokit.request.defaults(endpointDefaults);\n    }\n\n    return cache[methodName];\n  },\n};\n\nexport function endpointsToMethods(octokit: Octokit): RestEndpointMethods {\n  const newMethods = {} as { [key: string]: object };\n\n  for (const scope of endpointMethodsMap.keys()) {\n    newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);\n  }\n\n  return newMethods as RestEndpointMethods;\n}\n\nfunction decorate(\n  octokit: Octokit,\n  scope: string,\n  methodName: string,\n  defaults: EndpointOptions,\n  decorations: EndpointDecorations,\n) {\n  const requestWithDefaults = octokit.request.defaults(defaults);\n\n  /* istanbul ignore next */\n  function withDecorations(\n    ...args: [Route, RequestParameters?] | [EndpointOptions]\n  ) {\n    // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n    let options = requestWithDefaults.endpoint.merge(...args);\n\n    // There are currently no other decorations than `.mapToData`\n    if (decorations.mapToData) {\n      options = Object.assign({}, options, {\n        data: options[decorations.mapToData],\n        [decorations.mapToData]: undefined,\n      });\n      return requestWithDefaults(options);\n    }\n\n    if (decorations.renamed) {\n      const [newScope, newMethodName] = decorations.renamed;\n      octokit.log.warn(\n        `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`,\n      );\n    }\n    if (decorations.deprecated) {\n      octokit.log.warn(decorations.deprecated);\n    }\n\n    if (decorations.renamedParameters) {\n      // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n      const options = requestWithDefaults.endpoint.merge(...args);\n\n      for (const [name, alias] of Object.entries(\n        decorations.renamedParameters,\n      )) {\n        if (name in options) {\n          octokit.log.warn(\n            `\"${name}\" parameter is deprecated for \"octokit.${scope}.${methodName}()\". Use \"${alias}\" instead`,\n          );\n          if (!(alias in options)) {\n            options[alias] = options[name];\n          }\n          delete options[name];\n        }\n      }\n      return requestWithDefaults(options);\n    }\n\n    // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488\n    return requestWithDefaults(...args);\n  }\n  return Object.assign(withDecorations, requestWithDefaults);\n}\n", "import type { Octokit } from \"@octokit/core\";\n\nexport type { RestEndpointMethodTypes } from \"./generated/parameters-and-response-types.js\";\nimport { VERSION } from \"./version.js\";\nimport type { Api } from \"./types.js\";\nimport { endpointsToMethods } from \"./endpoints-to-methods.js\";\n\n// Export the type for downstream users in order to fix a TypeScript error\n// The inferred type of 'Octokit' cannot be named without a reference to '../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/types.js'. This is likely not portable. A type annotation is necessary.\nexport type { Api };\n\nexport function restEndpointMethods(octokit: Octokit): Api {\n  const api = endpointsToMethods(octokit);\n  return {\n    rest: api,\n  };\n}\nrestEndpointMethods.VERSION = VERSION;\n\nexport function legacyRestEndpointMethods(octokit: Octokit): Api[\"rest\"] & Api {\n  const api = endpointsToMethods(octokit);\n  return {\n    ...api,\n    rest: api,\n  };\n}\nlegacyRestEndpointMethods.VERSION = VERSION;\n", "const VERSION = \"22.0.1\";\nexport {\n  VERSION\n};\n", "import { Octokit as Core } from \"@octokit/core\";\nimport { requestLog } from \"@octokit/plugin-request-log\";\nimport {\n  paginateRest\n} from \"@octokit/plugin-paginate-rest\";\nimport { legacyRestEndpointMethods } from \"@octokit/plugin-rest-endpoint-methods\";\nimport { VERSION } from \"./version.js\";\nconst Octokit = Core.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults(\n  {\n    userAgent: `octokit-rest.js/${VERSION}`\n  }\n);\nexport {\n  Octokit\n};\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n//import { GitCreateBlobResponse, GitCreateTreeParamsTree } from '@octokit/git';\r\n\r\nimport { Octokit } from \"@octokit/rest\";\r\nimport GitCreateBlobResponse from \"./GitCreateBlobResponse\";\r\nimport GitCreateTreeParamsTree from \"./GitCreateTreeParamsTree\";\r\nimport { Endpoints } from \"@octokit/types\";\r\nimport DifferenceSet from \"../storage/DifferenceSet\";\r\nimport { FileDifferenceType } from \"../storage/IFileDifference\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport { constants } from \"../core/Constants\";\r\n\r\ntype GitHubReposResponse = Endpoints[\"GET /user/repos\"][\"response\"];\r\ntype GitHubUserResponse = Endpoints[\"GET /user\"][\"response\"];\r\n\r\nexport default class GitHubManager {\r\n  private _octokit: Octokit;\r\n  private _isUserStateLoaded: boolean = false;\r\n\r\n  private _reposResponse?: GitHubReposResponse;\r\n  private _userResponse?: GitHubUserResponse;\r\n\r\n  public get repos() {\r\n    if (this._reposResponse === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._reposResponse.data;\r\n  }\r\n\r\n  public get authenticatedUser() {\r\n    if (this._userResponse === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    return this._userResponse.data;\r\n  }\r\n\r\n  public get octokit() {\r\n    return this._octokit;\r\n  }\r\n\r\n  constructor() {\r\n    this._octokit = new Octokit({\r\n      userAgent: constants.name + \" \" + constants.version,\r\n    });\r\n  }\r\n\r\n  async ensureUserStateLoaded() {\r\n    if (this._isUserStateLoaded) {\r\n      return;\r\n    }\r\n\r\n    const userResponse = await this._octokit.rest.users.getAuthenticated();\r\n    this._userResponse = userResponse;\r\n\r\n    const response = await this._octokit.rest.repos.listForAuthenticatedUser();\r\n    this._reposResponse = response;\r\n\r\n    this._isUserStateLoaded = true;\r\n  }\r\n\r\n  async createRepo(name: string, description: string) {\r\n    const result = await this._octokit.repos.createForAuthenticatedUser({\r\n      name: name,\r\n      description: description,\r\n      auto_init: true,\r\n    });\r\n\r\n    return result.data;\r\n  }\r\n\r\n  async commitToRepo(\r\n    owner: string,\r\n    repo: string,\r\n    branch: string = \"main\",\r\n    folderName: string = \"\",\r\n    commitMessage: string,\r\n    differences: DifferenceSet\r\n  ) {\r\n    // gets commit's AND its tree's SHA\r\n    const currentCommit = await this.getCurrentCommit(owner, repo, branch);\r\n\r\n    const filesBlobs: GitCreateBlobResponse[] = [];\r\n    const pathsForBlobs: string[] = [];\r\n\r\n    for (let i = 0; i < differences.fileDifferences.length; i++) {\r\n      const diff = differences.fileDifferences[i];\r\n\r\n      if (\r\n        (diff.type === FileDifferenceType.contentsDifferent || diff.type === FileDifferenceType.fileAdded) &&\r\n        diff.updated !== undefined\r\n      ) {\r\n        const updatedFile = diff.updated;\r\n\r\n        if (!updatedFile.isContentLoaded) {\r\n          await updatedFile.loadContent();\r\n        }\r\n\r\n        if (updatedFile.content !== null) {\r\n          let targetPath = diff.path;\r\n\r\n          targetPath = folderName + targetPath;\r\n\r\n          if (targetPath.startsWith(\"/\")) {\r\n            targetPath = targetPath.substring(1, targetPath.length);\r\n          }\r\n\r\n          const file = await this.createBlobForFile(owner, repo, updatedFile.content);\r\n\r\n          filesBlobs.push(file);\r\n          pathsForBlobs.push(targetPath);\r\n        }\r\n      }\r\n    }\r\n\r\n    const newTree = await this.createNewTree(owner, repo, filesBlobs, pathsForBlobs, currentCommit.treeSha);\r\n\r\n    const newCommit = await this.createNewCommit(owner, repo, commitMessage, newTree.sha, currentCommit.commitSha);\r\n\r\n    this.setBranchToCommit(owner, repo, branch, newCommit.sha);\r\n  }\r\n\r\n  async createBlobForFile(owner: string, repo: string, content: Uint8Array | string) {\r\n    let encoding = \"utf-8\";\r\n\r\n    if (content instanceof Uint8Array) {\r\n      content = Utilities.uint8ArrayToBase64(content);\r\n      encoding = \"base64\";\r\n    }\r\n\r\n    const blobData = await this._octokit.git.createBlob({\r\n      owner: owner,\r\n      repo,\r\n      content,\r\n      encoding: encoding,\r\n    });\r\n\r\n    return blobData.data as GitCreateBlobResponse;\r\n  }\r\n\r\n  async getCurrentCommit(owner: string, repo: string, branch: string = \"main\") {\r\n    const { data: refData } = await this._octokit.git.getRef({\r\n      owner: owner,\r\n      repo,\r\n      ref: \"heads/\" + branch,\r\n    });\r\n\r\n    const commitSha = refData.object.sha;\r\n\r\n    const { data: commitData } = await this._octokit.git.getCommit({\r\n      owner: owner,\r\n      repo,\r\n      commit_sha: commitSha,\r\n    });\r\n\r\n    return {\r\n      commitSha,\r\n      treeSha: commitData.tree.sha,\r\n    };\r\n  }\r\n\r\n  async createNewTree(\r\n    owner: string,\r\n    repo: string,\r\n    blobs: GitCreateBlobResponse[],\r\n    paths: string[],\r\n    parentTreeSha: string\r\n  ) {\r\n    // My custom config. Could be taken as parameters\r\n    const tree = blobs.map(({ sha }, index) => ({\r\n      path: paths[index],\r\n      mode: `100644`,\r\n      type: `blob`,\r\n      sha,\r\n    })) as GitCreateTreeParamsTree[];\r\n\r\n    const { data } = await this._octokit.git.createTree({\r\n      owner,\r\n      repo,\r\n      tree,\r\n      base_tree: parentTreeSha,\r\n    });\r\n\r\n    return data;\r\n  }\r\n\r\n  async createNewCommit(\r\n    owner: string,\r\n    repo: string,\r\n    message: string,\r\n    currentTreeSha: string,\r\n    currentCommitSha: string\r\n  ) {\r\n    const result = await this._octokit.git.createCommit({\r\n      owner: owner,\r\n      repo,\r\n      message,\r\n      tree: currentTreeSha,\r\n      parents: [currentCommitSha],\r\n    });\r\n\r\n    return result.data;\r\n  }\r\n\r\n  setBranchToCommit(owner: string, repo: string, branch: string = `main`, commitSha: string) {\r\n    this._octokit.git.updateRef({\r\n      owner: owner,\r\n      repo,\r\n      ref: `heads/${branch}`,\r\n      sha: commitSha,\r\n    });\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum CommandArgumentType {\r\n  coordinate,\r\n  unknown,\r\n}\r\n\r\nexport enum CoordinateLocation {\r\n  x,\r\n  y,\r\n  z,\r\n}\r\n\r\nexport enum CoordinateType {\r\n  absolute,\r\n  relativeTilde,\r\n  localCaret,\r\n}\r\n\r\nexport default class CommandArgument {\r\n  _content: string;\r\n\r\n  _type: CommandArgumentType;\r\n  _location?: CoordinateLocation;\r\n  _coordinateType?: CoordinateType;\r\n  _pos?: number;\r\n\r\n  public get value() {\r\n    if (this._type === CommandArgumentType.coordinate && this._pos !== undefined) {\r\n      let result = this._pos.toString();\r\n\r\n      if (this._coordinateType === CoordinateType.localCaret) {\r\n        result = \"^\" + result;\r\n      } else if (this._coordinateType === CoordinateType.relativeTilde) {\r\n        result = \"~\" + result;\r\n      }\r\n\r\n      return result;\r\n    }\r\n\r\n    return this._content;\r\n  }\r\n\r\n  public get position() {\r\n    if (this._pos === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this._pos;\r\n  }\r\n\r\n  public set position(value: number) {\r\n    this._pos = value;\r\n  }\r\n\r\n  public get coordinateType() {\r\n    if (this._coordinateType === undefined) {\r\n      return CoordinateType.absolute;\r\n    }\r\n\r\n    return this._coordinateType;\r\n  }\r\n\r\n  public set coordinateType(type: CoordinateType) {\r\n    this._coordinateType = type;\r\n  }\r\n\r\n  public get type() {\r\n    return this._type;\r\n  }\r\n\r\n  public get location() {\r\n    return this._location;\r\n  }\r\n\r\n  public set location(newLocation: CoordinateLocation | undefined) {\r\n    this._location = newLocation;\r\n  }\r\n\r\n  public constructor(content: string) {\r\n    this._content = content;\r\n    this._type = CommandArgumentType.unknown;\r\n\r\n    this.setValue(content);\r\n  }\r\n\r\n  private setValue(content: string) {\r\n    this._content = content;\r\n\r\n    const startsWithCaret = this._content.startsWith(\"^\");\r\n    const startsWithTilde = this._content.startsWith(\"~\");\r\n\r\n    if (startsWithCaret || startsWithTilde) {\r\n      const substr = this._content.substring(1, this._content.length);\r\n\r\n      if (Utilities.isNumeric(substr)) {\r\n        this._type = CommandArgumentType.coordinate;\r\n\r\n        if (startsWithTilde) {\r\n          this._coordinateType = CoordinateType.relativeTilde;\r\n        } else if (startsWithCaret) {\r\n          this._coordinateType = CoordinateType.localCaret;\r\n        }\r\n\r\n        this._pos = parseInt(substr);\r\n      } else {\r\n        this._type = CommandArgumentType.unknown;\r\n      }\r\n    } else if (Utilities.isNumeric(this._content)) {\r\n      this._type = CommandArgumentType.coordinate;\r\n      this._coordinateType = CoordinateType.absolute;\r\n      this._pos = parseInt(content);\r\n    } else {\r\n      this._type = CommandArgumentType.unknown;\r\n    }\r\n  }\r\n\r\n  public toString() {\r\n    return this.value;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CommandArgument, { CoordinateLocation, CommandArgumentType, CoordinateType } from \"./CommandArgument\";\r\n\r\nexport default class Command {\r\n  _commandName: string;\r\n  _arguments: CommandArgument[];\r\n\r\n  constructor(commandText: string) {\r\n    const firstSpace = commandText.indexOf(\" \");\r\n\r\n    this._arguments = [];\r\n\r\n    let _coordinatePos = -1;\r\n\r\n    if (firstSpace < 0) {\r\n      this._commandName = commandText;\r\n    } else {\r\n      this._commandName = commandText.substring(0, firstSpace);\r\n\r\n      const args = commandText.substring(firstSpace + 1, commandText.length).split(\" \");\r\n\r\n      for (let i = 0; i < args.length; i++) {\r\n        const cmdArg = new CommandArgument(args[i]);\r\n\r\n        if (cmdArg.type === CommandArgumentType.coordinate) {\r\n          _coordinatePos++;\r\n\r\n          if (_coordinatePos >= 3) {\r\n            _coordinatePos = 0;\r\n          }\r\n\r\n          if (_coordinatePos === 0) {\r\n            cmdArg.location = CoordinateLocation.x;\r\n          } else if (_coordinatePos === 1) {\r\n            cmdArg.location = CoordinateLocation.y;\r\n          } else if (_coordinatePos === 2) {\r\n            cmdArg.location = CoordinateLocation.z;\r\n          }\r\n        } else {\r\n          _coordinatePos = -1;\r\n        }\r\n\r\n        this._arguments.push(cmdArg);\r\n      }\r\n    }\r\n\r\n    if (this._commandName.startsWith(\"/\")) {\r\n      this._commandName = this._commandName.substring(1, this._commandName.length);\r\n    }\r\n  }\r\n\r\n  absolutizeCoordinates(absoluteX: number, absoluteY: number, absoluteZ: number) {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate) {\r\n        if (arg.coordinateType === CoordinateType.relativeTilde) {\r\n          if (arg.location === CoordinateLocation.x) {\r\n            arg.coordinateType = CoordinateType.absolute;\r\n            arg.position = absoluteX + arg.position;\r\n          } else if (arg.location === CoordinateLocation.y) {\r\n            arg.coordinateType = CoordinateType.absolute;\r\n            arg.position = absoluteY + arg.position;\r\n          } else if (arg.location === CoordinateLocation.z) {\r\n            arg.coordinateType = CoordinateType.absolute;\r\n            arg.position = absoluteZ + arg.position;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  get hasRelativeOrLocalCoordinates() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.coordinateType !== CoordinateType.absolute) {\r\n        return true;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  get firstX() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.location === CoordinateLocation.x) {\r\n        return arg;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get firstY() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.location === CoordinateLocation.y) {\r\n        return arg;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  get firstZ() {\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      const arg = this._arguments[i];\r\n\r\n      if (arg.type === CommandArgumentType.coordinate && arg.location === CoordinateLocation.z) {\r\n        return arg;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  toString() {\r\n    let commandResult = this._commandName;\r\n\r\n    for (let i = 0; i < this._arguments.length; i++) {\r\n      commandResult += \" \";\r\n\r\n      commandResult += this._arguments[i].toString();\r\n    }\r\n\r\n    return commandResult;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Command from \"../minecraft/Command\";\r\nimport { ICommandResponseBody } from \"../minecraft/ICommandResponse\";\r\nimport CreatorTools, { CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport { ICustomToolResultItem } from \"./ICustomTool\";\r\n\r\nexport default class CommandRunner {\r\n  static async runCustomTool(creatorTools: CreatorTools, commandNumber: number) {\r\n    if (creatorTools.activeMinecraftState !== CreatorToolsMinecraftState.started) {\r\n      Log.debug(\"Cannot run command \" + commandNumber + \"; not connected to Minecraft.\");\r\n      return;\r\n    }\r\n\r\n    const cartoCommand = creatorTools.getCustomTool(commandNumber - 1);\r\n    let commandName = commandNumber + \"\";\r\n\r\n    if (cartoCommand.name !== undefined && cartoCommand.name.length > 0) {\r\n      commandName = cartoCommand.name;\r\n    }\r\n\r\n    const operId = await creatorTools.notifyOperationStarted(\"Running command \" + commandName);\r\n\r\n    if (cartoCommand.text !== undefined) {\r\n      await CommandRunner.runCommandText(creatorTools, cartoCommand.text);\r\n    } else {\r\n      // alert(\"This command is not defined, yet.\");\r\n    }\r\n\r\n    await creatorTools.notifyOperationEnded(operId, \"Command \" + commandName + \" complete.\");\r\n  }\r\n\r\n  static async runCommandText(creatorTools: CreatorTools, commandText: string) {\r\n    const commandItems = commandText.split(\"\\n\");\r\n\r\n    await this.runCommandList(creatorTools, commandItems);\r\n  }\r\n\r\n  static async runCommandList(creatorTools: CreatorTools, commandItems: string[]) {\r\n    const resultItems = [];\r\n\r\n    let lastStoredBlockX = -1;\r\n    let lastStoredBlockY = -1;\r\n    let lastStoredBlockZ = -1;\r\n\r\n    let firstRelativeX: number | undefined;\r\n    let firstRelativeY: number | undefined;\r\n    let firstRelativeZ: number | undefined;\r\n\r\n    let setFirstPosition = false;\r\n\r\n    for (let i = 0; i < commandItems.length; i++) {\r\n      let commandText = commandItems[i].trim();\r\n\r\n      if (commandText.length > 4 && !commandText.startsWith(\"#\")) {\r\n        if (!commandText.startsWith(\"/\")) {\r\n          commandText = \"/\" + commandText;\r\n        }\r\n\r\n        const commandStart = new Date();\r\n\r\n        const command = new Command(commandText);\r\n\r\n        // fix up a command to use absolute positions based on the position of our first command.\r\n        if (\r\n          command.hasRelativeOrLocalCoordinates &&\r\n          setFirstPosition &&\r\n          firstRelativeX !== undefined &&\r\n          firstRelativeY !== undefined &&\r\n          firstRelativeZ !== undefined\r\n        ) {\r\n          command.absolutizeCoordinates(\r\n            lastStoredBlockX - firstRelativeX,\r\n            lastStoredBlockY - firstRelativeY,\r\n            lastStoredBlockZ - firstRelativeZ\r\n          );\r\n        }\r\n\r\n        commandText = command.toString();\r\n\r\n        await creatorTools.notifyStatusUpdate(\"Running command '\" + commandText + \"'\");\r\n\r\n        const commandResult = await creatorTools.runCommand(commandText);\r\n        const result = commandResult?.data;\r\n\r\n        let resultData: ICommandResponseBody | undefined;\r\n\r\n        if (result !== undefined && result !== null && result.indexOf(\"{\") >= 0) {\r\n          try {\r\n            resultData = Utilities.parseJson(result) as ICommandResponseBody | undefined;\r\n          } catch (e) {\r\n            Log.debug(\"Failed to parse command result: \" + e);\r\n          }\r\n\r\n          if (resultData !== undefined) {\r\n            // store a position so that we can absolutize future commands\r\n            if (resultData.position !== undefined && !setFirstPosition) {\r\n              lastStoredBlockX = resultData.position.x;\r\n              lastStoredBlockY = resultData.position.y;\r\n              lastStoredBlockZ = resultData.position.z;\r\n\r\n              const argX = command.firstX;\r\n              if (argX !== undefined) {\r\n                firstRelativeX = argX.position;\r\n              }\r\n\r\n              const argY = command.firstY;\r\n              if (argY !== undefined) {\r\n                firstRelativeY = argY.position;\r\n              }\r\n\r\n              const argZ = command.firstZ;\r\n              if (argZ !== undefined) {\r\n                firstRelativeZ = argZ.position;\r\n              }\r\n\r\n              setFirstPosition = true;\r\n            }\r\n          }\r\n        }\r\n\r\n        const resultItem: ICustomToolResultItem = {\r\n          lineNumber: i,\r\n          dateTime: commandStart,\r\n          response: resultData,\r\n        };\r\n\r\n        resultItems.push(resultItem);\r\n      }\r\n    }\r\n\r\n    return resultItems;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { RemoteServerAccessLevel } from \"./ICreatorToolsData\";\r\n\r\nexport enum AuthenticationResult {\r\n  pending = 0,\r\n  success = 1,\r\n  failed = 2,\r\n  error = 3,\r\n}\r\n\r\nexport interface CreatorToolsServerAuthenticationResult {\r\n  token: string;\r\n  iv: string;\r\n  authTag?: string; // GCM authentication tag\r\n  permissionLevel: RemoteServerAccessLevel;\r\n  serverStatus: CreatorToolsServerStatus[];\r\n  /** Whether the Minecraft EULA has been accepted (required for BDS features) */\r\n  eulaAccepted?: boolean;\r\n}\r\n\r\n/**\r\n * Configuration for a server slot, returned once at connection time.\r\n * Contains settings that don't change frequently and shouldn't be\r\n * sent in every status update.\r\n */\r\nexport interface ISlotConfig {\r\n  /** Whether the script debugger is enabled on the server (listening on port) */\r\n  debuggerEnabled: boolean;\r\n  /** Whether debug stats streaming is enabled (server connects and streams to web console) */\r\n  debuggerStreamingEnabled: boolean;\r\n  /** Server version string */\r\n  serverVersion?: string;\r\n  /** Debug session connection state: 'disconnected', 'connecting', 'connected', 'error' */\r\n  debugConnectionState?: string;\r\n  /** Debug protocol version if connected */\r\n  debugProtocolVersion?: number;\r\n  /** Last debug stat tick received */\r\n  debugLastStatTick?: number;\r\n  /** Debug connection error message if any */\r\n  debugErrorMessage?: string;\r\n}\r\n\r\nexport interface CreatorToolsServerStatus {\r\n  id: number;\r\n  recentMessages?: { message: string; received: number }[];\r\n  status?: DedicatedServerStatus;\r\n  time: number;\r\n  /** Slot configuration - included in initial connection, may be omitted in subsequent updates */\r\n  slotConfig?: ISlotConfig;\r\n  /** World ID currently associated with this slot */\r\n  worldId?: string;\r\n}\r\n\r\nexport enum DedicatedServerStatus {\r\n  stopped = 1,\r\n  deploying = 2,\r\n  launching = 3,\r\n  starting = 4,\r\n  started = 5,\r\n}\r\n\r\nexport default class CreatorToolsAuthentication {\r\n  result: AuthenticationResult;\r\n  permissionLevel: RemoteServerAccessLevel;\r\n\r\n  constructor(result: AuthenticationResult, permissionLevel: RemoteServerAccessLevel) {\r\n    this.result = result;\r\n    this.permissionLevel = permissionLevel;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport { IEvent } from \"ste-events\";\r\nimport Project from \"./Project\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport { ISlotConfig } from \"./CreatorToolsAuthentication\";\r\n\r\nexport interface IMinecraftMessage {\r\n  message: string;\r\n  received: number;\r\n}\r\n\r\nexport enum PrepareAndStartResultType {\r\n  error = 0,\r\n  started = 1,\r\n}\r\n\r\nexport interface IPrepareAndStartResult {\r\n  worldName?: string;\r\n  type: PrepareAndStartResultType;\r\n  errorMessage?: string;\r\n}\r\n\r\nexport default interface IMinecraft {\r\n  state: CreatorToolsMinecraftState;\r\n  activeProject: Project | undefined;\r\n\r\n  canDeployFiles: boolean;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  /**\r\n   * Configuration metadata for the slot, received once at connection time.\r\n   * Contains flags like debuggerEnabled and debuggerStreamingEnabled that\r\n   * inform the UI about what features are available.\r\n   */\r\n  slotConfig?: ISlotConfig;\r\n\r\n  gameStateManager: GameStateManager | undefined;\r\n\r\n  runCommand(command: string): Promise<string | undefined>;\r\n  runActionSet(actionSet: IActionSetData): Promise<string | undefined>;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n\r\n  /**\r\n   * Storage representing the world content of the active Minecraft server.\r\n   * This includes the world folder, behavior packs, and resource packs.\r\n   * For remote connections, this is backed by HttpStorage pointing to /api/worldContent/{slot}/.\r\n   */\r\n  worldContentStorage: IStorage | undefined;\r\n\r\n  /**\r\n   * A Project wrapper around the worldContentStorage.\r\n   * Created lazily when first accessed. Provides structured access to the\r\n   * world content including behavior packs, resource packs, and world data.\r\n   */\r\n  worldProject: Project | undefined;\r\n\r\n  onRefreshed: IEvent<IMinecraft, CreatorToolsMinecraftState>;\r\n  onStateChanged: IEvent<IMinecraft, CreatorToolsMinecraftState>;\r\n  onWorldFolderReady: IEvent<IMinecraft, IFolder>;\r\n  onProjectFolderReady: IEvent<IMinecraft, IFolder>;\r\n  onMessage: IEvent<IMinecraft, IMinecraftMessage>;\r\n\r\n  canPrepare(): boolean;\r\n\r\n  prepare(force?: boolean): void;\r\n  prepareAndStart(push: MinecraftPush): Promise<IPrepareAndStartResult>;\r\n\r\n  initialize(): Promise<void>;\r\n\r\n  stop(): Promise<void>;\r\n  syncWithDeployment(): Promise<void>;\r\n\r\n  updateStatus(): Promise<CreatorToolsMinecraftState>;\r\n\r\n  processExternalMessage(command: string, data: string): void;\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport IPlayerTravelledEvent from \"./IPlayerTravelledEvent\";\r\nimport Location from \"./Location\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IItemInteractedEvent from \"./IItemInteractedEvent\";\r\nimport IBlockBrokenEvent from \"./IBlockBrokenEvent\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class GameStateManager {\r\n  _playerLocation: Location | undefined;\r\n  _playerLocationHistory: Location[] = [];\r\n  _playerLocationHistoryTimes: Date[] = [];\r\n\r\n  _itemInteractedLocationHistory: Location[] = [];\r\n  _itemInteractedLocationHistoryTimes: Date[] = [];\r\n\r\n  _playerMajorLocationHistory: Location[] = [];\r\n  _playerMajorLocationHistoryTimes: Date[] = [];\r\n  curTick = 0;\r\n  pendingLocationChangeProcess = -1;\r\n  _lastPlayerTravelledMessage: IPlayerTravelledEvent | undefined;\r\n\r\n  _eventsSeen: { [name: string]: boolean } = {};\r\n\r\n  private _onPlayerTravelled = new EventDispatcher<GameStateManager, IPlayerTravelledEvent>();\r\n  private _onItemInteracted = new EventDispatcher<GameStateManager, IItemInteractedEvent>();\r\n  private _onBlockBroken = new EventDispatcher<GameStateManager, IBlockBrokenEvent>();\r\n  private _onPlayerMajorTravelled = new EventDispatcher<GameStateManager, IPlayerTravelledEvent>();\r\n\r\n  public get playerMajorLocationHistory() {\r\n    return this._playerMajorLocationHistory;\r\n  }\r\n\r\n  public get playerLocationHistory() {\r\n    return this._playerLocationHistory;\r\n  }\r\n\r\n  public get itemInteractedHistory() {\r\n    return this._itemInteractedLocationHistory;\r\n  }\r\n\r\n  public get playerLocation() {\r\n    return this._playerLocation;\r\n  }\r\n\r\n  public get onPlayerTravelled() {\r\n    return this._onPlayerTravelled.asEvent();\r\n  }\r\n\r\n  public get onPlayerMajorTravelled() {\r\n    return this._onPlayerMajorTravelled.asEvent();\r\n  }\r\n\r\n  public get onItemInteracted() {\r\n    return this._onItemInteracted.asEvent();\r\n  }\r\n\r\n  public get onBlockBroken() {\r\n    return this._onBlockBroken.asEvent();\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._tick = this._tick.bind(this);\r\n\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\") {\r\n      // @ts-ignore\r\n      window.setInterval(this._tick, 50);\r\n    }\r\n  }\r\n\r\n  _tick() {\r\n    const thisTick = this.curTick++;\r\n\r\n    // record the last stop if the player stops moving for 3 seconds.\r\n    if (this.pendingLocationChangeProcess === thisTick && this._lastPlayerTravelledMessage) {\r\n      this.pendingLocationChangeProcess = -1;\r\n\r\n      const location = this._playerLocationHistory[this._playerLocationHistory.length - 1];\r\n      const date = this._playerMajorLocationHistoryTimes[this._playerMajorLocationHistoryTimes.length - 1];\r\n\r\n      this._playerMajorLocationHistory.push(location);\r\n      this._playerMajorLocationHistoryTimes.push(date);\r\n\r\n      this._onPlayerMajorTravelled.dispatch(this, this._lastPlayerTravelledMessage);\r\n    }\r\n  }\r\n\r\n  handleEvent(message: any) {\r\n    if (!message.header) {\r\n      return;\r\n    }\r\n\r\n    const eventId = message.eventId;\r\n\r\n    if (eventId) {\r\n      if (this._eventsSeen[eventId] === true) {\r\n        return;\r\n      }\r\n\r\n      this._eventsSeen[eventId] = true;\r\n    }\r\n\r\n    const eventName = message.header.eventName;\r\n\r\n    if (!eventName) {\r\n      return;\r\n    }\r\n\r\n    switch (eventName) {\r\n      case \"BlockBroken\":\r\n        const blockBrokenMessage = message as IBlockBrokenEvent;\r\n\r\n        this._onBlockBroken.dispatch(this, blockBrokenMessage);\r\n        break;\r\n      case \"ItemInteracted\":\r\n        const itemInteractedMessage = message as IItemInteractedEvent;\r\n\r\n        const interactedEventTime = new Date();\r\n        let itemInteractedLocation = new Location(0, 0, 0);\r\n\r\n        if (this._lastPlayerTravelledMessage) {\r\n          itemInteractedLocation = new Location(\r\n            this._lastPlayerTravelledMessage.body.player.position.x,\r\n            this._lastPlayerTravelledMessage.body.player.position.y,\r\n            this._lastPlayerTravelledMessage.body.player.position.z\r\n          );\r\n        }\r\n\r\n        this._itemInteractedLocationHistory.push(itemInteractedLocation);\r\n        this._itemInteractedLocationHistoryTimes.push(interactedEventTime);\r\n\r\n        this._onItemInteracted.dispatch(this, itemInteractedMessage);\r\n        Log.verbose(\"Item was interacted\");\r\n\r\n        break;\r\n      case \"PlayerTravelled\":\r\n        const playerMessage = message as IPlayerTravelledEvent;\r\n\r\n        const location = new Location(\r\n          playerMessage.body.player.position.x,\r\n          playerMessage.body.player.position.y,\r\n          playerMessage.body.player.position.z\r\n        );\r\n\r\n        const eventTime = new Date();\r\n        this._lastPlayerTravelledMessage = playerMessage;\r\n\r\n        this._playerLocationHistory.push(location);\r\n        this._playerLocationHistoryTimes.push(eventTime);\r\n\r\n        this._playerLocation = location;\r\n\r\n        this._onPlayerTravelled.dispatch(this, playerMessage);\r\n\r\n        let pushMajorLocationChange = false;\r\n\r\n        if (this._playerMajorLocationHistory.length === 0) {\r\n          pushMajorLocationChange = true;\r\n        } else {\r\n          const lastMajorLocation = this._playerMajorLocationHistory[this._playerMajorLocationHistory.length - 1];\r\n\r\n          if (location.distanceTo(lastMajorLocation) > 2) {\r\n            pushMajorLocationChange = true;\r\n          }\r\n        }\r\n\r\n        if (pushMajorLocationChange) {\r\n          this._playerMajorLocationHistory.push(location);\r\n          this._playerMajorLocationHistoryTimes.push(eventTime);\r\n\r\n          this._onPlayerMajorTravelled.dispatch(this, playerMessage);\r\n        } else {\r\n          // record the last stop if the player stops moving for 3 seconds.\r\n          this.pendingLocationChangeProcess = this.curTick + 60;\r\n        }\r\n\r\n        break;\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport {\r\n  CreatorToolsServerAuthenticationResult,\r\n  CreatorToolsServerStatus,\r\n  DedicatedServerStatus,\r\n  ISlotConfig,\r\n} from \"./CreatorToolsAuthentication\";\r\nimport IMinecraft, { IMinecraftMessage, IPrepareAndStartResult, PrepareAndStartResultType } from \"./IMinecraft\";\r\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Project from \"./Project\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport HttpStorage from \"../storage/HttpStorage\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport ProjectExporter from \"./ProjectExporter\";\r\nimport ProjectAutogeneration from \"./ProjectAutogeneration\";\r\nimport { StatusTopic } from \"./Status\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\n\r\n/**\r\n * WebSocket notification message format from the server.\r\n */\r\ninterface IStatusUpdateNotification {\r\n  header: {\r\n    version: number;\r\n    requestId: string;\r\n    messageType: string;\r\n    messagePurpose: string;\r\n  };\r\n  body: {\r\n    eventName: string;\r\n    timestamp: number;\r\n    slot?: number;\r\n    status?: number;\r\n    recentMessages?: Array<{\r\n      message: string;\r\n      received: number;\r\n      type?: number;\r\n    }>;\r\n  };\r\n}\r\n\r\nexport default class RemoteMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n  public state: CreatorToolsMinecraftState;\r\n  private _project: Project | undefined;\r\n  private _lastFullPush: ZipStorage | undefined;\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _gameStateManager: GameStateManager;\r\n\r\n  private _nextPollInterval = 500;\r\n  private _pollIntervalCount = 0;\r\n\r\n  // WebSocket for status notifications\r\n  private _webSocket: WebSocket | null = null;\r\n  private _useWebSocket = true; // Try WebSocket first, fall back to polling\r\n  private _wsReconnectTimer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  /**\r\n   * Configuration metadata for the slot, received once at connection time.\r\n   * Contains flags like debuggerEnabled and debuggerStreamingEnabled that\r\n   * inform the UI about what features are available.\r\n   */\r\n  slotConfig?: ISlotConfig;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  /**\r\n   * Map of connected player names to their info (position, xuid, etc.)\r\n   * Updated when playerJoined/playerLeft/playerMoved events are received via WebSocket.\r\n   */\r\n  private _connectedPlayers: Map<\r\n    string,\r\n    { name: string; xuid?: string; position?: { x: number; y: number; z: number }; dimension?: string }\r\n  > = new Map();\r\n\r\n  private _onPlayersChanged = new EventDispatcher<IMinecraft, string[]>();\r\n\r\n  private messagesReceived: { [received: number]: IMinecraftMessage } = {};\r\n\r\n  private _onWorldStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n  private _onWorldContentChanged = new EventDispatcher<\r\n    IMinecraft,\r\n    { eventName: string; category: string; path: string; slot: number }\r\n  >();\r\n\r\n  /**\r\n   * Event fired when the MCT server sends a shutdown notification.\r\n   * This indicates the entire server is shutting down (not just a BDS instance).\r\n   * Args: { reason: string, graceful: boolean }\r\n   */\r\n  private _onServerShutdown = new EventDispatcher<IMinecraft, { reason: string; graceful: boolean }>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldStorageReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectStorageReady.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when world content files change on the server.\r\n   * This allows the WorldView component to refresh its data.\r\n   */\r\n  public get onWorldContentChanged() {\r\n    return this._onWorldContentChanged.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when the connected players list changes (join/leave).\r\n   * Returns array of player names currently connected.\r\n   */\r\n  public get onPlayersChanged() {\r\n    return this._onPlayersChanged.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Event fired when the MCT server is shutting down.\r\n   * Subscribers should show appropriate UI feedback (e.g., banner message)\r\n   * and understand the connection will be lost.\r\n   */\r\n  public get onServerShutdown() {\r\n    return this._onServerShutdown.asEvent();\r\n  }\r\n\r\n  /**\r\n   * Get array of currently connected player names.\r\n   */\r\n  public get connectedPlayerNames(): string[] {\r\n    return Array.from(this._connectedPlayers.keys());\r\n  }\r\n\r\n  /**\r\n   * Get detailed info for all connected players.\r\n   */\r\n  public get connectedPlayers(): Array<{\r\n    name: string;\r\n    xuid?: string;\r\n    position?: { x: number; y: number; z: number };\r\n    dimension?: string;\r\n  }> {\r\n    return Array.from(this._connectedPlayers.values());\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return true;\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this.state = CreatorToolsMinecraftState.none;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.doHeartbeat = this.doHeartbeat.bind(this);\r\n    this._handleWebSocketMessage = this._handleWebSocketMessage.bind(this);\r\n  }\r\n\r\n  async updateStatus() {\r\n    return this.state;\r\n  }\r\n\r\n  setState(newState: CreatorToolsMinecraftState) {\r\n    if (this.state === newState) {\r\n      return;\r\n    }\r\n\r\n    this.state = newState;\r\n    this._onStateChanged.dispatch(this, this.state);\r\n  }\r\n\r\n  processExternalMessage(command: string, data: string): void {\r\n    switch (command.toLowerCase()) {\r\n      case \"wsevent\":\r\n        try {\r\n          const eventObj = JSON.parse(data);\r\n          this._gameStateManager.handleEvent(eventObj);\r\n        } catch (e) {\r\n          Log.verbose(\"Failed to parse message: \" + e);\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  async prepare(force?: boolean) {}\r\n\r\n  /**\r\n   * Initialize the worldContentStorage with an HttpStorage pointing to the server's\r\n   * /api/worldContent/{slot}/ endpoint. This provides access to the server's\r\n   * behavior_packs, resource_packs, and world folders.\r\n   *\r\n   * Also establishes a WebSocket connection for real-time file change notifications.\r\n   */\r\n  private async initWorldContentStorage() {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const slot = this._creatorTools.remoteServerPort ?? 0;\r\n\r\n    if (!baseUrl) {\r\n      Log.debug(\"Cannot initialize worldContentStorage: no remote server URL\");\r\n      return;\r\n    }\r\n\r\n    // Create HttpStorage pointing to /api/worldContent/{slot}/\r\n    // Note: baseUrl already ends with slash from fullRemoteServerUrl\r\n    const worldContentUrl = `${baseUrl}api/worldContent/${slot}/`;\r\n    const storage = new HttpStorage(worldContentUrl);\r\n\r\n    // Set slot so UI components can make slot-specific API calls\r\n    storage.slot = slot;\r\n\r\n    // Set auth token so requests are authenticated\r\n    if (this._creatorTools.remoteServerAuthToken) {\r\n      storage.authToken = this._creatorTools.remoteServerAuthToken;\r\n    }\r\n\r\n    this.worldContentStorage = storage;\r\n\r\n    // Connect to the WebSocket notification server for real-time file updates\r\n    // This allows WorldView to receive updates when files change on the server\r\n    try {\r\n      // Derive WebSocket URL from the base URL\r\n      const wsBaseUrl = baseUrl.replace(/^http/, \"ws\");\r\n      const wsUrl = `${wsBaseUrl}ws/notifications`;\r\n\r\n      Log.message(`[RemoteMinecraft] Connecting HttpStorage WebSocket to ${wsUrl}`);\r\n      await storage.connect(wsUrl, this._creatorTools.remoteServerAuthToken);\r\n\r\n      // Subscribe to file change events for this slot\r\n      await storage.subscribe([\"fileAdded\", \"fileChanged\", \"fileRemoved\", \"folderChanged\"], slot);\r\n\r\n      Log.message(`[RemoteMinecraft] HttpStorage WebSocket connected and subscribed for slot ${slot}`);\r\n    } catch (e) {\r\n      Log.debug(\"Failed to connect HttpStorage WebSocket (falling back to polling): \" + e);\r\n      // File updates will still work but won't be real-time\r\n    }\r\n\r\n    // Also initialize the worldFolder for WorldView to use\r\n    await this.initWorldFolder();\r\n  }\r\n\r\n  /**\r\n   * Initialize the worldFolder from worldContentStorage for WorldDisplay rendering.\r\n   * The world folder is at /world/ within the worldContentStorage.\r\n   */\r\n  private async initWorldFolder() {\r\n    if (!this.worldContentStorage) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Get the world folder from worldContentStorage\r\n      // The server exposes /api/worldContent/{slot}/world/ which maps to the active world\r\n      this.worldFolder = this.worldContentStorage.rootFolder.ensureFolder(\"world\");\r\n      await this.worldFolder.load();\r\n\r\n      // Dispatch the event so WorldView knows the folder is ready\r\n      this._onWorldStorageReady.dispatch(this, this.worldFolder);\r\n    } catch (e) {\r\n      Log.debug(\"Error initializing worldFolder: \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Connect to the WebSocket notification endpoint for real-time status updates.\r\n   * Falls back to polling if WebSocket connection fails.\r\n   */\r\n  private async connectWebSocket(): Promise<boolean> {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const token = this._creatorTools.remoteServerAuthToken;\r\n\r\n    if (!baseUrl || !token) {\r\n      Log.debug(\"Cannot connect WebSocket: missing URL or token\");\r\n      return false;\r\n    }\r\n\r\n    try {\r\n      // Derive WebSocket URL from baseUrl\r\n      const urlObj = new URL(baseUrl);\r\n      const wsProtocol = urlObj.protocol === \"https:\" ? \"wss:\" : \"ws:\";\r\n      const wsUrl = `${wsProtocol}//${urlObj.host}/ws/notifications?token=${encodeURIComponent(token)}`;\r\n\r\n      this._webSocket = new WebSocket(wsUrl);\r\n\r\n      return new Promise<boolean>((resolve) => {\r\n        if (!this._webSocket) {\r\n          resolve(false);\r\n          return;\r\n        }\r\n\r\n        this._webSocket.onopen = () => {\r\n          Log.verbose(\"WebSocket connected for status updates\");\r\n\r\n          // Subscribe to statusUpdate events for this slot\r\n          const slot = this._creatorTools.remoteServerPort ?? 0;\r\n          const subscribeMessage = {\r\n            header: {\r\n              version: 1,\r\n              requestId: Date.now().toString(),\r\n              messageType: \"subscriptionRequest\",\r\n              messagePurpose: \"subscribe\",\r\n            },\r\n            body: {\r\n              eventNames: [\r\n                \"statusUpdate\",\r\n                \"playerJoined\",\r\n                \"playerLeft\",\r\n                \"serverStateChanged\",\r\n                \"playerMoved\",\r\n                \"gameEvent\",\r\n              ],\r\n              slot: slot,\r\n            },\r\n          };\r\n          this._webSocket?.send(JSON.stringify(subscribeMessage));\r\n\r\n          resolve(true);\r\n        };\r\n\r\n        this._webSocket.onclose = () => {\r\n          Log.verbose(\"WebSocket disconnected, falling back to polling\");\r\n          this._webSocket = null;\r\n\r\n          // If we were using WebSocket, try to reconnect after a delay\r\n          if (this._useWebSocket && !this._wsReconnectTimer) {\r\n            this._wsReconnectTimer = setTimeout(() => {\r\n              this._wsReconnectTimer = undefined;\r\n              if (this._useWebSocket && this.state !== CreatorToolsMinecraftState.disconnected) {\r\n                this.connectWebSocket().catch(() => {\r\n                  // Fall back to polling if reconnection fails\r\n                  this.startPolling();\r\n                });\r\n              }\r\n            }, 5000);\r\n          } else {\r\n            // Fall back to polling\r\n            this.startPolling();\r\n          }\r\n        };\r\n\r\n        this._webSocket.onerror = () => {\r\n          Log.debug(\"WebSocket error, will fall back to polling\");\r\n          resolve(false);\r\n        };\r\n\r\n        this._webSocket.onmessage = (event) => {\r\n          this._handleWebSocketMessage(event.data);\r\n        };\r\n\r\n        // Timeout if connection doesn't establish quickly\r\n        setTimeout(() => {\r\n          if (this._webSocket?.readyState !== WebSocket.OPEN) {\r\n            resolve(false);\r\n          }\r\n        }, 5000);\r\n      });\r\n    } catch (e) {\r\n      Log.debug(\"Failed to connect WebSocket: \" + e);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle incoming WebSocket messages for status updates.\r\n   */\r\n  private _handleWebSocketMessage(data: string) {\r\n    try {\r\n      const notification = JSON.parse(data) as IStatusUpdateNotification;\r\n\r\n      if (notification.body?.eventName === \"statusUpdate\") {\r\n        // Process the status update\r\n        const slot = notification.body.slot ?? 0;\r\n        const status: CreatorToolsServerStatus = {\r\n          id: slot,\r\n          time: notification.body.timestamp,\r\n          status: notification.body.status,\r\n          recentMessages: notification.body.recentMessages?.map((msg) => ({\r\n            message: msg.message,\r\n            received: msg.received,\r\n          })),\r\n        };\r\n        this.processServerStatus(status);\r\n      } else if (notification.body?.eventName === \"playerJoined\") {\r\n        // Track player connection\r\n        const joinBody = notification.body as { playerName?: string; xuid?: string };\r\n        if (joinBody.playerName) {\r\n          this._connectedPlayers.set(joinBody.playerName, {\r\n            name: joinBody.playerName,\r\n            xuid: joinBody.xuid,\r\n          });\r\n          Log.message(`Player joined: ${joinBody.playerName}`);\r\n          this._onPlayersChanged.dispatch(this, this.connectedPlayerNames);\r\n        }\r\n      } else if (notification.body?.eventName === \"playerLeft\") {\r\n        // Remove player from tracking\r\n        const leaveBody = notification.body as { playerName?: string };\r\n        if (leaveBody.playerName) {\r\n          this._connectedPlayers.delete(leaveBody.playerName);\r\n          Log.message(`Player left: ${leaveBody.playerName}`);\r\n          this._onPlayersChanged.dispatch(this, this.connectedPlayerNames);\r\n        }\r\n      } else if (notification.body?.eventName === \"playerMoved\") {\r\n        // Handle player movement updates\r\n        const moveBody = notification.body as {\r\n          playerName?: string;\r\n          position?: { x: number; y: number; z: number };\r\n          dimension?: string;\r\n        };\r\n        if (moveBody.playerName && moveBody.position) {\r\n          // Update player position in our tracking map\r\n          const existing = this._connectedPlayers.get(moveBody.playerName);\r\n          this._connectedPlayers.set(moveBody.playerName, {\r\n            name: moveBody.playerName,\r\n            xuid: existing?.xuid,\r\n            position: moveBody.position,\r\n            dimension: moveBody.dimension,\r\n          });\r\n        }\r\n        if (moveBody.position) {\r\n          // Convert to a PlayerTravelled-style event for GameStateManager\r\n          const playerTravelledEvent = {\r\n            eventId: `move_${Date.now()}`,\r\n            header: {\r\n              eventName: \"PlayerTravelled\",\r\n              purpose: \"event\",\r\n              version: 1,\r\n            },\r\n            body: {\r\n              isUnderwater: false,\r\n              metersTravelled: 0,\r\n              newBiome: 0,\r\n              player: {\r\n                color: \"\",\r\n                dimension: 0,\r\n                id: 0,\r\n                name: moveBody.playerName ?? \"unknown\",\r\n                position: moveBody.position,\r\n                type: \"player\",\r\n                variant: 0,\r\n                yRot: 0,\r\n              },\r\n              travelMethod: 0,\r\n            },\r\n          };\r\n          this._gameStateManager.handleEvent(playerTravelledEvent);\r\n        }\r\n      } else if (notification.body?.eventName === \"gameEvent\") {\r\n        // Handle generic game events from Minecraft\r\n        const gameEventBody = notification.body as { data?: object };\r\n        if (gameEventBody.data) {\r\n          this._gameStateManager.handleEvent(gameEventBody.data);\r\n        }\r\n      } else if (\r\n        notification.body?.eventName === \"fileAdded\" ||\r\n        notification.body?.eventName === \"fileChanged\" ||\r\n        notification.body?.eventName === \"fileRemoved\" ||\r\n        notification.body?.eventName === \"folderChanged\"\r\n      ) {\r\n        // Handle storage change notifications for world content\r\n        const changeBody = notification.body as {\r\n          eventName: string;\r\n          slot?: number;\r\n          category?: string;\r\n          path?: string;\r\n        };\r\n        Log.message(\r\n          `[RemoteMinecraft] Storage change notification: ${changeBody.eventName} ${changeBody.category}${changeBody.path} (slot ${changeBody.slot})`\r\n        );\r\n\r\n        // Dispatch the world content changed event\r\n        this._onWorldContentChanged.dispatch(this, {\r\n          eventName: changeBody.eventName,\r\n          category: changeBody.category ?? \"\",\r\n          path: changeBody.path ?? \"\",\r\n          slot: changeBody.slot ?? 0,\r\n        });\r\n      } else if (notification.body?.eventName === \"serverShutdown\") {\r\n        // Handle server shutdown notification\r\n        const shutdownBody = notification.body as { reason?: string; graceful?: boolean };\r\n        const reason = shutdownBody.reason || \"Server shutting down\";\r\n        const graceful = shutdownBody.graceful !== false; // Default to true\r\n\r\n        // Use notifyStatusUpdate for more visible user notification\r\n        const shutdownMessage = `Server shutdown: ${reason}`;\r\n        Log.message(`[RemoteMinecraft] ${shutdownMessage}`);\r\n        this._creatorTools.notifyStatusUpdate(shutdownMessage, StatusTopic.general);\r\n\r\n        // Disable WebSocket reconnection since the server is intentionally going away\r\n        this._useWebSocket = false;\r\n\r\n        // Dispatch the shutdown event for UI to handle\r\n        this._onServerShutdown.dispatch(this, { reason, graceful });\r\n      }\r\n    } catch (e) {\r\n      Log.debug(\"Error handling WebSocket message: \" + e);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Disconnect WebSocket and clean up.\r\n   */\r\n  private disconnectWebSocket() {\r\n    if (this._wsReconnectTimer) {\r\n      clearTimeout(this._wsReconnectTimer);\r\n      this._wsReconnectTimer = undefined;\r\n    }\r\n\r\n    if (this._webSocket) {\r\n      this._webSocket.close();\r\n      this._webSocket = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Start polling for status updates (fallback when WebSocket is unavailable).\r\n   */\r\n  private startPolling() {\r\n    if (this._nextPollInterval < 0) {\r\n      return; // Polling disabled\r\n    }\r\n\r\n    // @ts-ignore\r\n    window.setTimeout(this.doHeartbeat, this._nextPollInterval);\r\n  }\r\n\r\n  /**\r\n   * Lazily create a Project wrapper for the worldContentStorage.\r\n   * This allows treating the server's world content as a Project.\r\n   */\r\n  async ensureWorldProject(): Promise<Project | undefined> {\r\n    if (this.worldProject) {\r\n      return this.worldProject;\r\n    }\r\n\r\n    if (!this.worldContentStorage) {\r\n      await this.initWorldContentStorage();\r\n    }\r\n\r\n    if (!this.worldContentStorage) {\r\n      return undefined;\r\n    }\r\n\r\n    // Create a Project that wraps the world content storage\r\n    this.worldProject = new Project(this._creatorTools, \"World Content\", null);\r\n    this.worldProject.setProjectFolder(this.worldContentStorage.rootFolder);\r\n\r\n    return this.worldProject;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush): Promise<IPrepareAndStartResult> {\r\n    if (!this._creatorTools.remoteServerAuthToken) {\r\n      Log.debug(\r\n        \"Remote server auth token is not set. Please connect to a remote server or select a different server mode.\"\r\n      );\r\n      return {\r\n        type: PrepareAndStartResultType.error,\r\n        errorMessage:\r\n          \"No remote server authentication token is available. Please connect to a remote server first, or switch to a different server mode (e.g., Host Minecraft Server).\",\r\n      };\r\n    }\r\n\r\n    this.setState(CreatorToolsMinecraftState.preparing);\r\n\r\n    if (!push.project) {\r\n      return {\r\n        type: PrepareAndStartResultType.started,\r\n      };\r\n    }\r\n\r\n    await ProjectAutogeneration.updateProjectAutogeneration(push.project, false);\r\n\r\n    const zipStorage = new ZipStorage();\r\n\r\n    //await StorageUtilities.syncFolderTo(carto.deploymentStorage.rootFolder, zipStorage.rootFolder, true, true, false);\r\n\r\n    await ProjectExporter.deployProject(this._creatorTools, push.project, zipStorage.rootFolder);\r\n\r\n    await zipStorage.rootFolder.saveAll();\r\n\r\n    // consider doing a diff from the last push.\r\n    if (this._lastFullPush) {\r\n      const differenceSet = await StorageUtilities.getDifferences(\r\n        this._lastFullPush.rootFolder,\r\n        zipStorage.rootFolder,\r\n        true,\r\n        false\r\n      );\r\n\r\n      this._lastFullPush = zipStorage;\r\n\r\n      // we don't have to do anything here. (may need a force flag here at some point)\r\n      if (differenceSet.fileDifferences.length === 0 && differenceSet.folderDifferences.length === 0) {\r\n        Log.message(\"No changes detected in this update. No push is being made.\");\r\n        return {\r\n          type: PrepareAndStartResultType.error,\r\n        };\r\n      }\r\n\r\n      if (!differenceSet.getHasDeletions()) {\r\n        const diffUpdate = new ZipStorage();\r\n\r\n        await differenceSet.copyFileUpdatesAndAdds(diffUpdate);\r\n        await diffUpdate.rootFolder.saveAll();\r\n\r\n        const diffBinary = await diffUpdate.generateBlobAsync();\r\n\r\n        this._creatorTools.notifyStatusUpdate(\"Uploading changed files to \" + this._creatorTools.fullRemoteServerUrl);\r\n\r\n        const isReloadable = MinecraftUtilities.isReloadableSetOfChanges(differenceSet);\r\n\r\n        try {\r\n          await axios({\r\n            method: \"patch\",\r\n            url: this.getBaseApiUrl() + \"upload/\", //API url\r\n            headers: {\r\n              Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n              \"Content-Type\": \"application/zip\",\r\n              \"mcttools-reloadable\": isReloadable,\r\n            },\r\n            data: diffBinary, // Buffer\r\n            maxContentLength: Infinity,\r\n            maxBodyLength: Infinity,\r\n          });\r\n        } catch (error) {\r\n          const eulaResult = this._handleUploadError(error);\r\n          if (eulaResult) {\r\n            return eulaResult;\r\n          }\r\n          throw error;\r\n        }\r\n\r\n        this._creatorTools.notifyStatusUpdate(\"Upload complete\");\r\n        return {\r\n          type: PrepareAndStartResultType.started,\r\n        };\r\n      }\r\n    }\r\n\r\n    this._creatorTools.notifyStatusUpdate(\"Files created in zip. Packaging\");\r\n\r\n    const zipBinary = await zipStorage.generateBlobAsync();\r\n\r\n    this._lastFullPush = zipStorage;\r\n\r\n    this._creatorTools.notifyStatusUpdate(\"Uploading to \" + this._creatorTools.fullRemoteServerUrl);\r\n\r\n    try {\r\n      await axios({\r\n        method: \"post\",\r\n        url: this.getBaseApiUrl() + \"upload/\", //API url\r\n        headers: {\r\n          Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n          \"Content-Type\": \"application/zip\",\r\n        },\r\n        data: zipBinary, // Buffer\r\n        maxContentLength: Infinity,\r\n        maxBodyLength: Infinity,\r\n      });\r\n    } catch (error) {\r\n      const eulaResult = this._handleUploadError(error);\r\n      if (eulaResult) {\r\n        return eulaResult;\r\n      }\r\n      throw error;\r\n    }\r\n\r\n    this.setState(CreatorToolsMinecraftState.prepared);\r\n\r\n    this._creatorTools.notifyStatusUpdate(\"Upload complete\");\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Handle upload errors, specifically the EULA_REQUIRED 451 error.\r\n   * Returns an error result if EULA is required, otherwise returns undefined\r\n   * to let the caller re-throw the error.\r\n   */\r\n  private _handleUploadError(error: unknown): IPrepareAndStartResult | undefined {\r\n    const axiosError = error as AxiosError;\r\n    if (axiosError.response?.status === 451) {\r\n      // HTTP 451 \"Unavailable For Legal Reasons\" - EULA not accepted\r\n      const responseData = axiosError.response.data as { eulaRequired?: boolean; message?: string };\r\n      if (responseData?.eulaRequired) {\r\n        // Set the flag so the UI shows the EulaAcceptancePanel\r\n        this._creatorTools.remoteServerEulaAccepted = false;\r\n        this._creatorTools.notifyStatusUpdate(\r\n          \"EULA acceptance required. Please accept the Minecraft EULA to deploy content.\"\r\n        );\r\n        this.setState(CreatorToolsMinecraftState.initialized);\r\n        return {\r\n          type: PrepareAndStartResultType.error,\r\n          errorMessage: responseData.message || \"EULA acceptance required\",\r\n        };\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<any> {\r\n    return undefined;\r\n  }\r\n\r\n  async runCommand(command: string) {\r\n    if (!this._creatorTools.remoteServerAuthToken) {\r\n      Log.throwUnexpectedUndefined(\"RC\");\r\n      return;\r\n    }\r\n\r\n    this.resetInterval();\r\n\r\n    const result = await axios({\r\n      method: \"post\",\r\n      url: this.getBaseApiUrl() + \"command/\", //API url\r\n      headers: {\r\n        Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n      },\r\n      data: command,\r\n      maxContentLength: Infinity,\r\n      maxBodyLength: Infinity,\r\n    });\r\n\r\n    return result.data as string;\r\n  }\r\n\r\n  getBaseApiUrl(): string {\r\n    if (!this._creatorTools.fullRemoteServerUrl) {\r\n      Log.throwUnexpectedUndefined(\"GBAU\");\r\n      return \"\";\r\n    }\r\n\r\n    let port = this._creatorTools.remoteServerPort;\r\n\r\n    if (!port) {\r\n      port = 0;\r\n    }\r\n\r\n    // Note: fullRemoteServerUrl already ends with slash\r\n    return this._creatorTools.fullRemoteServerUrl + \"api/\" + port + \"/\";\r\n  }\r\n\r\n  async initSession(slot: number) {}\r\n\r\n  async syncWithDeployment() {}\r\n\r\n  async stop() {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const token = this._creatorTools.remoteServerAuthToken;\r\n    const slot = this._creatorTools.remoteServerPort ?? 0;\r\n\r\n    if (!baseUrl || !token) {\r\n      Log.debug(\"Cannot stop: not connected to remote server\");\r\n      return;\r\n    }\r\n\r\n    try {\r\n      Log.message(\"Stopping remote server...\");\r\n      this.setState(CreatorToolsMinecraftState.stopping);\r\n\r\n      await axios({\r\n        method: \"POST\",\r\n        url: `${baseUrl}api/${slot}/stop`,\r\n        headers: {\r\n          Authorization: \"Bearer \" + token,\r\n        },\r\n      });\r\n\r\n      this.setState(CreatorToolsMinecraftState.stopped);\r\n      Log.message(\"Remote server stopped\");\r\n    } catch (e: any) {\r\n      Log.error(\"Failed to stop remote server: \" + (e.message || e));\r\n      this.errorMessage = \"Failed to stop server: \" + (e.message || e);\r\n      // Reset to stopped state so the UI doesn't get stuck on \"(stopping...)\"\r\n      // If the stop request failed (e.g., 404 because no server exists), the server\r\n      // is effectively stopped from the client's perspective.\r\n      this.setState(CreatorToolsMinecraftState.stopped);\r\n    }\r\n  }\r\n\r\n  async restart() {\r\n    const baseUrl = this._creatorTools.fullRemoteServerUrl;\r\n    const token = this._creatorTools.remoteServerAuthToken;\r\n    const slot = this._creatorTools.remoteServerPort ?? 0;\r\n\r\n    if (!baseUrl || !token) {\r\n      Log.debug(\"Cannot restart: not connected to remote server\");\r\n      return;\r\n    }\r\n\r\n    try {\r\n      Log.message(\"Restarting remote server...\");\r\n      this.setState(CreatorToolsMinecraftState.stopping);\r\n\r\n      await axios({\r\n        method: \"POST\",\r\n        url: `${baseUrl}api/${slot}/restart`,\r\n        headers: {\r\n          Authorization: \"Bearer \" + token,\r\n        },\r\n      });\r\n\r\n      // Server will report its new state via WebSocket\r\n      Log.message(\"Remote server restart initiated\");\r\n    } catch (e: any) {\r\n      Log.error(\"Failed to restart remote server: \" + (e.message || e));\r\n      this.errorMessage = \"Failed to restart server\";\r\n    }\r\n  }\r\n\r\n  async processServerStatus(newStatus: CreatorToolsServerStatus) {\r\n    let wasActive = false;\r\n\r\n    // Store slot config if provided and not already set (one-time at connection)\r\n    if (newStatus.slotConfig && !this.slotConfig) {\r\n      this.slotConfig = newStatus.slotConfig;\r\n      Log.verbose(\r\n        `Received slot config: debuggerEnabled=${newStatus.slotConfig.debuggerEnabled}, debuggerStreamingEnabled=${newStatus.slotConfig.debuggerStreamingEnabled}`\r\n      );\r\n    }\r\n\r\n    if (newStatus.status) {\r\n      switch (newStatus.status) {\r\n        case DedicatedServerStatus.deploying:\r\n          if (this.state !== CreatorToolsMinecraftState.preparing) {\r\n            this.setState(CreatorToolsMinecraftState.preparing);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.launching:\r\n          if (this.state !== CreatorToolsMinecraftState.starting) {\r\n            this.setState(CreatorToolsMinecraftState.starting);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.starting:\r\n          if (this.state !== CreatorToolsMinecraftState.starting) {\r\n            this.setState(CreatorToolsMinecraftState.starting);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.started:\r\n          if (this.state !== CreatorToolsMinecraftState.started) {\r\n            this.setState(CreatorToolsMinecraftState.started);\r\n\r\n            if (!this._creatorTools.successfullyConnectedToRemoteMinecraft) {\r\n              this._creatorTools.successfullyConnectedToRemoteMinecraft = true;\r\n              this._creatorTools.save();\r\n            }\r\n\r\n            // Initialize worldFolder when server has started so WorldView can render the map\r\n            if (!this.worldFolder) {\r\n              await this.initWorldContentStorage();\r\n            }\r\n\r\n            wasActive = true;\r\n          }\r\n          break;\r\n        case DedicatedServerStatus.stopped:\r\n          if (this.state !== CreatorToolsMinecraftState.stopped) {\r\n            this.setState(CreatorToolsMinecraftState.stopped);\r\n            wasActive = true;\r\n          }\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (newStatus.recentMessages) {\r\n      for (const recentMessage of newStatus.recentMessages) {\r\n        if (!this.messagesReceived[recentMessage.received]) {\r\n          this.messagesReceived[recentMessage.received] = recentMessage;\r\n\r\n          this._creatorTools.notifyStatusUpdate(recentMessage.message, StatusTopic.minecraft);\r\n\r\n          this._onMessage.dispatch(this, recentMessage);\r\n        }\r\n      }\r\n    }\r\n\r\n    return wasActive;\r\n  }\r\n\r\n  resetInterval() {\r\n    this._nextPollInterval = 100;\r\n    this._pollIntervalCount = 0;\r\n  }\r\n\r\n  async doHeartbeat() {\r\n    let wasActive = false;\r\n\r\n    try {\r\n      const result = await axios({\r\n        method: \"get\",\r\n        url: this.getBaseApiUrl() + \"status/\", //API url\r\n        headers: {\r\n          Authorization: \"Bearer mctauth=\" + this._creatorTools.remoteServerAuthToken,\r\n        },\r\n      });\r\n\r\n      const obj = result.data as CreatorToolsServerStatus;\r\n\r\n      if (obj) {\r\n        wasActive = await this.processServerStatus(obj);\r\n      }\r\n    } catch (e: any) {\r\n      if (e && e.response && (e as AxiosError).response?.status === 404) {\r\n        this.errorMessage = \"Did not find an active server at \" + this.getBaseApiUrl();\r\n        this.setState(CreatorToolsMinecraftState.disconnected);\r\n        return;\r\n      }\r\n\r\n      this.errorMessage = \"Disconnected from server.\";\r\n      this.setState(CreatorToolsMinecraftState.disconnected);\r\n      return;\r\n    }\r\n\r\n    if (this._nextPollInterval >= 0) {\r\n      if (wasActive) {\r\n        this._nextPollInterval = 100;\r\n        this._pollIntervalCount = 0;\r\n      } else {\r\n        this._pollIntervalCount++;\r\n\r\n        // back off our polling if nothing interesting is happening\r\n        if (this._pollIntervalCount === 50 && this._nextPollInterval < 500) {\r\n          this._nextPollInterval = 500;\r\n          this._pollIntervalCount = 0;\r\n        } else if (this._pollIntervalCount === 50 && this._nextPollInterval === 500) {\r\n          this._nextPollInterval = 5000;\r\n          this._pollIntervalCount = 0;\r\n        }\r\n      }\r\n\r\n      // @ts-ignore\r\n      window.setTimeout(this.doHeartbeat, this._nextPollInterval);\r\n    }\r\n  }\r\n\r\n  async initialize() {\r\n    const url = this._creatorTools.fullRemoteServerUrl;\r\n    this._nextPollInterval = -1;\r\n\r\n    if (\r\n      this.state === CreatorToolsMinecraftState.initialized ||\r\n      this.state === CreatorToolsMinecraftState.preparing ||\r\n      this.state === CreatorToolsMinecraftState.prepared ||\r\n      this.state === CreatorToolsMinecraftState.starting ||\r\n      this.state === CreatorToolsMinecraftState.started\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this.setState(CreatorToolsMinecraftState.initialized);\r\n\r\n    if (!this._creatorTools || !url || !this._creatorTools.remoteServerPasscode) {\r\n      this.errorMessage = \"Not fully configured.\";\r\n      this.errorStatus = CreatorToolsMinecraftErrorStatus.configuration;\r\n      return;\r\n    }\r\n\r\n    let authReq: AxiosResponse | undefined;\r\n\r\n    try {\r\n      authReq = await axios.post(url + \"api/auth/\", \"passcode=\" + this._creatorTools.remoteServerPasscode);\r\n\r\n      if (authReq === undefined) {\r\n        this.errorMessage = \"Could not connect to server.\";\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.loginFailed;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n        return;\r\n      }\r\n\r\n      if (authReq.status !== 200) {\r\n        this.errorMessage = \"Login failed.\";\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.loginFailed;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n        return;\r\n      }\r\n\r\n      let result: CreatorToolsServerAuthenticationResult | undefined;\r\n\r\n      if (typeof authReq.data === \"string\") {\r\n        result = JSON.parse(authReq.data);\r\n      } else if (typeof authReq.data === \"object\") {\r\n        result = authReq.data;\r\n      }\r\n\r\n      if (result === undefined) {\r\n        this.errorMessage = \"Unexpected server error.\";\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.serverError;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n\r\n        return;\r\n      }\r\n\r\n      this.setState(CreatorToolsMinecraftState.initialized);\r\n\r\n      // Build the full auth token including authTag for GCM encryption validation\r\n      this._creatorTools.remoteServerAuthToken =\r\n        result.token + \"|\" + result.iv + (result.authTag ? \"|\" + result.authTag : \"\");\r\n      this._creatorTools.remoteServerAccessLevel = result.permissionLevel;\r\n      this._creatorTools.remoteServerEulaAccepted = result.eulaAccepted;\r\n\r\n      // Auto-select the first active slot from the server response\r\n      // This handles cases where the server is running on a non-default slot\r\n      let desiredSlot = this._creatorTools.remoteServerPort;\r\n      let foundActiveSlot = false;\r\n\r\n      // Check if the desired slot has an active server\r\n      if (desiredSlot !== undefined && result.serverStatus[desiredSlot]?.id >= 0) {\r\n        foundActiveSlot = true;\r\n      }\r\n\r\n      // If desired slot has no active server, find the first active slot\r\n      if (!foundActiveSlot) {\r\n        for (const slotStr in result.serverStatus) {\r\n          const slot = parseInt(slotStr, 10);\r\n          const status = result.serverStatus[slot];\r\n          if (status && status.id >= 0) {\r\n            Log.verbose(\"Auto-selecting active slot \" + slot + \" (was \" + desiredSlot + \")\");\r\n            desiredSlot = slot;\r\n            this._creatorTools.remoteServerPort = slot;\r\n            foundActiveSlot = true;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Initialize world content storage with HttpStorage pointing to the server's worldContent endpoint\r\n      await this.initWorldContentStorage();\r\n\r\n      if (foundActiveSlot && desiredSlot !== undefined && result.serverStatus[desiredSlot]) {\r\n        const status = result.serverStatus[desiredSlot];\r\n        await this.processServerStatus(status);\r\n      }\r\n\r\n      await this._creatorTools.save();\r\n\r\n      // Try WebSocket first for real-time status updates\r\n      // Falls back to polling if WebSocket connection fails\r\n      const wsConnected = await this.connectWebSocket();\r\n\r\n      if (wsConnected) {\r\n        Log.verbose(\"Using WebSocket for status updates\");\r\n        this._useWebSocket = true;\r\n        this._nextPollInterval = -1; // Disable polling when using WebSocket\r\n      } else {\r\n        Log.verbose(\"WebSocket not available, using polling for status updates\");\r\n        this._useWebSocket = false;\r\n        this._nextPollInterval = 500;\r\n        this.startPolling();\r\n      }\r\n    } catch (e: any) {\r\n      this.errorMessage = e.toString();\r\n\r\n      if (this.errorMessage && this.errorMessage.indexOf(\"401\") >= 0) {\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.loginFailed;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n      } else {\r\n        this.errorStatus = CreatorToolsMinecraftErrorStatus.serverUnavailable;\r\n        this.setState(CreatorToolsMinecraftState.error);\r\n      }\r\n    }\r\n  }\r\n}\r\n", "import CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"../app/CreatorTools\";\r\nimport IMinecraft, { IMinecraftMessage, PrepareAndStartResultType } from \"../app/IMinecraft\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport ProjectExporter from \"../app/ProjectExporter\";\r\nimport MinecraftPush from \"../app/MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport { DedicatedServerMode } from \"../app/ICreatorToolsData\";\r\nimport { IMinecraftStartMessage } from \"../app/IMinecraftStartMessage\";\r\nimport { IWorldSettings } from \"../minecraft/IWorldSettings\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\nimport { StatusTopic } from \"../app/Status\";\r\nimport {\r\n  IDebugStatsNotificationBody,\r\n  IDebugConnectedNotificationBody,\r\n  IDebugDisconnectedNotificationBody,\r\n  IDebugPausedNotificationBody,\r\n  IDebugResumedNotificationBody,\r\n  IDebugProfilerStateNotificationBody,\r\n  IProfilerCaptureNotificationBody,\r\n} from \"../local/IServerNotification\";\r\n\r\nexport default class ProcessHostedMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n\r\n  private _project: Project | undefined;\r\n  private _gameStateManager: GameStateManager;\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  state: CreatorToolsMinecraftState;\r\n  dedicatedServerStorage: IStorage | null;\r\n  private _dsDeployBehaviorPacksFolder: IFolder | null;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  private _onWorldStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectStorageReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n\r\n  // Debug event dispatchers for IPC-bridged debug data\r\n  private _onDebugConnected = new EventDispatcher<IMinecraft, IDebugConnectedNotificationBody>();\r\n  private _onDebugDisconnected = new EventDispatcher<IMinecraft, IDebugDisconnectedNotificationBody>();\r\n  private _onDebugStats = new EventDispatcher<IMinecraft, IDebugStatsNotificationBody>();\r\n  private _onDebugPaused = new EventDispatcher<IMinecraft, IDebugPausedNotificationBody>();\r\n  private _onDebugResumed = new EventDispatcher<IMinecraft, IDebugResumedNotificationBody>();\r\n  private _onDebugProfilerState = new EventDispatcher<IMinecraft, IDebugProfilerStateNotificationBody>();\r\n  private _onProfilerCapture = new EventDispatcher<IMinecraft, IProfilerCaptureNotificationBody>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldStorageReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectStorageReady.asEvent();\r\n  }\r\n\r\n  public get onDebugConnected() {\r\n    return this._onDebugConnected.asEvent();\r\n  }\r\n\r\n  public get onDebugDisconnected() {\r\n    return this._onDebugDisconnected.asEvent();\r\n  }\r\n\r\n  public get onDebugStats() {\r\n    return this._onDebugStats.asEvent();\r\n  }\r\n\r\n  public get onDebugPaused() {\r\n    return this._onDebugPaused.asEvent();\r\n  }\r\n\r\n  public get onDebugResumed() {\r\n    return this._onDebugResumed.asEvent();\r\n  }\r\n\r\n  public get onDebugProfilerState() {\r\n    return this._onDebugProfilerState.asEvent();\r\n  }\r\n\r\n  public get onProfilerCapture() {\r\n    return this._onProfilerCapture.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onRefreshed.asEvent();\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return true;\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.dedicatedServerStorage = null;\r\n    this.state = CreatorToolsMinecraftState.none;\r\n\r\n    this._dsDeployBehaviorPacksFolder = null;\r\n\r\n    this.updateStatus();\r\n  }\r\n\r\n  async updateStatus() {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getDedicatedServerStatus, \"\");\r\n\r\n    if (result) {\r\n      let resultNum = -1;\r\n      try {\r\n        resultNum = parseInt(result);\r\n      } catch (e) {}\r\n\r\n      if (resultNum >= 0) {\r\n        if (resultNum === 1) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n        } else if (resultNum === 2) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.initializing);\r\n        } else if (resultNum === 3) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.preparing);\r\n        } else if (resultNum === 4) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.starting);\r\n        } else if (resultNum === 5) {\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.started);\r\n        }\r\n      }\r\n    }\r\n\r\n    return this.state;\r\n  }\r\n\r\n  async prepare(force?: boolean) {}\r\n\r\n  processExternalMessage(command: string, data: string) {\r\n    switch (command) {\r\n      case \"dedicatedServerStarted\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.started);\r\n\r\n        if (!this._creatorTools.successfullyStartedMinecraftServer) {\r\n          this._creatorTools.successfullyStartedMinecraftServer = true;\r\n          this._creatorTools.save();\r\n        }\r\n\r\n        this._initWorldFolderOnStart();\r\n\r\n        break;\r\n\r\n      case \"dedicatedServerRefreshed\":\r\n        this.notifyRefreshed();\r\n        break;\r\n\r\n      case \"dedicatedServerStopped\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n        break;\r\n\r\n      case \"dedicatedServerGameEvents\":\r\n        this.notifyGameEvents(data);\r\n        break;\r\n\r\n      case \"dedicatedServerMessage\":\r\n        this._creatorTools.notifyStatusUpdate(\"Server: \" + data, StatusTopic.minecraft);\r\n        break;\r\n\r\n      case \"dedicatedServerError\":\r\n        this._creatorTools.notifyStatusUpdate(\"Server Error: \" + data, StatusTopic.minecraft);\r\n        break;\r\n\r\n      case \"dedicatedServerDebugConnected\":\r\n        try {\r\n          const connBody = JSON.parse(data) as IDebugConnectedNotificationBody;\r\n          this._onDebugConnected.dispatch(this, connBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugConnected IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugDisconnected\":\r\n        try {\r\n          const discBody = JSON.parse(data) as IDebugDisconnectedNotificationBody;\r\n          this._onDebugDisconnected.dispatch(this, discBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugDisconnected IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugStats\":\r\n        try {\r\n          const statsBody = JSON.parse(data) as IDebugStatsNotificationBody;\r\n          this._onDebugStats.dispatch(this, statsBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugStats IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugPaused\":\r\n        try {\r\n          const pauseBody = JSON.parse(data) as IDebugPausedNotificationBody;\r\n          this._onDebugPaused.dispatch(this, pauseBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugPaused IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugResumed\":\r\n        try {\r\n          const resumeBody = JSON.parse(data) as IDebugResumedNotificationBody;\r\n          this._onDebugResumed.dispatch(this, resumeBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugResumed IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerDebugProfilerState\":\r\n        try {\r\n          const profStateBody = JSON.parse(data) as IDebugProfilerStateNotificationBody;\r\n          this._onDebugProfilerState.dispatch(this, profStateBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse debugProfilerState IPC: \" + e);\r\n        }\r\n        break;\r\n\r\n      case \"dedicatedServerProfilerCapture\":\r\n        try {\r\n          const captBody = JSON.parse(data) as IProfilerCaptureNotificationBody;\r\n          this._onProfilerCapture.dispatch(this, captBody);\r\n        } catch (e) {\r\n          Log.debug(\"Failed to parse profilerCapture IPC: \" + e);\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  async initialize() {\r\n    await this.start();\r\n  }\r\n\r\n  get dedicatedServerBehaviorPacksFolder(): IFolder | null {\r\n    return this._dsDeployBehaviorPacksFolder;\r\n  }\r\n\r\n  private notifyGameEvents(data: string) {\r\n    let obj = undefined;\r\n\r\n    try {\r\n      obj = JSON.parse(data);\r\n    } catch (e) {}\r\n\r\n    if (!obj || !obj.length) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < obj.length; i++) {\r\n      const event = obj[i];\r\n\r\n      this._gameStateManager?.handleEvent(event);\r\n    }\r\n  }\r\n\r\n  private _updateDedicatedServerStorage() {\r\n    if (\r\n      this._creatorTools.ensureLocalFolder === undefined ||\r\n      !AppServiceProxy.hasAppService ||\r\n      this._creatorTools.dedicatedServerPath === undefined\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const folder = this._creatorTools.ensureLocalFolder(this._creatorTools.dedicatedServerPath);\r\n\r\n    this.dedicatedServerStorage = folder.storage;\r\n\r\n    if (this.dedicatedServerStorage != null) {\r\n      this._dsDeployBehaviorPacksFolder =\r\n        this.dedicatedServerStorage.rootFolder.ensureFolder(\"development_behavior_packs\");\r\n    } else {\r\n      this._dsDeployBehaviorPacksFolder = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Send a debug pause command to the main process.\r\n   */\r\n  async debugPause(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugPause, \"\");\r\n  }\r\n\r\n  /**\r\n   * Send a debug resume command to the main process.\r\n   */\r\n  async debugResume(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugResume, \"\");\r\n  }\r\n\r\n  /**\r\n   * Send a debug start profiler command to the main process.\r\n   */\r\n  async debugStartProfiler(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugStartProfiler, \"\");\r\n  }\r\n\r\n  /**\r\n   * Send a debug stop profiler command to the main process.\r\n   */\r\n  async debugStopProfiler(): Promise<void> {\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.debugStopProfiler, \"\");\r\n  }\r\n\r\n  /**\r\n   * When the dedicated server starts, query the main process for the world folder path\r\n   * via IPC so that the world map and debug stats panels appear in MinecraftDisplay\r\n   * immediately, without requiring a deploy operation first.\r\n   */\r\n  private async _initWorldFolderOnStart() {\r\n    if (this.worldFolder) {\r\n      return; // Already set from a previous deploy\r\n    }\r\n\r\n    // Ask the main process for the world folder path - this works regardless of\r\n    // whether dedicatedServerPath is set (auto mode vs manual mode)\r\n    const worldPath = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getDedicatedServerWorldDeployDir, \"\");\r\n\r\n    if (worldPath && worldPath.length > 0 && this._creatorTools.ensureLocalFolder) {\r\n      const worldFolder = this._creatorTools.ensureLocalFolder(worldPath);\r\n\r\n      this.worldFolder = worldFolder;\r\n      this._onWorldStorageReady.dispatch(this, worldFolder);\r\n    }\r\n  }\r\n\r\n  public notifyStateChanged(newVal: CreatorToolsMinecraftState) {\r\n    this.state = newVal;\r\n\r\n    this._onStateChanged.dispatch(this, newVal);\r\n  }\r\n\r\n  public notifyRefreshed(newVal?: CreatorToolsMinecraftState) {\r\n    if (newVal) {\r\n      this.state = newVal;\r\n    }\r\n\r\n    this._onRefreshed.dispatch(this, this.state);\r\n  }\r\n\r\n  async start() {\r\n    const path = this.getDedicatedServerSyntax();\r\n\r\n    this.notifyStateChanged(CreatorToolsMinecraftState.starting);\r\n\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.startDedicatedServer, path);\r\n  }\r\n\r\n  async prepareDedicatedServer(project: Project) {\r\n    await this.syncWithDeployment();\r\n    return await this.deployDedicatedServerWorld(project);\r\n  }\r\n\r\n  async restartDedicatedServer(project: Project) {\r\n    await this.stop();\r\n\r\n    await this.prepareDedicatedServer(project);\r\n\r\n    await this.start();\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush) {\r\n    let worldName = undefined;\r\n\r\n    if (this._project) {\r\n      worldName = await this.prepareDedicatedServer(this._project);\r\n    }\r\n\r\n    await this.start();\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n      worldName: worldName,\r\n    };\r\n  }\r\n\r\n  async syncWithDeployment() {\r\n    if (this._creatorTools.ensureLocalFolder == null) {\r\n      throw new Error(\"This instance doesn't support deployment\");\r\n    }\r\n\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    const folderPath = await AppServiceProxy.sendAsync(AppServiceProxyCommands.getDedicatedServerProjectDeployDir, \"\");\r\n\r\n    if (folderPath && folderPath.length > 0) {\r\n      const deployFolder = this._creatorTools.ensureLocalFolder(folderPath);\r\n\r\n      const deployFolderExists = deployFolder;\r\n\r\n      if (deployFolderExists) {\r\n        await ProjectExporter.deployProject(this._creatorTools, this._project, deployFolder);\r\n      }\r\n    }\r\n  }\r\n\r\n  async runCommand(command: string) {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.dedicatedServerCommand, command);\r\n\r\n    return result;\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<any> {\r\n    return undefined;\r\n  }\r\n\r\n  async deployDedicatedServerWorld(project: Project) {\r\n    if (this.dedicatedServerStorage === null) {\r\n      return;\r\n    }\r\n\r\n    const worldFolderName = project.deployWorldId;\r\n    const worldDisplayName = project.name + \" _mct\";\r\n    const worldFolder = this.dedicatedServerStorage.rootFolder.ensureFolder(\"worlds\").ensureFolder(worldFolderName);\r\n\r\n    await worldFolder.ensureExists();\r\n\r\n    await ProjectExporter.syncFlatPackRefWorldTo(this._creatorTools, project, worldFolder, worldDisplayName);\r\n\r\n    await worldFolder.saveAll();\r\n\r\n    await project.save();\r\n\r\n    this.worldFolder = worldFolder;\r\n    this._onWorldStorageReady.dispatch(this, worldFolder);\r\n\r\n    return worldDisplayName;\r\n  }\r\n\r\n  getDedicatedServerSyntax() {\r\n    if (!this._creatorTools.worldSettings) {\r\n      Log.debugAlert(\"World settings are not defined.\");\r\n      throw new Error();\r\n    }\r\n\r\n    if (\r\n      this._creatorTools.dedicatedServerMode !== DedicatedServerMode.auto &&\r\n      (this._creatorTools.dedicatedServerPath === null || this._creatorTools.dedicatedServerPath === undefined)\r\n    ) {\r\n      Log.debugAlert(\"Server folder path is not defined, and the path cannot be set.\");\r\n      throw new Error();\r\n    }\r\n\r\n    let path = this._creatorTools.dedicatedServerPath;\r\n\r\n    if (!path) {\r\n      path = \"\";\r\n    }\r\n\r\n    let worldSettings: IWorldSettings = this._creatorTools.worldSettings;\r\n\r\n    if (this._project && this._project.worldSettings) {\r\n      if (this._project.worldSettings.useCustomSettings) {\r\n        worldSettings = this._project.worldSettings;\r\n      }\r\n    }\r\n\r\n    if (!worldSettings.name) {\r\n      worldSettings.name = \"world\";\r\n    }\r\n\r\n    const mess: IMinecraftStartMessage = {\r\n      path: Utilities.ensureEndsWithBackSlash(path),\r\n      iagree: this._creatorTools\r\n        .iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula\r\n        ? true\r\n        : false,\r\n      mode: this._creatorTools.dedicatedServerMode,\r\n      track: this._creatorTools.track,\r\n      worldSettings: worldSettings,\r\n    };\r\n\r\n    return JSON.stringify(mess);\r\n  }\r\n\r\n  async stop() {\r\n    const path = this.getDedicatedServerSyntax();\r\n\r\n    this.notifyStateChanged(CreatorToolsMinecraftState.stopping);\r\n\r\n    await AppServiceProxy.sendAsync(AppServiceProxyCommands.stopDedicatedServer, path);\r\n  }\r\n}\r\n", "import CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"../app/CreatorTools\";\r\nimport IMinecraft, { IMinecraftMessage, PrepareAndStartResultType } from \"../app/IMinecraft\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"../app/Project\";\r\nimport MinecraftPush from \"../app/MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport Log from \"../core/Log\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport { MinecraftGameConnectionMode } from \"../app/ICreatorToolsData\";\r\nimport ProjectExporter from \"../app/ProjectExporter\";\r\nimport { ICommandResponseBody } from \"../minecraft/ICommandResponse\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\n\r\nexport default class MinecraftGameProxyMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n  state: CreatorToolsMinecraftState;\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _project: Project | undefined;\r\n  private _gameStateManager: GameStateManager;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  private _onWorldFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldFolderReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectFolderReady.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return this._creatorTools.minecraftGameMode !== MinecraftGameConnectionMode.remoteMinecraft;\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onRefreshed.asEvent();\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.state = CreatorToolsMinecraftState.none;\r\n  }\r\n\r\n  async updateStatus() {\r\n    return this.state;\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public notifyStateChanged(newVal: CreatorToolsMinecraftState) {\r\n    this.state = newVal;\r\n\r\n    this._onStateChanged.dispatch(this, newVal);\r\n  }\r\n\r\n  async initialize() {\r\n    await this.start();\r\n  }\r\n\r\n  async prepare(force?: boolean) {}\r\n\r\n  async pushWorld() {\r\n    if (!this._creatorTools || this._creatorTools.deploymentStorage === null || !this._project) {\r\n      return;\r\n    }\r\n\r\n    const worldFolderName = this._project.deployWorldId;\r\n    const worldDisplayName = this._project.name + \" _mct\";\r\n\r\n    const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(this._creatorTools);\r\n\r\n    if (!worldsFolder) {\r\n      Log.debug(\"Could not find a Minecraft world.\");\r\n      return;\r\n    }\r\n\r\n    const worldFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n    await worldFolder.ensureExists();\r\n\r\n    await ProjectExporter.syncFlatPackRefWorldTo(this._creatorTools, this._project, worldFolder, worldDisplayName);\r\n\r\n    await worldFolder.saveAll();\r\n\r\n    await this._project.save();\r\n\r\n    return worldDisplayName;\r\n  }\r\n\r\n  async syncWithDeployment() {\r\n    const dt = this._creatorTools.defaultDeploymentTarget;\r\n\r\n    if (\r\n      dt == null ||\r\n      dt.deployBehaviorPacksFolder == null ||\r\n      this._creatorTools.minecraftGameMode === MinecraftGameConnectionMode.remoteMinecraft\r\n    ) {\r\n      throw new Error(\"This instance doesn't support deployment\");\r\n    }\r\n\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    let isAvailable = dt.storage.available;\r\n\r\n    if (isAvailable === undefined) {\r\n      isAvailable = await dt.storage.getAvailable();\r\n    }\r\n\r\n    if (!isAvailable) {\r\n      return;\r\n    }\r\n\r\n    const deployFolderExists = await dt.deployBehaviorPacksFolder.exists();\r\n\r\n    if (deployFolderExists) {\r\n      await ProjectExporter.deployProject(this._creatorTools, this._project, dt.storage.rootFolder);\r\n    }\r\n  }\r\n\r\n  processExternalMessage(command: string, data: string) {\r\n    switch (command) {\r\n      case \"wsevent\":\r\n        let obj = undefined;\r\n\r\n        try {\r\n          obj = JSON.parse(data);\r\n        } catch (e) {}\r\n\r\n        if (obj) {\r\n          this._gameStateManager.handleEvent(obj);\r\n        }\r\n\r\n        break;\r\n\r\n      case \"webSocketCommandComplete\":\r\n        Log.message(data);\r\n        break;\r\n\r\n      case \"webSocketConnected\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.started);\r\n\r\n        if (!this._creatorTools.successfullyConnectedWebSocketToMinecraft) {\r\n          this._creatorTools.successfullyConnectedWebSocketToMinecraft = true;\r\n          this._creatorTools.save();\r\n        }\r\n        break;\r\n\r\n      case \"webSocketDisconnected\":\r\n        this.notifyStateChanged(CreatorToolsMinecraftState.disconnected);\r\n        break;\r\n    }\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<any> {\r\n    return undefined;\r\n  }\r\n\r\n  async runCommand(command: string) {\r\n    if (!AppServiceProxy.hasAppService && Utilities.isDebug) {\r\n      // simulate a command in debug\r\n      Log.debugAlert(\"Simulating command to Minecraft:\\n\\n\" + command + \"\\n\\n\");\r\n\r\n      if (command.indexOf(\"fail\") >= 0) {\r\n        return JSON.stringify({\r\n          statusCode: -2147483648,\r\n          statusMessage: \"Failed command \" + command,\r\n        });\r\n      } else {\r\n        return JSON.stringify({\r\n          statusCode: 0,\r\n          statusMessage: \"Success command \" + command,\r\n          position: {\r\n            x: -100,\r\n            y: 100,\r\n            z: -100,\r\n          },\r\n        });\r\n      }\r\n    } else {\r\n      let result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.webSocketCommand, command);\r\n\r\n      if (result !== undefined) {\r\n        this.logCommandResult(result);\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }\r\n\r\n  logCommandResult(result: string) {\r\n    if (result) {\r\n      if (result.indexOf(\"{\") >= 0) {\r\n        try {\r\n          const commandResponse: ICommandResponseBody = JSON.parse(result);\r\n\r\n          if (commandResponse.statusMessage) {\r\n            this._creatorTools.notifyStatusUpdate(\"Minecraft Game: \" + commandResponse.statusMessage);\r\n            return;\r\n          }\r\n        } catch (e: any) {\r\n          Log.fail(e);\r\n        }\r\n      }\r\n    }\r\n    this._creatorTools.notifyStatusUpdate(\"Minecraft Game: \" + result);\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush) {\r\n    let worldName = undefined;\r\n\r\n    if (push.project) {\r\n      this._project = push.project;\r\n\r\n      await this.syncWithDeployment();\r\n    }\r\n\r\n    if (push.worldType) {\r\n      worldName = await this.pushWorld();\r\n    }\r\n\r\n    await this.start();\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n      worldName: worldName,\r\n    };\r\n  }\r\n\r\n  async stop() {}\r\n\r\n  async start() {\r\n    if (!AppServiceProxy.hasAppService && Utilities.isDebug) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n    } else if (\r\n      this.state === CreatorToolsMinecraftState.none ||\r\n      this.state === CreatorToolsMinecraftState.error ||\r\n      this.state === CreatorToolsMinecraftState.disconnected\r\n    ) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.initializing);\r\n\r\n      AppServiceProxy.sendAsync(AppServiceProxyCommands.startWebSocketServer, \"\").then(\r\n        async (result: string | undefined) => {\r\n          const getMinecraftGameProjectDeployDir = await AppServiceProxy.sendAsync(\r\n            AppServiceProxyCommands.getMinecraftGameProjectDeployDir,\r\n            this._creatorTools.minecraftGameMode\r\n          );\r\n\r\n          const getMinecraftGameWorldDeployDir = await AppServiceProxy.sendAsync(\r\n            AppServiceProxyCommands.getMinecraftGameWorldDeployDir,\r\n            this._creatorTools.minecraftGameMode\r\n          );\r\n\r\n          if (\r\n            getMinecraftGameWorldDeployDir &&\r\n            getMinecraftGameWorldDeployDir.length > 0 &&\r\n            this._creatorTools.ensureLocalFolder\r\n          ) {\r\n            this.worldFolder = this._creatorTools.ensureLocalFolder(getMinecraftGameWorldDeployDir);\r\n\r\n            this._onWorldFolderReady.dispatch(this, this.worldFolder);\r\n          }\r\n\r\n          if (\r\n            getMinecraftGameProjectDeployDir &&\r\n            getMinecraftGameProjectDeployDir.length > 0 &&\r\n            this._creatorTools.ensureLocalFolder\r\n          ) {\r\n            this.projectFolder = this._creatorTools.ensureLocalFolder(getMinecraftGameProjectDeployDir);\r\n\r\n            this._onProjectFolderReady.dispatch(this, this.projectFolder);\r\n          }\r\n\r\n          this.notifyStateChanged(CreatorToolsMinecraftState.initialized);\r\n        }\r\n      );\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport { constants } from \"../core/Constants\";\r\nimport IProjectInfoData from \"../info/IProjectInfoData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport { IPackageReference } from \"../minecraft/IWorldSettings\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport Project from \"./Project\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport enum PackageType {\r\n  packSet = 0,\r\n  world = 1,\r\n  worldTemplate = 2,\r\n  generic = 3,\r\n  project = 4,\r\n}\r\n\r\nexport default class Package {\r\n  storagePath: string;\r\n  name: string;\r\n  baseName: string;\r\n  type: PackageType;\r\n  file?: IFile;\r\n  reportFile?: IFile;\r\n  cacheFolder?: IFolder;\r\n  data?: IProjectInfoData;\r\n\r\n  get isWorldType() {\r\n    return this.type === PackageType.world || this.type === PackageType.worldTemplate;\r\n  }\r\n\r\n  constructor(name: string, path: string) {\r\n    this.name = name;\r\n    this.storagePath = path;\r\n    this.baseName = StorageUtilities.getBaseFromName(name);\r\n    this.type = this._getPackTypeFromPath(path);\r\n  }\r\n\r\n  static ensureMinecraftCreatorToolsPackageReference(packRefs: IPackageReference[]) {\r\n    for (const packRef of packRefs) {\r\n      if (packRef.behaviorPackReferences) {\r\n        for (const bpRef of packRef.behaviorPackReferences) {\r\n          if (bpRef.uuid === Database.creatorToolsIngameBehaviorPackUUID) {\r\n            return;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    packRefs.push({\r\n      name: \"creator_tools_ingame.mcaddon\",\r\n      behaviorPackReferences: [\r\n        { uuid: Database.creatorToolsIngameBehaviorPackUUID, version: Database.creatorToolsIngameBehaviorPackVersion },\r\n      ],\r\n      resourcePackReferences: [\r\n        { uuid: Database.creatorToolsIngameResourcePackUUID, version: Database.creatorToolsIngameResourcePackVersion },\r\n      ],\r\n    });\r\n\r\n    return packRefs;\r\n  }\r\n\r\n  _getPackTypeFromPath(path: string) {\r\n    const type = StorageUtilities.getTypeFromName(path);\r\n\r\n    switch (type) {\r\n      case \"mcworld\":\r\n        return PackageType.world;\r\n      case \"mcproject\":\r\n        return PackageType.project;\r\n      case \"mctemplate\":\r\n        return PackageType.worldTemplate;\r\n      case \"mcaddon\":\r\n      case \"mcpack\":\r\n        return PackageType.packSet;\r\n\r\n      default:\r\n        return PackageType.generic;\r\n    }\r\n  }\r\n\r\n  async ensureData(creatorTools: CreatorTools, file: IFile) {\r\n    this.file = file;\r\n\r\n    const summaryFile = file.parentFolder.ensureFile(file.name + \".report.html\");\r\n\r\n    const summaryFileExists = await summaryFile.exists();\r\n\r\n    let summaryObject: IProjectInfoData | undefined;\r\n\r\n    if (summaryFileExists) {\r\n      if (!summaryFile.isContentLoaded) {\r\n        await summaryFile.loadContent();\r\n      }\r\n\r\n      const content = summaryFile.content;\r\n\r\n      if (content && typeof content === \"string\") {\r\n        const adderFunctionDec = content.indexOf(\"function _addReportJson(\");\r\n        let adderFunction = content.indexOf(\"_addReportJson(\");\r\n\r\n        if (adderFunction >= 0) {\r\n          if (adderFunctionDec === adderFunction - 9) {\r\n            adderFunction = content.indexOf(\"_addReportJson(\", adderFunction + 10);\r\n          }\r\n\r\n          if (adderFunction >= 0) {\r\n            const endOfFunction = content.indexOf(\"</script>\", adderFunction);\r\n\r\n            if (endOfFunction > adderFunction) {\r\n              const previousEnd = content.lastIndexOf(\");\", endOfFunction);\r\n              if (previousEnd > adderFunction && previousEnd < endOfFunction) {\r\n                const jsonContent = content.substring(adderFunction + 15, previousEnd);\r\n\r\n                try {\r\n                  summaryObject = JSON.parse(jsonContent);\r\n                } catch (e) {}\r\n\r\n                if (summaryObject) {\r\n                  this.reportFile = summaryFile;\r\n                }\r\n\r\n                // if the report was generated by a different version, ignore it and regen a new one.\r\n                if (summaryObject && summaryObject.generatorVersion !== constants.version) {\r\n                  summaryObject = undefined;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!summaryObject) {\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent();\r\n      }\r\n\r\n      if (file.content && file.content instanceof Uint8Array) {\r\n        let packRootZipFolder = undefined;\r\n\r\n        if (!file.fileContainerStorage) {\r\n          const zipStorage = new ZipStorage();\r\n\r\n          zipStorage.storagePath = file.storageRelativePath + \"#\";\r\n\r\n          await zipStorage.loadFromUint8Array(file.content, file.name);\r\n\r\n          zipStorage.containerFile = file;\r\n          file.fileContainerStorage = zipStorage;\r\n        }\r\n\r\n        packRootZipFolder = file.fileContainerStorage.rootFolder;\r\n\r\n        const packProject = new Project(creatorTools, file.name, null);\r\n        packProject.setProjectFolder(packRootZipFolder);\r\n\r\n        await packProject.inferProjectItemsFromFiles();\r\n\r\n        const pis = packProject.indevInfoSet;\r\n\r\n        await pis.generateForProject();\r\n\r\n        const hash = await file.getHash();\r\n\r\n        const reportHtml = pis.getReportHtml(file.name, file.storageRelativePath, hash);\r\n\r\n        summaryFile.setContent(reportHtml, FileUpdateType.versionlessEdit);\r\n\r\n        await summaryFile.saveContent();\r\n\r\n        this.reportFile = summaryFile;\r\n\r\n        summaryObject = pis.getDataObject(file.name, file.storageRelativePath, hash);\r\n      }\r\n    }\r\n\r\n    if (summaryObject) {\r\n      this.data = summaryObject;\r\n    }\r\n  }\r\n\r\n  createReference(): IPackageReference {\r\n    const bpRefs: { uuid: string; version: number[] }[] = [];\r\n    const rpRefs: { uuid: string; version: number[] }[] = [];\r\n\r\n    if (this.data && this.data.items) {\r\n      for (let i = 0; i < this.data.items.length; i++) {\r\n        const item = this.data.items[i];\r\n\r\n        if (item.gId === \"PACK\" && item.gIx === 6 && item.d && typeof item.d === \"string\") {\r\n          const ref = this.getRefFromString(item.d);\r\n\r\n          if (ref) {\r\n            bpRefs.push(ref);\r\n          }\r\n        } else if (item.gId === \"PACK\" && item.gIx === 16 && item.d && typeof item.d === \"string\") {\r\n          const ref = this.getRefFromString(item.d);\r\n\r\n          if (ref) {\r\n            rpRefs.push(ref);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    const packRef: IPackageReference = {\r\n      name: this.name,\r\n      hash: this.data?.sourceHash,\r\n      behaviorPackReferences: bpRefs,\r\n      resourcePackReferences: rpRefs,\r\n    };\r\n\r\n    return packRef;\r\n  }\r\n\r\n  getRefFromString(uuidPlusVersion: string) {\r\n    const sections = Utilities.splitUntil(uuidPlusVersion, \"|\", 1);\r\n\r\n    if (sections.length !== 2) {\r\n      return undefined;\r\n    }\r\n\r\n    const verNumbers = sections[1].split(\".\");\r\n\r\n    if (verNumbers.length !== 3) {\r\n      return undefined;\r\n    }\r\n\r\n    const targetVerNumbers = [];\r\n    try {\r\n      targetVerNumbers.push(parseInt(verNumbers[0]));\r\n      targetVerNumbers.push(parseInt(verNumbers[1]));\r\n      targetVerNumbers.push(parseInt(verNumbers[2]));\r\n    } catch (e) {}\r\n\r\n    if (targetVerNumbers.length !== 3) {\r\n      return undefined;\r\n    }\r\n\r\n    return { uuid: sections[0], version: targetVerNumbers };\r\n  }\r\n\r\n  matches(packName: string, isWorldFocused?: boolean) {\r\n    const packCoreName = this.name.toLowerCase();\r\n    const packBaseName = this.baseName.toLowerCase();\r\n\r\n    packName = packName.toLowerCase();\r\n\r\n    if (\r\n      (packBaseName.toLowerCase() === packName &&\r\n        (isWorldFocused === undefined ||\r\n          (isWorldFocused === true && (this.type === PackageType.world || this.type === PackageType.worldTemplate)) ||\r\n          (isWorldFocused === false && this.type !== PackageType.world && this.type !== PackageType.worldTemplate))) ||\r\n      packCoreName === packName\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorTools, { CreatorToolsMinecraftErrorStatus, CreatorToolsMinecraftState } from \"./CreatorTools\";\r\nimport IMinecraft, { IMinecraftMessage, PrepareAndStartResultType } from \"./IMinecraft\";\r\nimport AppServiceProxy from \"../core/AppServiceProxy\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport Project from \"./Project\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport GameStateManager from \"../minecraft/GameStateManager\";\r\nimport Log from \"../core/Log\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport { MinecraftGameConnectionMode } from \"./ICreatorToolsData\";\r\nimport ProjectExporter from \"./ProjectExporter\";\r\nimport IActionSetData from \"../actions/IActionSetData\";\r\n\r\nexport default class DeploymentStorageMinecraft implements IMinecraft {\r\n  private _creatorTools: CreatorTools;\r\n  state: CreatorToolsMinecraftState;\r\n  private _onStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _project: Project | undefined;\r\n  private _gameStateManager: GameStateManager;\r\n\r\n  errorStatus?: CreatorToolsMinecraftErrorStatus;\r\n  errorMessage?: string;\r\n\r\n  worldFolder: IFolder | undefined;\r\n  projectFolder: IFolder | undefined;\r\n  worldContentStorage: IStorage | undefined;\r\n  worldProject: Project | undefined;\r\n\r\n  private _onWorldFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onProjectFolderReady = new EventDispatcher<IMinecraft, IFolder>();\r\n  private _onMessage = new EventDispatcher<IMinecraft, IMinecraftMessage>();\r\n\r\n  public get onWorldFolderReady() {\r\n    return this._onWorldFolderReady.asEvent();\r\n  }\r\n\r\n  public get onProjectFolderReady() {\r\n    return this._onProjectFolderReady.asEvent();\r\n  }\r\n\r\n  public get onMessage() {\r\n    return this._onMessage.asEvent();\r\n  }\r\n\r\n  get canDeployFiles() {\r\n    return true;\r\n  }\r\n\r\n  public get onRefreshed() {\r\n    return this._onRefreshed.asEvent();\r\n  }\r\n\r\n  public get onStateChanged() {\r\n    return this._onStateChanged.asEvent();\r\n  }\r\n\r\n  constructor(creatorTools: CreatorTools) {\r\n    this._creatorTools = creatorTools;\r\n    this._gameStateManager = new GameStateManager(this._creatorTools);\r\n\r\n    this.state = CreatorToolsMinecraftState.none;\r\n  }\r\n\r\n  async updateStatus() {\r\n    return this.state;\r\n  }\r\n\r\n  get activeProject() {\r\n    return this._project;\r\n  }\r\n\r\n  set activeProject(newProject: Project | undefined) {\r\n    this._project = newProject;\r\n  }\r\n\r\n  public get gameStateManager() {\r\n    return this._gameStateManager;\r\n  }\r\n\r\n  public notifyStateChanged(newVal: CreatorToolsMinecraftState) {\r\n    this.state = newVal;\r\n\r\n    this._onStateChanged.dispatch(this, newVal);\r\n  }\r\n\r\n  async initialize() {\r\n    await this.start();\r\n  }\r\n\r\n  async prepare(force?: boolean): Promise<void> {\r\n    return;\r\n  }\r\n\r\n  async runCommand(command: string): Promise<string | undefined> {\r\n    return undefined;\r\n  }\r\n\r\n  async runActionSet(actionSet: IActionSetData): Promise<string | undefined> {\r\n    return undefined;\r\n  }\r\n\r\n  processExternalMessage(command: string, data: string) {}\r\n\r\n  async pushWorld() {\r\n    if (!this._creatorTools || this._creatorTools.deploymentStorage === null || !this._project) {\r\n      return;\r\n    }\r\n\r\n    const worldFolderName = this._project.deployWorldId;\r\n    const worldDisplayName = this._project.name + \" _mct\";\r\n\r\n    const worldsFolder = await ProjectExporter.ensureMinecraftWorldsFolder(this._creatorTools);\r\n\r\n    if (!worldsFolder) {\r\n      Log.debug(\"Could not find a Minecraft world.\");\r\n      return;\r\n    }\r\n\r\n    const worldFolder = worldsFolder.ensureFolder(worldFolderName);\r\n\r\n    await worldFolder.ensureExists();\r\n\r\n    await ProjectExporter.syncFlatPackRefWorldTo(this._creatorTools, this._project, worldFolder, worldDisplayName);\r\n\r\n    await worldFolder.saveAll();\r\n\r\n    await this._project.save();\r\n\r\n    return worldDisplayName;\r\n  }\r\n\r\n  async syncWithDeployment() {\r\n    const deploymentTarget = this._creatorTools.defaultDeploymentTarget;\r\n\r\n    if (\r\n      deploymentTarget === undefined ||\r\n      deploymentTarget.storage == null ||\r\n      deploymentTarget.deployBehaviorPacksFolder == null ||\r\n      this._creatorTools.minecraftGameMode === MinecraftGameConnectionMode.remoteMinecraft\r\n    ) {\r\n      throw new Error(\"This instance doesn't support deployment\");\r\n    }\r\n\r\n    if (!this._project) {\r\n      return;\r\n    }\r\n\r\n    let isAvailable = deploymentTarget.storage.available;\r\n\r\n    if (isAvailable === undefined) {\r\n      isAvailable = await deploymentTarget.storage.getAvailable();\r\n    }\r\n\r\n    if (!isAvailable) {\r\n      return;\r\n    }\r\n\r\n    const deployFolderExists = await deploymentTarget.deployBehaviorPacksFolder.exists();\r\n\r\n    if (deployFolderExists) {\r\n      await ProjectExporter.deployProject(this._creatorTools, this._project, deploymentTarget.storage.rootFolder);\r\n    }\r\n  }\r\n\r\n  canPrepare() {\r\n    return true;\r\n  }\r\n\r\n  async prepareAndStart(push: MinecraftPush) {\r\n    let worldName = undefined;\r\n\r\n    if (push.project) {\r\n      this._project = push.project;\r\n\r\n      await this.syncWithDeployment();\r\n    }\r\n\r\n    if (push.worldType) {\r\n      worldName = await this.pushWorld();\r\n    }\r\n\r\n    await this.start();\r\n\r\n    return {\r\n      type: PrepareAndStartResultType.started,\r\n      worldName: worldName,\r\n    };\r\n  }\r\n\r\n  async stop() {}\r\n\r\n  async start() {\r\n    if (!AppServiceProxy.hasAppService && Utilities.isDebug) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.stopped);\r\n    } else if (\r\n      this.state === CreatorToolsMinecraftState.none ||\r\n      this.state === CreatorToolsMinecraftState.error ||\r\n      this.state === CreatorToolsMinecraftState.disconnected\r\n    ) {\r\n      this.notifyStateChanged(CreatorToolsMinecraftState.initializing);\r\n    }\r\n  }\r\n}\r\n", "import ElectronFolder from \"./ElectronFolder\";\r\nimport ElectronStorage from \"./ElectronStorage\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport FileBase from \"../storage/FileBase\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport interface IFStatResult {\r\n  isDirectory: boolean;\r\n  isFile: boolean;\r\n  mtime: string;\r\n  ctime: string;\r\n  size: number;\r\n}\r\n\r\nexport default class ElectronFile extends FileBase implements IFile {\r\n  _name: string;\r\n  _parentFolder: ElectronFolder;\r\n  localPersistDateTime?: number;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentFolder.fullPath;\r\n\r\n    if (!path.endsWith(ElectronStorage.folderDelimiter) && !path.endsWith(\">\")) {\r\n      path += ElectronStorage.folderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  get parentFolder(): ElectronFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  constructor(parentFolder: ElectronFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    var stat = undefined;\r\n\r\n    let statResultStr: string | undefined = \"\";\r\n\r\n    let mtime: number | undefined = undefined;\r\n\r\n    try {\r\n      statResultStr = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsStat, this.fullPath);\r\n\r\n      if (statResultStr) {\r\n        stat = JSON.parse(statResultStr) as IFStatResult;\r\n        mtime = Date.parse(stat.mtime);\r\n      }\r\n    } catch (e) {\r\n      Log.fail(\"Failed to parse statistics for \" + this.fullPath + \". \" + statResultStr);\r\n    }\r\n\r\n    if (this.localPersistDateTime && stat && mtime && mtime > this.localPersistDateTime) {\r\n      await this.reloadAfterExternalUpdate();\r\n    }\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsExists, this.fullPath);\r\n\r\n    return result === \"true\";\r\n  }\r\n\r\n  async loadContent(force: boolean): Promise<Date> {\r\n    if (force || this.lastLoadedOrSaved == null) {\r\n      const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n      if (encoding === EncodingType.ByteBuffer) {\r\n        // Log.debug(\"ElecF loading '\" + this.fullPath + \"' as binary.\");\r\n        const byteResult = await AppServiceProxy.sendAsyncBinary(AppServiceProxyCommands.fsReadFile, this.fullPath);\r\n\r\n        if (byteResult instanceof ArrayBuffer) {\r\n          this._content = new Uint8Array(byteResult as ArrayBuffer);\r\n        } else if (byteResult === undefined) {\r\n          this._content = null;\r\n        } else {\r\n          this._content = byteResult;\r\n        }\r\n      } else {\r\n        const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsReadUtf8File, this.fullPath);\r\n\r\n        if (result === undefined) {\r\n          this._content = null;\r\n        } else {\r\n          this._content = result;\r\n        }\r\n\r\n        // Log.debug(\"ElecF loading '\" + this.fullPath + \"' as text - \" + (result ? result.length + \" chars.\" : \" empty\"));\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n    if (newContent === null) {\r\n      Log.fail(\"Setting null content for \" + this.storageRelativePath);\r\n    }\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n    }\r\n\r\n    let oldContent = this._content;\r\n\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.content != null) {\r\n      this.parentFolder.ensureExists();\r\n\r\n      const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n      if (encoding === EncodingType.ByteBuffer) {\r\n        // Log.verbose(\"Saving '\" + this.fullPath + \"' as binary. size: \" + this.content.length);\r\n\r\n        await AppServiceProxy.sendBinaryAsync(AppServiceProxyCommands.fsWriteFile, {\r\n          path: this.fullPath,\r\n          content: this.content,\r\n        });\r\n      } else {\r\n        // Log.verbose(\"Saving '\" + this.fullPath + \"' as text. size: \" + this.content.length);\r\n\r\n        await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsWriteUtf8File, {\r\n          path: this.fullPath,\r\n          content: this.content,\r\n        });\r\n      }\r\n    }\r\n\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n    }\r\n\r\n    this._recycleItem(this.fullPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    await this.loadContent(false);\r\n\r\n    const originalPath = this.fullPath;\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as ElectronFolder;\r\n\r\n    this.modified = new Date();\r\n\r\n    (newParentFolder as ElectronFolder)._addExistingFile(this);\r\n\r\n    this._recycleItem(originalPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async _recycleItem(path: string) {\r\n    AppServiceProxy.sendAsync(AppServiceProxyCommands.shellRecycleItem, path);\r\n  }\r\n}\r\n", "import IFolder from \"./../storage/IFolder\";\r\nimport IFile from \"./../storage/IFile\";\r\nimport ElectronFile, { IFStatResult } from \"./ElectronFile\";\r\nimport ElectronStorage from \"./ElectronStorage\";\r\nimport StorageUtilities from \"./../storage/StorageUtilities\";\r\nimport FolderBase from \"./../storage/FolderBase\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport Log from \"./../core/Log\";\r\nimport Utilities from \"../core/Utilities\";\r\n\r\nexport default class ElectronFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _path: string;\r\n\r\n  folders: { [id: string]: ElectronFolder | undefined };\r\n  files: { [id: string]: ElectronFile | undefined };\r\n  private _storage: ElectronStorage;\r\n  private _parentFolder: ElectronFolder | null;\r\n\r\n  get storage(): ElectronStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): ElectronFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._path;\r\n\r\n    if (!path.endsWith(ElectronStorage.folderDelimiter) && !path.endsWith(\">\")) {\r\n      path += ElectronStorage.folderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  constructor(storage: ElectronStorage, parentFolder: ElectronFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._path = parentPath;\r\n    this._name = folderName;\r\n\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for electron storage\r\n  }\r\n\r\n  ensureFile(name: string): ElectronFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new ElectronFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      const candFile = this.files[nameCanon];\r\n\r\n      Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n      this.files[nameCanon] = undefined;\r\n\r\n      this.storage.notifyFileRemoved(this.storageRelativePath + file.name);\r\n    }\r\n  }\r\n\r\n  _addExistingFile(file: ElectronFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.files[nameCanon] = file;\r\n    }\r\n  }\r\n\r\n  ensureFolder(name: string): ElectronFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new ElectronFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    if (this.storage.available !== true) {\r\n      const res = await this.storage.getAvailable();\r\n\r\n      if (!res) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    if (this.storage.available === false) {\r\n      return false;\r\n    }\r\n\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsFolderExists, this.fullPath);\r\n\r\n    return result === \"true\";\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsDeleteFolder, this.fullPath);\r\n\r\n    if (result === \"true\") {\r\n      this.removeMeFromParent();\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    Log.assert(this.fullPath.lastIndexOf(\"<\") < 1, \"Tokens in a folder path: \" + this.fullPath);\r\n\r\n    const exists = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsFolderExists, this.fullPath);\r\n\r\n    if (exists !== \"true\") {\r\n      try {\r\n        await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsMkdir, this.fullPath);\r\n      } catch (e) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: ElectronFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    if (!Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      Log.unsupportedToken(nameCanon);\r\n      throw new Error();\r\n    }\r\n\r\n    this.folders[nameCanon] = folder;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const oldFullPath = this.fullPath;\r\n\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this.isSameFolder(newStorageRelativePath)) {\r\n      return false;\r\n    }\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Folder exists at specified path.\");\r\n      }\r\n\r\n      const newFullPath =\r\n        (newParentFolder as ElectronFolder).fullPath + ElectronStorage.folderDelimiter + newFolderName;\r\n\r\n      // Perform the disk rename BEFORE modifying in-memory tree.\r\n      // If the disk rename fails, the in-memory tree stays consistent.\r\n      const result = await AppServiceProxy.sendAsync(\r\n        AppServiceProxyCommands.fsRenameFolder,\r\n        oldFullPath + \"|\" + newFullPath\r\n      );\r\n\r\n      if (result !== \"true\") {\r\n        return false;\r\n      }\r\n\r\n      // Disk rename succeeded \u2014 now update in-memory tree\r\n      const previousStoragePath = this.storageRelativePath;\r\n\r\n      this._parentFolder._removeExistingFolderFromParent(this);\r\n\r\n      this._parentFolder = newParentFolder as ElectronFolder;\r\n\r\n      this._name = newFolderName;\r\n      (newParentFolder as ElectronFolder)._addExistingFolderToParent(this);\r\n\r\n      // Notify listeners about the folder move\r\n      this.notifyFolderMoved({\r\n        folder: this,\r\n        previousStoragePath: previousStoragePath,\r\n        newStoragePath: this.storageRelativePath,\r\n      });\r\n\r\n      return true;\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    const newFullPath = this.fullPath;\r\n\r\n    const result = await AppServiceProxy.sendAsync(\r\n      AppServiceProxyCommands.fsRenameFolder,\r\n      oldFullPath + \"|\" + newFullPath\r\n    );\r\n\r\n    return result === \"true\";\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    // Log.debug(\"Reading details on folder '\" + this.fullPath + \"'\");\r\n    const strResult = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsReaddir, this.fullPath);\r\n\r\n    if (strResult !== undefined) {\r\n      const results = JSON.parse(strResult);\r\n\r\n      if (results) {\r\n        for (const fileOrFolderName of results) {\r\n          let filePath = this.fullPath;\r\n\r\n          if (!filePath.endsWith(ElectronStorage.folderDelimiter)) {\r\n            filePath += ElectronStorage.folderDelimiter;\r\n          }\r\n\r\n          filePath += fileOrFolderName;\r\n\r\n          var stat = undefined;\r\n\r\n          let statResultStr: string | undefined = \"\";\r\n          let mtime: number | undefined = undefined;\r\n          try {\r\n            statResultStr = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsStat, filePath);\r\n\r\n            if (statResultStr) {\r\n              stat = JSON.parse(statResultStr) as IFStatResult;\r\n              mtime = Date.parse(stat.mtime);\r\n            }\r\n          } catch (e) {\r\n            Log.fail(\"Failed to parse statistics for \" + fileOrFolderName + \". \" + statResultStr);\r\n          }\r\n\r\n          if (stat) {\r\n            if (stat.isDirectory && !StorageUtilities.isIgnorableFolder(fileOrFolderName)) {\r\n              this.ensureFolder(fileOrFolderName);\r\n            } else if (stat.isFile && StorageUtilities.isUsableFile(filePath)) {\r\n              const file = this.ensureFile(fileOrFolderName);\r\n              file.localPersistDateTime = mtime;\r\n\r\n              if (stat.mtime) {\r\n                file.modifiedAtLoad = new Date(stat.mtime);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n}\r\n", "import ElectronFolder from \"./ElectronFolder\";\r\nimport StorageBase from \"./../storage/StorageBase\";\r\nimport IStorage from \"./../storage/IStorage\";\r\nimport Log from \"../core/Log\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\n\r\nexport default class ElectronStorage extends StorageBase implements IStorage {\r\n  path: string;\r\n  name: string;\r\n\r\n  rootFolder: ElectronFolder;\r\n\r\n  static folderDelimiter = \"/\";\r\n\r\n  static electronStorages: { [path: string]: ElectronStorage } = {};\r\n\r\n  constructor(path: string, name: string) {\r\n    super();\r\n\r\n    this.path = path;\r\n\r\n    Log.assert(this.path.length > 4 && this.path.startsWith(\"<\"), \"Path is not expected:\" + path);\r\n\r\n    ElectronStorage.electronStorages[this.path] = this;\r\n    this.name = name;\r\n\r\n    this.rootFolder = new ElectronFolder(this, null, path, name);\r\n  }\r\n\r\n  public static async processLocalFileUpdate(path: string) {\r\n    for (const esPath in ElectronStorage.electronStorages) {\r\n      if (StorageUtilities.canonicalizePath(path).startsWith(StorageUtilities.canonicalizePath(esPath))) {\r\n        const es = ElectronStorage.electronStorages[esPath];\r\n\r\n        if (es) {\r\n          await es.notifyPathWasUpdatedExternal(path);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a new file is detected by the Electron file watcher.\r\n   * Routes to the appropriate ElectronStorage instance.\r\n   */\r\n  public static async processLocalFileAdded(path: string) {\r\n    for (const esPath in ElectronStorage.electronStorages) {\r\n      if (StorageUtilities.canonicalizePath(path).startsWith(StorageUtilities.canonicalizePath(esPath))) {\r\n        const es = ElectronStorage.electronStorages[esPath];\r\n\r\n        if (es) {\r\n          await es.notifyPathWasAddedExternal(path);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when a file is removed by the Electron file watcher.\r\n   * Routes to the appropriate ElectronStorage instance.\r\n   */\r\n  public static async processLocalFileRemoved(path: string) {\r\n    for (const esPath in ElectronStorage.electronStorages) {\r\n      if (StorageUtilities.canonicalizePath(path).startsWith(StorageUtilities.canonicalizePath(esPath))) {\r\n        const es = ElectronStorage.electronStorages[esPath];\r\n\r\n        if (es) {\r\n          await es.notifyPathWasRemovedExternal(path);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async getAvailable(): Promise<boolean> {\r\n    if (this.available === undefined) {\r\n      const result = await AppServiceProxy.sendAsync(AppServiceProxyCommands.fsRootStorageExists, this.path);\r\n      this.available = result === \"true\";\r\n    }\r\n\r\n    return this.available;\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(ElectronStorage.folderDelimiter)) {\r\n      fullPath += ElectronStorage.folderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static getParentFolderPath(path: string) {\r\n    const lastDelim = path.lastIndexOf(this.folderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return path;\r\n    }\r\n\r\n    return path.substring(0, lastDelim);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\n\r\nexport const MaxDeploymentTargets = 8;\r\n\r\nexport enum DeploymentTargetType {\r\n  none = 0,\r\n  bedrock = 1,\r\n  bedrockPreview = 2,\r\n  education = 3,\r\n  educationPreview = 4,\r\n  developer = 5,\r\n  customDedicatedServer = 6,\r\n  customCoreData = 7,\r\n}\r\n\r\nexport default class DeploymentTarget {\r\n  storage: IStorage;\r\n  targetType: DeploymentTargetType;\r\n\r\n  private _deployBehaviorPacksFolder: IFolder;\r\n  private _deployResourcePacksFolder: IFolder;\r\n\r\n  get deployBehaviorPacksFolder(): IFolder | null {\r\n    return this._deployBehaviorPacksFolder;\r\n  }\r\n\r\n  get deployResourcePacksFolder(): IFolder | null {\r\n    return this._deployResourcePacksFolder;\r\n  }\r\n\r\n  constructor(storage: IStorage, targetType: DeploymentTargetType) {\r\n    this.storage = storage;\r\n    this.targetType = targetType;\r\n\r\n    this._deployBehaviorPacksFolder = this.storage.rootFolder.ensureFolder(\"development_behavior_packs\");\r\n    this._deployResourcePacksFolder = this.storage.rootFolder.ensureFolder(\"development_resource_packs\");\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport ICreatorToolsData, {\r\n  CreatorToolsEditorViewMode,\r\n  RemoteServerAccessLevel,\r\n  MinecraftFlavor,\r\n  DedicatedServerMode,\r\n  MinecraftGameConnectionMode,\r\n  MinecraftTrack,\r\n  WindowState,\r\n  CreatorToolsEditPreference,\r\n  ThemePreference,\r\n} from \"./ICreatorToolsData\";\r\nimport Project from \"./Project\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport { ProjectFocus, ProjectScriptLanguage } from \"./IProjectData\";\r\nimport IStatus, { StatusTopic, StatusType } from \"./Status\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport GitHubManager from \"../github/GitHubManager\";\r\nimport IGallery from \"./IGallery\";\r\nimport axios from \"axios\";\r\nimport Log from \"../core/Log\";\r\nimport AppServiceProxy, { AppServiceProxyCommands } from \"../core/AppServiceProxy\";\r\nimport CommandRunner from \"./CommandRunner\";\r\nimport ILocalUtilities from \"../core/ILocalUtilities\";\r\nimport IMinecraft from \"./IMinecraft\";\r\nimport RemoteMinecraft from \"./RemoteMinecraft\";\r\nimport CreatorToolsHost, { HostType } from \"./CreatorToolsHost\";\r\nimport MinecraftPush from \"./MinecraftPush\";\r\nimport ProcessHostedMinecraft from \"../clientapp/ProcessHostedProxyMinecraft\";\r\nimport MinecraftGameProxyMinecraft from \"../clientapp/MinecraftGameProxyMinecraft\";\r\nimport { GameType, Generator } from \"../minecraft/WorldLevelDat\";\r\nimport { BackupType } from \"../minecraft/IWorldSettings\";\r\nimport Package from \"./Package\";\r\nimport CommandRegistry from \"./CommandRegistry\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport { MaxItemTypes, ProjectItemType } from \"./IProjectItemData\";\r\nimport DeploymentStorageMinecraft from \"./DeploymentStorageMinecraft\";\r\nimport MinecraftUtilities from \"../minecraft/MinecraftUtilities\";\r\nimport IGalleryItem, { GalleryItemType } from \"./IGalleryItem\";\r\nimport ProjectUtilities from \"./ProjectUtilities\";\r\nimport ElectronStorage from \"../electronclient/ElectronStorage\";\r\nimport Storage from \"../storage/Storage\";\r\nimport Database from \"../minecraft/Database\";\r\nimport DeploymentTarget, { DeploymentTargetType, MaxDeploymentTargets } from \"./DeploymentTarget\";\r\n\r\nexport enum CreatorToolsMinecraftState {\r\n  none = 0,\r\n  initializing = 1, // for phserver, this is starting to auto-download\r\n  // for remote server, this is authenticating\r\n  // for web sockets, this is opening up the web socket to receive connections from a client\r\n  initialized = 2,\r\n  preparing = 3,\r\n  prepared = 4,\r\n  starting = 5, // for phserver, the server is starting\r\n  // for remote server, this is creating a session on a socket\r\n  // for web sockets, note you have to wait for external connections to come in.\r\n  started = 6, // for phserver, the server is up and ready\r\n  // for remote server, the session is ready and initial status has been established\r\n  // for web sockets, an external client has connected in\r\n  stopping = 7,\r\n  stopped = 8,\r\n  error = 9,\r\n  newMinecraft = 10,\r\n  disconnected = 11,\r\n}\r\n\r\nexport enum CreatorToolsMinecraftErrorStatus {\r\n  none = 0,\r\n  actionInProgress = 1,\r\n  serverUnavailable = 2,\r\n  serverError = 3,\r\n  loginFailed = 4,\r\n  generalError = 5,\r\n  configuration = 6,\r\n}\r\n\r\nexport const CreatorToolsTargetSettings = [\r\n  \"Latest Minecraft Bedrock\",\r\n  \"Latest Minecraft Bedrock preview\",\r\n  \"Latest Minecraft Education\",\r\n  \"Latest Minecraft Education preview\",\r\n];\r\n\r\nexport const SidePaneMaxWidth = 880;\r\nexport const SidePaneMinWidth = 280;\r\n\r\nexport const DefaultCreatorName = \"Minecraft Creator\";\r\n\r\nexport default class CreatorTools {\r\n  private _isLoaded: boolean;\r\n  private _userGitHub: GitHubManager | undefined;\r\n  private _anonGitHub: GitHubManager | undefined;\r\n\r\n  contentRoot = \"\";\r\n\r\n  processHostedMinecraft: IMinecraft | undefined;\r\n  deploymentStorageMinecraft: IMinecraft | undefined;\r\n  gameMinecraft: IMinecraft | undefined;\r\n  remoteMinecraft: RemoteMinecraft | undefined;\r\n  activeMinecraft: IMinecraft | undefined;\r\n\r\n  prefsStorage: IStorage;\r\n  projectsStorage: IStorage;\r\n  deploymentStorage: IStorage[];\r\n  worldStorage: IStorage | null;\r\n  packStorage: IStorage | null;\r\n  workingStorage: IStorage | null;\r\n\r\n  deploymentTargets: DeploymentTarget[] = [];\r\n\r\n  localFolderExists: ((path: string) => Promise<boolean>) | undefined;\r\n  localFileExists: ((path: string) => Promise<boolean>) | undefined;\r\n  ensureLocalFolder: ((path: string) => IFolder) | undefined;\r\n  createMinecraft: ((flavor: MinecraftFlavor, creatorTools: CreatorTools) => IMinecraft | undefined) | undefined;\r\n  canCreateMinecraft: ((flavor: MinecraftFlavor) => boolean) | undefined;\r\n\r\n  private _pendingPackLoadRequests: ((value: unknown) => void)[] = [];\r\n  private _arePacksLoading: boolean = false;\r\n\r\n  // Private instance variable for auth token - not persisted in #data\r\n  // This is used for in-memory session tokens (e.g., from mct view command)\r\n  private _remoteServerAuthToken?: string;\r\n\r\n  // Runtime property for remote server EULA acceptance status\r\n  // This is set from the server's auth response and indicates whether the\r\n  // server has accepted the Minecraft EULA. Not persisted locally.\r\n  private _remoteServerEulaAccepted?: boolean;\r\n\r\n  local: ILocalUtilities | undefined;\r\n  #data: ICreatorToolsData;\r\n  projects: Project[];\r\n  status: IStatus[];\r\n  activeOperations: IStatus[];\r\n\r\n  packs?: Package[];\r\n\r\n  mcLogs: { [name: string]: string[] | undefined } = {};\r\n\r\n  _gallery?: IGallery;\r\n  _galleryLoaded: boolean = false;\r\n  isDeployingToMinecraft: boolean = false;\r\n\r\n  hasAttemptedPersistentBrowserStorageSwitch: boolean = false;\r\n\r\n  private _onDeploymentStorageChanged = new EventDispatcher<CreatorTools, IStorage | null>();\r\n  private _onMinecraftStateChanged = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onMinecraftRefreshed = new EventDispatcher<IMinecraft, CreatorToolsMinecraftState>();\r\n  private _onPropertyChanged = new EventDispatcher<CreatorTools, string>();\r\n  private _onLoaded = new EventDispatcher<CreatorTools, CreatorTools>();\r\n  private _onStatusAdded = new EventDispatcher<CreatorTools, IStatus>();\r\n  private _onOperationCompleted = new EventDispatcher<CreatorTools, number>();\r\n  private _onStatusAddedAsync: ((creatorTools: CreatorTools, status: IStatus) => Promise<void>)[] = [];\r\n  private _onGalleryLoaded = new EventDispatcher<CreatorTools, IGallery | undefined>();\r\n\r\n  public get defaultDeploymentTargetType() {\r\n    if (this.#data.defaultDeploymentTarget !== undefined) {\r\n      return this.#data.defaultDeploymentTarget;\r\n    }\r\n\r\n    for (let i = 0; i < MaxDeploymentTargets; i++) {\r\n      if (this.deploymentStorage[i]) {\r\n        return i;\r\n      }\r\n    }\r\n\r\n    return DeploymentTargetType.bedrock;\r\n  }\r\n\r\n  public set defaultDeploymentTargetType(newType: DeploymentTargetType) {\r\n    this.#data.defaultDeploymentTarget = newType;\r\n  }\r\n\r\n  public get isLoaded() {\r\n    return this._isLoaded;\r\n  }\r\n\r\n  public get collapsedTypes() {\r\n    if (!this.#data.collapsedTypes) {\r\n      this.#data.collapsedTypes = [];\r\n    }\r\n\r\n    return this.#data.collapsedTypes;\r\n  }\r\n\r\n  public get data() {\r\n    return this.#data;\r\n  }\r\n\r\n  public get defaultDeploymentStorage() {\r\n    return this.deploymentStorage[this.defaultDeploymentTargetType];\r\n  }\r\n\r\n  public get defaultDeploymentTarget() {\r\n    return this.getDeploymentTarget(this.defaultDeploymentTargetType);\r\n  }\r\n\r\n  public set collapsedTypes(newCollapsedTypes: number[]) {\r\n    this.#data.collapsedTypes = newCollapsedTypes;\r\n  }\r\n\r\n  public get showMruPane(): boolean {\r\n    if (this.#data.showMruPane === undefined) {\r\n      return true; // Default to showing MRU pane\r\n    }\r\n    return this.#data.showMruPane;\r\n  }\r\n\r\n  public set showMruPane(newValue: boolean) {\r\n    this.#data.showMruPane = newValue;\r\n  }\r\n\r\n  public get mruItemPaths(): string[] {\r\n    if (!this.#data.mruItemPaths) {\r\n      this.#data.mruItemPaths = [];\r\n    }\r\n    return this.#data.mruItemPaths;\r\n  }\r\n\r\n  public set mruItemPaths(newPaths: string[]) {\r\n    this.#data.mruItemPaths = newPaths;\r\n  }\r\n\r\n  public get viewAsFiles(): boolean {\r\n    if (this.#data.viewAsFiles === undefined) {\r\n      return false; // Default to items view\r\n    }\r\n    return this.#data.viewAsFiles;\r\n  }\r\n\r\n  public set viewAsFiles(newValue: boolean) {\r\n    this.#data.viewAsFiles = newValue;\r\n  }\r\n\r\n  /**\r\n   * Adds a project item path to the MRU list.\r\n   * Moves existing entries to front and maintains max 10 items.\r\n   */\r\n  public addToMru(projectPath: string): void {\r\n    if (!projectPath) return;\r\n\r\n    const paths = this.mruItemPaths;\r\n    // Remove if already exists (to move to front)\r\n    const existingIndex = paths.indexOf(projectPath);\r\n    if (existingIndex !== -1) {\r\n      paths.splice(existingIndex, 1);\r\n    }\r\n    // Add to front\r\n    paths.unshift(projectPath);\r\n    // Keep max 10 items\r\n    if (paths.length > 10) {\r\n      paths.pop();\r\n    }\r\n    this.#data.mruItemPaths = paths;\r\n  }\r\n\r\n  /**\r\n   * Removes a project item path from the MRU list.\r\n   */\r\n  public removeFromMru(projectPath: string): void {\r\n    if (!projectPath) return;\r\n\r\n    const paths = this.mruItemPaths;\r\n    const index = paths.indexOf(projectPath);\r\n    if (index !== -1) {\r\n      paths.splice(index, 1);\r\n      this.#data.mruItemPaths = paths;\r\n    }\r\n  }\r\n\r\n  public get editPreference() {\r\n    return this.#data.editPreference;\r\n  }\r\n\r\n  public set editPreference(newValue: CreatorToolsEditPreference | undefined) {\r\n    this.#data.editPreference = newValue;\r\n  }\r\n\r\n  public get disableFirstRun() {\r\n    return this.#data.disableFirstRun === true;\r\n  }\r\n\r\n  public set disableFirstRun(newValue: boolean) {\r\n    this.#data.disableFirstRun = newValue;\r\n  }\r\n\r\n  public get themePreference() {\r\n    return this.#data.themePreference;\r\n  }\r\n\r\n  public set themePreference(newValue: ThemePreference | undefined) {\r\n    this.#data.themePreference = newValue;\r\n  }\r\n\r\n  public get worldSettings() {\r\n    return this.#data.worldSettings;\r\n  }\r\n\r\n  public get editorWorldSettings() {\r\n    return this.#data.editorWorldSettings;\r\n  }\r\n\r\n  public get activeMinecraftState() {\r\n    if (this.activeMinecraft === undefined) {\r\n      return CreatorToolsMinecraftState.none;\r\n    }\r\n\r\n    return this.activeMinecraft.state;\r\n  }\r\n\r\n  public get onMinecraftStateChanged() {\r\n    return this._onMinecraftStateChanged.asEvent();\r\n  }\r\n\r\n  public get onDeploymentStorageChanged() {\r\n    return this._onDeploymentStorageChanged.asEvent();\r\n  }\r\n\r\n  public get formatBeforeSave() {\r\n    if (this.#data.formatBeforeSave === undefined) {\r\n      // Default OFF for pro-grade safety: many creators hand-format their JSON\r\n      // (compact arrays for [1,0,0] versions, inline component groups, custom\r\n      // indentation), and silently reformatting on save destroys diff signal\r\n      // and intentional formatting. Opt-in is the safer default.\r\n      return false;\r\n    }\r\n\r\n    return this.#data.formatBeforeSave;\r\n  }\r\n\r\n  public set formatBeforeSave(newValue: boolean) {\r\n    this.#data.formatBeforeSave = newValue;\r\n  }\r\n\r\n  public get showLivePreview() {\r\n    if (this.#data.showLivePreview === undefined) {\r\n      return true; // Default to on\r\n    }\r\n\r\n    return this.#data.showLivePreview;\r\n  }\r\n\r\n  public set showLivePreview(newValue: boolean) {\r\n    this.#data.showLivePreview = newValue;\r\n  }\r\n\r\n  public get conversionJarPath() {\r\n    return this.#data.conversionJarPath;\r\n  }\r\n\r\n  public set conversionJarPath(newValue: string | undefined) {\r\n    this.#data.conversionJarPath = newValue;\r\n  }\r\n\r\n  public get preferredTextSize() {\r\n    if (this.#data.preferredTextSize === undefined) {\r\n      return 16;\r\n    }\r\n\r\n    return this.#data.preferredTextSize;\r\n  }\r\n\r\n  public set preferredTextSize(newValue: number) {\r\n    this.#data.preferredTextSize = newValue;\r\n  }\r\n\r\n  public get livePreviewWidth() {\r\n    // Default to 260px, min 200px, max 600px\r\n    if (this.#data.livePreviewWidth === undefined) {\r\n      return 260;\r\n    }\r\n    if (this.#data.livePreviewWidth < 200) {\r\n      return 200;\r\n    }\r\n    if (this.#data.livePreviewWidth > 600) {\r\n      return 600;\r\n    }\r\n    return this.#data.livePreviewWidth;\r\n  }\r\n\r\n  public set livePreviewWidth(newValue: number) {\r\n    // Clamp to min 200px, max 600px\r\n    if (newValue < 200) {\r\n      newValue = 200;\r\n    }\r\n    if (newValue > 600) {\r\n      newValue = 600;\r\n    }\r\n    this.#data.livePreviewWidth = newValue;\r\n  }\r\n\r\n  public get itemSidePaneWidth() {\r\n    if (this.#data.itemSidePaneWidth === undefined) {\r\n      return 300;\r\n    }\r\n\r\n    if (this.#data.itemSidePaneWidth < SidePaneMinWidth) {\r\n      return SidePaneMinWidth;\r\n    }\r\n\r\n    if (this.#data.itemSidePaneWidth > SidePaneMaxWidth) {\r\n      return SidePaneMaxWidth;\r\n    }\r\n\r\n    return this.#data.itemSidePaneWidth;\r\n  }\r\n\r\n  public set itemSidePaneWidth(newValue: number) {\r\n    this.#data.itemSidePaneWidth = newValue;\r\n  }\r\n\r\n  public get toolPaneWidth() {\r\n    if (this.#data.toolPaneWidth === undefined) {\r\n      return 380;\r\n    }\r\n\r\n    if (this.#data.toolPaneWidth < SidePaneMinWidth) {\r\n      return SidePaneMinWidth;\r\n    }\r\n\r\n    if (this.#data.toolPaneWidth > SidePaneMaxWidth) {\r\n      return SidePaneMaxWidth;\r\n    }\r\n\r\n    return this.#data.toolPaneWidth;\r\n  }\r\n\r\n  public set toolPaneWidth(newValue: number) {\r\n    this.#data.toolPaneWidth = newValue;\r\n  }\r\n\r\n  public get preferredSuite() {\r\n    return this.#data.preferredSuite;\r\n  }\r\n\r\n  public set preferredSuite(newValue: number | undefined) {\r\n    this.#data.preferredSuite = newValue;\r\n  }\r\n\r\n  get track(): MinecraftTrack | undefined {\r\n    return this.#data.track;\r\n  }\r\n\r\n  set track(newTrack: MinecraftTrack | undefined) {\r\n    if (newTrack !== this.#data.track) {\r\n      this.#data.track = newTrack;\r\n      this._onPropertyChanged.dispatch(this, \"track\");\r\n    }\r\n  }\r\n\r\n  get effectiveTrack(): MinecraftTrack {\r\n    if (this.#data.track !== undefined) {\r\n      return this.#data.track;\r\n    }\r\n\r\n    return MinecraftTrack.main;\r\n  }\r\n\r\n  public get useEditor() {\r\n    return this.#data.useEditor;\r\n  }\r\n\r\n  public set useEditor(newUseEditor: boolean | undefined) {\r\n    if (newUseEditor !== this.#data.useEditor) {\r\n      this.#data.useEditor = newUseEditor;\r\n    }\r\n  }\r\n\r\n  public get windowX() {\r\n    if (this.#data.windowX === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.windowX;\r\n  }\r\n\r\n  public set windowX(newVal: number | undefined) {\r\n    this.#data.windowX = newVal;\r\n  }\r\n\r\n  public get windowY() {\r\n    if (this.#data.windowY === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.windowY;\r\n  }\r\n\r\n  public set windowY(newVal: number | undefined) {\r\n    this.#data.windowY = newVal;\r\n  }\r\n\r\n  public get windowWidth() {\r\n    if (this.#data.windowWidth === undefined) {\r\n      return 1200;\r\n    }\r\n\r\n    return this.#data.windowWidth;\r\n  }\r\n\r\n  public set windowWidth(newVal: number | undefined) {\r\n    this.#data.windowWidth = newVal;\r\n  }\r\n\r\n  public get windowHeight() {\r\n    if (this.#data.windowHeight === undefined) {\r\n      return 900;\r\n    }\r\n    return this.#data.windowHeight;\r\n  }\r\n\r\n  public set windowHeight(newVal: number | undefined) {\r\n    this.#data.windowHeight = newVal;\r\n  }\r\n\r\n  public get windowSlot() {\r\n    if (this.#data.windowSlot === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.windowSlot;\r\n  }\r\n\r\n  public set windowSlot(newVal: number | undefined) {\r\n    this.#data.windowSlot = newVal;\r\n  }\r\n\r\n  get creator(): string | undefined {\r\n    return this.#data.creator;\r\n  }\r\n\r\n  set creator(newCreator: string | undefined) {\r\n    if (this.#data.creator !== newCreator) {\r\n      this.#data.creator = newCreator;\r\n\r\n      this._onPropertyChanged.dispatch(this, \"creator\");\r\n    }\r\n  }\r\n\r\n  public get windowState() {\r\n    if (this.#data.windowState === undefined) {\r\n      return WindowState.regular;\r\n    }\r\n\r\n    return this.#data.windowState;\r\n  }\r\n\r\n  public set windowState(newVal: number | undefined) {\r\n    this.#data.windowState = newVal;\r\n  }\r\n\r\n  public get lastActiveMinecraftFlavor() {\r\n    return this.#data.lastActiveMinecraftFlavor;\r\n  }\r\n\r\n  public set lastActiveMinecraftFlavor(lastActiveMinecraftFlavor: MinecraftFlavor | undefined) {\r\n    if (lastActiveMinecraftFlavor !== this.#data.lastActiveMinecraftFlavor) {\r\n      this.#data.lastActiveMinecraftFlavor = lastActiveMinecraftFlavor;\r\n    }\r\n  }\r\n\r\n  public get remoteServerUrl() {\r\n    if (this.#data.remoteServerUrl === undefined && CreatorToolsHost.baseUrl) {\r\n      return Utilities.getBaseUrl(CreatorToolsHost.baseUrl);\r\n    }\r\n\r\n    return this.#data.remoteServerUrl;\r\n  }\r\n\r\n  public get fullRemoteServerUrl() {\r\n    if (!this.remoteServerUrl) {\r\n      return undefined;\r\n    }\r\n\r\n    let url = this.remoteServerUrl.toLowerCase();\r\n\r\n    if (!url.startsWith(\"http\") && url.indexOf(\"//\") < 0) {\r\n      if (url.indexOf(\"localhost\") >= 0) {\r\n        url = \"http://\" + url;\r\n      } else {\r\n        url = \"https://\" + url;\r\n      }\r\n    }\r\n\r\n    url = Utilities.ensureEndsWithSlash(url);\r\n\r\n    return url;\r\n  }\r\n\r\n  public set remoteServerUrl(newPath: string | undefined) {\r\n    if (newPath !== this.#data.remoteServerUrl) {\r\n      this.#data.remoteServerUrl = newPath;\r\n    }\r\n  }\r\n\r\n  public get iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula() {\r\n    return this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula;\r\n  }\r\n\r\n  public set iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula(\r\n    newPort: boolean | undefined\r\n  ) {\r\n    this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula = newPort;\r\n  }\r\n\r\n  public get dedicatedServerSlotCount() {\r\n    return this.#data.dedicatedServerSlotCount;\r\n  }\r\n\r\n  public set dedicatedServerSlotCount(newPort: number | undefined) {\r\n    this.#data.dedicatedServerSlotCount = newPort;\r\n  }\r\n\r\n  public get dedicatedServerMode() {\r\n    if (this.#data.dedicatedServerMode === undefined) {\r\n      return DedicatedServerMode.auto;\r\n    }\r\n\r\n    return this.#data.dedicatedServerMode;\r\n  }\r\n\r\n  public set dedicatedServerMode(newMode: DedicatedServerMode | undefined) {\r\n    this.#data.dedicatedServerMode = newMode;\r\n  }\r\n\r\n  public get dedicatedServerPath() {\r\n    return this.#data.dedicatedServerPath;\r\n  }\r\n\r\n  public set minecraftGameMode(newMode: MinecraftGameConnectionMode | undefined) {\r\n    this.#data.webSocketMode = newMode;\r\n  }\r\n\r\n  public get minecraftGameMode() {\r\n    return this.#data.webSocketMode;\r\n  }\r\n\r\n  public set dedicatedServerPath(newPath: string | undefined) {\r\n    this.#data.dedicatedServerPath = newPath;\r\n  }\r\n\r\n  public get remoteServerPort() {\r\n    if (this.#data.remoteServerPort === undefined) {\r\n      return 0;\r\n    }\r\n\r\n    return this.#data.remoteServerPort;\r\n  }\r\n\r\n  public set remoteServerPort(newPort: number | undefined) {\r\n    this.#data.remoteServerPort = newPort;\r\n  }\r\n\r\n  public get remoteServerAccessLevel() {\r\n    return this.#data.remoteServerAccessLevel;\r\n  }\r\n\r\n  public set remoteServerAccessLevel(newAccessLevel: RemoteServerAccessLevel | undefined) {\r\n    this.#data.remoteServerAccessLevel = newAccessLevel;\r\n  }\r\n\r\n  public get remoteServerPasscode() {\r\n    return this.#data.remoteServerPasscode;\r\n  }\r\n\r\n  public set remoteServerPasscode(newPath: string | undefined) {\r\n    this.#data.remoteServerPasscode = newPath;\r\n  }\r\n\r\n  public get remoteServerAuthToken() {\r\n    return this._remoteServerAuthToken;\r\n  }\r\n\r\n  public set remoteServerAuthToken(newToken: string | undefined) {\r\n    this._remoteServerAuthToken = newToken;\r\n  }\r\n\r\n  public get remoteServerEulaAccepted() {\r\n    return this._remoteServerEulaAccepted;\r\n  }\r\n\r\n  public set remoteServerEulaAccepted(newValue: boolean | undefined) {\r\n    this._remoteServerEulaAccepted = newValue;\r\n  }\r\n\r\n  public get editorViewMode() {\r\n    if (this.#data.editorViewMode === undefined) {\r\n      return CreatorToolsEditorViewMode.itemsOnLeft;\r\n    }\r\n\r\n    return this.#data.editorViewMode;\r\n  }\r\n\r\n  public set editorViewMode(newViewMode: CreatorToolsEditorViewMode) {\r\n    this.#data.editorViewMode = newViewMode;\r\n  }\r\n\r\n  public get gallery() {\r\n    return this._gallery;\r\n  }\r\n\r\n  public get galleryLoaded() {\r\n    return this._galleryLoaded;\r\n  }\r\n\r\n  public get userGitHub(): GitHubManager {\r\n    if (this._userGitHub === undefined) {\r\n      this._userGitHub = new GitHubManager();\r\n    }\r\n\r\n    return this._userGitHub;\r\n  }\r\n\r\n  public get anonGitHub(): GitHubManager {\r\n    if (this._anonGitHub === undefined) {\r\n      this._anonGitHub = new GitHubManager();\r\n    }\r\n\r\n    return this._anonGitHub;\r\n  }\r\n\r\n  public get onLoaded() {\r\n    return this._onLoaded.asEvent();\r\n  }\r\n\r\n  public get onGalleryLoaded() {\r\n    return this._onGalleryLoaded.asEvent();\r\n  }\r\n\r\n  public get onPropertyChanged() {\r\n    return this._onPropertyChanged.asEvent();\r\n  }\r\n\r\n  public get onStatusAdded() {\r\n    return this._onStatusAdded.asEvent();\r\n  }\r\n\r\n  public get onOperationCompleted() {\r\n    return this._onOperationCompleted.asEvent();\r\n  }\r\n\r\n  public get successfullyConnectedWebSocketToMinecraft() {\r\n    if (this.#data.successfullyConnectedWebSocketToMinecraft === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this.#data.successfullyConnectedWebSocketToMinecraft;\r\n  }\r\n\r\n  public set successfullyConnectedWebSocketToMinecraft(newValue: boolean) {\r\n    this.#data.successfullyConnectedWebSocketToMinecraft = newValue;\r\n  }\r\n\r\n  public get successfullyStartedMinecraftServer() {\r\n    if (this.#data.successfullyStartedMinecraftServer === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this.#data.successfullyStartedMinecraftServer;\r\n  }\r\n\r\n  public set successfullyStartedMinecraftServer(newValue: boolean) {\r\n    this.#data.successfullyStartedMinecraftServer = newValue;\r\n  }\r\n\r\n  public get successfullyConnectedToRemoteMinecraft() {\r\n    if (this.#data.successfullyConnectedToRemoteMinecraft === undefined) {\r\n      return false;\r\n    }\r\n\r\n    return this.#data.successfullyConnectedToRemoteMinecraft;\r\n  }\r\n\r\n  public set successfullyConnectedToRemoteMinecraft(newValue: boolean) {\r\n    this.#data.successfullyConnectedToRemoteMinecraft = newValue;\r\n  }\r\n\r\n  public get defaultMinecraftFlavor() {\r\n    if (this.#data.lastActiveMinecraftFlavor === undefined) {\r\n      if (CreatorToolsHost.isAppServiceWeb) {\r\n        return MinecraftFlavor.processHostedProxy;\r\n      } else {\r\n        return MinecraftFlavor.remote;\r\n      }\r\n    }\r\n\r\n    return this.#data.lastActiveMinecraftFlavor;\r\n  }\r\n\r\n  public subscribeStatusAddedAsync(fn: (creatorTools: CreatorTools, status: IStatus) => Promise<void>) {\r\n    this._onStatusAddedAsync.push(fn);\r\n  }\r\n\r\n  public unsubscribeStatusAddedAsync(fn: (creatorTools: CreatorTools, status: IStatus) => Promise<void>) {\r\n    let newStatusAddedArr: ((creatorTools: CreatorTools, status: IStatus) => Promise<void>)[] = [];\r\n\r\n    for (let i = 0; i < this._onStatusAddedAsync.length; i++) {\r\n      if (this._onStatusAddedAsync[i] !== fn) {\r\n        newStatusAddedArr.push(this._onStatusAddedAsync[i]);\r\n      }\r\n    }\r\n\r\n    this._onStatusAddedAsync = newStatusAddedArr;\r\n  }\r\n\r\n  public setMinecraftFlavor(newValue: MinecraftFlavor) {\r\n    this.ensureMinecraft(newValue);\r\n  }\r\n\r\n  public get autoStartMinecraft() {\r\n    if (this.#data.autoStartMinecraft === undefined) {\r\n      return true;\r\n    }\r\n\r\n    return this.#data.autoStartMinecraft;\r\n  }\r\n\r\n  public set autoStartMinecraft(newValue: boolean) {\r\n    this.#data.autoStartMinecraft = newValue;\r\n  }\r\n\r\n  get file(): IFile {\r\n    return this.prefsStorage.rootFolder.ensureFile(\"mctools.json\");\r\n  }\r\n\r\n  get prefsProjectsFolder(): IFolder {\r\n    return this.prefsStorage.rootFolder.ensureFolder(\"projects\");\r\n  }\r\n\r\n  constructor(\r\n    settingsStorage: IStorage,\r\n    projectsStorage: IStorage,\r\n    deploymentsStorage: IStorage[],\r\n    worldStorage: IStorage | null,\r\n    packStorage: IStorage | null,\r\n    workingStorage: IStorage | null,\r\n    contentRoot: string | null\r\n  ) {\r\n    this.prefsStorage = settingsStorage;\r\n    this.projectsStorage = projectsStorage;\r\n    this.deploymentStorage = deploymentsStorage;\r\n    this.packStorage = packStorage;\r\n    this.worldStorage = worldStorage;\r\n    this.workingStorage = workingStorage;\r\n\r\n    if (contentRoot) {\r\n      this.contentRoot = contentRoot;\r\n    }\r\n\r\n    this._handleMessageFromAppService = this._handleMessageFromAppService.bind(this);\r\n    this._bubbleMinecraftStateChanged = this._bubbleMinecraftStateChanged.bind(this);\r\n    this._bubbleMinecraftRefreshed = this._bubbleMinecraftRefreshed.bind(this);\r\n\r\n    AppServiceProxy.onMessage.subscribe(this._handleMessageFromAppService);\r\n\r\n    this.#data = {\r\n      successfullyConnectedWebSocketToMinecraft: false,\r\n      successfullyStartedMinecraftServer: false,\r\n      successfullyConnectedToRemoteMinecraft: false,\r\n      autoStartMinecraft: true,\r\n      showScreenOnConnect: true,\r\n      customTools: [],\r\n    };\r\n\r\n    // in the case of a Minecraft Http Server self-hosted web page, assume all we want to do is connect back to our server.\r\n    // But NOT in the Electron app \u2014 there we default to hosting BDS locally.\r\n    if (CreatorToolsHost.baseUrl && !CreatorToolsHost.isAppServiceWeb) {\r\n      this.setMinecraftFlavor(MinecraftFlavor.remote);\r\n      this.successfullyConnectedWebSocketToMinecraft = true;\r\n    }\r\n\r\n    this._isLoaded = false;\r\n    this.projects = [];\r\n    this.status = [];\r\n    this.activeOperations = [];\r\n  }\r\n\r\n  public initializeWorldSettings() {\r\n    if (this.#data.worldSettings === undefined) {\r\n      this.#data.worldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        randomSeed: \"2000\",\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n        isEditor: false,\r\n        deployCreatorToolsInfrastructure: true,\r\n        enableDebugger: true,\r\n        enableDebuggerStreaming: true,\r\n        packageReferences: [],\r\n      };\r\n\r\n      this.ensureDefaultWorldName();\r\n    }\r\n  }\r\n\r\n  public getDeploymentTarget(target: DeploymentTargetType): DeploymentTarget | undefined {\r\n    let dt = this.deploymentTargets[target];\r\n\r\n    if (!dt && this.deploymentStorage[target]) {\r\n      dt = new DeploymentTarget(this.deploymentStorage[target], target);\r\n\r\n      this.deploymentTargets[target] = dt;\r\n    }\r\n\r\n    return dt;\r\n  }\r\n\r\n  private ensureDefaultWorldName() {\r\n    if (this.worldSettings && this.worldSettings.name === undefined) {\r\n      this.worldSettings.name = \"world \" + Utilities.getDateStr(new Date());\r\n    }\r\n  }\r\n\r\n  public initializeEditorWorldSettings() {\r\n    if (this.#data.editorWorldSettings === undefined) {\r\n      this.#data.editorWorldSettings = {\r\n        gameType: GameType.creative,\r\n        generator: Generator.infinite,\r\n        backupType: BackupType.every5Minutes,\r\n        useCustomSettings: false,\r\n        isEditor: true,\r\n        packageReferences: [],\r\n      };\r\n\r\n      this.ensureDefaultEditorWorldName();\r\n    }\r\n  }\r\n\r\n  private ensureDefaultEditorWorldName() {\r\n    if (this.editorWorldSettings && this.editorWorldSettings.name === undefined) {\r\n      this.editorWorldSettings.name = \"editor project \" + Utilities.getDateStr(new Date());\r\n    }\r\n  }\r\n\r\n  getCustomTool(index: number) {\r\n    if (this.#data.customTools === undefined) {\r\n      this.#data.customTools = [];\r\n    }\r\n\r\n    while (this.#data.customTools.length <= index) {\r\n      this.#data.customTools.push({\r\n        name: \"\",\r\n        type: 0,\r\n        text: undefined,\r\n        lastRunResult: undefined,\r\n      });\r\n    }\r\n\r\n    return this.#data.customTools[index];\r\n  }\r\n\r\n  get defaultFunction() {\r\n    if (this.#data === undefined || this.#data.defaultFunction === undefined) {\r\n      return \"\";\r\n    }\r\n\r\n    return this.#data.defaultFunction;\r\n  }\r\n\r\n  set defaultFunction(newFunction: string) {\r\n    if (this.#data === undefined) {\r\n      return;\r\n    }\r\n\r\n    this.#data.defaultFunction = Utilities.makeSafeForJson(newFunction);\r\n  }\r\n\r\n  async runCommand(command: string, project?: Project) {\r\n    return await CommandRegistry.main.runCommand(\r\n      {\r\n        creatorTools: this,\r\n        project: project,\r\n        minecraft: this.activeMinecraft,\r\n        host: CreatorToolsHost.hostManager,\r\n      },\r\n      command\r\n    );\r\n  }\r\n\r\n  async runMinecraftCommand(command: string) {\r\n    if (this.activeMinecraft === undefined) {\r\n      throw new Error(\"No minecraft active.\");\r\n    }\r\n\r\n    const result = await this.activeMinecraft.runCommand(command);\r\n\r\n    return result;\r\n  }\r\n\r\n  async loadPacks() {\r\n    if (!this.packStorage) {\r\n      throw new Error(\"Could not find pack storage\");\r\n    }\r\n\r\n    if (this._arePacksLoading) {\r\n      const pendingLoad = this._pendingPackLoadRequests;\r\n\r\n      const prom = (resolve: (value: unknown) => void, reject: (reason?: any) => void) => {\r\n        pendingLoad.push(resolve);\r\n      };\r\n\r\n      await new Promise(prom);\r\n    } else {\r\n      this._arePacksLoading = true;\r\n\r\n      this.packs = [];\r\n\r\n      const creatorToolsIngame = await Database.ensureCreatorToolsIngameFile();\r\n\r\n      if (creatorToolsIngame) {\r\n        await this.ensurePackForFile(creatorToolsIngame);\r\n      }\r\n\r\n      Log.message(\"Loading packs from '\" + this.packStorage.rootFolder.fullPath + \"'\");\r\n      await this.loadPacksFromFolder(this.packStorage.rootFolder);\r\n\r\n      this._arePacksLoading = false;\r\n\r\n      const pendingLoad = this._pendingPackLoadRequests;\r\n      this._pendingPackLoadRequests = [];\r\n\r\n      for (const prom of pendingLoad) {\r\n        prom(undefined);\r\n      }\r\n    }\r\n  }\r\n\r\n  ensureAllTypesCollapsedExcept(itemType: ProjectItemType) {\r\n    const newCollapsedTypes: number[] = [];\r\n\r\n    for (let i = 0; i < MaxItemTypes; i++) {\r\n      if (i !== itemType) {\r\n        newCollapsedTypes.push(i);\r\n      }\r\n    }\r\n\r\n    this.collapsedTypes = newCollapsedTypes;\r\n  }\r\n\r\n  ensureTypeIsCollapsed(itemType: ProjectItemType) {\r\n    for (const itemTypeCollapsed of this.collapsedTypes) {\r\n      if (itemTypeCollapsed === itemType) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.collapsedTypes.push(itemType);\r\n  }\r\n\r\n  ensureTypeIsNotCollapsed(itemType: ProjectItemType) {\r\n    const newCollapsedTypes: number[] = [];\r\n\r\n    for (const itemTypeCollapsed of this.collapsedTypes) {\r\n      if (itemTypeCollapsed !== itemType) {\r\n        newCollapsedTypes.push(itemTypeCollapsed);\r\n      }\r\n    }\r\n\r\n    this.#data.collapsedTypes = newCollapsedTypes;\r\n  }\r\n\r\n  async loadPacksFromFolder(folder: IFolder) {\r\n    await folder.load();\r\n\r\n    for (let fileName in folder.files) {\r\n      const file = folder.files[fileName];\r\n\r\n      if (file && StorageUtilities.isContainerFile(file.storageRelativePath)) {\r\n        await this.ensurePackForFile(file);\r\n      }\r\n    }\r\n  }\r\n\r\n  getPackByName(packName: string, isWorldFocused?: boolean) {\r\n    if (!this.packs) {\r\n      Log.unexpectedUndefined(\"GPN\");\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.packs.length; i++) {\r\n      if (this.packs[i].matches(packName, isWorldFocused)) {\r\n        return this.packs[i];\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getPackageByNameAndHash(packName: string, hash?: string) {\r\n    if (!this.packs) {\r\n      Log.unexpectedUndefined(\"GPNH\");\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < this.packs.length; i++) {\r\n      if (this.packs[i].matches(packName, false) && (hash === undefined || hash === this.packs[i].data?.sourceHash)) {\r\n        return this.packs[i];\r\n      }\r\n    }\r\n\r\n    return this.getPackByName(packName);\r\n  }\r\n\r\n  async ensurePackForFile(file: IFile) {\r\n    const pack = this._ensurePack(file.storageRelativePath);\r\n\r\n    await pack.ensureData(this, file);\r\n\r\n    return pack;\r\n  }\r\n\r\n  _ensurePack(storagePath: string) {\r\n    if (this.packs === undefined) {\r\n      this.packs = [];\r\n    }\r\n\r\n    for (let i = 0; i < this.packs.length; i++) {\r\n      if (this.packs[i].storagePath === storagePath) {\r\n        return this.packs[i];\r\n      }\r\n    }\r\n\r\n    const pack = new Package(StorageUtilities.getLeafName(storagePath), storagePath);\r\n\r\n    this.packs.push(pack);\r\n\r\n    return pack;\r\n  }\r\n\r\n  _handleMessageFromAppService(command: string, data: string) {\r\n    switch (command) {\r\n      case \"externalKeyPress\":\r\n        if (data.startsWith(\"command\")) {\r\n          const commandIndex = parseInt(data.substring(7, data.length));\r\n\r\n          CommandRunner.runCustomTool(this, commandIndex);\r\n        }\r\n        break;\r\n\r\n      case \"localFileUpdate\":\r\n        ElectronStorage.processLocalFileUpdate(data);\r\n        break;\r\n\r\n      case \"localFileAdded\":\r\n        ElectronStorage.processLocalFileAdded(data);\r\n        break;\r\n\r\n      case \"localFileRemoved\":\r\n        ElectronStorage.processLocalFileRemoved(data);\r\n        break;\r\n\r\n      case \"statusMessage\":\r\n        const firstPipe = data.indexOf(\"|\");\r\n        const content = data.substring(firstPipe + 1, data.length);\r\n\r\n        try {\r\n          const contentO = JSON.parse(content) as IStatus;\r\n\r\n          this.notifyExternalStatus(contentO);\r\n        } catch (e) {}\r\n\r\n        break;\r\n\r\n      case \"mctSavedInAppService\":\r\n        this.load(true);\r\n        break;\r\n\r\n      case \"logFileUpdated\":\r\n        try {\r\n          if (data) {\r\n            const firstPipe = data.indexOf(\"|\");\r\n\r\n            if (firstPipe > 0) {\r\n              const fileName = data.substring(0, firstPipe);\r\n              const content = data.substring(firstPipe + 1, data.length);\r\n\r\n              this._handleLogFileUpdated(fileName, content);\r\n            }\r\n          }\r\n        } catch (e) {\r\n          Log.fail(\"Error parsing inbound log: \" + e);\r\n        }\r\n        break;\r\n\r\n      default:\r\n        if (this.deploymentStorageMinecraft) {\r\n          this.deploymentStorageMinecraft.processExternalMessage(command, data);\r\n        }\r\n        if (this.processHostedMinecraft) {\r\n          this.processHostedMinecraft.processExternalMessage(command, data);\r\n        }\r\n        if (this.gameMinecraft) {\r\n          this.gameMinecraft.processExternalMessage(command, data);\r\n        }\r\n        if (this.remoteMinecraft) {\r\n          this.remoteMinecraft.processExternalMessage(command, data);\r\n        }\r\n\r\n        break;\r\n    }\r\n  }\r\n\r\n  _handleLogFileUpdated(fileName: string, contents: string) {\r\n    if (contents === null || contents === undefined || fileName === null || fileName === undefined) {\r\n      return;\r\n    }\r\n\r\n    let arr: string[] | undefined = this.mcLogs[fileName];\r\n\r\n    if (arr === undefined) {\r\n      arr = [];\r\n\r\n      if (Utilities.isUsableAsObjectKey(fileName)) {\r\n        this.mcLogs[fileName] = arr;\r\n      }\r\n    }\r\n\r\n    const logItems = contents.split(\"\\r\");\r\n\r\n    for (let i = logItems.length - 1; i >= 0; i--) {\r\n      const logItem = logItems[i];\r\n\r\n      if (logItem !== undefined && logItem.length > 3) {\r\n        if (!arr.includes(logItem)) {\r\n          arr.push(logItem);\r\n          this.notifyStatusUpdate(logItem);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  async notifyStatusUpdate(message: string, topic?: StatusTopic) {\r\n    const messageCanon = message.trim().toLowerCase();\r\n\r\n    if (messageCanon.length > 1) {\r\n      const status = {\r\n        time: new Date(),\r\n        message: message,\r\n        topic: topic,\r\n        type: StatusType.message,\r\n      };\r\n\r\n      this.status.push(status);\r\n      await this.callStatusAddedListeners(status);\r\n\r\n      this.ensureStatusArrayIsTrimmed();\r\n    }\r\n  }\r\n\r\n  private ensureStatusArrayIsTrimmed() {\r\n    if (this.status.length > 10000) {\r\n      const newStatusArr: IStatus[] = [];\r\n\r\n      for (let i = this.status.length - 9000; i < this.status.length; i++) {\r\n        newStatusArr.push(this.status[i]);\r\n      }\r\n\r\n      this.status = newStatusArr;\r\n    }\r\n  }\r\n\r\n  async callStatusAddedListeners(status: IStatus) {\r\n    this._onStatusAdded.dispatch(this, status);\r\n\r\n    if (this._onStatusAddedAsync.length > 0) {\r\n      let promises: Promise<void>[] = [];\r\n\r\n      for (let i = 0; i < this._onStatusAddedAsync.length; i++) {\r\n        promises.push(this._onStatusAddedAsync[i](this, status));\r\n      }\r\n\r\n      await Promise.all(promises);\r\n    }\r\n  }\r\n\r\n  notifyExternalStatus(status: IStatus) {\r\n    // When status arrives via IPC (JSON serialization), time becomes a string.\r\n    // Ensure it's a Date object for downstream consumers that call .getTime().\r\n    if (status.time && !(status.time instanceof Date)) {\r\n      status.time = new Date(status.time as unknown as string);\r\n    }\r\n\r\n    this.status.push(status);\r\n\r\n    if (status.type === StatusType.operationStarted) {\r\n      this.activeOperations.push(status);\r\n    } else if (\r\n      (status.type === StatusType.operationEndedComplete || status.type === StatusType.operationEndedErrors) &&\r\n      status.operationId !== null &&\r\n      status.operationId !== undefined\r\n    ) {\r\n      this.removeOperation(status.operationId);\r\n    }\r\n\r\n    this.callStatusAddedListeners(status);\r\n\r\n    return status.operationId;\r\n  }\r\n\r\n  async notifyOperationUpdate(updateOperationId: number, message: string, topic?: StatusTopic) {\r\n    this.ensureStatusArrayIsTrimmed();\r\n\r\n    this.updateOperation(updateOperationId, message);\r\n\r\n    const status = {\r\n      message: message,\r\n      operationId: updateOperationId,\r\n      type: StatusType.operationUpdate,\r\n      time: new Date(),\r\n      topic: topic,\r\n    };\r\n\r\n    this.status.push(status);\r\n\r\n    await this.callStatusAddedListeners(status);\r\n  }\r\n\r\n  async notifyOperationStarted(message: string, topic?: StatusTopic): Promise<number> {\r\n    const status: IStatus = {\r\n      time: new Date(),\r\n      message: message,\r\n      type: StatusType.operationStarted,\r\n      topic: topic,\r\n    };\r\n\r\n    status.operationId = status.time.getTime();\r\n\r\n    this.status.push(status);\r\n    this.activeOperations.push(status);\r\n\r\n    this.ensureStatusArrayIsTrimmed();\r\n\r\n    await this.callStatusAddedListeners(status);\r\n\r\n    return status.operationId;\r\n  }\r\n\r\n  async notifyOperationEnded(\r\n    endedOperationId: number,\r\n    message?: string,\r\n    topic?: StatusTopic,\r\n    endedWithErrors?: boolean\r\n  ) {\r\n    this.ensureStatusArrayIsTrimmed();\r\n\r\n    this.removeOperation(endedOperationId);\r\n\r\n    this._onOperationCompleted.dispatch(this, endedOperationId);\r\n\r\n    if (!message) {\r\n      return;\r\n    }\r\n\r\n    const status = {\r\n      message: message,\r\n      operationId: endedOperationId,\r\n      type: endedWithErrors ? StatusType.operationEndedErrors : StatusType.operationEndedComplete,\r\n      time: new Date(),\r\n      topic: topic,\r\n    };\r\n\r\n    this.status.push(status);\r\n\r\n    await this.callStatusAddedListeners(status);\r\n  }\r\n\r\n  updateOperation(id: number, newMessage: string) {\r\n    for (let i = 0; i < this.activeOperations.length; i++) {\r\n      const oper = this.activeOperations[i];\r\n\r\n      if (oper.operationId === id) {\r\n        oper.message = newMessage;\r\n      }\r\n    }\r\n  }\r\n\r\n  removeOperation(id: number) {\r\n    // remove operation from list of active operations.\r\n    const newActiveOperations: IStatus[] = [];\r\n\r\n    for (let i = 0; i < this.activeOperations.length; i++) {\r\n      const oper = this.activeOperations[i];\r\n\r\n      if (oper.operationId !== id) {\r\n        newActiveOperations.push(oper);\r\n      }\r\n    }\r\n\r\n    this.activeOperations = newActiveOperations;\r\n  }\r\n\r\n  async save() {\r\n    const configFile = this.file;\r\n\r\n    configFile.setObjectContentIfSemanticallyDifferent(this.#data);\r\n\r\n    await configFile.saveContent();\r\n\r\n    if (AppServiceProxy.hasAppService) {\r\n      AppServiceProxy.sendAsync(AppServiceProxyCommands.reloadMct, \"\");\r\n    }\r\n  }\r\n\r\n  async loadGallery() {\r\n    let result = null;\r\n\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\") {\r\n      const url = this.contentRoot + \"data/gallery.json\";\r\n\r\n      try {\r\n        result = await axios.get(url);\r\n\r\n        if (result) {\r\n          this._gallery = result.data;\r\n        }\r\n      } catch (e) {\r\n        Log.fail(\"Could not load gallery: \" + e + \" from '\" + url + \"'\");\r\n      }\r\n    } else if (this.local) {\r\n      try {\r\n        result = await this.local.readJsonFile(\"data/gallery.json\");\r\n      } catch (e) {\r\n        Log.fail(\"Could not load local file: \" + e + \" from 'data/gallery.json'\");\r\n      }\r\n\r\n      if (result !== null) {\r\n        this._gallery = result as IGallery;\r\n      }\r\n    }\r\n\r\n    if (this._gallery) {\r\n      for (const item of this._gallery.items) {\r\n        if (item.sampleSet) {\r\n          item.gitHubOwner = \"microsoft\";\r\n          item.gitHubRepoName = \"minecraft-scripting-samples\";\r\n\r\n          if (item.type === GalleryItemType.editorCodeSample) {\r\n            item.gitHubFolder = \"/editor-script-box\";\r\n\r\n            if (!item.tags) {\r\n              item.tags = [\"editor\"];\r\n            }\r\n          } else {\r\n            item.gitHubFolder = \"/script-box\";\r\n          }\r\n        }\r\n\r\n        if (item.fileList) {\r\n          const newFileList = [];\r\n\r\n          for (const fileItem of item.fileList) {\r\n            newFileList.push(MinecraftUtilities.replaceMinecraftPathTokens(fileItem));\r\n          }\r\n\r\n          item.fileList = newFileList;\r\n        }\r\n      }\r\n    }\r\n\r\n    this._galleryLoaded = true;\r\n\r\n    this._onGalleryLoaded.dispatch(this, this._gallery);\r\n\r\n    return this._gallery;\r\n  }\r\n\r\n  async getGalleryProjectByGitHub(\r\n    repoName: string,\r\n    owner: string,\r\n    branch?: string,\r\n    folder?: string,\r\n    withFiles?: boolean\r\n  ) {\r\n    if (!this._galleryLoaded) {\r\n      await this.loadGallery();\r\n    }\r\n\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    repoName = repoName.toLowerCase();\r\n    owner = owner.toLowerCase();\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (\r\n        galProj.gitHubRepoName &&\r\n        galProj.gitHubOwner &&\r\n        galProj.gitHubRepoName.toLowerCase() === repoName &&\r\n        galProj.gitHubOwner.toLowerCase() === owner &&\r\n        branch === galProj.gitHubBranch &&\r\n        folder === galProj.gitHubFolder &&\r\n        (!withFiles || galProj.fileList)\r\n      ) {\r\n        return galProj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async getGalleryProjectById(galleryProjectId: string) {\r\n    if (!this._galleryLoaded) {\r\n      await this.loadGallery();\r\n    }\r\n\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    galleryProjectId = galleryProjectId.toLowerCase();\r\n    galleryProjectId = galleryProjectId.replace(/-/gi, \"\");\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (galProj.id.toLowerCase() === galleryProjectId) {\r\n        return galProj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async getGalleryProjectByCaption(galleryProjectTitle: string) {\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (galProj.title === galleryProjectTitle) {\r\n        return galProj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getGalleryProjectByType(itemType: GalleryItemType) {\r\n    if (this._galleryLoaded === false || this._gallery === undefined || this._gallery.items === undefined) {\r\n      return undefined;\r\n    }\r\n\r\n    const galleryItems: IGalleryItem[] = [];\r\n\r\n    for (const galProj of this._gallery.items) {\r\n      if (galProj.type === itemType) {\r\n        galleryItems.push(galProj);\r\n      }\r\n    }\r\n\r\n    return galleryItems;\r\n  }\r\n\r\n  async getNewProjectName(seedName: string) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    let newProjectName = StorageUtilities.convertFolderPlaceholders(seedName);\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(newProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(newProjectName)\r\n    ) {\r\n      counter++;\r\n      newProjectName = StorageUtilities.convertFolderPlaceholders(seedName) + \" \" + counter;\r\n    }\r\n\r\n    return newProjectName;\r\n  }\r\n\r\n  async createNewProject(\r\n    newProjectName: string,\r\n    newProjectPath: string | undefined,\r\n    newProjectFolder: IFolder | undefined,\r\n    newProjectFolderTitle: string | undefined,\r\n    focus: ProjectFocus,\r\n    includeDefaultItems: boolean,\r\n    projectLanguage?: ProjectScriptLanguage\r\n  ) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    const targetProjectName = await this.getNewProjectName(newProjectName);\r\n\r\n    let projectPrefs;\r\n\r\n    if (newProjectFolder) {\r\n      projectPrefs = await newProjectFolder.ensureFileFromRelativePath(\"/.mct/prefs.mctp.json\");\r\n    } else {\r\n      projectPrefs = await this.prefsProjectsFolder.createFile(targetProjectName + \".json\");\r\n    }\r\n\r\n    const newProject = new Project(this, targetProjectName, projectPrefs);\r\n\r\n    if (newProjectPath && !newProjectFolder) {\r\n      newProject.localFolderPath = newProjectPath;\r\n    }\r\n\r\n    if (projectLanguage) {\r\n      newProject.preferredScriptLanguage = projectLanguage;\r\n    }\r\n\r\n    if (newProjectFolder) {\r\n      newProject.setProjectFolder(newProjectFolder);\r\n      newProject.projectFolderTitle = newProjectFolderTitle;\r\n    } else {\r\n      await newProject.ensureProjectFolder();\r\n    }\r\n\r\n    newProject.focus = focus;\r\n\r\n    if (includeDefaultItems) {\r\n      await ProjectUtilities.ensureDefaultItems(newProject);\r\n    }\r\n\r\n    // Default-item generation writes files to storage, which fires file-update events\r\n    // that get recorded in changedFilesSinceLastSaved. For a brand-new project, none\r\n    // of these represent user edits \u2014 they are the initial on-disk state. Reset the\r\n    // change tracker so dirty-change indicators only appear after actual user edits.\r\n    newProject.changedFilesSinceLastSaved = {};\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async createProjectFromContent(jsonStringOrBase64ZipContent: string) {\r\n    let jsonO: object | undefined = undefined;\r\n\r\n    let filteredContents = Utilities.fixJsonContent(jsonStringOrBase64ZipContent);\r\n\r\n    try {\r\n      jsonO = JSON.parse(filteredContents);\r\n    } catch (e: any) {\r\n      jsonO = undefined;\r\n    }\r\n\r\n    if (jsonO) {\r\n      const tempStorage = new Storage();\r\n\r\n      const tempFile = tempStorage.rootFolder.ensureFile(\"import.json\");\r\n\r\n      tempFile.setContent(jsonStringOrBase64ZipContent);\r\n\r\n      return await this.createProjectFromFolder(tempStorage.rootFolder);\r\n    }\r\n\r\n    let zs = new ZipStorage();\r\n\r\n    await zs.loadFromBase64(jsonStringOrBase64ZipContent);\r\n\r\n    if (zs.errorStatus !== undefined) {\r\n      return zs.errorMessage;\r\n    }\r\n\r\n    if (zs.rootFolder) {\r\n      return await this.createProjectFromFolder(zs.rootFolder);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async createAndDeployProjectFromPath(path: string): Promise<Project | string | null> {\r\n    const project = await this.createAndDeployProjectFromPath(path);\r\n\r\n    if (!project) {\r\n      return \"Could not create project from path: \" + path;\r\n    }\r\n\r\n    if (typeof project === \"string\") {\r\n      return project;\r\n    }\r\n\r\n    this.prepareAndStartToMinecraft({\r\n      project: project,\r\n    });\r\n\r\n    return project;\r\n  }\r\n\r\n  async createProjectFromPath(path: string) {\r\n    const folderAndFile = StorageUtilities.getRootAndFocusPathFromInputPath(path);\r\n\r\n    if (!folderAndFile.basePath || !CreatorToolsHost.localFolderExists || !CreatorToolsHost.ensureLocalFolder) {\r\n      return \"Invalid folder structure\";\r\n    }\r\n\r\n    const exists = await CreatorToolsHost.localFolderExists(folderAndFile.basePath);\r\n\r\n    if (!exists) {\r\n      return \"Local path does not exist: \" + folderAndFile.basePath;\r\n    }\r\n\r\n    const folder = CreatorToolsHost.ensureLocalFolder(folderAndFile.basePath);\r\n\r\n    if (!folder) {\r\n      return \"Local folder could not be created: \" + folderAndFile.basePath;\r\n    }\r\n\r\n    return this.createProjectFromFolder(folder);\r\n  }\r\n\r\n  async createProjectFromFolder(folder: IFolder) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    const newProject = new Project(this, folder.name, null);\r\n    newProject.setProjectFolder(folder);\r\n\r\n    await newProject.ensureProjectFolder();\r\n    await newProject.ensureInflated();\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async createProjectFromFolderPath(path: string) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    let newProjectName = StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(path));\r\n\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(newProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(newProjectName)\r\n    ) {\r\n      counter++;\r\n      newProjectName = StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(path)) + \" \" + counter;\r\n    }\r\n\r\n    const projectPrefs = await this.prefsProjectsFolder.createFile(newProjectName + \".json\");\r\n\r\n    const newProject = new Project(this, newProjectName, projectPrefs);\r\n    newProject.localFolderPath = path;\r\n\r\n    await newProject.ensureProjectFolder();\r\n\r\n    await newProject.ensureInflated();\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async deleteProjectByName(projectName: string) {\r\n    let projectToDelete: Project | undefined;\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.name === projectName) {\r\n        if (projectToDelete !== undefined) {\r\n          Log.fail(\"Encountered multiple projects with the same name.\");\r\n          return;\r\n        }\r\n\r\n        projectToDelete = proj;\r\n      }\r\n    }\r\n\r\n    if (projectToDelete) {\r\n      await projectToDelete.deleteThisProject();\r\n\r\n      this.removeProject(projectToDelete);\r\n\r\n      projectToDelete.dispose();\r\n    }\r\n  }\r\n\r\n  async removeProjectByName(projectName: string) {\r\n    let projectToRemove: Project | undefined;\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.name === projectName) {\r\n        if (projectToRemove !== undefined) {\r\n          Log.fail(\"Encountered multiple projects with the same name.\");\r\n          return;\r\n        }\r\n\r\n        projectToRemove = proj;\r\n      }\r\n    }\r\n\r\n    if (!projectToRemove) {\r\n      Log.fail(\"Could not find project to remove: \" + projectName);\r\n      return;\r\n    }\r\n\r\n    await projectToRemove.deletePreferencesFile();\r\n\r\n    this.removeProject(projectToRemove);\r\n\r\n    projectToRemove.dispose();\r\n  }\r\n\r\n  removeProject(project: Project) {\r\n    const newProjects: Project[] = [];\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj !== project) {\r\n        newProjects.push(proj);\r\n      }\r\n    }\r\n    this.projects = newProjects;\r\n  }\r\n\r\n  getProjectByName(projectName: string) {\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.name === projectName) {\r\n        return proj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  getProjectByMainLocalFolderPath(localPath: string) {\r\n    localPath = StorageUtilities.canonicalizePath(localPath);\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const proj = this.projects[i];\r\n\r\n      if (proj.localFolderPath && StorageUtilities.canonicalizePath(proj.localFolderPath) === localPath) {\r\n        return proj;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  async ensureProjectFromLocalStoragePath(messageProjectPath: string) {\r\n    if (!this.local) {\r\n      Log.fail(\"Could not find local utilities.\");\r\n      return;\r\n    }\r\n\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    let desiredProjectName = StorageUtilities.convertFolderPlaceholders(\r\n      StorageUtilities.canonicalizePathAsFileName(messageProjectPath)\r\n    );\r\n\r\n    // check to see if the expected project with the expected name exists, and use that if possible.\r\n    const project = this.getProjectByName(desiredProjectName);\r\n    const canonPath = StorageUtilities.canonicalizePath(messageProjectPath);\r\n\r\n    if (project !== undefined) {\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      if (project.localFolderPath !== undefined) {\r\n        if (canonPath === StorageUtilities.canonicalizePath(project.localFolderPath)) {\r\n          await project.ensureInflated();\r\n          await project.inferProjectItemsFromFiles();\r\n\r\n          return project;\r\n        }\r\n      }\r\n    }\r\n\r\n    // OK, a project doesn't exist, let's create one.\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(desiredProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(desiredProjectName)\r\n    ) {\r\n      counter++;\r\n      desiredProjectName =\r\n        StorageUtilities.convertFolderPlaceholders(StorageUtilities.canonicalizePathAsFileName(messageProjectPath)) +\r\n        \" \" +\r\n        counter;\r\n    }\r\n\r\n    const projectPrefs = await this.prefsProjectsFolder.createFile(desiredProjectName + \".json\");\r\n\r\n    const newProject = new Project(this, desiredProjectName, projectPrefs);\r\n\r\n    newProject.localFolderPath = messageProjectPath;\r\n    newProject.originalFullPath = messageProjectPath;\r\n\r\n    const localStorage = this.local.createStorage(messageProjectPath);\r\n\r\n    if (localStorage === null) {\r\n      Log.fail(\"Could not create local storage.\");\r\n      return;\r\n    }\r\n\r\n    newProject.setProjectFolder(localStorage.rootFolder);\r\n\r\n    await newProject.ensureProjectFolder();\r\n\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async ensureProjectForLocalFolder(folderPath: string, newProjectName?: string, openDirect?: boolean) {\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    folderPath = StorageUtilities.convertFolderPlaceholdersPartial(folderPath);\r\n\r\n    let desiredProjectName = \"\";\r\n\r\n    if (newProjectName !== undefined) {\r\n      desiredProjectName = newProjectName;\r\n    } else {\r\n      desiredProjectName = StorageUtilities.getLeafName(folderPath);\r\n    }\r\n\r\n    desiredProjectName = StorageUtilities.convertFolderPlaceholders(desiredProjectName);\r\n\r\n    let canonPath = StorageUtilities.canonicalizePath(folderPath);\r\n\r\n    let project = this.getProjectByMainLocalFolderPath(folderPath);\r\n\r\n    // check to see if the expected project with the expected name exists, and use that if possible.\r\n    if (!project) {\r\n      project = this.getProjectByName(desiredProjectName);\r\n    }\r\n\r\n    if (project !== undefined && !openDirect) {\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      if (project.localFolderPath !== undefined) {\r\n        if (canonPath === StorageUtilities.canonicalizePath(project.localFolderPath)) {\r\n          await project.ensureInflated();\r\n          await project.inferProjectItemsFromFiles();\r\n\r\n          return project;\r\n        }\r\n      }\r\n    } else if (project && openDirect) {\r\n      for (let i = 1; i < 99; i++) {\r\n        desiredProjectName =\r\n          StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(folderPath)) + \" \" + i;\r\n        canonPath = StorageUtilities.canonicalizePath(folderPath) + \" \" + i;\r\n\r\n        if (newProjectName !== undefined) {\r\n          desiredProjectName = newProjectName;\r\n        }\r\n\r\n        // check to see if the expected project with the expected name exists, and use that if possible.\r\n        let project = this.getProjectByName(desiredProjectName);\r\n\r\n        if (!project) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // now check all other projects to see if one exists.\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      project = this.projects[i];\r\n\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      if (project.localFolderPath !== undefined) {\r\n        if (canonPath === StorageUtilities.canonicalizePath(project.localFolderPath)) {\r\n          await project.ensureInflated();\r\n          await project.inferProjectItemsFromFiles();\r\n\r\n          return project;\r\n        }\r\n      }\r\n    }\r\n\r\n    // OK, a project doesn't exist, let's create one.\r\n    let counter = 0;\r\n\r\n    while (\r\n      this.prefsProjectsFolder.fileExists(desiredProjectName + \".json\") ||\r\n      this.projectsStorage.rootFolder.folderExists(desiredProjectName)\r\n    ) {\r\n      counter++;\r\n      desiredProjectName =\r\n        StorageUtilities.convertFolderPlaceholders(StorageUtilities.getLeafName(folderPath)) + \" \" + counter;\r\n    }\r\n\r\n    const projectPrefs = await this.prefsProjectsFolder.createFile(desiredProjectName + \".json\");\r\n\r\n    const newProject = new Project(this, desiredProjectName, projectPrefs, true);\r\n\r\n    newProject.localFolderPath = folderPath;\r\n    newProject.originalFullPath = folderPath;\r\n\r\n    await newProject.ensureProjectFolder();\r\n    await newProject.inferProjectItemsFromFiles();\r\n\r\n    this.projects.push(newProject);\r\n\r\n    return newProject;\r\n  }\r\n\r\n  async getExportZip() {\r\n    const zs = new ZipStorage();\r\n\r\n    const zipRoot = zs.rootFolder;\r\n\r\n    if (!this._isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    for (let i = 0; i < this.projects.length; i++) {\r\n      const project = this.projects[i];\r\n\r\n      await project.loadPreferencesAndFolder();\r\n\r\n      await project.ensureProjectFolder();\r\n\r\n      if (project.projectFolder) {\r\n        const projectTargetFolder = zipRoot.ensureFolder(project.name);\r\n\r\n        await StorageUtilities.syncFolderTo(project.projectFolder, projectTargetFolder, true, true, false);\r\n      }\r\n    }\r\n\r\n    await zipRoot.saveAll();\r\n\r\n    return zs;\r\n  }\r\n\r\n  async load(force?: boolean) {\r\n    if (this._isLoaded && !force) {\r\n      return;\r\n    }\r\n\r\n    const configFile = this.file;\r\n\r\n    if (!configFile.isContentLoaded) {\r\n      await configFile.loadContent(false);\r\n    }\r\n\r\n    if (configFile.content !== null && configFile.content !== undefined && typeof configFile.content === \"string\") {\r\n      this.#data = JSON.parse(configFile.content as string);\r\n    }\r\n\r\n    // In the Electron app, the \"remote\" flavor requires a remote server URL and auth token\r\n    // which are not persisted across sessions. Reset to processHostedProxy (host BDS locally)\r\n    // to avoid showing a non-functional remote connection UI on startup.\r\n    if (\r\n      CreatorToolsHost.isAppServiceWeb &&\r\n      this.#data.lastActiveMinecraftFlavor === MinecraftFlavor.remote &&\r\n      !this._remoteServerAuthToken\r\n    ) {\r\n      this.#data.lastActiveMinecraftFlavor = MinecraftFlavor.processHostedProxy;\r\n    }\r\n\r\n    const projectsFolder = this.prefsProjectsFolder;\r\n\r\n    await projectsFolder.load();\r\n\r\n    await this.projectsStorage.rootFolder.load();\r\n\r\n    this.projects = [];\r\n\r\n    for (const fileName in projectsFolder.files) {\r\n      const projectName = StorageUtilities.getBaseFromName(fileName);\r\n\r\n      const projectFile = projectsFolder.files[fileName];\r\n\r\n      if (projectFile !== undefined) {\r\n        const project = new Project(this, projectName, projectFile);\r\n\r\n        this.projects.push(project);\r\n      }\r\n    }\r\n\r\n    this.considerStartingMinecraft(); // explicitly not awaiting this since this might take a while and is not strictly necessary.\r\n\r\n    this.initializeWorldSettings();\r\n\r\n    this.ensureDefaultWorldName();\r\n\r\n    this._onLoaded.dispatch(this, this);\r\n\r\n    this._isLoaded = true;\r\n  }\r\n\r\n  public async considerStartingMinecraft() {\r\n    if (CreatorToolsHost.hostType === HostType.webPlusServices || CreatorToolsHost.hostType === HostType.web) {\r\n      if (\r\n        this.successfullyConnectedWebSocketToMinecraft &&\r\n        (this.autoStartMinecraft || this.lastActiveMinecraftFlavor === MinecraftFlavor.remote)\r\n      ) {\r\n        this.ensureRemoteMinecraft();\r\n\r\n        const ct = CreatorToolsHost.getCreatorTools();\r\n        if (\r\n          this.remoteMinecraft &&\r\n          CreatorToolsHost.hostType === HostType.web &&\r\n          ct &&\r\n          ct.remoteServerUrl &&\r\n          ct.remoteServerUrl.length > 4\r\n        ) {\r\n          this.remoteMinecraft.initialize();\r\n\r\n          if (!this.activeMinecraft && this.lastActiveMinecraftFlavor === MinecraftFlavor.remote) {\r\n            this.activeMinecraft = this.remoteMinecraft;\r\n\r\n            this.lastActiveMinecraftFlavor = MinecraftFlavor.remote;\r\n          }\r\n        }\r\n\r\n        if (CreatorToolsHost.isAppServiceWeb) {\r\n          this.ensureGameMinecraft();\r\n\r\n          if (this.gameMinecraft) {\r\n            this.gameMinecraft.initialize();\r\n          }\r\n\r\n          if (!this.activeMinecraft && this.lastActiveMinecraftFlavor === MinecraftFlavor.minecraftGameProxy) {\r\n            this.activeMinecraft = this.gameMinecraft;\r\n\r\n            this.lastActiveMinecraftFlavor = MinecraftFlavor.minecraftGameProxy;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (\r\n        this.successfullyStartedMinecraftServer &&\r\n        this.lastActiveMinecraftFlavor === MinecraftFlavor.processHostedProxy &&\r\n        this.autoStartMinecraft\r\n      ) {\r\n        await this.connectToMinecraft();\r\n      }\r\n    }\r\n  }\r\n\r\n  public async connectToMinecraft() {\r\n    if (!this.lastActiveMinecraftFlavor) {\r\n      return;\r\n    }\r\n\r\n    this.ensureMinecraft(this.lastActiveMinecraftFlavor);\r\n\r\n    if (this.activeMinecraft) {\r\n      const status = await this.activeMinecraft.updateStatus();\r\n\r\n      if (\r\n        status === CreatorToolsMinecraftState.disconnected ||\r\n        status === CreatorToolsMinecraftState.error ||\r\n        status === CreatorToolsMinecraftState.none ||\r\n        status === CreatorToolsMinecraftState.stopped ||\r\n        status === CreatorToolsMinecraftState.stopping ||\r\n        status === CreatorToolsMinecraftState.newMinecraft\r\n      ) {\r\n        await this.activeMinecraft.initialize();\r\n      }\r\n    }\r\n  }\r\n\r\n  public canPrepareAndStartMinecraft() {\r\n    if (!this.activeMinecraft) {\r\n      return false;\r\n    }\r\n\r\n    if (\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.initialized &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.preparing &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.prepared &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.starting &&\r\n      this.activeMinecraftState !== CreatorToolsMinecraftState.started\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  public async prepareAndStartToMinecraft(push: MinecraftPush) {\r\n    if (!this.canPrepareAndStartMinecraft || !this.activeMinecraft) {\r\n      return;\r\n    }\r\n\r\n    await this.activeMinecraft.prepareAndStart(push);\r\n  }\r\n  private _bubbleMinecraftRefreshed(minecraft: IMinecraft, newState: CreatorToolsMinecraftState) {\r\n    if (minecraft !== this.activeMinecraft) {\r\n      return;\r\n    }\r\n\r\n    this._onMinecraftRefreshed.dispatch(minecraft, newState);\r\n  }\r\n\r\n  private _bubbleMinecraftStateChanged(minecraft: IMinecraft, newState: CreatorToolsMinecraftState) {\r\n    if (minecraft !== this.activeMinecraft) {\r\n      return;\r\n    }\r\n\r\n    if (!this.successfullyConnectedWebSocketToMinecraft && newState === CreatorToolsMinecraftState.initialized) {\r\n      this.successfullyConnectedWebSocketToMinecraft = true;\r\n      this.save();\r\n    }\r\n\r\n    if (newState === CreatorToolsMinecraftState.prepared) {\r\n      Log.message(\"Minecraft is ready.\");\r\n    } else if (newState === CreatorToolsMinecraftState.started) {\r\n      // Log.message(\"Connected to Minecraft.\");\r\n    } else if (newState === CreatorToolsMinecraftState.stopping) {\r\n      Log.message(\"Disconnecting from Minecraft.\");\r\n    }\r\n\r\n    this._onMinecraftStateChanged.dispatch(minecraft, newState);\r\n  }\r\n\r\n  public ensureRemoteMinecraft() {\r\n    if (this.remoteMinecraft === undefined) {\r\n      this.remoteMinecraft = new RemoteMinecraft(this);\r\n    }\r\n\r\n    return this.remoteMinecraft;\r\n  }\r\n\r\n  public ensureProcessHostedMinecraft() {\r\n    if (this.processHostedMinecraft === undefined) {\r\n      this.processHostedMinecraft = new ProcessHostedMinecraft(this);\r\n    }\r\n\r\n    return this.processHostedMinecraft;\r\n  }\r\n\r\n  public ensureDeploymentStorageMinecraft() {\r\n    if (this.deploymentStorageMinecraft === undefined) {\r\n      this.deploymentStorageMinecraft = new DeploymentStorageMinecraft(this);\r\n    }\r\n\r\n    return this.deploymentStorageMinecraft;\r\n  }\r\n\r\n  public ensureGameMinecraft() {\r\n    if (this.gameMinecraft === undefined) {\r\n      this.gameMinecraft = new MinecraftGameProxyMinecraft(this);\r\n    }\r\n\r\n    if (this.autoStartMinecraft && this.successfullyConnectedWebSocketToMinecraft) {\r\n      (this.gameMinecraft as MinecraftGameProxyMinecraft).start();\r\n    }\r\n\r\n    return this.gameMinecraft;\r\n  }\r\n\r\n  public ensureMinecraft(flavor: MinecraftFlavor) {\r\n    if (flavor === MinecraftFlavor.none) {\r\n      return undefined;\r\n    }\r\n\r\n    if (this.activeMinecraft && this.lastActiveMinecraftFlavor === flavor) {\r\n      return this.activeMinecraft;\r\n    }\r\n\r\n    this.ensureRemoteMinecraft();\r\n\r\n    if (flavor === MinecraftFlavor.processHostedProxy) {\r\n      this.ensureProcessHostedMinecraft();\r\n    } else if (flavor === MinecraftFlavor.deploymentStorage) {\r\n      this.ensureDeploymentStorageMinecraft();\r\n    } else if (flavor === MinecraftFlavor.minecraftGameProxy) {\r\n      this.ensureGameMinecraft();\r\n    }\r\n\r\n    if (this.activeMinecraft) {\r\n      this.activeMinecraft.onStateChanged.unsubscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.unsubscribe(this._bubbleMinecraftRefreshed);\r\n    }\r\n\r\n    if (flavor === MinecraftFlavor.remote) {\r\n      if (!this.remoteMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMR\");\r\n        return;\r\n      }\r\n\r\n      this.activeMinecraft = this.remoteMinecraft;\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.remote) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.remote;\r\n        this.save();\r\n      }\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMA\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (flavor === MinecraftFlavor.minecraftGameProxy) {\r\n      if (!this.gameMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMG\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft = this.gameMinecraft;\r\n\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.minecraftGameProxy) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.minecraftGameProxy;\r\n        this.save();\r\n      }\r\n\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMB\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (flavor === MinecraftFlavor.processHostedProxy) {\r\n      if (!this.processHostedMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMC\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft = this.processHostedMinecraft;\r\n\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.processHostedProxy) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.processHostedProxy;\r\n        this.save();\r\n      }\r\n\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMD\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (flavor === MinecraftFlavor.deploymentStorage) {\r\n      if (!this.deploymentStorageMinecraft) {\r\n        Log.throwUnexpectedUndefined(\"EMCD\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft = this.deploymentStorageMinecraft;\r\n\r\n      if (this.lastActiveMinecraftFlavor !== MinecraftFlavor.deploymentStorage) {\r\n        this.lastActiveMinecraftFlavor = MinecraftFlavor.deploymentStorage;\r\n        this.save();\r\n      }\r\n\r\n      this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n      if (this.activeMinecraft === undefined) {\r\n        Log.unexpectedUndefined(\"EMDD\");\r\n        return undefined;\r\n      }\r\n\r\n      this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n      this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n    } else if (\r\n      this.createMinecraft === undefined ||\r\n      this.canCreateMinecraft === undefined ||\r\n      !this.canCreateMinecraft(flavor)\r\n    ) {\r\n      Log.debugAlert(\"Requested creation of an unavailable Minecraft.\");\r\n      flavor = MinecraftFlavor.none;\r\n    } else {\r\n      const newMinecraft = this.createMinecraft(flavor, this);\r\n\r\n      if (!newMinecraft) {\r\n        Log.debugAlert(\"Could not create a requested Minecraft.\");\r\n        flavor = MinecraftFlavor.none;\r\n      } else {\r\n        this.activeMinecraft = newMinecraft;\r\n        this.lastActiveMinecraftFlavor = flavor;\r\n\r\n        this._onMinecraftStateChanged.dispatch(this.activeMinecraft, CreatorToolsMinecraftState.newMinecraft);\r\n\r\n        this.activeMinecraft.onStateChanged.subscribe(this._bubbleMinecraftStateChanged);\r\n        this.activeMinecraft.onRefreshed.subscribe(this._bubbleMinecraftRefreshed);\r\n      }\r\n    }\r\n\r\n    this.lastActiveMinecraftFlavor = flavor;\r\n\r\n    this.save();\r\n    return this.activeMinecraft;\r\n  }\r\n}\r\n", "/*!\n    localForage -- Offline Storage, Improved\n    Version 1.9.0\n    https://localforage.github.io/localForage\n    (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n  global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n    /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n    try {\n        if (typeof indexedDB !== 'undefined') {\n            return indexedDB;\n        }\n        if (typeof webkitIndexedDB !== 'undefined') {\n            return webkitIndexedDB;\n        }\n        if (typeof mozIndexedDB !== 'undefined') {\n            return mozIndexedDB;\n        }\n        if (typeof OIndexedDB !== 'undefined') {\n            return OIndexedDB;\n        }\n        if (typeof msIndexedDB !== 'undefined') {\n            return msIndexedDB;\n        }\n    } catch (e) {\n        return;\n    }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n    try {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        if (!idb || !idb.open) {\n            return false;\n        }\n        // We mimic PouchDB here;\n        //\n        // We test for openDatabase because IE Mobile identifies itself\n        // as Safari. Oh the lulz...\n        var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n        var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n        // Safari <10.1 does not meet our requirements for IDB support\n        // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n        // Safari 10.1 shipped with fetch, we can use that to detect it.\n        // Note: this creates issues with `window.fetch` polyfills and\n        // overrides; see:\n        // https://github.com/localForage/localForage/issues/856\n        return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n        // some outdated implementations of IDB that appear on Samsung\n        // and HTC Android devices <4.4 are missing IDBKeyRange\n        // See: https://github.com/mozilla/localForage/issues/128\n        // See: https://github.com/mozilla/localForage/issues/272\n        typeof IDBKeyRange !== 'undefined';\n    } catch (e) {\n        return false;\n    }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n    /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n    parts = parts || [];\n    properties = properties || {};\n    try {\n        return new Blob(parts, properties);\n    } catch (e) {\n        if (e.name !== 'TypeError') {\n            throw e;\n        }\n        var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n        var builder = new Builder();\n        for (var i = 0; i < parts.length; i += 1) {\n            builder.append(parts[i]);\n        }\n        return builder.getBlob(properties.type);\n    }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n    // In the \"nopromises\" build this will just throw if you don't have\n    // a global promise object, but it would throw anyway later.\n    _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n    if (callback) {\n        promise.then(function (result) {\n            callback(null, result);\n        }, function (error) {\n            callback(error);\n        });\n    }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n    if (typeof callback === 'function') {\n        promise.then(callback);\n    }\n\n    if (typeof errorCallback === 'function') {\n        promise[\"catch\"](errorCallback);\n    }\n}\n\nfunction normalizeKey(key) {\n    // Cast the key to a string, as that's all we can set as a key.\n    if (typeof key !== 'string') {\n        console.warn(key + ' used as a key, but it is not a string.');\n        key = String(key);\n    }\n\n    return key;\n}\n\nfunction getCallback() {\n    if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n        return arguments[arguments.length - 1];\n    }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n    var length = bin.length;\n    var buf = new ArrayBuffer(length);\n    var arr = new Uint8Array(buf);\n    for (var i = 0; i < length; i++) {\n        arr[i] = bin.charCodeAt(i);\n    }\n    return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n    return new Promise$1(function (resolve) {\n        var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n        var blob = createBlob(['']);\n        txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n        txn.onabort = function (e) {\n            // If the transaction aborts now its due to not being able to\n            // write to the database, likely due to the disk being full\n            e.preventDefault();\n            e.stopPropagation();\n            resolve(false);\n        };\n\n        txn.oncomplete = function () {\n            var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            var matchedEdge = navigator.userAgent.match(/Edge\\//);\n            // MS Edge pretends to be Chrome 42:\n            // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n            resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n        };\n    })[\"catch\"](function () {\n        return false; // error, so assume unsupported\n    });\n}\n\nfunction _checkBlobSupport(idb) {\n    if (typeof supportsBlobs === 'boolean') {\n        return Promise$1.resolve(supportsBlobs);\n    }\n    return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n        supportsBlobs = value;\n        return supportsBlobs;\n    });\n}\n\nfunction _deferReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Create a deferred object representing the current database operation.\n    var deferredOperation = {};\n\n    deferredOperation.promise = new Promise$1(function (resolve, reject) {\n        deferredOperation.resolve = resolve;\n        deferredOperation.reject = reject;\n    });\n\n    // Enqueue the deferred operation.\n    dbContext.deferredOperations.push(deferredOperation);\n\n    // Chain its promise to the database readiness.\n    if (!dbContext.dbReady) {\n        dbContext.dbReady = deferredOperation.promise;\n    } else {\n        dbContext.dbReady = dbContext.dbReady.then(function () {\n            return deferredOperation.promise;\n        });\n    }\n}\n\nfunction _advanceReadiness(dbInfo) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Resolve its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.resolve();\n        return deferredOperation.promise;\n    }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n    var dbContext = dbContexts[dbInfo.name];\n\n    // Dequeue a deferred operation.\n    var deferredOperation = dbContext.deferredOperations.pop();\n\n    // Reject its promise (which is part of the database readiness\n    // chain of promises).\n    if (deferredOperation) {\n        deferredOperation.reject(err);\n        return deferredOperation.promise;\n    }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n    return new Promise$1(function (resolve, reject) {\n        dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n        if (dbInfo.db) {\n            if (upgradeNeeded) {\n                _deferReadiness(dbInfo);\n                dbInfo.db.close();\n            } else {\n                return resolve(dbInfo.db);\n            }\n        }\n\n        var dbArgs = [dbInfo.name];\n\n        if (upgradeNeeded) {\n            dbArgs.push(dbInfo.version);\n        }\n\n        var openreq = idb.open.apply(idb, dbArgs);\n\n        if (upgradeNeeded) {\n            openreq.onupgradeneeded = function (e) {\n                var db = openreq.result;\n                try {\n                    db.createObjectStore(dbInfo.storeName);\n                    if (e.oldVersion <= 1) {\n                        // Added when support for blob shims was added\n                        db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                    }\n                } catch (ex) {\n                    if (ex.name === 'ConstraintError') {\n                        console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n                    } else {\n                        throw ex;\n                    }\n                }\n            };\n        }\n\n        openreq.onerror = function (e) {\n            e.preventDefault();\n            reject(openreq.error);\n        };\n\n        openreq.onsuccess = function () {\n            resolve(openreq.result);\n            _advanceReadiness(dbInfo);\n        };\n    });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n    return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n    return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n    if (!dbInfo.db) {\n        return true;\n    }\n\n    var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n    var isDowngrade = dbInfo.version < dbInfo.db.version;\n    var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n    if (isDowngrade) {\n        // If the version is not the default one\n        // then warn for impossible downgrade.\n        if (dbInfo.version !== defaultVersion) {\n            console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n        }\n        // Align the versions to prevent errors.\n        dbInfo.version = dbInfo.db.version;\n    }\n\n    if (isUpgrade || isNewStore) {\n        // If the store is new then increment the version (if needed).\n        // This will trigger an \"upgradeneeded\" event which is required\n        // for creating a store.\n        if (isNewStore) {\n            var incVersion = dbInfo.db.version + 1;\n            if (incVersion > dbInfo.version) {\n                dbInfo.version = incVersion;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n    return new Promise$1(function (resolve, reject) {\n        var reader = new FileReader();\n        reader.onerror = reject;\n        reader.onloadend = function (e) {\n            var base64 = btoa(e.target.result || '');\n            resolve({\n                __local_forage_encoded_blob: true,\n                data: base64,\n                type: blob.type\n            });\n        };\n        reader.readAsBinaryString(blob);\n    });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n    var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n    return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n    return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n    var self = this;\n\n    var promise = self._initReady().then(function () {\n        var dbContext = dbContexts[self._dbInfo.name];\n\n        if (dbContext && dbContext.dbReady) {\n            return dbContext.dbReady;\n        }\n    });\n\n    executeTwoCallbacks(promise, callback, callback);\n    return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n    _deferReadiness(dbInfo);\n\n    var dbContext = dbContexts[dbInfo.name];\n    var forages = dbContext.forages;\n\n    for (var i = 0; i < forages.length; i++) {\n        var forage = forages[i];\n        if (forage._dbInfo.db) {\n            forage._dbInfo.db.close();\n            forage._dbInfo.db = null;\n        }\n    }\n    dbInfo.db = null;\n\n    return _getOriginalConnection(dbInfo).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        // store the latest db reference\n        // in case the db was upgraded\n        dbInfo.db = dbContext.db = db;\n        for (var i = 0; i < forages.length; i++) {\n            forages[i]._dbInfo.db = db;\n        }\n    })[\"catch\"](function (err) {\n        _rejectReadiness(dbInfo, err);\n        throw err;\n    });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n    if (retries === undefined) {\n        retries = 1;\n    }\n\n    try {\n        var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n        callback(null, tx);\n    } catch (err) {\n        if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n            return Promise$1.resolve().then(function () {\n                if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n                    // increase the db version, to create the new ObjectStore\n                    if (dbInfo.db) {\n                        dbInfo.version = dbInfo.db.version + 1;\n                    }\n                    // Reopen the database for upgrading.\n                    return _getUpgradedConnection(dbInfo);\n                }\n            }).then(function () {\n                return _tryReconnect(dbInfo).then(function () {\n                    createTransaction(dbInfo, mode, callback, retries - 1);\n                });\n            })[\"catch\"](callback);\n        }\n\n        callback(err);\n    }\n}\n\nfunction createDbContext() {\n    return {\n        // Running localForages sharing a database.\n        forages: [],\n        // Shared database.\n        db: null,\n        // Database readiness (promise).\n        dbReady: null,\n        // Deferred operations on the database.\n        deferredOperations: []\n    };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    // Get the current context of the database;\n    var dbContext = dbContexts[dbInfo.name];\n\n    // ...or create a new context.\n    if (!dbContext) {\n        dbContext = createDbContext();\n        // Register the new context in the global container.\n        dbContexts[dbInfo.name] = dbContext;\n    }\n\n    // Register itself as a running localForage in the current context.\n    dbContext.forages.push(self);\n\n    // Replace the default `ready()` function with the specialized one.\n    if (!self._initReady) {\n        self._initReady = self.ready;\n        self.ready = _fullyReady;\n    }\n\n    // Create an array of initialization states of the related localForages.\n    var initPromises = [];\n\n    function ignoreErrors() {\n        // Don't handle errors here,\n        // just makes sure related localForages aren't pending.\n        return Promise$1.resolve();\n    }\n\n    for (var j = 0; j < dbContext.forages.length; j++) {\n        var forage = dbContext.forages[j];\n        if (forage !== self) {\n            // Don't wait for itself...\n            initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n        }\n    }\n\n    // Take a snapshot of the related localForages.\n    var forages = dbContext.forages.slice(0);\n\n    // Initialize the connection process only when\n    // all the related localForages aren't pending.\n    return Promise$1.all(initPromises).then(function () {\n        dbInfo.db = dbContext.db;\n        // Get the connection or open a new one without upgrade.\n        return _getOriginalConnection(dbInfo);\n    }).then(function (db) {\n        dbInfo.db = db;\n        if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n            // Reopen the database for upgrading.\n            return _getUpgradedConnection(dbInfo);\n        }\n        return db;\n    }).then(function (db) {\n        dbInfo.db = dbContext.db = db;\n        self._dbInfo = dbInfo;\n        // Share the final connection amongst related localForages.\n        for (var k = 0; k < forages.length; k++) {\n            var forage = forages[k];\n            if (forage !== self) {\n                // Self is already up-to-date.\n                forage._dbInfo.db = dbInfo.db;\n                forage._dbInfo.version = dbInfo.version;\n            }\n        }\n    });\n}\n\nfunction getItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.get(key);\n\n                    req.onsuccess = function () {\n                        var value = req.result;\n                        if (value === undefined) {\n                            value = null;\n                        }\n                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        resolve(value);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openCursor();\n                    var iterationNumber = 1;\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (cursor) {\n                            var value = cursor.value;\n                            if (_isEncodedBlob(value)) {\n                                value = _decodeBlob(value);\n                            }\n                            var result = iterator(value, cursor.key, iterationNumber++);\n\n                            // when the iterator callback returns any\n                            // (non-`undefined`) value, then we stop\n                            // the iteration immediately\n                            if (result !== void 0) {\n                                resolve(result);\n                            } else {\n                                cursor[\"continue\"]();\n                            }\n                        } else {\n                            resolve();\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n\n    return promise;\n}\n\nfunction setItem(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        var dbInfo;\n        self.ready().then(function () {\n            dbInfo = self._dbInfo;\n            if (toString.call(value) === '[object Blob]') {\n                return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n                    if (blobSupport) {\n                        return value;\n                    }\n                    return _encodeBlob(value);\n                });\n            }\n            return value;\n        }).then(function (value) {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n\n                    // The reason we don't _save_ null is because IE 10 does\n                    // not support saving the `null` type in IndexedDB. How\n                    // ironic, given the bug below!\n                    // See: https://github.com/mozilla/localForage/issues/161\n                    if (value === null) {\n                        value = undefined;\n                    }\n\n                    var req = store.put(value, key);\n\n                    transaction.oncomplete = function () {\n                        // Cast to undefined so the value passed to\n                        // callback/promise is the same as what one would get out\n                        // of `getItem()` later. This leads to some weirdness\n                        // (setItem('foo', undefined) will return `null`), but\n                        // it's not my fault localStorage is our baseline and that\n                        // it's weird.\n                        if (value === undefined) {\n                            value = null;\n                        }\n\n                        resolve(value);\n                    };\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction removeItem(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    // We use a Grunt task to make this safe for IE and some\n                    // versions of Android (including those used by Cordova).\n                    // Normally IE won't like `.delete()` and will insist on\n                    // using `['delete']()`, but we have a build step that\n                    // fixes this for us now.\n                    var req = store[\"delete\"](key);\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onerror = function () {\n                        reject(req.error);\n                    };\n\n                    // The request will be also be aborted if we've exceeded our storage\n                    // space.\n                    transaction.onabort = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction clear(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.clear();\n\n                    transaction.oncomplete = function () {\n                        resolve();\n                    };\n\n                    transaction.onabort = transaction.onerror = function () {\n                        var err = req.error ? req.error : req.transaction.error;\n                        reject(err);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction length(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.count();\n\n                    req.onsuccess = function () {\n                        resolve(req.result);\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction key(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        if (n < 0) {\n            resolve(null);\n\n            return;\n        }\n\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var advanced = false;\n                    var req = store.openKeyCursor();\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n                        if (!cursor) {\n                            // this means there weren't enough keys\n                            resolve(null);\n\n                            return;\n                        }\n\n                        if (n === 0) {\n                            // We have the first key, return it if that's what they\n                            // wanted.\n                            resolve(cursor.key);\n                        } else {\n                            if (!advanced) {\n                                // Otherwise, ask the cursor to skip ahead n\n                                // records.\n                                advanced = true;\n                                cursor.advance(n);\n                            } else {\n                                // When we get here, we've got the nth key.\n                                resolve(cursor.key);\n                            }\n                        }\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n                if (err) {\n                    return reject(err);\n                }\n\n                try {\n                    var store = transaction.objectStore(self._dbInfo.storeName);\n                    var req = store.openKeyCursor();\n                    var keys = [];\n\n                    req.onsuccess = function () {\n                        var cursor = req.result;\n\n                        if (!cursor) {\n                            resolve(keys);\n                            return;\n                        }\n\n                        keys.push(cursor.key);\n                        cursor[\"continue\"]();\n                    };\n\n                    req.onerror = function () {\n                        reject(req.error);\n                    };\n                } catch (e) {\n                    reject(e);\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n        var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n            var dbContext = dbContexts[options.name];\n            var forages = dbContext.forages;\n            dbContext.db = db;\n            for (var i = 0; i < forages.length; i++) {\n                forages[i]._dbInfo.db = db;\n            }\n            return db;\n        });\n\n        if (!options.storeName) {\n            promise = dbPromise.then(function (db) {\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                }\n\n                var dropDBPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.deleteDatabase(options.name);\n\n                    req.onerror = req.onblocked = function (err) {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        reject(err);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        if (db) {\n                            db.close();\n                        }\n                        resolve(db);\n                    };\n                });\n\n                return dropDBPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var i = 0; i < forages.length; i++) {\n                        var _forage = forages[i];\n                        _advanceReadiness(_forage._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        } else {\n            promise = dbPromise.then(function (db) {\n                if (!db.objectStoreNames.contains(options.storeName)) {\n                    return;\n                }\n\n                var newVersion = db.version + 1;\n\n                _deferReadiness(options);\n\n                var dbContext = dbContexts[options.name];\n                var forages = dbContext.forages;\n\n                db.close();\n                for (var i = 0; i < forages.length; i++) {\n                    var forage = forages[i];\n                    forage._dbInfo.db = null;\n                    forage._dbInfo.version = newVersion;\n                }\n\n                var dropObjectPromise = new Promise$1(function (resolve, reject) {\n                    var req = idb.open(options.name, newVersion);\n\n                    req.onerror = function (err) {\n                        var db = req.result;\n                        db.close();\n                        reject(err);\n                    };\n\n                    req.onupgradeneeded = function () {\n                        var db = req.result;\n                        db.deleteObjectStore(options.storeName);\n                    };\n\n                    req.onsuccess = function () {\n                        var db = req.result;\n                        db.close();\n                        resolve(db);\n                    };\n                });\n\n                return dropObjectPromise.then(function (db) {\n                    dbContext.db = db;\n                    for (var j = 0; j < forages.length; j++) {\n                        var _forage2 = forages[j];\n                        _forage2._dbInfo.db = db;\n                        _advanceReadiness(_forage2._dbInfo);\n                    }\n                })[\"catch\"](function (err) {\n                    (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n                    throw err;\n                });\n            });\n        }\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar asyncStorage = {\n    _driver: 'asyncStorage',\n    _initStorage: _initStorage,\n    _support: isIndexedDBValid(),\n    iterate: iterate,\n    getItem: getItem,\n    setItem: setItem,\n    removeItem: removeItem,\n    clear: clear,\n    length: length,\n    key: key,\n    keys: keys,\n    dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n    return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n    // Fill the string into a ArrayBuffer.\n    var bufferLength = serializedString.length * 0.75;\n    var len = serializedString.length;\n    var i;\n    var p = 0;\n    var encoded1, encoded2, encoded3, encoded4;\n\n    if (serializedString[serializedString.length - 1] === '=') {\n        bufferLength--;\n        if (serializedString[serializedString.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    var buffer = new ArrayBuffer(bufferLength);\n    var bytes = new Uint8Array(buffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n        encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n        encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n        encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n        /*jslint bitwise: true */\n        bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n    }\n    return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n    // base64-arraybuffer\n    var bytes = new Uint8Array(buffer);\n    var base64String = '';\n    var i;\n\n    for (i = 0; i < bytes.length; i += 3) {\n        /*jslint bitwise: true */\n        base64String += BASE_CHARS[bytes[i] >> 2];\n        base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n        base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n        base64String += BASE_CHARS[bytes[i + 2] & 63];\n    }\n\n    if (bytes.length % 3 === 2) {\n        base64String = base64String.substring(0, base64String.length - 1) + '=';\n    } else if (bytes.length % 3 === 1) {\n        base64String = base64String.substring(0, base64String.length - 2) + '==';\n    }\n\n    return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n    var valueType = '';\n    if (value) {\n        valueType = toString$1.call(value);\n    }\n\n    // Cannot use `value instanceof ArrayBuffer` or such here, as these\n    // checks fail when running the tests using casper.js...\n    //\n    // TODO: See why those tests fail and use a better solution.\n    if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n        // Convert binary arrays to a string and prefix the string with\n        // a special marker.\n        var buffer;\n        var marker = SERIALIZED_MARKER;\n\n        if (value instanceof ArrayBuffer) {\n            buffer = value;\n            marker += TYPE_ARRAYBUFFER;\n        } else {\n            buffer = value.buffer;\n\n            if (valueType === '[object Int8Array]') {\n                marker += TYPE_INT8ARRAY;\n            } else if (valueType === '[object Uint8Array]') {\n                marker += TYPE_UINT8ARRAY;\n            } else if (valueType === '[object Uint8ClampedArray]') {\n                marker += TYPE_UINT8CLAMPEDARRAY;\n            } else if (valueType === '[object Int16Array]') {\n                marker += TYPE_INT16ARRAY;\n            } else if (valueType === '[object Uint16Array]') {\n                marker += TYPE_UINT16ARRAY;\n            } else if (valueType === '[object Int32Array]') {\n                marker += TYPE_INT32ARRAY;\n            } else if (valueType === '[object Uint32Array]') {\n                marker += TYPE_UINT32ARRAY;\n            } else if (valueType === '[object Float32Array]') {\n                marker += TYPE_FLOAT32ARRAY;\n            } else if (valueType === '[object Float64Array]') {\n                marker += TYPE_FLOAT64ARRAY;\n            } else {\n                callback(new Error('Failed to get type for BinaryArray'));\n            }\n        }\n\n        callback(marker + bufferToString(buffer));\n    } else if (valueType === '[object Blob]') {\n        // Conver the blob to a binaryArray and then to a string.\n        var fileReader = new FileReader();\n\n        fileReader.onload = function () {\n            // Backwards-compatible prefix for the blob type.\n            var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n            callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n        };\n\n        fileReader.readAsArrayBuffer(value);\n    } else {\n        try {\n            callback(JSON.stringify(value));\n        } catch (e) {\n            console.error(\"Couldn't convert value into a JSON string: \", value);\n\n            callback(null, e);\n        }\n    }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n    // If we haven't marked this string as being specially serialized (i.e.\n    // something other than serialized JSON), we can just return it and be\n    // done with it.\n    if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n        return JSON.parse(value);\n    }\n\n    // The following code deals with deserializing some kind of Blob or\n    // TypedArray. First we separate out the type of data we're dealing\n    // with from the data itself.\n    var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n    var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n    var blobType;\n    // Backwards-compatible blob type serialization strategy.\n    // DBs created with older versions of localForage will simply not have the blob type.\n    if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n        var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n        blobType = matcher[1];\n        serializedString = serializedString.substring(matcher[0].length);\n    }\n    var buffer = stringToBuffer(serializedString);\n\n    // Return the right type based on the code/type set during\n    // serialization.\n    switch (type) {\n        case TYPE_ARRAYBUFFER:\n            return buffer;\n        case TYPE_BLOB:\n            return createBlob([buffer], { type: blobType });\n        case TYPE_INT8ARRAY:\n            return new Int8Array(buffer);\n        case TYPE_UINT8ARRAY:\n            return new Uint8Array(buffer);\n        case TYPE_UINT8CLAMPEDARRAY:\n            return new Uint8ClampedArray(buffer);\n        case TYPE_INT16ARRAY:\n            return new Int16Array(buffer);\n        case TYPE_UINT16ARRAY:\n            return new Uint16Array(buffer);\n        case TYPE_INT32ARRAY:\n            return new Int32Array(buffer);\n        case TYPE_UINT32ARRAY:\n            return new Uint32Array(buffer);\n        case TYPE_FLOAT32ARRAY:\n            return new Float32Array(buffer);\n        case TYPE_FLOAT64ARRAY:\n            return new Float64Array(buffer);\n        default:\n            throw new Error('Unkown type: ' + type);\n    }\n}\n\nvar localforageSerializer = {\n    serialize: serialize,\n    deserialize: deserialize,\n    stringToBuffer: stringToBuffer,\n    bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n    t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n    var self = this;\n    var dbInfo = {\n        db: null\n    };\n\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n        }\n    }\n\n    var dbInfoPromise = new Promise$1(function (resolve, reject) {\n        // Open the database; the openDatabase API will automatically\n        // create it for us if it doesn't exist.\n        try {\n            dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n        } catch (e) {\n            return reject(e);\n        }\n\n        // Create our key/value table if it doesn't exist.\n        dbInfo.db.transaction(function (t) {\n            createDbTable(t, dbInfo, function () {\n                self._dbInfo = dbInfo;\n                resolve();\n            }, function (t, error) {\n                reject(error);\n            });\n        }, reject);\n    });\n\n    dbInfo.serializer = localforageSerializer;\n    return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n    t.executeSql(sqlStatement, args, callback, function (t, error) {\n        if (error.code === error.SYNTAX_ERR) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n                if (!results.rows.length) {\n                    // if the table is missing (was deleted)\n                    // re-create it table and retry\n                    createDbTable(t, dbInfo, function () {\n                        t.executeSql(sqlStatement, args, callback, errorCallback);\n                    }, errorCallback);\n                } else {\n                    errorCallback(t, error);\n                }\n            }, errorCallback);\n        } else {\n            errorCallback(t, error);\n        }\n    }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).value : null;\n\n                    // Check to see if this is serialized content we need to\n                    // unpack.\n                    if (result) {\n                        result = dbInfo.serializer.deserialize(result);\n                    }\n\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var rows = results.rows;\n                    var length = rows.length;\n\n                    for (var i = 0; i < length; i++) {\n                        var item = rows.item(i);\n                        var result = item.value;\n\n                        // Check to see if this is serialized content\n                        // we need to unpack.\n                        if (result) {\n                            result = dbInfo.serializer.deserialize(result);\n                        }\n\n                        result = iterator(result, item.key, i + 1);\n\n                        // void(0) prevents problems with redefinition\n                        // of `undefined`.\n                        if (result !== void 0) {\n                            resolve(result);\n                            return;\n                        }\n                    }\n\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            // The localStorage API doesn't return undefined values in an\n            // \"expected\" way, so undefined is always cast to null in all\n            // drivers. See: https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    dbInfo.db.transaction(function (t) {\n                        tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n                            resolve(originalValue);\n                        }, function (t, error) {\n                            reject(error);\n                        });\n                    }, function (sqlError) {\n                        // The transaction failed; check\n                        // to see if it's a quota error.\n                        if (sqlError.code === sqlError.QUOTA_ERR) {\n                            // We reject the callback outright for now, but\n                            // it's worth trying to re-run the transaction.\n                            // Even if the user accepts the prompt to use\n                            // more storage on Safari, this error will\n                            // be called.\n                            //\n                            // Try to re-run the transaction.\n                            if (retriesLeft > 0) {\n                                resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n                                return;\n                            }\n                            reject(sqlError);\n                        }\n                    });\n                }\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n    return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n                    resolve();\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                // Ahhh, SQL makes this one soooooo easy.\n                tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var result = results.rows.item(0).c;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n                    var result = results.rows.length ? results.rows.item(0).key : null;\n                    resolve(result);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$1(callback) {\n    var self = this;\n\n    var promise = new Promise$1(function (resolve, reject) {\n        self.ready().then(function () {\n            var dbInfo = self._dbInfo;\n            dbInfo.db.transaction(function (t) {\n                tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n                    var keys = [];\n\n                    for (var i = 0; i < results.rows.length; i++) {\n                        keys.push(results.rows.item(i).key);\n                    }\n\n                    resolve(keys);\n                }, function (t, error) {\n                    reject(error);\n                });\n            });\n        })[\"catch\"](reject);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n    return new Promise$1(function (resolve, reject) {\n        db.transaction(function (t) {\n            t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n                var storeNames = [];\n\n                for (var i = 0; i < results.rows.length; i++) {\n                    storeNames.push(results.rows.item(i).name);\n                }\n\n                resolve({\n                    db: db,\n                    storeNames: storeNames\n                });\n            }, function (t, error) {\n                reject(error);\n            });\n        }, function (sqlError) {\n            reject(sqlError);\n        });\n    });\n}\n\nfunction dropInstance$1(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    var currentConfig = this.config();\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            var db;\n            if (options.name === currentConfig.name) {\n                // use the db reference of the current instance\n                db = self._dbInfo.db;\n            } else {\n                db = openDatabase(options.name, '', '', 0);\n            }\n\n            if (!options.storeName) {\n                // drop all database tables\n                resolve(getAllStoreNames(db));\n            } else {\n                resolve({\n                    db: db,\n                    storeNames: [options.storeName]\n                });\n            }\n        }).then(function (operationInfo) {\n            return new Promise$1(function (resolve, reject) {\n                operationInfo.db.transaction(function (t) {\n                    function dropTable(storeName) {\n                        return new Promise$1(function (resolve, reject) {\n                            t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n                                resolve();\n                            }, function (t, error) {\n                                reject(error);\n                            });\n                        });\n                    }\n\n                    var operations = [];\n                    for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n                        operations.push(dropTable(operationInfo.storeNames[i]));\n                    }\n\n                    Promise$1.all(operations).then(function () {\n                        resolve();\n                    })[\"catch\"](function (e) {\n                        reject(e);\n                    });\n                }, function (sqlError) {\n                    reject(sqlError);\n                });\n            });\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar webSQLStorage = {\n    _driver: 'webSQLStorage',\n    _initStorage: _initStorage$1,\n    _support: isWebSQLValid(),\n    iterate: iterate$1,\n    getItem: getItem$1,\n    setItem: setItem$1,\n    removeItem: removeItem$1,\n    clear: clear$1,\n    length: length$1,\n    key: key$1,\n    keys: keys$1,\n    dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n    try {\n        return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n        // in IE8 typeof localStorage.setItem === 'object'\n        !!localStorage.setItem;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n    var keyPrefix = options.name + '/';\n\n    if (options.storeName !== defaultConfig.storeName) {\n        keyPrefix += options.storeName + '/';\n    }\n    return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n    var localStorageTestKey = '_localforage_support_test';\n\n    try {\n        localStorage.setItem(localStorageTestKey, true);\n        localStorage.removeItem(localStorageTestKey);\n\n        return false;\n    } catch (e) {\n        return true;\n    }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n    return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n    var self = this;\n    var dbInfo = {};\n    if (options) {\n        for (var i in options) {\n            dbInfo[i] = options[i];\n        }\n    }\n\n    dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n    if (!_isLocalStorageUsable()) {\n        return Promise$1.reject();\n    }\n\n    self._dbInfo = dbInfo;\n    dbInfo.serializer = localforageSerializer;\n\n    return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var keyPrefix = self._dbInfo.keyPrefix;\n\n        for (var i = localStorage.length - 1; i >= 0; i--) {\n            var key = localStorage.key(i);\n\n            if (key.indexOf(keyPrefix) === 0) {\n                localStorage.removeItem(key);\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n        // If a result was found, parse it from the serialized\n        // string into a JS object. If result isn't truthy, the key\n        // is likely undefined and we'll pass it straight to the\n        // callback.\n        if (result) {\n            result = dbInfo.serializer.deserialize(result);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n    var self = this;\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var keyPrefix = dbInfo.keyPrefix;\n        var keyPrefixLength = keyPrefix.length;\n        var length = localStorage.length;\n\n        // We use a dedicated iterator instead of the `i` variable below\n        // so other keys we fetch in localStorage aren't counted in\n        // the `iterationNumber` argument passed to the `iterate()`\n        // callback.\n        //\n        // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n        var iterationNumber = 1;\n\n        for (var i = 0; i < length; i++) {\n            var key = localStorage.key(i);\n            if (key.indexOf(keyPrefix) !== 0) {\n                continue;\n            }\n            var value = localStorage.getItem(key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the\n            // key is likely undefined and we'll pass it straight\n            // to the iterator.\n            if (value) {\n                value = dbInfo.serializer.deserialize(value);\n            }\n\n            value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n            if (value !== void 0) {\n                return value;\n            }\n        }\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var result;\n        try {\n            result = localStorage.key(n);\n        } catch (error) {\n            result = null;\n        }\n\n        // Remove the prefix from the key, if a key is found.\n        if (result) {\n            result = result.substring(dbInfo.keyPrefix.length);\n        }\n\n        return result;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction keys$2(callback) {\n    var self = this;\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        var length = localStorage.length;\n        var keys = [];\n\n        for (var i = 0; i < length; i++) {\n            var itemKey = localStorage.key(i);\n            if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n                keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n            }\n        }\n\n        return keys;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n    var self = this;\n    var promise = self.keys().then(function (keys) {\n        return keys.length;\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        var dbInfo = self._dbInfo;\n        localStorage.removeItem(dbInfo.keyPrefix + key);\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n    var self = this;\n\n    key = normalizeKey(key);\n\n    var promise = self.ready().then(function () {\n        // Convert undefined values to null.\n        // https://github.com/mozilla/localForage/pull/42\n        if (value === undefined) {\n            value = null;\n        }\n\n        // Save the original value to pass to the callback.\n        var originalValue = value;\n\n        return new Promise$1(function (resolve, reject) {\n            var dbInfo = self._dbInfo;\n            dbInfo.serializer.serialize(value, function (value, error) {\n                if (error) {\n                    reject(error);\n                } else {\n                    try {\n                        localStorage.setItem(dbInfo.keyPrefix + key, value);\n                        resolve(originalValue);\n                    } catch (e) {\n                        // localStorage capacity exceeded.\n                        // TODO: Make this a specific error/event.\n                        if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                            reject(e);\n                        }\n                        reject(e);\n                    }\n                }\n            });\n        });\n    });\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n    callback = getCallback.apply(this, arguments);\n\n    options = typeof options !== 'function' && options || {};\n    if (!options.name) {\n        var currentConfig = this.config();\n        options.name = options.name || currentConfig.name;\n        options.storeName = options.storeName || currentConfig.storeName;\n    }\n\n    var self = this;\n    var promise;\n    if (!options.name) {\n        promise = Promise$1.reject('Invalid arguments');\n    } else {\n        promise = new Promise$1(function (resolve) {\n            if (!options.storeName) {\n                resolve(options.name + '/');\n            } else {\n                resolve(_getKeyPrefix(options, self._defaultConfig));\n            }\n        }).then(function (keyPrefix) {\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n    }\n\n    executeCallback(promise, callback);\n    return promise;\n}\n\nvar localStorageWrapper = {\n    _driver: 'localStorageWrapper',\n    _initStorage: _initStorage$2,\n    _support: isLocalStorageValid(),\n    iterate: iterate$2,\n    getItem: getItem$2,\n    setItem: setItem$2,\n    removeItem: removeItem$2,\n    clear: clear$2,\n    length: length$2,\n    key: key$2,\n    keys: keys$2,\n    dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n    return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n    var len = array.length;\n    var i = 0;\n    while (i < len) {\n        if (sameValue(array[i], searchElement)) {\n            return true;\n        }\n        i++;\n    }\n\n    return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n    return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n    INDEXEDDB: asyncStorage,\n    WEBSQL: webSQLStorage,\n    LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n    description: '',\n    driver: DefaultDriverOrder.slice(),\n    name: 'localforage',\n    // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n    // we can use without a prompt.\n    size: 4980736,\n    storeName: 'keyvaluepairs',\n    version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n    localForageInstance[libraryMethod] = function () {\n        var _args = arguments;\n        return localForageInstance.ready().then(function () {\n            return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n        });\n    };\n}\n\nfunction extend() {\n    for (var i = 1; i < arguments.length; i++) {\n        var arg = arguments[i];\n\n        if (arg) {\n            for (var _key in arg) {\n                if (arg.hasOwnProperty(_key)) {\n                    if (isArray(arg[_key])) {\n                        arguments[0][_key] = arg[_key].slice();\n                    } else {\n                        arguments[0][_key] = arg[_key];\n                    }\n                }\n            }\n        }\n    }\n\n    return arguments[0];\n}\n\nvar LocalForage = function () {\n    function LocalForage(options) {\n        _classCallCheck(this, LocalForage);\n\n        for (var driverTypeKey in DefaultDrivers) {\n            if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n                var driver = DefaultDrivers[driverTypeKey];\n                var driverName = driver._driver;\n                this[driverTypeKey] = driverName;\n\n                if (!DefinedDrivers[driverName]) {\n                    // we don't need to wait for the promise,\n                    // since the default drivers can be defined\n                    // in a blocking manner\n                    this.defineDriver(driver);\n                }\n            }\n        }\n\n        this._defaultConfig = extend({}, DefaultConfig);\n        this._config = extend({}, this._defaultConfig, options);\n        this._driverSet = null;\n        this._initDriver = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        this._wrapLibraryMethodsWithReady();\n        this.setDriver(this._config.driver)[\"catch\"](function () {});\n    }\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n\n\n    LocalForage.prototype.config = function config(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" + 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                if (i === 'version' && typeof options[i] !== 'number') {\n                    return new Error('Database version must be a number.');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                return this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof options === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n\n\n    LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n        var promise = new Promise$1(function (resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n\n                var driverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0, len = driverMethods.length; i < len; i++) {\n                    var driverMethodName = driverMethods[i];\n\n                    // when the property is there,\n                    // it should be a method even when optional\n                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var configureMissingMethods = function configureMissingMethods() {\n                    var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n                        return function () {\n                            var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n                            var promise = Promise$1.reject(error);\n                            executeCallback(promise, arguments[arguments.length - 1]);\n                            return promise;\n                        };\n                    };\n\n                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n                        var optionalDriverMethod = OptionalDriverMethods[_i];\n                        if (!driverObject[optionalDriverMethod]) {\n                            driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n                        }\n                    }\n                };\n\n                configureMissingMethods();\n\n                var setDriverSupport = function setDriverSupport(support) {\n                    if (DefinedDrivers[driverName]) {\n                        console.info('Redefining LocalForage driver: ' + driverName);\n                    }\n                    DefinedDrivers[driverName] = driverObject;\n                    DriverSupport[driverName] = support;\n                    // don't use a then, so that we can define\n                    // drivers that have simple _support methods\n                    // in a blocking manner\n                    resolve();\n                };\n\n                if ('_support' in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        driverObject._support().then(setDriverSupport, reject);\n                    } else {\n                        setDriverSupport(!!driverObject._support);\n                    }\n                } else {\n                    setDriverSupport(true);\n                }\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        executeTwoCallbacks(promise, callback, errorCallback);\n        return promise;\n    };\n\n    LocalForage.prototype.driver = function driver() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n        var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n        executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n        return getDriverPromise;\n    };\n\n    LocalForage.prototype.getSerializer = function getSerializer(callback) {\n        var serializerPromise = Promise$1.resolve(localforageSerializer);\n        executeTwoCallbacks(serializerPromise, callback);\n        return serializerPromise;\n    };\n\n    LocalForage.prototype.ready = function ready(callback) {\n        var self = this;\n\n        var promise = self._driverSet.then(function () {\n            if (self._ready === null) {\n                self._ready = self._initDriver();\n            }\n\n            return self._ready;\n        });\n\n        executeTwoCallbacks(promise, callback, callback);\n        return promise;\n    };\n\n    LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n        var self = this;\n\n        if (!isArray(drivers)) {\n            drivers = [drivers];\n        }\n\n        var supportedDrivers = this._getSupportedDrivers(drivers);\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n\n        function extendSelfWithDriver(driver) {\n            self._extend(driver);\n            setDriverToConfig();\n\n            self._ready = self._initStorage(self._config);\n            return self._ready;\n        }\n\n        function initDriver(supportedDrivers) {\n            return function () {\n                var currentDriverIndex = 0;\n\n                function driverPromiseLoop() {\n                    while (currentDriverIndex < supportedDrivers.length) {\n                        var driverName = supportedDrivers[currentDriverIndex];\n                        currentDriverIndex++;\n\n                        self._dbInfo = null;\n                        self._ready = null;\n\n                        return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n                    }\n\n                    setDriverToConfig();\n                    var error = new Error('No available storage method found.');\n                    self._driverSet = Promise$1.reject(error);\n                    return self._driverSet;\n                }\n\n                return driverPromiseLoop();\n            };\n        }\n\n        // There might be a driver initialization in progress\n        // so wait for it to finish in order to avoid a possible\n        // race condition to set _dbInfo\n        var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n            return Promise$1.resolve();\n        }) : Promise$1.resolve();\n\n        this._driverSet = oldDriverSetDone.then(function () {\n            var driverName = supportedDrivers[0];\n            self._dbInfo = null;\n            self._ready = null;\n\n            return self.getDriver(driverName).then(function (driver) {\n                self._driver = driver._driver;\n                setDriverToConfig();\n                self._wrapLibraryMethodsWithReady();\n                self._initDriver = initDriver(supportedDrivers);\n            });\n        })[\"catch\"](function () {\n            setDriverToConfig();\n            var error = new Error('No available storage method found.');\n            self._driverSet = Promise$1.reject(error);\n            return self._driverSet;\n        });\n\n        executeTwoCallbacks(this._driverSet, callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function supports(driverName) {\n        return !!DriverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n        var supportedDrivers = [];\n        for (var i = 0, len = drivers.length; i < len; i++) {\n            var driverName = drivers[i];\n            if (this.supports(driverName)) {\n                supportedDrivers.push(driverName);\n            }\n        }\n        return supportedDrivers;\n    };\n\n    LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n    };\n\n    LocalForage.prototype.createInstance = function createInstance(options) {\n        return new LocalForage(options);\n    };\n\n    return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport FileBase from \"./FileBase\";\r\nimport BrowserFolder from \"./BrowserFolder\";\r\nimport IFile, { FileUpdateType } from \"./IFile\";\r\nimport BrowserStorage from \"./BrowserStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport localforage from \"localforage\";\r\nimport Log from \"../core/Log\";\r\n\r\nexport default class BrowserFile extends FileBase implements IFile {\r\n  private _name: string;\r\n  private _parentFolder: BrowserFolder;\r\n  private _lastLoadedPath?: string;\r\n  sizeAtLoad?: number;\r\n\r\n  get name(): string {\r\n    return this._name;\r\n  }\r\n\r\n  get parentFolder(): BrowserFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get fullPath(): string {\r\n    return this._parentFolder.fullPath + BrowserStorage.slashFolderDelimiter + this.name;\r\n  }\r\n\r\n  get size(): number {\r\n    if (this.content == null) {\r\n      return -1;\r\n    }\r\n\r\n    return this.content.length;\r\n  }\r\n\r\n  constructor(parentFolder: BrowserFolder, fileName: string) {\r\n    super();\r\n\r\n    this.sizeAtLoad = undefined;\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = fileName;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n\r\n      await this._parentFolder.save(false);\r\n    }\r\n\r\n    await localforage.removeItem(this.fullPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    await this.loadContent();\r\n\r\n    const originalPath = this.fullPath;\r\n    const oldParentFolder = this._parentFolder;\r\n    const oldName = this._name;\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as BrowserFolder;\r\n\r\n    this.modified = new Date();\r\n\r\n    // Remove from old parent folder's files collection\r\n    const oldNameCanon = StorageUtilities.canonicalizeName(oldName);\r\n    delete oldParentFolder.files[oldNameCanon];\r\n\r\n    (newParentFolder as BrowserFolder)._addExistingFile(this);\r\n\r\n    await localforage.removeItem(originalPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async loadContent(force?: boolean): Promise<Date> {\r\n    if (force || !this.lastLoadedOrSaved) {\r\n      this._lastLoadedPath = this.fullPath;\r\n      let content = await localforage.getItem(this.fullPath);\r\n\r\n      // LocalForage may return ArrayBuffer for binary content instead of Uint8Array\r\n      // Convert ArrayBuffer to Uint8Array for consistent handling\r\n      if (content instanceof ArrayBuffer) {\r\n        content = new Uint8Array(content);\r\n      } else if (content !== null && typeof content !== \"string\" && !(content instanceof Uint8Array)) {\r\n        Log.debug(\"BrowserFile: Unexpected content type for \" + this.fullPath);\r\n        content = null;\r\n      }\r\n\r\n      this._content = content as string | Uint8Array | null;\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async resaveAfterMove() {\r\n    if (this._lastLoadedPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._lastLoadedPath !== this.fullPath) {\r\n      // store old path because saving will change _lastLoadedPath\r\n      const oldPath = this._lastLoadedPath;\r\n\r\n      await this.saveContent(true, true);\r\n\r\n      await localforage.removeItem(oldPath);\r\n    }\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for browser storage\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType, sourceId?: string) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n      // Log.debugAlert(\"Setting a file without loading it first.\");\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    if (\r\n      this.isInErrorState &&\r\n      typeof newContent === \"string\" &&\r\n      StorageUtilities.getMimeType(this) === \"application/json\"\r\n    ) {\r\n      StorageUtilities.getJsonObject(this);\r\n    }\r\n\r\n    this.contentWasModified(oldContent, updateType, sourceId);\r\n\r\n    return true;\r\n  }\r\n\r\n  async saveContent(force?: boolean, skipParentFolderSave?: boolean): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.needsSave || force) {\r\n      /*let contentDescript = \"null\";\r\n\r\n      if (this.content instanceof Uint8Array) {\r\n        contentDescript = this.content.length + \" bytes\";\r\n      } else if (typeof this.content === \"string\") {\r\n        contentDescript = this.content.length + \" text\";\r\n      }*/\r\n\r\n      Log.assert(this.content !== null, \"Null content found.\");\r\n\r\n      // Log.debug(\"Saving file \" + contentDescript + \" to '\" + this.fullPath + \"'\");\r\n\r\n      this._lastLoadedPath = this.fullPath;\r\n      try {\r\n        await localforage.setItem(this.fullPath, this.content);\r\n      } catch (err) {\r\n        Log.debug(\"BrowserFile: Failed to save \" + this.fullPath + \": \" + err);\r\n      }\r\n\r\n      this.lastLoadedOrSaved = new Date();\r\n\r\n      if (skipParentFolderSave !== true) {\r\n        await this._parentFolder.save(false);\r\n      }\r\n    }\r\n\r\n    if (this.lastLoadedOrSaved === null) {\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder from \"./IFolder\";\r\nimport IFile from \"./IFile\";\r\nimport BrowserFile from \"./BrowserFile\";\r\nimport BrowserStorage from \"./BrowserStorage\";\r\nimport StorageUtilities from \"./StorageUtilities\";\r\nimport Utilities from \"./../core/Utilities\";\r\nimport Log from \"./../core/Log\";\r\n\r\nimport localforage from \"localforage\";\r\nimport IFolderState from \"./IFolderState\";\r\nimport IFileState from \"./IFileState\";\r\nimport IFolderSummaryState from \"./IFolderSummaryState\";\r\nimport FolderBase from \"./FolderBase\";\r\n\r\nexport default class BrowserFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _parentPath: string;\r\n  private _lastSavedContent: string;\r\n  private _storage: BrowserStorage;\r\n  private _parentFolder: BrowserFolder | null;\r\n  private _lastLoadedPath?: string;\r\n\r\n  get storage(): BrowserStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): BrowserFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  folders: { [id: string]: BrowserFolder | undefined };\r\n  files: { [id: string]: BrowserFile | undefined };\r\n\r\n  lastSavedFileCount: number;\r\n  modifiedAtLoad?: Date;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    return this._parentPath + BrowserStorage.slashFolderDelimiter + StorageUtilities.canonicalizeName(this.name);\r\n  }\r\n\r\n  constructor(storage: BrowserStorage, parentFolder: BrowserFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._parentPath = parentPath;\r\n    this._name = folderName;\r\n    this._lastSavedContent = \"\";\r\n\r\n    this.lastSavedFileCount = 0;\r\n\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  ensureFile(name: string): BrowserFile {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new BrowserFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n\r\n      this.storage.notifyFileAdded(candFile);\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return true;\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    return true;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    if (this.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    let result = await this.recursiveDeleteThisFolder();\r\n\r\n    await localforage.removeItem(this.fullPath + BrowserStorage.slashFolderDelimiter);\r\n\r\n    return result;\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    throw new Error(\"Deletion of all folder contents at \" + this.fullPath + \" is not supported.\");\r\n  }\r\n\r\n  ensureFolder(name: string): BrowserFolder {\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new BrowserFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // no-op for browser storage\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n\r\n    this.storage.notifyFileRemoved(this.storageRelativePath + file.name);\r\n  }\r\n\r\n  _addExistingFile(file: BrowserFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    if (Utilities.isUsableAsObjectKey(nameCanon)) {\r\n      this.files[nameCanon] = file;\r\n    }\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string, ignoreParentSave?: boolean): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this.isSameFolder(newStorageRelativePath)) {\r\n      return false;\r\n    }\r\n\r\n    if (this.isLoaded) {\r\n      await this.load();\r\n    }\r\n\r\n    const oldPath = this._lastLoadedPath;\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Folder exists at specified path.\");\r\n      }\r\n\r\n      this._parentFolder._removeExistingFolderFromParent(this);\r\n\r\n      this._parentFolder = newParentFolder as BrowserFolder;\r\n\r\n      this._name = newFolderName;\r\n\r\n      (newParentFolder as BrowserFolder)._addExistingFolderToParent(this);\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        await (file as BrowserFile).resaveAfterMove();\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        await folder.resaveAfterMove(this.fullPath);\r\n      }\r\n    }\r\n\r\n    await this.save(true);\r\n\r\n    if (oldPath) {\r\n      await localforage.removeItem(oldPath);\r\n    }\r\n\r\n    if (this._parentFolder !== null && !ignoreParentSave) {\r\n      await this._parentFolder.save(true);\r\n    }\r\n\r\n    if (!ignoreParentSave) {\r\n      this.notifyFolderMoved({ previousStoragePath: oldPath, newStoragePath: this.fullPath, folder: this });\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    const file = this.ensureFile(name);\r\n\r\n    this.storage.notifyFileAdded(file);\r\n\r\n    return file;\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    this._lastLoadedPath = this.fullPath + BrowserStorage.slashFolderDelimiter;\r\n    const listingContent = await localforage.getItem<string>(this.fullPath + BrowserStorage.slashFolderDelimiter);\r\n\r\n    if (listingContent != null) {\r\n      this._lastSavedContent = listingContent;\r\n\r\n      let folderState: IFolderState | undefined;\r\n\r\n      try {\r\n        folderState = JSON.parse(listingContent);\r\n      } catch (e: any) {\r\n        Log.debugAlert(\"Failure to parse browser folder content JSON:\" + e.toString());\r\n      }\r\n\r\n      if (folderState) {\r\n        for (var i = 0; i < folderState.files.length; i++) {\r\n          const fileMeta = folderState.files[i];\r\n\r\n          // JSON.parse doesn't fix up dates produced by JSON.stringify, so do that here.\r\n          if (fileMeta.modified != null && !(fileMeta.modified instanceof Date)) {\r\n            fileMeta.modified = new Date(fileMeta.modified);\r\n          }\r\n\r\n          const newFile = this.ensureFile(fileMeta.name);\r\n\r\n          newFile.modifiedAtLoad = fileMeta.modified == null ? null : fileMeta.modified;\r\n\r\n          if (newFile.sizeAtLoad === undefined) {\r\n            newFile.sizeAtLoad = fileMeta.size;\r\n          }\r\n        }\r\n\r\n        for (var j = 0; j < folderState.folders.length; j++) {\r\n          const folderMeta = folderState.folders[j];\r\n\r\n          // JSON.parse doesn't fix up dates produced by JSON.stringify, so do that here.\r\n          if (folderMeta.modified != null && !(folderMeta.modified instanceof Date)) {\r\n            folderMeta.modified = new Date(folderMeta.modified);\r\n          }\r\n\r\n          const newFolder = this.ensureFolder(folderMeta.name);\r\n\r\n          newFolder.modifiedAtLoad = folderMeta.modified;\r\n          newFolder.lastSavedFileCount = folderMeta.fileCount;\r\n        }\r\n      }\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n\r\n  async resaveAfterMove(newParentPath: string) {\r\n    this._parentPath = newParentPath;\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file) {\r\n        await (file as BrowserFile).resaveAfterMove();\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder) {\r\n        await folder.resaveAfterMove(this.fullPath);\r\n      }\r\n    }\r\n\r\n    if (this._lastLoadedPath === undefined) {\r\n      return;\r\n    }\r\n\r\n    if (this._lastLoadedPath !== StorageUtilities.ensureEndsWithDelimiter(this.fullPath)) {\r\n      const oldPath = this._lastLoadedPath;\r\n      await this.save(true);\r\n      await localforage.removeItem(oldPath);\r\n    }\r\n  }\r\n\r\n  async save(force?: boolean): Promise<Date> {\r\n    // we need to load before we save if the only thing this folder has seen is a bunch of\r\n    // /ensures/\r\n    if (!this.isLoaded) {\r\n      await this.load(false);\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    const folderState: IFolderState = {\r\n      updated: this.lastLoadedOrSaved as Date,\r\n      files: [],\r\n      folders: [],\r\n    };\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file !== undefined) {\r\n        const fileState: IFileState = {\r\n          name: file.name,\r\n          size: file.size,\r\n          modified: file.latestModified == null ? new Date() : file.latestModified,\r\n        };\r\n\r\n        folderState.files.push(fileState);\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const childFolder = this.folders[folderName];\r\n\r\n      if (childFolder !== undefined && !childFolder.errorStatus) {\r\n        const childFolderState: IFolderSummaryState = {\r\n          name: childFolder.name,\r\n          fileCount: Utilities.lengthOfDictionary(childFolder.files),\r\n          modified: childFolder.modifiedAtLoad == null ? new Date() : childFolder.modifiedAtLoad,\r\n        };\r\n\r\n        folderState.folders.push(childFolderState);\r\n      }\r\n    }\r\n\r\n    const saveContent = JSON.stringify(folderState);\r\n\r\n    if (this._lastSavedContent !== saveContent || force) {\r\n      this._lastSavedContent = saveContent;\r\n      this._lastLoadedPath = this.fullPath + BrowserStorage.slashFolderDelimiter;\r\n      await localforage.setItem<string>(this.fullPath + BrowserStorage.slashFolderDelimiter, saveContent);\r\n    }\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n\r\n  override async saveAll(force?: boolean): Promise<boolean> {\r\n    // Log.verbose(\"Saving all at \" + this.storageRelativePath);\r\n    if (this.isDisposed) {\r\n      Log.throwIsDisposed();\r\n    }\r\n\r\n    const initialDateTime = new Date().getTime();\r\n    let needsContentSave = false;\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      if (file !== undefined && (file.needsSave || force)) {\r\n        let newContentSaveDate = await file.saveContent(force, true);\r\n\r\n        if (newContentSaveDate.getTime() > initialDateTime) {\r\n          needsContentSave = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const folder = this.folders[folderName];\r\n\r\n      if (folder !== undefined && !folder.errorStatus) {\r\n        needsContentSave = true;\r\n        await folder.saveAll(force);\r\n      }\r\n    }\r\n\r\n    if (needsContentSave || this._lastSavedContent === undefined || force === true) {\r\n      await this.save(force);\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport BrowserFolder from \"./BrowserFolder\";\r\nimport StorageBase from \"./StorageBase\";\r\nimport IStorage from \"./IStorage\";\r\nimport localforage from \"localforage\";\r\n\r\nexport default class BrowserStorage extends StorageBase implements IStorage {\r\n  rootFolder: BrowserFolder;\r\n  static isConfigured: boolean = false;\r\n\r\n  /**\r\n   * The name used to construct this storage instance.\r\n   * Used for BrowserStorage pointer mode when transferring to web workers.\r\n   */\r\n  readonly storageName: string | null;\r\n\r\n  static ensureConfigured() {\r\n    if (!BrowserStorage.isConfigured) {\r\n      localforage.config({\r\n        name: \"Minecraft Creator Tools\",\r\n        storeName: \"minecraft_creator_tools\",\r\n        version: 1.0,\r\n        // Use IndexedDB driver - this works in both main thread and web workers\r\n        // (localStorage requires window object which is not available in workers)\r\n        driver: localforage.INDEXEDDB,\r\n      });\r\n\r\n      BrowserStorage.isConfigured = true;\r\n    }\r\n  }\r\n\r\n  constructor(name: string | null) {\r\n    super();\r\n\r\n    // Store the original name for worker pointer mode\r\n    this.storageName = name;\r\n\r\n    if (name == null) {\r\n      name = \"\";\r\n    } else {\r\n      name = \".\" + name;\r\n    }\r\n\r\n    BrowserStorage.ensureConfigured();\r\n\r\n    this.rootFolder = new BrowserFolder(this, null, \"fs\" + name, \"root\");\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport Log from \"../core/Log\";\r\nimport CommandRegistry, { CommandScope } from \"./CommandRegistry\";\r\nimport { CommandStatus } from \"./ICommand\";\r\nimport IContext from \"./IContext\";\r\n\r\nexport default class CreatorToolsCommands {\r\n  static async debugProjectInformation(context: IContext, name: string, args: string[]) {\r\n    if (!context.project) {\r\n      return { status: CommandStatus.invalidArguments };\r\n    }\r\n\r\n    let message = \"N: \" + context.project.name;\r\n\r\n    if (context.project.projectFolder) {\r\n      message += \" PF: \" + context.project.projectFolder.fullPath;\r\n    }\r\n\r\n    Log.message(message);\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async debugMinecraft(context: IContext, name: string, args: string[]) {\r\n    let message = \"LAM: \" + context.creatorTools.lastActiveMinecraftFlavor;\r\n\r\n    if (context.creatorTools.remoteServerUrl) {\r\n      message += \" RSURL: \" + context.creatorTools.remoteServerUrl;\r\n    }\r\n\r\n    if (context.creatorTools.remoteServerPort) {\r\n      message += \" RSP: \" + context.creatorTools.remoteServerPort;\r\n    }\r\n\r\n    if (context.creatorTools.dedicatedServerMode) {\r\n      message += \" DSM: \" + context.creatorTools.dedicatedServerMode;\r\n    }\r\n\r\n    if (context.creatorTools.dedicatedServerPath) {\r\n      message += \" DSP: \" + context.creatorTools.dedicatedServerPath;\r\n    }\r\n\r\n    if (context.creatorTools.dedicatedServerSlotCount) {\r\n      message += \" DSS: \" + context.creatorTools.dedicatedServerSlotCount;\r\n    }\r\n\r\n    Log.message(message);\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async startMinecraft(context: IContext, name: string, args: string[]) {\r\n    if (!context.minecraft && !context.creatorTools.lastActiveMinecraftFlavor) {\r\n      return { status: CommandStatus.invalidEnvironment };\r\n    }\r\n\r\n    let mc = context.minecraft;\r\n\r\n    if (!mc && context.creatorTools.lastActiveMinecraftFlavor) {\r\n      mc = context.creatorTools.ensureMinecraft(context.creatorTools.lastActiveMinecraftFlavor);\r\n    }\r\n\r\n    if (!mc) {\r\n      return { status: CommandStatus.invalidEnvironment };\r\n    }\r\n\r\n    Log.message(\"Starting server.\");\r\n    await mc.prepareAndStart({\r\n      project: context.project,\r\n    });\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async stopMinecraft(context: IContext, name: string, args: string[]) {\r\n    if (!context.minecraft) {\r\n      return { status: CommandStatus.invalidEnvironment };\r\n    }\r\n\r\n    Log.message(\"Stopping server.\");\r\n    await context.minecraft.stop();\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static async updateMinecraft(context: IContext, name: string, args: string[]) {\r\n    if (context.minecraft) {\r\n      context.minecraft.prepare(true);\r\n    }\r\n\r\n    return { status: CommandStatus.completed };\r\n  }\r\n\r\n  static registerCommonCommands() {\r\n    CommandRegistry.main.registerCommand(\"dbgproj\", CommandScope.debug, CreatorToolsCommands.debugProjectInformation);\r\n    CommandRegistry.main.registerCommand(\"dbgmc\", CommandScope.debug, CreatorToolsCommands.debugMinecraft);\r\n    CommandRegistry.main.registerCommand(\"startmc\", CommandScope.any, CreatorToolsCommands.startMinecraft);\r\n    CommandRegistry.main.registerCommand(\"stopmc\", CommandScope.minecraft, CreatorToolsCommands.stopMinecraft);\r\n    CommandRegistry.main.registerCommand(\"updatemc\", CommandScope.minecraft, CreatorToolsCommands.updateMinecraft);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/*\r\n * ==========================================================================================\r\n * CREATORTOOLS HOST - PLATFORM ABSTRACTION LAYER NOTES\r\n * ==========================================================================================\r\n *\r\n * OVERVIEW:\r\n * ---------\r\n * CreatorToolsHost is the central platform abstraction layer that allows MCT to run across\r\n * multiple environments: web browser, NodeJS CLI, Electron app, and VS Code extension.\r\n * It provides static methods and properties for platform detection, storage initialization,\r\n * and cross-platform thunks for functionality that differs by platform.\r\n *\r\n * HOST TYPES (HostType enum):\r\n * ---------------------------\r\n * - web (0): Pure browser, no backend services (uses BrowserStorage/localStorage)\r\n * - toolsNodejs (1): NodeJS command line tool (uses NodeStorage/fs)\r\n * - electronNodeJs (2): Electron main process (NodeJS side)\r\n * - electronWeb (3): Electron renderer process (browser side, uses ElectronStorage via IPC)\r\n * - vsCodeMainNodeJs (4): VS Code extension host (NodeJS side)\r\n * - vsCodeMainWeb (5): VS Code webview connected to extension host\r\n * - vsCodeWebService (6): VS Code web extension service worker\r\n * - vsCodeWebWeb (7): VS Code web extension webview\r\n * - webPlusServices (8): Browser with AppServiceProxy backend\r\n * - testLocal (9): Local testing environment\r\n *\r\n * STORAGE INITIALIZATION:\r\n * -----------------------\r\n * The init() method sets up storage based on hostType:\r\n * - prefsStorage: User preferences (BrowserStorage in web, ElectronStorage in Electron)\r\n * - projectsStorage: Project files and metadata\r\n * - deploymentStorage[]: Array of deployment targets indexed by DeploymentTargetType\r\n * - worldStorage: Minecraft worlds\r\n * - packStorage: Downloaded/cached packs\r\n * - workingStorage: Temporary working files\r\n *\r\n * CROSS-PLATFORM THUNKS:\r\n * ----------------------\r\n * These function properties are set based on platform capabilities:\r\n * - generateCryptoRandomNumber: Secure random number generation\r\n * - localFolderExists / localFileExists: File system checks (only in NodeJS contexts)\r\n * - ensureLocalFolder: Create local folder (only in NodeJS contexts)\r\n * - createMinecraft / canCreateMinecraft: Minecraft instance creation (Electron/VSCode)\r\n *\r\n * CONTENT ROOTS:\r\n * --------------\r\n * - contentWebRoot: Base URL for APP data (forms, catalogs, snippets, typedefs, mccat.json).\r\n *   Set to \"/\" for local HTTP server, or full URL for web hosting.\r\n *   Used for: data/forms/, data/mccat.json, data/typedefs.*.json, data/mci/, data/mch/\r\n *\r\n * - vanillaContentRoot: Base URL for VANILLA MINECRAFT assets (textures, models, resource packs).\r\n *   These are large files (~500MB+) not bundled with CLI tool, hosted at mctools.dev.\r\n *   Used for: res/latest/van/release/, res/latest/van/preview/, res/latest/van/serve/\r\n *\r\n * - getVanillaContentRoot(): Returns vanillaContentRoot if set, else contentWebRoot.\r\n *   Use this for all vanilla resource loading (textures, blocks.json, terrain_texture.json).\r\n *\r\n * INITIALIZATION FLOW:\r\n * --------------------\r\n * 1. Global variables (g_contentRoot, g_isVsCodeMain, etc.) are injected by build system\r\n * 2. init() reads globals and sets hostType\r\n * 3. AppServiceProxy.init() establishes IPC if in Electron/VSCode\r\n * 4. Database.loadVanillaCatalog() loads mccat.json\r\n * 5. Storage objects are created based on detected platform\r\n * 6. CreatorTools singleton is instantiated with storage references\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - CreatorTools.ts: Main application object, instantiated by CreatorToolsHost\r\n * - AppServiceProxy.ts: IPC communication layer for Electron/VSCode\r\n * - BrowserStorage.ts, ElectronStorage.ts, NodeStorage.ts: Storage implementations\r\n * - Database.ts: Loads vanilla catalog and form definitions\r\n *\r\n * COMMON PATTERNS:\r\n * ----------------\r\n * - Check platform: CreatorToolsHost.isNodeJs, .isWeb, .isVsCode, .isAppServiceWeb\r\n * - Get main app: CreatorToolsHost.getCreatorTools()\r\n * - Listen for init: CreatorToolsHost.onInitialized.subscribe(handler)\r\n * - Theme changes: CreatorToolsHost.onThemeChanged.subscribe(handler)\r\n *\r\n * ==========================================================================================\r\n */\r\n\r\nimport CreatorTools from \"./CreatorTools\";\r\nimport { MinecraftFlavor } from \"./ICreatorToolsData\";\r\nimport Database from \"../minecraft/Database\";\r\nimport BrowserStorage from \"../storage/BrowserStorage\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport ElectronStorage from \"../electronclient/ElectronStorage\";\r\nimport { EventDispatcher } from \"ste-events\";\r\nimport AppServiceProxy from \"../core/AppServiceProxy\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IMinecraft from \"./IMinecraft\";\r\nimport CreatorToolsCommands from \"./CreatorToolsCommands\";\r\nimport { DeploymentTargetType } from \"./DeploymentTarget\";\r\n\r\nexport enum CreatorToolsThemeStyle {\r\n  dark = 0,\r\n  light = 1,\r\n  highContrastDark = 2,\r\n  highContrastLight = 3,\r\n}\r\n\r\nexport enum HostType {\r\n  web = 0,\r\n  toolsNodejs = 1,\r\n  electronNodeJs = 2,\r\n  electronWeb = 3,\r\n  vsCodeMainNodeJs = 4,\r\n  vsCodeMainWeb = 5,\r\n  vsCodeWebService = 6,\r\n  vsCodeWebWeb = 7,\r\n  webPlusServices = 8,\r\n  testLocal = 9,\r\n}\r\n\r\n/// CreatorToolsHost mostly serves as a static app loader for the really-core Carto app object.\r\nexport default class CreatorToolsHost {\r\n  private static _creatorTools?: CreatorTools;\r\n  private static _onInitialized = new EventDispatcher<CreatorTools, CreatorTools>();\r\n  private static _onThemeChanged = new EventDispatcher<CreatorToolsHost, CreatorToolsThemeStyle>();\r\n  private static _initializing = false;\r\n  private static _initialized = false;\r\n  public static isLocalNode = false;\r\n  public static fullLocalStorage = false;\r\n  public static hostType = HostType.web;\r\n  public static hostManager?: any = undefined;\r\n  private static _theme: CreatorToolsThemeStyle = CreatorToolsThemeStyle.dark;\r\n  /**\r\n   * True when the OS/browser is in a forced-colors (high contrast) mode.\r\n   * This is orthogonal to dark/light \u2014 HC Dark sets theme=dark + isHighContrast,\r\n   * HC Light sets theme=light + isHighContrast.\r\n   */\r\n  public static isHighContrast = false;\r\n  public static retrieveDataFromWebContentRoot = false;\r\n  public static contentWebRoot = \"\";\r\n  public static vanillaContentRoot = \"\"; // URL root for vanilla textures, samples, definitions (e.g., https://mctools.dev/)\r\n  public static projectPath = \"\";\r\n  public static focusPath: string | undefined = undefined;\r\n  public static baseUrl = \"\";\r\n\r\n  /**\r\n   * Gets the effective root URL for vanilla content (textures, samples, definitions).\r\n   * Returns vanillaContentRoot if set, otherwise falls back to contentRoot.\r\n   */\r\n  public static getVanillaContentRoot(): string {\r\n    return this.vanillaContentRoot || this.contentWebRoot || \"\";\r\n  }\r\n\r\n  /**\r\n   * Gets the current theme style\r\n   */\r\n  public static get theme(): CreatorToolsThemeStyle {\r\n    return this._theme;\r\n  }\r\n\r\n  /**\r\n   * Sets the theme style and notifies listeners\r\n   */\r\n  public static set theme(value: CreatorToolsThemeStyle) {\r\n    if (this._theme !== value) {\r\n      this._theme = value;\r\n      this._onThemeChanged.dispatch(CreatorToolsHost, value);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Event fired when theme changes. Use this to update FluentUI components\r\n   * that are initialized outside of React's render cycle.\r\n   */\r\n  public static get onThemeChanged() {\r\n    return this._onThemeChanged.asEvent();\r\n  }\r\n\r\n  public static initialMode: string | null = null;\r\n  public static modeParameter: string | null = null;\r\n  public static contentUrl: string | null = null;\r\n  public static readOnly: boolean = false;\r\n\r\n  public static postMessage: ((message: any) => void) | undefined;\r\n\r\n  public static prefsStorage: IStorage | null = null;\r\n  public static projectsStorage: IStorage | null = null;\r\n  public static deploymentStorage: IStorage[] = [];\r\n  public static worldStorage: IStorage | null = null;\r\n  public static packStorage: IStorage | null = null;\r\n  public static workingStorage: IStorage | null = null;\r\n\r\n  public static generateCryptoRandomNumber: (toVal: number) => number;\r\n  public static generateUuid: () => string;\r\n  public static localFolderExists: ((path: string) => Promise<boolean>) | undefined;\r\n  public static localFileExists: ((path: string) => Promise<boolean>) | undefined;\r\n  public static ensureLocalFolder: ((path: string) => IFolder) | undefined;\r\n  public static createMinecraft:\r\n    | ((flavor: MinecraftFlavor, creatorTOols: CreatorTools) => IMinecraft | undefined)\r\n    | undefined;\r\n  public static canCreateMinecraft: ((flavor: MinecraftFlavor) => boolean) | undefined;\r\n\r\n  // Image codec thunks - set by Node.js environments to provide platform-specific implementations\r\n  public static decodePng:\r\n    | ((data: Uint8Array) => { width: number; height: number; pixels: Uint8Array } | undefined)\r\n    | undefined;\r\n  public static encodeToPng:\r\n    | ((pixels: Uint8Array, width: number, height: number) => Uint8Array | undefined)\r\n    | undefined;\r\n\r\n  private static _onMessage = new EventDispatcher<any, any>();\r\n\r\n  public static get isNodeJs() {\r\n    return (\r\n      this.hostType === HostType.electronNodeJs ||\r\n      this.hostType === HostType.toolsNodejs ||\r\n      this.hostType === HostType.vsCodeMainNodeJs\r\n    );\r\n  }\r\n\r\n  public static get isVsCode() {\r\n    return (\r\n      this.hostType === HostType.vsCodeMainNodeJs ||\r\n      this.hostType === HostType.vsCodeWebService ||\r\n      this.hostType === HostType.vsCodeMainWeb ||\r\n      this.hostType === HostType.vsCodeWebWeb\r\n    );\r\n  }\r\n\r\n  public static get isWeb() {\r\n    return (\r\n      this.hostType === HostType.webPlusServices ||\r\n      this.hostType === HostType.web ||\r\n      this.hostType === HostType.electronWeb ||\r\n      this.hostType === HostType.vsCodeMainWeb ||\r\n      this.hostType === HostType.vsCodeWebWeb\r\n    );\r\n  }\r\n\r\n  public static get isAppServiceWeb() {\r\n    return this.hostType === HostType.electronWeb || this.hostType === HostType.vsCodeMainWeb;\r\n  }\r\n\r\n  public static get onMessage() {\r\n    return CreatorToolsHost._onMessage.asEvent();\r\n  }\r\n\r\n  public static get onInitialized() {\r\n    return CreatorToolsHost._onInitialized.asEvent();\r\n  }\r\n\r\n  public static getCreatorTools(): CreatorTools | undefined {\r\n    if (!this._initialized) {\r\n      this.init();\r\n    }\r\n\r\n    return CreatorToolsHost._creatorTools;\r\n  }\r\n\r\n  public static notifyNewMessage(source: any, message: any) {\r\n    CreatorToolsHost._onMessage.dispatch(source, message);\r\n  }\r\n\r\n  public static setHostType(type: HostType) {\r\n    this.hostType = type;\r\n  }\r\n\r\n  static init() {\r\n    if (CreatorToolsHost._initializing || CreatorToolsHost._initialized) {\r\n      return;\r\n    }\r\n\r\n    CreatorToolsHost._initializing = true;\r\n\r\n    //@ts-ignore\r\n    if (typeof g_contentRoot !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.contentWebRoot = StorageUtilities.ensureEndsWithDelimiter(g_contentRoot);\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_vanillaContentRoot !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.vanillaContentRoot = StorageUtilities.ensureEndsWithDelimiter(g_vanillaContentRoot);\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_initialMode !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.initialMode = g_initialMode;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_modeParameter !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.modeParameter = g_modeParameter;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_isVsCodeMain !== \"undefined\") {\r\n      //@ts-ignore\r\n      if (g_isVsCodeMain) {\r\n        CreatorToolsHost.hostType = HostType.vsCodeMainWeb;\r\n      }\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_isVsCodeWeb !== \"undefined\") {\r\n      //@ts-ignore\r\n      if (g_isVsCodeWeb) {\r\n        CreatorToolsHost.hostType = HostType.vsCodeWebWeb;\r\n      }\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_projectPath !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.projectPath = g_projectPath;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_baseUrl !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.baseUrl = g_baseUrl;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_contentUrl !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.contentUrl = g_contentUrl;\r\n    }\r\n\r\n    //@ts-ignore\r\n    if (typeof g_readOnly !== \"undefined\") {\r\n      //@ts-ignore\r\n      CreatorToolsHost.readOnly = g_readOnly === true;\r\n    }\r\n\r\n    AppServiceProxy.init();\r\n\r\n    Database.loadVanillaCatalog();\r\n\r\n    CreatorToolsCommands.registerCommonCommands();\r\n\r\n    CreatorToolsHost.generateCryptoRandomNumber = (toVal) => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n      if (!ct || !ct.local) {\r\n        throw new Error(\"Could not generate key.\");\r\n      }\r\n\r\n      return ct.local.generateCryptoRandomNumber(toVal);\r\n    };\r\n\r\n    CreatorToolsHost.generateUuid = () => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n      if (!ct || !ct.local) {\r\n        throw new Error(\"Could not generate UUID.\");\r\n      }\r\n\r\n      return ct.local.generateUuid();\r\n    };\r\n\r\n    // Set up image codec thunks for Node.js environments\r\n    CreatorToolsHost.decodePng = (data: Uint8Array) => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n      if (!ct || !ct.local) {\r\n        return undefined;\r\n      }\r\n      return ct.local.decodePng(data);\r\n    };\r\n\r\n    CreatorToolsHost.encodeToPng = (pixels: Uint8Array, width: number, height: number) => {\r\n      const ct = CreatorToolsHost.getCreatorTools();\r\n      if (!ct || !ct.local) {\r\n        return undefined;\r\n      }\r\n      return ct.local.encodeToPng(pixels, width, height);\r\n    };\r\n\r\n    // @ts-ignore\r\n    if (typeof window !== \"undefined\" && window.crypto) {\r\n      CreatorToolsHost.generateCryptoRandomNumber = (toVal) => {\r\n        // Use rejection sampling to avoid modulo bias when generating random numbers\r\n        // from a cryptographically secure source\r\n        const maxUint32 = 0xffffffff;\r\n        const limit = maxUint32 - (maxUint32 % toVal);\r\n        let randomValue: number;\r\n        do {\r\n          // @ts-ignore\r\n          randomValue = window.crypto.getRandomValues(new Uint32Array(1))[0];\r\n        } while (randomValue >= limit);\r\n        return randomValue % toVal;\r\n      };\r\n\r\n      // @ts-ignore\r\n      if (window.crypto.randomUUID) {\r\n        CreatorToolsHost.generateUuid = () => {\r\n          // @ts-ignore\r\n          return window.crypto.randomUUID();\r\n        };\r\n      } else {\r\n        // Fallback for older browsers using crypto.getRandomValues\r\n        CreatorToolsHost.generateUuid = () => {\r\n          // @ts-ignore\r\n          const bytes = window.crypto.getRandomValues(new Uint8Array(16));\r\n          // Set version 4 (random) UUID bits\r\n          bytes[6] = (bytes[6] & 0x0f) | 0x40;\r\n          bytes[8] = (bytes[8] & 0x3f) | 0x80;\r\n          const hex = Array.from(bytes, (b: number) => b.toString(16).padStart(2, \"0\")).join(\"\");\r\n          return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\r\n        };\r\n      }\r\n    }\r\n\r\n    if (CreatorToolsHost.projectsStorage !== null && CreatorToolsHost.prefsStorage !== null) {\r\n    } else if (AppServiceProxy.hasAppService) {\r\n      let ls = new ElectronStorage(\"<DOCP>\", \"prefs\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.prefsStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"working\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.workingStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"projects\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.projectsStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"worlds\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.worldStorage = ls;\r\n\r\n      ls = new ElectronStorage(\"<DOCP>\", \"packs\");\r\n      ls.rootFolder.ensureExists();\r\n      CreatorToolsHost.packStorage = ls;\r\n\r\n      // @ts-ignore\r\n      if (typeof window !== \"undefined\") {\r\n        // @ts-ignore\r\n        let basePath = window.location.href;\r\n        const lastSlash = basePath.lastIndexOf(\"/\");\r\n\r\n        if (lastSlash >= 0) {\r\n          CreatorToolsHost.contentWebRoot = basePath.substring(0, lastSlash + 1);\r\n        }\r\n      }\r\n\r\n      let minecraftPath = \"<BDRK>\";\r\n\r\n      ls = new ElectronStorage(minecraftPath, \"\");\r\n      ls.getAvailable();\r\n      CreatorToolsHost.deploymentStorage[DeploymentTargetType.bedrock] = ls;\r\n\r\n      let minecraftPreviewPath = \"<BDPV>\";\r\n\r\n      ls = new ElectronStorage(minecraftPreviewPath, \"\");\r\n      ls.getAvailable();\r\n\r\n      CreatorToolsHost.deploymentStorage[DeploymentTargetType.bedrockPreview] = ls;\r\n\r\n      //@ts-ignore\r\n    } else if (typeof window !== \"undefined\") {\r\n      // Guard: If we're in Electron context but AppServiceProxy isn't ready, that's an initialization error.\r\n      // Electron renderer should NEVER use BrowserStorage - it should use ElectronStorage which proxies to NodeJS.\r\n      // @ts-ignore\r\n      if (typeof window.api !== \"undefined\") {\r\n        throw new Error(\r\n          \"BrowserStorage initialization attempted in Electron context. \" +\r\n            \"Electron renderer must use ElectronStorage. \" +\r\n            \"Ensure AppServiceProxy.hasAppService is true before CreatorToolsHost.init() is called.\"\r\n        );\r\n      }\r\n\r\n      CreatorToolsHost.prefsStorage = new BrowserStorage(\"mctprefs\");\r\n      CreatorToolsHost.projectsStorage = new BrowserStorage(\"mctprojects\");\r\n\r\n      CreatorToolsHost.deploymentStorage[DeploymentTargetType.bedrock] = new BrowserStorage(\"mctdeploy\");\r\n      CreatorToolsHost.workingStorage = new BrowserStorage(\"mctworking\");\r\n      CreatorToolsHost.worldStorage = new BrowserStorage(\"mctworlds\");\r\n      CreatorToolsHost.packStorage = new BrowserStorage(\"mctpacks\");\r\n    }\r\n\r\n    if (CreatorToolsHost.prefsStorage === null || CreatorToolsHost.projectsStorage === null) {\r\n      throw new Error(\"Unexpected uninitialized storage.\");\r\n    }\r\n\r\n    CreatorToolsHost._creatorTools = new CreatorTools(\r\n      CreatorToolsHost.prefsStorage,\r\n      CreatorToolsHost.projectsStorage,\r\n      CreatorToolsHost.deploymentStorage,\r\n      CreatorToolsHost.worldStorage,\r\n      CreatorToolsHost.packStorage,\r\n      CreatorToolsHost.workingStorage,\r\n      CreatorToolsHost.contentWebRoot\r\n    );\r\n\r\n    if (CreatorToolsHost.ensureLocalFolder) {\r\n      CreatorToolsHost._creatorTools.ensureLocalFolder = CreatorToolsHost.ensureLocalFolder;\r\n      CreatorToolsHost._creatorTools.localFolderExists = CreatorToolsHost.localFolderExists;\r\n      CreatorToolsHost._creatorTools.localFileExists = CreatorToolsHost.localFileExists;\r\n    } else if (CreatorToolsHost.hostType === HostType.electronWeb) {\r\n      CreatorToolsHost._creatorTools.ensureLocalFolder = CreatorToolsHost._ensureElectronLocalFolder;\r\n      CreatorToolsHost._creatorTools.localFolderExists = CreatorToolsHost._localFolderExists;\r\n      CreatorToolsHost._creatorTools.localFileExists = CreatorToolsHost._localFileExists;\r\n    }\r\n\r\n    CreatorToolsHost._creatorTools.createMinecraft = CreatorToolsHost.createMinecraft;\r\n    CreatorToolsHost._creatorTools.canCreateMinecraft = CreatorToolsHost.canCreateMinecraft;\r\n\r\n    CreatorToolsHost._initialized = true;\r\n\r\n    this._onInitialized.dispatch(CreatorToolsHost._creatorTools, CreatorToolsHost._creatorTools);\r\n  }\r\n\r\n  static async _localFolderExists(path: string) {\r\n    const ls = new ElectronStorage(path, \"\");\r\n\r\n    let result = ls.available;\r\n\r\n    if (!result) {\r\n      result = await ls.getAvailable();\r\n\r\n      if (!result) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return await ls.rootFolder.exists();\r\n  }\r\n\r\n  static async _localFileExists(path: string) {\r\n    const folderPath = StorageUtilities.getFolderPath(path);\r\n    const fileName = StorageUtilities.getLeafName(path);\r\n\r\n    if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) {\r\n      throw new Error(\"Could not process file with path: `\" + path + \"`\");\r\n    }\r\n\r\n    const ls = new ElectronStorage(folderPath, \"\");\r\n\r\n    const file = ls.rootFolder.ensureFile(fileName);\r\n\r\n    return await file.exists();\r\n  }\r\n\r\n  static _ensureElectronLocalFolder(path: string) {\r\n    // Reuse existing storage if one already exists for this path\r\n    // (e.g., from a prior _localFolderExists call that set up the file watcher).\r\n    // Creating a new ElectronStorage overwrites electronStorages[path], which could\r\n    // orphan an existing storage that has its file watcher configured.\r\n    let ls = ElectronStorage.electronStorages[path];\r\n\r\n    if (!ls) {\r\n      ls = new ElectronStorage(path, \"\");\r\n\r\n      // Kick off getAvailable() to set up the fs.watch file watcher in the main process.\r\n      // Without this, externally created files (e.g., by MCP tools) won't be detected.\r\n      ls.getAvailable();\r\n    }\r\n\r\n    return ls.rootFolder;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport AppServiceProxy from \"./AppServiceProxy\";\r\nimport Utilities from \"./Utilities\";\r\nimport { EventDispatcher } from \"ste-events\";\r\n\r\nexport enum LogItemLevel {\r\n  debug = 0,\r\n  verbose = 1,\r\n  message = 2,\r\n  error = 3,\r\n  important = 4,\r\n  operationStarted = 10,\r\n  operationEnded = 11,\r\n}\r\n\r\nexport class LogItem {\r\n  level: LogItemLevel;\r\n  message: string;\r\n  created: Date;\r\n  operId?: number;\r\n  category?: string;\r\n  context?: string;\r\n\r\n  static alertFunction: ((message: string) => void) | undefined;\r\n\r\n  constructor(message: string, level: LogItemLevel, context?: string, category?: string) {\r\n    this.level = level;\r\n    this.message = message;\r\n    this.created = new Date();\r\n    this.context = context;\r\n    this.category = category;\r\n\r\n    if (this.level === LogItemLevel.operationStarted) {\r\n      this.operId = Log.items.length;\r\n    }\r\n  }\r\n}\r\n\r\nexport default class Log {\r\n  static _suppressedLogs: { [id: string]: boolean } = {};\r\n  static _log: LogItem[] = [];\r\n  static _onItemAdded = new EventDispatcher<Log, LogItem>();\r\n\r\n  static get items() {\r\n    return Log._log;\r\n  }\r\n\r\n  public static get onItemAdded() {\r\n    return this._onItemAdded.asEvent();\r\n  }\r\n\r\n  static message(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.message, context, category);\r\n  }\r\n\r\n  static important(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.important, context, category);\r\n  }\r\n\r\n  static verbose(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.verbose, context, category);\r\n  }\r\n\r\n  static error(message: string, context?: string, category?: string) {\r\n    this.log(message, LogItemLevel.error, context, category);\r\n  }\r\n\r\n  static unexpectedUndefined(token?: string) {\r\n    Log.fail(\"Unexpected undefined condition found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedIsDisposed(token?: string) {\r\n    Log.fail(\"Unexpected usage of a disposed object.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static throwIsDisposed(token?: string) {\r\n    this.unexpectedIsDisposed(token);\r\n    throw new Error(\"Unexpected usage of a disposed object.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static throwUnexpectedUndefined(token?: string) {\r\n    this.unexpectedUndefined(token);\r\n    throw new Error(\"Unexpected undefined condition found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedNull(token?: string) {\r\n    Log.fail(\"Unexpected null condition found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedContentState(token?: string) {\r\n    Log.fail(\"Unexpected state of content.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedState(token?: string) {\r\n    Log.fail(\"Unexpected state of internal variables.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static unexpectedArguments(token?: string) {\r\n    Log.fail(\"Unexpected arguments found.\" + (token ? \" (\" + token + \")\" : \"\"));\r\n  }\r\n\r\n  static log(message: string | object, level: LogItemLevel, context?: string, category?: string) {\r\n    if (typeof message !== \"string\") {\r\n      if ((message as any).message) {\r\n        message = (message as any).message as string;\r\n      } else {\r\n        message = JSON.stringify(message);\r\n      }\r\n    }\r\n\r\n    const logItem = new LogItem(message, level, context, category);\r\n\r\n    this._log.push(logItem);\r\n\r\n    Log._onItemAdded.dispatch(this, logItem);\r\n\r\n    // Output to browser console for visibility during debugging\r\n    // In browser context, this helps developers see logs in DevTools\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if (typeof (globalThis as any).window !== \"undefined\") {\r\n      const prefix = context ? `[${context}] ` : \"\";\r\n      const fullMessage = prefix + message;\r\n\r\n      switch (level) {\r\n        case LogItemLevel.error:\r\n          console.error(fullMessage);\r\n          break;\r\n        case LogItemLevel.important:\r\n          console.warn(fullMessage);\r\n          break;\r\n        case LogItemLevel.message:\r\n          // Only message level goes to console.log by default\r\n          console.log(fullMessage);\r\n          break;\r\n        // verbose and debug are only shown in console when ?debug=true\r\n        case LogItemLevel.verbose:\r\n        case LogItemLevel.debug:\r\n          if (Utilities.isDebug) {\r\n            console.log(fullMessage);\r\n          }\r\n          break;\r\n        // operation started/ended don't need console output\r\n      }\r\n    }\r\n\r\n    return logItem.operId;\r\n  }\r\n\r\n  static debug(message: string, context?: string) {\r\n    this.log(message, LogItemLevel.debug, context);\r\n    // Console output is now handled in the log() method for browser contexts.\r\n    // In Node.js contexts (window undefined), only print directly if there are\r\n    // no event subscribers \u2014 otherwise the subscriber (e.g. LocalEnvironment)\r\n    // already handles console output and we'd get duplicate lines.\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if (typeof (globalThis as any).window === \"undefined\" && this._onItemAdded.count === 0) {\r\n      console.log(message);\r\n    }\r\n  }\r\n\r\n  static assertIsInt(number: number, message?: string) {\r\n    if (number !== Math.round(number)) {\r\n      Log.debugAlert(\"Unexpectedly found number \" + number + \" is not an integer. \" + (message ? message : \"\"));\r\n    }\r\n  }\r\n\r\n  static getStack() {\r\n    let stack = \"\";\r\n\r\n    try {\r\n      throw new Error();\r\n    } catch (e: any) {\r\n      stack = e.stack ? e.stack : \"\";\r\n    }\r\n\r\n    const startOfLog = stack.lastIndexOf(\"\\n    at Log.\");\r\n\r\n    if (startOfLog >= 0) {\r\n      stack = stack.substring(startOfLog);\r\n    }\r\n\r\n    return stack;\r\n  }\r\n\r\n  static assert(condition: boolean, message?: string, context?: string): asserts condition {\r\n    if (!condition) {\r\n      if (!message) {\r\n        Log.debugAlert(\"Assertion failed. - \" + this.getStack(), context);\r\n      } else {\r\n        Log.debugAlert(\"Assertion failed: \" + message + \" - \" + this.getStack(), context);\r\n      }\r\n    }\r\n  }\r\n\r\n  static assertDefined(obj: any, message?: string) {\r\n    if (!obj) {\r\n      Log.unexpectedUndefined(\"LAD.\" + (message ? message : \"\"));\r\n\r\n      debugger;\r\n    }\r\n\r\n    return obj !== undefined && obj !== null;\r\n  }\r\n\r\n  static fail(message: string, context?: string) {\r\n    Log.debugAlert(\"Failure case: \" + message, context);\r\n  }\r\n\r\n  static unsupportedToken(token: string, context?: string) {\r\n    if (Utilities.isDebug) {\r\n      Log.debugAlert(\"Unsupported token: \" + token, context);\r\n    }\r\n  }\r\n\r\n  static unexpectedError(errorMessage: string, context?: string) {\r\n    if (Utilities.isDebug) {\r\n      Log.debugAlert(errorMessage, context);\r\n    }\r\n\r\n    throw new Error(errorMessage);\r\n  }\r\n\r\n  static debugAlert(message: string, context?: string) {\r\n    if (Log._suppressedLogs[\"all\"] === true) {\r\n      return;\r\n    }\r\n\r\n    Log.debug(message, context);\r\n\r\n    if (!Utilities.isDebug) {\r\n      return;\r\n    }\r\n\r\n    let stack: string = \"\";\r\n    let header: string = \"\";\r\n\r\n    const err = new Error();\r\n\r\n    if (err.stack !== undefined) {\r\n      stack = err.stack;\r\n    }\r\n\r\n    if (!stack || stack === \"\") {\r\n      stack = this.getStack();\r\n    }\r\n\r\n    let i = stack.lastIndexOf(\"at Function.\");\r\n\r\n    if (i >= 0) {\r\n      i = stack.indexOf(\"at \", i + 1);\r\n\r\n      if (i >= 4) {\r\n        // i -= 4;\r\n        stack = stack.substring(i, stack.length);\r\n\r\n        const nextSpace = stack.indexOf(\" \", 8);\r\n\r\n        if (nextSpace >= 0) {\r\n          header = \"=== \" + stack.substring(7, nextSpace) + \" ===\\n\\n\";\r\n        }\r\n      }\r\n    }\r\n\r\n    const wholeMessage = header + message + \"\\n\" + stack;\r\n\r\n    if (LogItem.alertFunction) {\r\n      let stackTrim = stack;\r\n\r\n      if (stackTrim.length > 80) {\r\n        stackTrim = stackTrim.substring(0, 80);\r\n      }\r\n\r\n      LogItem.alertFunction(message + \"\\n\\n\" + stackTrim);\r\n      // debugger;\r\n      return;\r\n    } else if (AppServiceProxy.hasAppService && CreatorToolsHost.isWeb) {\r\n      // @ts-ignore\r\n      alert(header + message + \"\\n\\n\" + stack);\r\n      debugger;\r\n      return;\r\n      // @ts-ignore\r\n    } else if (typeof window === \"undefined\") {\r\n      console.log(header + message + \"\\n\\n\" + stack);\r\n      return;\r\n    }\r\n\r\n    // @ts-ignore\r\n    const val = prompt(wholeMessage, \"b to break, s to suppress, a to suppress all\");\r\n\r\n    if (val === \"s\") {\r\n      Log._suppressedLogs[message] = true;\r\n      return;\r\n    } else if (val === \"b\") {\r\n      debugger;\r\n    } else if (val === \"a\") {\r\n      Log._suppressedLogs[\"all\"] = true;\r\n    }\r\n  }\r\n}\r\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n  Stream.call(this);\n\n  this._buffers = [];\n  this._buffered = 0;\n\n  this._reads = [];\n  this._paused = false;\n\n  this._encoding = \"utf8\";\n  this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n\n  process.nextTick(\n    function () {\n      this._process();\n\n      // its paused and there is not enought data then ask for more\n      if (this._paused && this._reads && this._reads.length > 0) {\n        this._paused = false;\n\n        this.emit(\"drain\");\n      }\n    }.bind(this)\n  );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n  if (!this.writable) {\n    this.emit(\"error\", new Error(\"Stream not writable\"));\n    return false;\n  }\n\n  let dataBuffer;\n  if (Buffer.isBuffer(data)) {\n    dataBuffer = data;\n  } else {\n    dataBuffer = Buffer.from(data, encoding || this._encoding);\n  }\n\n  this._buffers.push(dataBuffer);\n  this._buffered += dataBuffer.length;\n\n  this._process();\n\n  // ok if there are no more read requests\n  if (this._reads && this._reads.length === 0) {\n    this._paused = true;\n  }\n\n  return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n  if (data) {\n    this.write(data, encoding);\n  }\n\n  this.writable = false;\n\n  // already destroyed\n  if (!this._buffers) {\n    return;\n  }\n\n  // enqueue or handle end\n  if (this._buffers.length === 0) {\n    this._end();\n  } else {\n    this._buffers.push(null);\n    this._process();\n  }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n  if (this._reads.length > 0) {\n    this.emit(\"error\", new Error(\"Unexpected end of input\"));\n  }\n\n  this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n  if (!this._buffers) {\n    return;\n  }\n\n  this.writable = false;\n  this._reads = null;\n  this._buffers = null;\n\n  this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n  // ok there is any data so that we can satisfy this request\n  this._reads.shift(); // == read\n\n  // first we need to peek into first buffer\n  let smallerBuf = this._buffers[0];\n\n  // ok there is more data than we need\n  if (smallerBuf.length > read.length) {\n    this._buffered -= read.length;\n    this._buffers[0] = smallerBuf.slice(read.length);\n\n    read.func.call(this, smallerBuf.slice(0, read.length));\n  } else {\n    // ok this is less than maximum length so use it all\n    this._buffered -= smallerBuf.length;\n    this._buffers.shift(); // == smallerBuf\n\n    read.func.call(this, smallerBuf);\n  }\n};\n\nChunkStream.prototype._processRead = function (read) {\n  this._reads.shift(); // == read\n\n  let pos = 0;\n  let count = 0;\n  let data = Buffer.alloc(read.length);\n\n  // create buffer for all data\n  while (pos < read.length) {\n    let buf = this._buffers[count++];\n    let len = Math.min(buf.length, read.length - pos);\n\n    buf.copy(data, pos, 0, len);\n    pos += len;\n\n    // last buffer wasn't used all so just slice it and leave\n    if (len !== buf.length) {\n      this._buffers[--count] = buf.slice(len);\n    }\n  }\n\n  // remove all used buffers\n  if (count > 0) {\n    this._buffers.splice(0, count);\n  }\n\n  this._buffered -= read.length;\n\n  read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n  try {\n    // as long as there is any data and read requests\n    while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n      let read = this._reads[0];\n\n      // read any data (but no more than length)\n      if (read.allowLess) {\n        this._processReadAllowingLess(read);\n      } else if (this._buffered >= read.length) {\n        // ok we can meet some expectations\n\n        this._processRead(read);\n      } else {\n        // not enought data to satisfy first request in queue\n        // so we need to wait for more\n        break;\n      }\n    }\n\n    if (this._buffers && !this.writable) {\n      this._end();\n    }\n  } catch (ex) {\n    this.emit(\"error\", ex);\n  }\n};\n", "\"use strict\";\n\n// Adam 7\n//   0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n  {\n    // pass 1 - 1px\n    x: [0],\n    y: [0],\n  },\n  {\n    // pass 2 - 1px\n    x: [4],\n    y: [0],\n  },\n  {\n    // pass 3 - 2px\n    x: [0, 4],\n    y: [4],\n  },\n  {\n    // pass 4 - 4px\n    x: [2, 6],\n    y: [0, 4],\n  },\n  {\n    // pass 5 - 8px\n    x: [0, 2, 4, 6],\n    y: [2, 6],\n  },\n  {\n    // pass 6 - 16px\n    x: [1, 3, 5, 7],\n    y: [0, 2, 4, 6],\n  },\n  {\n    // pass 7 - 32px\n    x: [0, 1, 2, 3, 4, 5, 6, 7],\n    y: [1, 3, 5, 7],\n  },\n];\n\nexports.getImagePasses = function (width, height) {\n  let images = [];\n  let xLeftOver = width % 8;\n  let yLeftOver = height % 8;\n  let xRepeats = (width - xLeftOver) / 8;\n  let yRepeats = (height - yLeftOver) / 8;\n  for (let i = 0; i < imagePasses.length; i++) {\n    let pass = imagePasses[i];\n    let passWidth = xRepeats * pass.x.length;\n    let passHeight = yRepeats * pass.y.length;\n    for (let j = 0; j < pass.x.length; j++) {\n      if (pass.x[j] < xLeftOver) {\n        passWidth++;\n      } else {\n        break;\n      }\n    }\n    for (let j = 0; j < pass.y.length; j++) {\n      if (pass.y[j] < yLeftOver) {\n        passHeight++;\n      } else {\n        break;\n      }\n    }\n    if (passWidth > 0 && passHeight > 0) {\n      images.push({ width: passWidth, height: passHeight, index: i });\n    }\n  }\n  return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n  return function (x, y, pass) {\n    let outerXLeftOver = x % imagePasses[pass].x.length;\n    let outerX =\n      ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n      imagePasses[pass].x[outerXLeftOver];\n    let outerYLeftOver = y % imagePasses[pass].y.length;\n    let outerY =\n      ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n      imagePasses[pass].y[outerYLeftOver];\n    return outerX * 4 + outerY * width * 4;\n  };\n};\n", "\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n  let paeth = left + above - upLeft;\n  let pLeft = Math.abs(paeth - left);\n  let pAbove = Math.abs(paeth - above);\n  let pUpLeft = Math.abs(paeth - upLeft);\n\n  if (pLeft <= pAbove && pLeft <= pUpLeft) {\n    return left;\n  }\n  if (pAbove <= pUpLeft) {\n    return above;\n  }\n  return upLeft;\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n  let byteWidth = width * bpp;\n  if (depth !== 8) {\n    byteWidth = Math.ceil(byteWidth / (8 / depth));\n  }\n  return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let interlace = bitmapInfo.interlace;\n  let bpp = bitmapInfo.bpp;\n  let depth = bitmapInfo.depth;\n\n  this.read = dependencies.read;\n  this.write = dependencies.write;\n  this.complete = dependencies.complete;\n\n  this._imageIndex = 0;\n  this._images = [];\n  if (interlace) {\n    let passes = interlaceUtils.getImagePasses(width, height);\n    for (let i = 0; i < passes.length; i++) {\n      this._images.push({\n        byteWidth: getByteWidth(passes[i].width, bpp, depth),\n        height: passes[i].height,\n        lineIndex: 0,\n      });\n    }\n  } else {\n    this._images.push({\n      byteWidth: getByteWidth(width, bpp, depth),\n      height: height,\n      lineIndex: 0,\n    });\n  }\n\n  // when filtering the line we look at the pixel to the left\n  // the spec also says it is done on a byte level regardless of the number of pixels\n  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n  if (depth === 8) {\n    this._xComparison = bpp;\n  } else if (depth === 16) {\n    this._xComparison = bpp * 2;\n  } else {\n    this._xComparison = 1;\n  }\n});\n\nFilter.prototype.start = function () {\n  this.read(\n    this._images[this._imageIndex].byteWidth + 1,\n    this._reverseFilterLine.bind(this)\n  );\n};\n\nFilter.prototype._unFilterType1 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    unfilteredLine[x] = rawByte + f1Left;\n  }\n};\n\nFilter.prototype._unFilterType2 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f2Up = lastLine ? lastLine[x] : 0;\n    unfilteredLine[x] = rawByte + f2Up;\n  }\n};\n\nFilter.prototype._unFilterType3 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f3Up = lastLine ? lastLine[x] : 0;\n    let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f3Add = Math.floor((f3Left + f3Up) / 2);\n    unfilteredLine[x] = rawByte + f3Add;\n  }\n};\n\nFilter.prototype._unFilterType4 = function (\n  rawData,\n  unfilteredLine,\n  byteWidth\n) {\n  let xComparison = this._xComparison;\n  let xBiggerThan = xComparison - 1;\n  let lastLine = this._lastLine;\n\n  for (let x = 0; x < byteWidth; x++) {\n    let rawByte = rawData[1 + x];\n    let f4Up = lastLine ? lastLine[x] : 0;\n    let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n    let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n    let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n    unfilteredLine[x] = rawByte + f4Add;\n  }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n  let filter = rawData[0];\n  let unfilteredLine;\n  let currentImage = this._images[this._imageIndex];\n  let byteWidth = currentImage.byteWidth;\n\n  if (filter === 0) {\n    unfilteredLine = rawData.slice(1, byteWidth + 1);\n  } else {\n    unfilteredLine = Buffer.alloc(byteWidth);\n\n    switch (filter) {\n      case 1:\n        this._unFilterType1(rawData, unfilteredLine, byteWidth);\n        break;\n      case 2:\n        this._unFilterType2(rawData, unfilteredLine, byteWidth);\n        break;\n      case 3:\n        this._unFilterType3(rawData, unfilteredLine, byteWidth);\n        break;\n      case 4:\n        this._unFilterType4(rawData, unfilteredLine, byteWidth);\n        break;\n      default:\n        throw new Error(\"Unrecognised filter type - \" + filter);\n    }\n  }\n\n  this.write(unfilteredLine);\n\n  currentImage.lineIndex++;\n  if (currentImage.lineIndex >= currentImage.height) {\n    this._lastLine = null;\n    this._imageIndex++;\n    currentImage = this._images[this._imageIndex];\n  } else {\n    this._lastLine = unfilteredLine;\n  }\n\n  if (currentImage) {\n    // read, using the byte width that may be from the new current image\n    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n  } else {\n    this._lastLine = null;\n    this.complete();\n  }\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n  ChunkStream.call(this);\n\n  let buffers = [];\n  let that = this;\n  this._filter = new Filter(bitmapInfo, {\n    read: this.read.bind(this),\n    write: function (buffer) {\n      buffers.push(buffer);\n    },\n    complete: function () {\n      that.emit(\"complete\", Buffer.concat(buffers));\n    },\n  });\n\n  this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n", "\"use strict\";\n\nmodule.exports = {\n  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n  TYPE_IHDR: 0x49484452,\n  TYPE_IEND: 0x49454e44,\n  TYPE_IDAT: 0x49444154,\n  TYPE_PLTE: 0x504c5445,\n  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n  // color-type bits\n  COLORTYPE_GRAYSCALE: 0,\n  COLORTYPE_PALETTE: 1,\n  COLORTYPE_COLOR: 2,\n  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n  // color-type combinations\n  COLORTYPE_PALETTE_COLOR: 3,\n  COLORTYPE_COLOR_ALPHA: 6,\n\n  COLORTYPE_TO_BPP_MAP: {\n    0: 1,\n    2: 3,\n    3: 1,\n    4: 2,\n    6: 4,\n  },\n\n  GAMMA_DIVISION: 100000,\n};\n", "\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n  for (let i = 0; i < 256; i++) {\n    let currentCrc = i;\n    for (let j = 0; j < 8; j++) {\n      if (currentCrc & 1) {\n        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n      } else {\n        currentCrc = currentCrc >>> 1;\n      }\n    }\n    crcTable[i] = currentCrc;\n  }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n  this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n  for (let i = 0; i < data.length; i++) {\n    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n  }\n  return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n  return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n  let crc = -1;\n  for (let i = 0; i < buf.length; i++) {\n    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n  }\n  return crc ^ -1;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n  this._options = options;\n  options.checkCRC = options.checkCRC !== false;\n\n  this._hasIHDR = false;\n  this._hasIEND = false;\n  this._emittedHeadersFinished = false;\n\n  // input flags/metadata\n  this._palette = [];\n  this._colorType = 0;\n\n  this._chunks = {};\n  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n  this.read = dependencies.read;\n  this.error = dependencies.error;\n  this.metadata = dependencies.metadata;\n  this.gamma = dependencies.gamma;\n  this.transColor = dependencies.transColor;\n  this.palette = dependencies.palette;\n  this.parsed = dependencies.parsed;\n  this.inflateData = dependencies.inflateData;\n  this.finished = dependencies.finished;\n  this.simpleTransparency = dependencies.simpleTransparency;\n  this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n  this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n  let signature = constants.PNG_SIGNATURE;\n\n  for (let i = 0; i < signature.length; i++) {\n    if (data[i] !== signature[i]) {\n      this.error(new Error(\"Invalid file signature\"));\n      return;\n    }\n  }\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n  // chunk content length\n  let length = data.readUInt32BE(0);\n\n  // chunk type\n  let type = data.readUInt32BE(4);\n  let name = \"\";\n  for (let i = 4; i < 8; i++) {\n    name += String.fromCharCode(data[i]);\n  }\n\n  //console.log('chunk ', name, length);\n\n  // chunk flags\n  let ancillary = Boolean(data[4] & 0x20); // or critical\n  //    priv = Boolean(data[5] & 0x20), // or public\n  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n    this.error(new Error(\"Expected IHDR on beggining\"));\n    return;\n  }\n\n  this._crc = new CrcCalculator();\n  this._crc.write(Buffer.from(name));\n\n  if (this._chunks[type]) {\n    return this._chunks[type](length);\n  }\n\n  if (!ancillary) {\n    this.error(new Error(\"Unsupported critical chunk type \" + name));\n    return;\n  }\n\n  this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n  this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n  this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n  let fileCrc = data.readInt32BE(0);\n  let calcCrc = this._crc.crc32();\n\n  // check CRC\n  if (this._options.checkCRC && calcCrc !== fileCrc) {\n    this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n    return;\n  }\n\n  if (!this._hasIEND) {\n    this.read(8, this._parseChunkBegin.bind(this));\n  }\n};\n\nParser.prototype._handleIHDR = function (length) {\n  this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n  this._crc.write(data);\n\n  let width = data.readUInt32BE(0);\n  let height = data.readUInt32BE(4);\n  let depth = data[8];\n  let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n  let compr = data[10];\n  let filter = data[11];\n  let interlace = data[12];\n\n  // console.log('    width', width, 'height', height,\n  //     'depth', depth, 'colorType', colorType,\n  //     'compr', compr, 'filter', filter, 'interlace', interlace\n  // );\n\n  if (\n    depth !== 8 &&\n    depth !== 4 &&\n    depth !== 2 &&\n    depth !== 1 &&\n    depth !== 16\n  ) {\n    this.error(new Error(\"Unsupported bit depth \" + depth));\n    return;\n  }\n  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n    this.error(new Error(\"Unsupported color type\"));\n    return;\n  }\n  if (compr !== 0) {\n    this.error(new Error(\"Unsupported compression method\"));\n    return;\n  }\n  if (filter !== 0) {\n    this.error(new Error(\"Unsupported filter method\"));\n    return;\n  }\n  if (interlace !== 0 && interlace !== 1) {\n    this.error(new Error(\"Unsupported interlace method\"));\n    return;\n  }\n\n  this._colorType = colorType;\n\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n  this._hasIHDR = true;\n\n  this.metadata({\n    width: width,\n    height: height,\n    depth: depth,\n    interlace: Boolean(interlace),\n    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n    color: Boolean(colorType & constants.COLORTYPE_COLOR),\n    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n    bpp: bpp,\n    colorType: colorType,\n  });\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n  this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n  this._crc.write(data);\n\n  let entries = Math.floor(data.length / 3);\n  // console.log('Palette:', entries);\n\n  for (let i = 0; i < entries; i++) {\n    this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n  }\n\n  this.palette(this._palette);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n  this.simpleTransparency();\n  this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n  this._crc.write(data);\n\n  // palette\n  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n    if (this._palette.length === 0) {\n      this.error(new Error(\"Transparency chunk must be after palette\"));\n      return;\n    }\n    if (data.length > this._palette.length) {\n      this.error(new Error(\"More transparent colors than palette size\"));\n      return;\n    }\n    for (let i = 0; i < data.length; i++) {\n      this._palette[i][3] = data[i];\n    }\n    this.palette(this._palette);\n  }\n\n  // for colorType 0 (grayscale) and 2 (rgb)\n  // there might be one gray/color defined as transparent\n  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n    // grey, 2 bytes\n    this.transColor([data.readUInt16BE(0)]);\n  }\n  if (this._colorType === constants.COLORTYPE_COLOR) {\n    this.transColor([\n      data.readUInt16BE(0),\n      data.readUInt16BE(2),\n      data.readUInt16BE(4),\n    ]);\n  }\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n  this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n  this._crc.write(data);\n  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n  this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n  if (!this._emittedHeadersFinished) {\n    this._emittedHeadersFinished = true;\n    this.headersFinished();\n  }\n  this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n  this._crc.write(data);\n\n  if (\n    this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n    this._palette.length === 0\n  ) {\n    throw new Error(\"Expected palette not found\");\n  }\n\n  this.inflateData(data);\n  let leftOverLength = length - data.length;\n\n  if (leftOverLength > 0) {\n    this._handleIDAT(leftOverLength);\n  } else {\n    this._handleChunkEnd();\n  }\n};\n\nParser.prototype._handleIEND = function (length) {\n  this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n  this._crc.write(data);\n\n  this._hasIEND = true;\n  this._handleChunkEnd();\n\n  if (this.finished) {\n    this.finished();\n  }\n};\n", "\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 1 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    let pixel = data[rawPos];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = data[rawPos + 1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 2 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = 0xff;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, data, pxPos, rawPos) {\n    if (rawPos + 3 >= data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n\n    pxData[pxPos] = data[rawPos];\n    pxData[pxPos + 1] = data[rawPos + 1];\n    pxData[pxPos + 2] = data[rawPos + 2];\n    pxData[pxPos + 3] = data[rawPos + 3];\n  },\n];\n\nlet pixelBppCustomMapper = [\n  // 0 - dummy entry\n  function () {},\n\n  // 1 - L\n  // 0: 0, 1: 0, 2: 0, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 2 - LA\n  // 0: 0, 1: 0, 2: 0, 3: 1\n  function (pxData, pixelData, pxPos) {\n    let pixel = pixelData[0];\n    pxData[pxPos] = pixel;\n    pxData[pxPos + 1] = pixel;\n    pxData[pxPos + 2] = pixel;\n    pxData[pxPos + 3] = pixelData[1];\n  },\n\n  // 3 - RGB\n  // 0: 0, 1: 1, 2: 2, 3: 0xff\n  function (pxData, pixelData, pxPos, maxBit) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = maxBit;\n  },\n\n  // 4 - RGBA\n  // 0: 0, 1: 1, 2: 2, 3: 3\n  function (pxData, pixelData, pxPos) {\n    pxData[pxPos] = pixelData[0];\n    pxData[pxPos + 1] = pixelData[1];\n    pxData[pxPos + 2] = pixelData[2];\n    pxData[pxPos + 3] = pixelData[3];\n  },\n];\n\nfunction bitRetriever(data, depth) {\n  let leftOver = [];\n  let i = 0;\n\n  function split() {\n    if (i === data.length) {\n      throw new Error(\"Ran out of data\");\n    }\n    let byte = data[i];\n    i++;\n    let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n    switch (depth) {\n      default:\n        throw new Error(\"unrecognised depth\");\n      case 16:\n        byte2 = data[i];\n        i++;\n        leftOver.push((byte << 8) + byte2);\n        break;\n      case 4:\n        byte2 = byte & 0x0f;\n        byte1 = byte >> 4;\n        leftOver.push(byte1, byte2);\n        break;\n      case 2:\n        byte4 = byte & 3;\n        byte3 = (byte >> 2) & 3;\n        byte2 = (byte >> 4) & 3;\n        byte1 = (byte >> 6) & 3;\n        leftOver.push(byte1, byte2, byte3, byte4);\n        break;\n      case 1:\n        byte8 = byte & 1;\n        byte7 = (byte >> 1) & 1;\n        byte6 = (byte >> 2) & 1;\n        byte5 = (byte >> 3) & 1;\n        byte4 = (byte >> 4) & 1;\n        byte3 = (byte >> 5) & 1;\n        byte2 = (byte >> 6) & 1;\n        byte1 = (byte >> 7) & 1;\n        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n        break;\n    }\n  }\n\n  return {\n    get: function (count) {\n      while (leftOver.length < count) {\n        split();\n      }\n      let returner = leftOver.slice(0, count);\n      leftOver = leftOver.slice(count);\n      return returner;\n    },\n    resetAfterLine: function () {\n      leftOver.length = 0;\n    },\n    end: function () {\n      if (i !== data.length) {\n        throw new Error(\"extra data found\");\n      }\n    },\n  };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n      rawPos += bpp; //eslint-disable-line no-param-reassign\n    }\n  }\n  return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n  // eslint-disable-line max-params\n  let imageWidth = image.width;\n  let imageHeight = image.height;\n  let imagePass = image.index;\n  for (let y = 0; y < imageHeight; y++) {\n    for (let x = 0; x < imageWidth; x++) {\n      let pixelData = bits.get(bpp);\n      let pxPos = getPxPos(x, y, imagePass);\n      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n    }\n    bits.resetAfterLine();\n  }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n  let width = bitmapInfo.width;\n  let height = bitmapInfo.height;\n  let depth = bitmapInfo.depth;\n  let bpp = bitmapInfo.bpp;\n  let interlace = bitmapInfo.interlace;\n  let bits;\n\n  if (depth !== 8) {\n    bits = bitRetriever(data, depth);\n  }\n  let pxData;\n  if (depth <= 8) {\n    pxData = Buffer.alloc(width * height * 4);\n  } else {\n    pxData = new Uint16Array(width * height * 4);\n  }\n  let maxBit = Math.pow(2, depth) - 1;\n  let rawPos = 0;\n  let images;\n  let getPxPos;\n\n  if (interlace) {\n    images = interlaceUtils.getImagePasses(width, height);\n    getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n  } else {\n    let nonInterlacedPxPos = 0;\n    getPxPos = function () {\n      let returner = nonInterlacedPxPos;\n      nonInterlacedPxPos += 4;\n      return returner;\n    };\n    images = [{ width: width, height: height }];\n  }\n\n  for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n    if (depth === 8) {\n      rawPos = mapImage8Bit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        data,\n        rawPos\n      );\n    } else {\n      mapImageCustomBit(\n        images[imageIndex],\n        pxData,\n        getPxPos,\n        bpp,\n        bits,\n        maxBit\n      );\n    }\n  }\n  if (depth === 8) {\n    if (rawPos !== data.length) {\n      throw new Error(\"extra data found\");\n    }\n  } else {\n    bits.end();\n  }\n\n  return pxData;\n};\n", "\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n  let pxPos = 0;\n  // use values from palette\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let color = palette[indata[pxPos]];\n\n      if (!color) {\n        throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n      }\n\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = color[i];\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n  let pxPos = 0;\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let makeTrans = false;\n\n      if (transColor.length === 1) {\n        if (transColor[0] === indata[pxPos]) {\n          makeTrans = true;\n        }\n      } else if (\n        transColor[0] === indata[pxPos] &&\n        transColor[1] === indata[pxPos + 1] &&\n        transColor[2] === indata[pxPos + 2]\n      ) {\n        makeTrans = true;\n      }\n      if (makeTrans) {\n        for (let i = 0; i < 4; i++) {\n          outdata[pxPos + i] = 0;\n        }\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n  let maxOutSample = 255;\n  let maxInSample = Math.pow(2, depth) - 1;\n  let pxPos = 0;\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      for (let i = 0; i < 4; i++) {\n        outdata[pxPos + i] = Math.floor(\n          (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n        );\n      }\n      pxPos += 4;\n    }\n  }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n  let depth = imageData.depth;\n  let width = imageData.width;\n  let height = imageData.height;\n  let colorType = imageData.colorType;\n  let transColor = imageData.transColor;\n  let palette = imageData.palette;\n\n  let outdata = indata; // only different for 16 bits\n\n  if (colorType === 3) {\n    // paletted\n    dePalette(indata, outdata, width, height, palette);\n  } else {\n    if (transColor) {\n      replaceTransparentColor(indata, outdata, width, height, transColor);\n    }\n    // if it needs scaling\n    if (depth !== 8 && !skipRescale) {\n      // if we need to change the buffer size\n      if (depth === 16) {\n        outdata = Buffer.alloc(width * height * 4);\n      }\n      scaleDepth(indata, outdata, width, height, depth);\n    }\n  }\n  return outdata;\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n  ChunkStream.call(this);\n\n  this._parser = new Parser(options, {\n    read: this.read.bind(this),\n    error: this._handleError.bind(this),\n    metadata: this._handleMetaData.bind(this),\n    gamma: this.emit.bind(this, \"gamma\"),\n    palette: this._handlePalette.bind(this),\n    transColor: this._handleTransColor.bind(this),\n    finished: this._finished.bind(this),\n    inflateData: this._inflateData.bind(this),\n    simpleTransparency: this._simpleTransparency.bind(this),\n    headersFinished: this._headersFinished.bind(this),\n  });\n  this._options = options;\n  this.writable = true;\n\n  this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n  this.emit(\"error\", err);\n\n  this.writable = false;\n\n  this.destroy();\n\n  if (this._inflate && this._inflate.destroy) {\n    this._inflate.destroy();\n  }\n\n  if (this._filter) {\n    this._filter.destroy();\n    // For backward compatibility with Node 7 and below.\n    // Suppress errors due to _inflate calling write() even after\n    // it's destroy()'ed.\n    this._filter.on(\"error\", function () {});\n  }\n\n  this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n  if (!this._inflate) {\n    if (this._bitmapInfo.interlace) {\n      this._inflate = zlib.createInflate();\n\n      this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      this._inflate.pipe(this._filter);\n    } else {\n      let rowSize =\n        ((this._bitmapInfo.width *\n          this._bitmapInfo.bpp *\n          this._bitmapInfo.depth +\n          7) >>\n          3) +\n        1;\n      let imageSize = rowSize * this._bitmapInfo.height;\n      let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n      this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n      let leftToInflate = imageSize;\n\n      let emitError = this.emit.bind(this, \"error\");\n      this._inflate.on(\"error\", function (err) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        emitError(err);\n      });\n      this._filter.on(\"complete\", this._complete.bind(this));\n\n      let filterWrite = this._filter.write.bind(this._filter);\n      this._inflate.on(\"data\", function (chunk) {\n        if (!leftToInflate) {\n          return;\n        }\n\n        if (chunk.length > leftToInflate) {\n          chunk = chunk.slice(0, leftToInflate);\n        }\n\n        leftToInflate -= chunk.length;\n\n        filterWrite(chunk);\n      });\n\n      this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n    }\n  }\n  this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n  this._metaData = metaData;\n  this._bitmapInfo = Object.create(metaData);\n\n  this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n  this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n  this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n  this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n  // Up until this point, we don't know if we have a tRNS chunk (alpha)\n  // so we can't emit metadata any earlier\n  this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n  if (this.errord) {\n    return;\n  }\n\n  if (!this._inflate) {\n    this.emit(\"error\", \"No Inflate block\");\n  } else {\n    // no more data to inflate\n    this._inflate.end();\n  }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n  if (this.errord) {\n    return;\n  }\n\n  let normalisedBitmapData;\n\n  try {\n    let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n    normalisedBitmapData = formatNormaliser(\n      bitmapData,\n      this._bitmapInfo,\n      this._options.skipRescale\n    );\n    bitmapData = null;\n  } catch (ex) {\n    this._handleError(ex);\n    return;\n  }\n\n  this.emit(\"parsed\", normalisedBitmapData);\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n  let outHasAlpha =\n    [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n      options.colorType\n    ) !== -1;\n  if (options.colorType === options.inputColorType) {\n    let bigEndian = (function () {\n      let buffer = new ArrayBuffer(2);\n      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n      // Int16Array uses the platform's endianness.\n      return new Int16Array(buffer)[0] !== 256;\n    })();\n    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n      return dataIn;\n    }\n  }\n\n  // map to a UInt16 array if data is 16bit, fix endianness below\n  let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n  let maxValue = 255;\n  let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n  if (inBpp === 4 && !options.inputHasAlpha) {\n    inBpp = 3;\n  }\n  let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n  if (options.bitDepth === 16) {\n    maxValue = 65535;\n    outBpp *= 2;\n  }\n  let outData = Buffer.alloc(width * height * outBpp);\n\n  let inIndex = 0;\n  let outIndex = 0;\n\n  let bgColor = options.bgColor || {};\n  if (bgColor.red === undefined) {\n    bgColor.red = maxValue;\n  }\n  if (bgColor.green === undefined) {\n    bgColor.green = maxValue;\n  }\n  if (bgColor.blue === undefined) {\n    bgColor.blue = maxValue;\n  }\n\n  function getRGBA() {\n    let red;\n    let green;\n    let blue;\n    let alpha = maxValue;\n    switch (options.inputColorType) {\n      case constants.COLORTYPE_COLOR_ALPHA:\n        alpha = data[inIndex + 3];\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_COLOR:\n        red = data[inIndex];\n        green = data[inIndex + 1];\n        blue = data[inIndex + 2];\n        break;\n      case constants.COLORTYPE_ALPHA:\n        alpha = data[inIndex + 1];\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      case constants.COLORTYPE_GRAYSCALE:\n        red = data[inIndex];\n        green = red;\n        blue = red;\n        break;\n      default:\n        throw new Error(\n          \"input color type:\" +\n            options.inputColorType +\n            \" is not supported at present\"\n        );\n    }\n\n    if (options.inputHasAlpha) {\n      if (!outHasAlpha) {\n        alpha /= maxValue;\n        red = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n          maxValue\n        );\n        green = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n          maxValue\n        );\n        blue = Math.min(\n          Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n          maxValue\n        );\n      }\n    }\n    return { red: red, green: green, blue: blue, alpha: alpha };\n  }\n\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      let rgba = getRGBA(data, inIndex);\n\n      switch (options.colorType) {\n        case constants.COLORTYPE_COLOR_ALPHA:\n        case constants.COLORTYPE_COLOR:\n          if (options.bitDepth === 8) {\n            outData[outIndex] = rgba.red;\n            outData[outIndex + 1] = rgba.green;\n            outData[outIndex + 2] = rgba.blue;\n            if (outHasAlpha) {\n              outData[outIndex + 3] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(rgba.red, outIndex);\n            outData.writeUInt16BE(rgba.green, outIndex + 2);\n            outData.writeUInt16BE(rgba.blue, outIndex + 4);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n            }\n          }\n          break;\n        case constants.COLORTYPE_ALPHA:\n        case constants.COLORTYPE_GRAYSCALE: {\n          // Convert to grayscale and alpha\n          let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n          if (options.bitDepth === 8) {\n            outData[outIndex] = grayscale;\n            if (outHasAlpha) {\n              outData[outIndex + 1] = rgba.alpha;\n            }\n          } else {\n            outData.writeUInt16BE(grayscale, outIndex);\n            if (outHasAlpha) {\n              outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n            }\n          }\n          break;\n        }\n        default:\n          throw new Error(\"unrecognised color Type \" + options.colorType);\n      }\n\n      inIndex += inBpp;\n      outIndex += outBpp;\n    }\n  }\n\n  return outData;\n};\n", "\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    rawData[rawPos + x] = pxData[pxPos + x];\n  }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n\n  for (let i = pxPos; i < length; i++) {\n    sum += Math.abs(pxData[i]);\n  }\n  return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let val = pxData[pxPos + x] - left;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n  for (let x = 0; x < byteWidth; x++) {\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - up;\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n  let sum = 0;\n  let length = pxPos + byteWidth;\n  for (let x = pxPos; x < length; x++) {\n    let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n    let val = pxData[x] - up;\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    rawData[rawPos + x] = val;\n  }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n  let sum = 0;\n  for (let x = 0; x < byteWidth; x++) {\n    let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n    let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n    let upleft =\n      pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n    let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n    sum += Math.abs(val);\n  }\n\n  return sum;\n}\n\nlet filters = {\n  0: filterNone,\n  1: filterSub,\n  2: filterUp,\n  3: filterAvg,\n  4: filterPaeth,\n};\n\nlet filterSums = {\n  0: filterSumNone,\n  1: filterSumSub,\n  2: filterSumUp,\n  3: filterSumAvg,\n  4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n  let filterTypes;\n  if (!(\"filterType\" in options) || options.filterType === -1) {\n    filterTypes = [0, 1, 2, 3, 4];\n  } else if (typeof options.filterType === \"number\") {\n    filterTypes = [options.filterType];\n  } else {\n    throw new Error(\"unrecognised filter types\");\n  }\n\n  if (options.bitDepth === 16) {\n    bpp *= 2;\n  }\n  let byteWidth = width * bpp;\n  let rawPos = 0;\n  let pxPos = 0;\n  let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n  let sel = filterTypes[0];\n\n  for (let y = 0; y < height; y++) {\n    if (filterTypes.length > 1) {\n      // find best filter for this line (with lowest sum of values)\n      let min = Infinity;\n\n      for (let i = 0; i < filterTypes.length; i++) {\n        let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n        if (sum < min) {\n          sel = filterTypes[i];\n          min = sum;\n        }\n      }\n    }\n\n    rawData[rawPos] = sel;\n    rawPos++;\n    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n    rawPos += byteWidth;\n    pxPos += byteWidth;\n  }\n  return rawData;\n};\n", "\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n  this._options = options;\n\n  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n  options.deflateLevel =\n    options.deflateLevel != null ? options.deflateLevel : 9;\n  options.deflateStrategy =\n    options.deflateStrategy != null ? options.deflateStrategy : 3;\n  options.inputHasAlpha =\n    options.inputHasAlpha != null ? options.inputHasAlpha : true;\n  options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n  options.bitDepth = options.bitDepth || 8;\n  // This is outputColorType\n  options.colorType =\n    typeof options.colorType === \"number\"\n      ? options.colorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n  options.inputColorType =\n    typeof options.inputColorType === \"number\"\n      ? options.inputColorType\n      : constants.COLORTYPE_COLOR_ALPHA;\n\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.colorType) === -1\n  ) {\n    throw new Error(\n      \"option color type:\" + options.colorType + \" is not supported at present\"\n    );\n  }\n  if (\n    [\n      constants.COLORTYPE_GRAYSCALE,\n      constants.COLORTYPE_COLOR,\n      constants.COLORTYPE_COLOR_ALPHA,\n      constants.COLORTYPE_ALPHA,\n    ].indexOf(options.inputColorType) === -1\n  ) {\n    throw new Error(\n      \"option input color type:\" +\n        options.inputColorType +\n        \" is not supported at present\"\n    );\n  }\n  if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n    throw new Error(\n      \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n    );\n  }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n  return {\n    chunkSize: this._options.deflateChunkSize,\n    level: this._options.deflateLevel,\n    strategy: this._options.deflateStrategy,\n  };\n};\n\nPacker.prototype.createDeflate = function () {\n  return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n  // convert to correct format for filtering (e.g. right bpp and bit depth)\n  let packedData = bitPacker(data, width, height, this._options);\n\n  // filter pixel data\n  let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n  let filteredData = filter(packedData, width, height, this._options, bpp);\n  return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n  let len = data ? data.length : 0;\n  let buf = Buffer.alloc(len + 12);\n\n  buf.writeUInt32BE(len, 0);\n  buf.writeUInt32BE(type, 4);\n\n  if (data) {\n    data.copy(buf, 8);\n  }\n\n  buf.writeInt32BE(\n    CrcStream.crc32(buf.slice(4, buf.length - 4)),\n    buf.length - 4\n  );\n  return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n  let buf = Buffer.alloc(4);\n  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n  return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n  let buf = Buffer.alloc(13);\n  buf.writeUInt32BE(width, 0);\n  buf.writeUInt32BE(height, 4);\n  buf[8] = this._options.bitDepth; // Bit depth\n  buf[9] = this._options.colorType; // colorType\n  buf[10] = 0; // compression\n  buf[11] = 0; // filter\n  buf[12] = 0; // interlace\n\n  return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n  return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n  return this._packChunk(constants.TYPE_IEND, null);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n  Stream.call(this);\n\n  let options = opt || {};\n\n  this._packer = new Packer(options);\n  this._deflate = this._packer.createDeflate();\n\n  this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n  // Signature\n  this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n  this.emit(\"data\", this._packer.packIHDR(width, height));\n\n  if (gamma) {\n    this.emit(\"data\", this._packer.packGAMA(gamma));\n  }\n\n  let filteredData = this._packer.filterData(data, width, height);\n\n  // compress it\n  this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n  this._deflate.on(\n    \"data\",\n    function (compressedData) {\n      this.emit(\"data\", this._packer.packIDAT(compressedData));\n    }.bind(this)\n  );\n\n  this._deflate.on(\n    \"end\",\n    function () {\n      this.emit(\"data\", this._packer.packIEND());\n      this.emit(\"end\");\n    }.bind(this)\n  );\n\n  this._deflate.end(filteredData);\n};\n", "\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) {\n    return new Inflate(opts);\n  }\n\n  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n    opts.chunkSize = zlib.Z_MIN_CHUNK;\n  }\n\n  zlib.Inflate.call(this, opts);\n\n  // Node 8 --> 9 compatibility check\n  this._offset = this._offset === undefined ? this._outOffset : this._offset;\n  this._buffer = this._buffer || this._outBuffer;\n\n  if (opts && opts.maxLength != null) {\n    this._maxLength = opts.maxLength;\n  }\n}\n\nfunction createInflate(opts) {\n  return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n  if (callback) {\n    process.nextTick(callback);\n  }\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) {\n    return;\n  }\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n  if (typeof asyncCb === \"function\") {\n    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n  }\n\n  let self = this;\n\n  let availInBefore = chunk && chunk.length;\n  let availOutBefore = this._chunkSize - this._offset;\n  let leftToInflate = this._maxLength;\n  let inOff = 0;\n\n  let buffers = [];\n  let nread = 0;\n\n  let error;\n  this.on(\"error\", function (err) {\n    error = err;\n  });\n\n  function handleChunk(availInAfter, availOutAfter) {\n    if (self._hadError) {\n      return;\n    }\n\n    let have = availOutBefore - availOutAfter;\n    assert(have >= 0, \"have should not go down\");\n\n    if (have > 0) {\n      let out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n\n      if (out.length > leftToInflate) {\n        out = out.slice(0, leftToInflate);\n      }\n\n      buffers.push(out);\n      nread += out.length;\n      leftToInflate -= out.length;\n\n      if (leftToInflate === 0) {\n        return false;\n      }\n    }\n\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      return true;\n    }\n\n    return false;\n  }\n\n  assert(this._handle, \"zlib binding closed\");\n  let res;\n  do {\n    res = this._handle.writeSync(\n      flushFlag,\n      chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore\n    ); // out_len\n    // Node 8 --> 9 compatibility check\n    res = res || this._writeState;\n  } while (!this._hadError && handleChunk(res[0], res[1]));\n\n  if (this._hadError) {\n    throw error;\n  }\n\n  if (nread >= kMaxLength) {\n    _close(this);\n    throw new RangeError(\n      \"Cannot create final Buffer. It would be larger than 0x\" +\n        kMaxLength.toString(16) +\n        \" bytes\"\n    );\n  }\n\n  let buf = Buffer.concat(buffers, nread);\n  _close(this);\n\n  return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === \"string\") {\n    buffer = Buffer.from(buffer);\n  }\n  if (!(buffer instanceof Buffer)) {\n    throw new TypeError(\"Not a string or buffer\");\n  }\n\n  let flushFlag = engine._finishFlushFlag;\n  if (flushFlag == null) {\n    flushFlag = zlib.Z_FINISH;\n  }\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n", "\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n  this._buffer = buffer;\n  this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n  this._reads.push({\n    length: Math.abs(length), // if length < 0 then at most this length\n    allowLess: length < 0,\n    func: callback,\n  });\n};\n\nSyncReader.prototype.process = function () {\n  // as long as there is any data and read requests\n  while (this._reads.length > 0 && this._buffer.length) {\n    let read = this._reads[0];\n\n    if (\n      this._buffer.length &&\n      (this._buffer.length >= read.length || read.allowLess)\n    ) {\n      // ok there is any data so that we can satisfy this request\n      this._reads.shift(); // == read\n\n      let buf = this._buffer;\n\n      this._buffer = buf.slice(read.length);\n\n      read.func.call(this, buf.slice(0, read.length));\n    } else {\n      break;\n    }\n  }\n\n  if (this._reads.length > 0) {\n    throw new Error(\"There are some read requests waitng on finished stream\");\n  }\n\n  if (this._buffer.length > 0) {\n    throw new Error(\"unrecognised content at end of stream\");\n  }\n};\n", "\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n  let outBuffers = [];\n  let reader = new SyncReader(inBuffer);\n  let filter = new Filter(bitmapInfo, {\n    read: reader.read.bind(reader),\n    write: function (bufferPart) {\n      outBuffers.push(bufferPart);\n    },\n    complete: function () {},\n  });\n\n  filter.start();\n  reader.process();\n\n  return Buffer.concat(outBuffers);\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let err;\n  function handleError(_err_) {\n    err = _err_;\n  }\n\n  let metaData;\n  function handleMetaData(_metaData_) {\n    metaData = _metaData_;\n  }\n\n  function handleTransColor(transColor) {\n    metaData.transColor = transColor;\n  }\n\n  function handlePalette(palette) {\n    metaData.palette = palette;\n  }\n\n  function handleSimpleTransparency() {\n    metaData.alpha = true;\n  }\n\n  let gamma;\n  function handleGamma(_gamma_) {\n    gamma = _gamma_;\n  }\n\n  let inflateDataList = [];\n  function handleInflateData(inflatedData) {\n    inflateDataList.push(inflatedData);\n  }\n\n  let reader = new SyncReader(buffer);\n\n  let parser = new Parser(options, {\n    read: reader.read.bind(reader),\n    error: handleError,\n    metadata: handleMetaData,\n    gamma: handleGamma,\n    palette: handlePalette,\n    transColor: handleTransColor,\n    inflateData: handleInflateData,\n    simpleTransparency: handleSimpleTransparency,\n  });\n\n  parser.start();\n  reader.process();\n\n  if (err) {\n    throw err;\n  }\n\n  //join together the inflate datas\n  let inflateData = Buffer.concat(inflateDataList);\n  inflateDataList.length = 0;\n\n  let inflatedData;\n  if (metaData.interlace) {\n    inflatedData = zlib.inflateSync(inflateData);\n  } else {\n    let rowSize =\n      ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n    let imageSize = rowSize * metaData.height;\n    inflatedData = inflateSync(inflateData, {\n      chunkSize: imageSize,\n      maxLength: imageSize,\n    });\n  }\n  inflateData = null;\n\n  if (!inflatedData || !inflatedData.length) {\n    throw new Error(\"bad png - invalid inflate data response\");\n  }\n\n  let unfilteredData = FilterSync.process(inflatedData, metaData);\n  inflateData = null;\n\n  let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n  unfilteredData = null;\n\n  let normalisedBitmapData = formatNormaliser(\n    bitmapData,\n    metaData,\n    options.skipRescale\n  );\n\n  metaData.data = normalisedBitmapData;\n  metaData.gamma = gamma || 0;\n\n  return metaData;\n};\n", "\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n  hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n  if (!hasSyncZlib) {\n    throw new Error(\n      \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n    );\n  }\n\n  let options = opt || {};\n\n  let packer = new Packer(options);\n\n  let chunks = [];\n\n  // Signature\n  chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n  // Header\n  chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n  if (metaData.gamma) {\n    chunks.push(packer.packGAMA(metaData.gamma));\n  }\n\n  let filteredData = packer.filterData(\n    metaData.data,\n    metaData.width,\n    metaData.height\n  );\n\n  // compress it\n  let compressedData = zlib.deflateSync(\n    filteredData,\n    packer.getDeflateOptions()\n  );\n  filteredData = null;\n\n  if (!compressedData || !compressedData.length) {\n    throw new Error(\"bad png - invalid compressed data response\");\n  }\n  chunks.push(packer.packIDAT(compressedData));\n\n  // End\n  chunks.push(packer.packIEND());\n\n  return Buffer.concat(chunks);\n};\n", "\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n  return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n  return pack(png, options);\n};\n", "\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n  Stream.call(this);\n\n  options = options || {}; // eslint-disable-line no-param-reassign\n\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  this.width = options.width | 0;\n  this.height = options.height | 0;\n\n  this.data =\n    this.width > 0 && this.height > 0\n      ? Buffer.alloc(4 * this.width * this.height)\n      : null;\n\n  if (options.fill && this.data) {\n    this.data.fill(0);\n  }\n\n  this.gamma = 0;\n  this.readable = this.writable = true;\n\n  this._parser = new Parser(options);\n\n  this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._parser.on(\"metadata\", this._metadata.bind(this));\n  this._parser.on(\"gamma\", this._gamma.bind(this));\n  this._parser.on(\n    \"parsed\",\n    function (data) {\n      this.data = data;\n      this.emit(\"parsed\", data);\n    }.bind(this)\n  );\n\n  this._packer = new Packer(options);\n  this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n  this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n  this._parser.on(\"close\", this._handleClose.bind(this));\n  this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n  if (!this.data || !this.data.length) {\n    this.emit(\"error\", \"No data provided\");\n    return this;\n  }\n\n  process.nextTick(\n    function () {\n      this._packer.pack(this.data, this.width, this.height, this.gamma);\n    }.bind(this)\n  );\n\n  return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n  if (callback) {\n    let onParsed, onError;\n\n    onParsed = function (parsedData) {\n      this.removeListener(\"error\", onError);\n\n      this.data = parsedData;\n      callback(null, this);\n    }.bind(this);\n\n    onError = function (err) {\n      this.removeListener(\"parsed\", onParsed);\n\n      callback(err, null);\n    }.bind(this);\n\n    this.once(\"parsed\", onParsed);\n    this.once(\"error\", onError);\n  }\n\n  this.end(data);\n  return this;\n};\n\nPNG.prototype.write = function (data) {\n  this._parser.write(data);\n  return true;\n};\n\nPNG.prototype.end = function (data) {\n  this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n  this.width = metadata.width;\n  this.height = metadata.height;\n\n  this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n  this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n  if (!this._parser.writable && !this._packer.readable) {\n    this.emit(\"close\");\n  }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n  // eslint-disable-line max-params\n  // coerce pixel dimensions to integers (also coerces undefined -> 0):\n  /* eslint-disable no-param-reassign */\n  srcX |= 0;\n  srcY |= 0;\n  width |= 0;\n  height |= 0;\n  deltaX |= 0;\n  deltaY |= 0;\n  /* eslint-enable no-param-reassign */\n\n  if (\n    srcX > src.width ||\n    srcY > src.height ||\n    srcX + width > src.width ||\n    srcY + height > src.height\n  ) {\n    throw new Error(\"bitblt reading outside image\");\n  }\n\n  if (\n    deltaX > dst.width ||\n    deltaY > dst.height ||\n    deltaX + width > dst.width ||\n    deltaY + height > dst.height\n  ) {\n    throw new Error(\"bitblt writing outside image\");\n  }\n\n  for (let y = 0; y < height; y++) {\n    src.data.copy(\n      dst.data,\n      ((deltaY + y) * dst.width + deltaX) << 2,\n      ((srcY + y) * src.width + srcX) << 2,\n      ((srcY + y) * src.width + srcX + width) << 2\n    );\n  }\n};\n\nPNG.prototype.bitblt = function (\n  dst,\n  srcX,\n  srcY,\n  width,\n  height,\n  deltaX,\n  deltaY\n) {\n  // eslint-disable-line max-params\n\n  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n  return this;\n};\n\nPNG.adjustGamma = function (src) {\n  if (src.gamma) {\n    for (let y = 0; y < src.height; y++) {\n      for (let x = 0; x < src.width; x++) {\n        let idx = (src.width * y + x) << 2;\n\n        for (let i = 0; i < 3; i++) {\n          let sample = src.data[idx + i] / 255;\n          sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n          src.data[idx + i] = Math.round(sample * 255);\n        }\n      }\n    }\n    src.gamma = 0;\n  }\n};\n\nPNG.prototype.adjustGamma = function () {\n  PNG.adjustGamma(this);\n};\n", "import ITask from \"./ITask\";\r\nimport IProjectStartInfo from \"./IProjectStartInfo\";\r\nimport Log from \"../core/Log\";\r\nimport ClUtils, { OutputType, TaskType } from \"./ClUtils\";\r\nimport CreatorTools from \"../app/CreatorTools\";\r\nimport NodeFile from \"../local/NodeFile\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport NodeStorage from \"../local/NodeStorage\";\r\nimport IProjectInfoData, { ProjectInfoSuite } from \"../info/IProjectInfoData\";\r\nimport Project from \"../app/Project\";\r\nimport IProjectMetaState from \"../info/IProjectMetaState\";\r\nimport { parentPort, isMainThread } from \"worker_threads\";\r\nimport CreatorToolsHost, { HostType } from \"../app/CreatorToolsHost\";\r\nimport ProjectInfoSet, { ResourceConsumptionConstraint } from \"../info/ProjectInfoSet\";\r\nimport { InfoItemType } from \"../info/IInfoItemData\";\r\nimport LocalEnvironment from \"../local/LocalEnvironment\";\r\nimport ProjectUtilities from \"../app/ProjectUtilities\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport ImageCodecNode from \"../local/ImageCodecNode\";\r\n\r\nlet creatorTools: CreatorTools | undefined;\r\nlet localEnv: LocalEnvironment | undefined;\r\nlet outputStorage: NodeStorage | undefined;\r\nlet outputStoragePath: string | undefined;\r\n\r\nexport async function executeTask(task: ITask) {\r\n  if (!task.project) {\r\n    Log.error(\"Could not find an associated project for the associated task.\");\r\n    return undefined;\r\n  }\r\n\r\n  if (localEnv === undefined) {\r\n    localEnv = new LocalEnvironment(true);\r\n  }\r\n\r\n  localEnv.displayInfo = task.displayInfo;\r\n  localEnv.displayVerbose = task.displayVerbose;\r\n\r\n  if (creatorTools === undefined) {\r\n    CreatorToolsHost.hostType = HostType.toolsNodejs;\r\n\r\n    // Set up Node.js-specific image codec functions\r\n    CreatorToolsHost.decodePng = ImageCodecNode.decodePng;\r\n    CreatorToolsHost.encodeToPng = ImageCodecNode.encodeToPng;\r\n\r\n    creatorTools = ClUtils.getCreatorTools(localEnv);\r\n\r\n    if (creatorTools) {\r\n      creatorTools.onStatusAdded.subscribe(ClUtils.handleStatusAdded);\r\n    }\r\n  }\r\n\r\n  if (!localEnv || !creatorTools) {\r\n    Log.error(\"Could not instantiate a local environment for the associated task.\");\r\n    return undefined;\r\n  }\r\n\r\n  if (!task.outputFolder) {\r\n    outputStorage = undefined;\r\n  } else if (task.outputFolder !== outputStoragePath) {\r\n    outputStoragePath = task.outputFolder;\r\n    outputStorage = new NodeStorage(task.outputFolder, \"\");\r\n  }\r\n\r\n  try {\r\n    switch (task.task) {\r\n      case TaskType.validate:\r\n        return validate(\r\n          creatorTools,\r\n          task.project,\r\n          task.arguments[\"suite\"] as string | undefined,\r\n          task.arguments[\"exclusionList\"] as string | undefined,\r\n          task.arguments[\"outputMci\"] === true,\r\n          task.arguments[\"outputType\"] as number | undefined,\r\n          task.displayInfo,\r\n          task.force\r\n        );\r\n    }\r\n  } catch (e: any) {\r\n    return e.toString();\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\nif (!isMainThread) {\r\n  if (parentPort) {\r\n    // Native Node.js worker_threads\r\n    parentPort.on(\"message\", async (task) => {\r\n      try {\r\n        const result = await executeTask(task);\r\n        parentPort!.postMessage(result);\r\n      } catch (error: any) {\r\n        parentPort!.postMessage(error.toString());\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nasync function validate(\r\n  creatorTools: CreatorTools,\r\n  projectStart: IProjectStartInfo,\r\n  suite?: string,\r\n  exclusionList?: string,\r\n  outputMci?: boolean,\r\n  outputType?: OutputType,\r\n  displayInfo?: boolean,\r\n  force?: boolean\r\n) {\r\n  const project = ClUtils.createProject(creatorTools, projectStart);\r\n\r\n  project.readOnlySafety = true;\r\n\r\n  let jsonFile: NodeFile | undefined;\r\n  let jsonFileExists = false;\r\n\r\n  if (outputStorage && outputType !== OutputType.noReports) {\r\n    jsonFile = outputStorage.rootFolder.ensureFile(\r\n      StorageUtilities.ensureFileNameIsSafe(StorageUtilities.getBaseFromName(project.containerName)) + \".mcr.json\"\r\n    );\r\n\r\n    jsonFileExists = await jsonFile.exists();\r\n\r\n    if (jsonFileExists && !force && !displayInfo) {\r\n      if (!jsonFile.isContentLoaded) {\r\n        await jsonFile.loadContent(false);\r\n      }\r\n\r\n      let projectInfoData = StorageUtilities.getJsonObject(jsonFile) as IProjectInfoData | undefined;\r\n\r\n      if (projectInfoData === undefined) {\r\n        jsonFileExists = false;\r\n      } else {\r\n        let metaState = {\r\n          projectContainerName: project.containerName,\r\n          projectPath: project.projectFolder?.storageRelativePath,\r\n          projectName: project.name,\r\n          projectTitle: project.title,\r\n          infoSetData: projectInfoData,\r\n        };\r\n\r\n        project.dispose();\r\n\r\n        return [metaState];\r\n      }\r\n    }\r\n  }\r\n\r\n  if (!jsonFileExists || force || displayInfo || outputType === OutputType.noReports) {\r\n    return await validateAndDisposeProject(\r\n      project,\r\n      outputStorage,\r\n      jsonFile,\r\n      suite,\r\n      exclusionList,\r\n      outputMci,\r\n      outputType\r\n    );\r\n  } else {\r\n    Log.message(\"'\" + project.name + \"' has already been validated; skipping. Use --force to re-validate.\");\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\nasync function validateAndDisposeProject(\r\n  project: Project,\r\n  outputStorage: NodeStorage | undefined,\r\n  mcrJsonFile: NodeFile | undefined,\r\n  suite?: string,\r\n  exclusionList?: string,\r\n  outputMci?: boolean,\r\n  outputType?: OutputType\r\n): Promise<IProjectMetaState[]> {\r\n  Log.verbose(\"Validating '\" + project.name + \"'\" + (suite ? \" with suite '\" + suite + \"'\" : \"\") + \".\");\r\n\r\n  await project.inferProjectItemsFromFiles();\r\n\r\n  let pis: ProjectInfoSet | undefined;\r\n\r\n  let suiteInst: ProjectInfoSuite | undefined;\r\n\r\n  if (!suite && !exclusionList) {\r\n    pis = project.indevInfoSet;\r\n    // CLI context: enable aggressive cleanup for memory efficiency\r\n    pis.performAggressiveCleanup = true;\r\n    pis.constrainResourceConsumption = ResourceConsumptionConstraint.medium;\r\n  } else {\r\n    suiteInst = ProjectInfoSet.getSuiteFromString(suite ? suite : \"default\");\r\n    // CLI context: enable aggressive cleanup for memory efficiency\r\n    pis = new ProjectInfoSet(\r\n      project,\r\n      suiteInst,\r\n      exclusionList ? [exclusionList] : undefined,\r\n      undefined,\r\n      undefined,\r\n      undefined,\r\n      true\r\n    );\r\n  }\r\n\r\n  await pis.generateForProject();\r\n\r\n  const pisData = pis.getDataObject();\r\n\r\n  const resultStates: IProjectMetaState[] = [];\r\n\r\n  const projectSet = {\r\n    projectContainerName: project.containerName,\r\n    projectPath: project.projectFolder?.storageRelativePath,\r\n    projectName: project.name,\r\n    projectTitle: project.title,\r\n    infoSetData: pisData,\r\n    suite: suiteInst,\r\n  };\r\n\r\n  resultStates.push(projectSet);\r\n\r\n  pis.disconnectFromProject();\r\n\r\n  if (localEnv?.displayInfo || localEnv?.displayVerbose) {\r\n    let lastMessage: string | undefined;\r\n\r\n    for (let k = 0; k < pis.items.length; k++) {\r\n      const item = pis.items[k];\r\n\r\n      const message = pis.itemToString(item);\r\n\r\n      if (message !== lastMessage) {\r\n        if (\r\n          (localEnv.displayInfo || localEnv.displayVerbose) &&\r\n          item.itemType !== InfoItemType.info &&\r\n          item.itemType !== InfoItemType.featureAggregate\r\n        ) {\r\n          if (item.itemType === InfoItemType.error || item.itemType === InfoItemType.testCompleteFail) {\r\n            Log.error(message);\r\n            lastMessage = message;\r\n          } else {\r\n            Log.message(message);\r\n            lastMessage = message;\r\n          }\r\n        } else if (localEnv.displayVerbose) {\r\n          Log.verbose(message);\r\n          lastMessage = message;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  try {\r\n    await outputResults(projectSet, pis, \"\", outputStorage, mcrJsonFile, outputMci, outputType);\r\n  } catch (e: any) {\r\n    Log.error(e);\r\n  }\r\n\r\n  // run derivative suites if no specific suite specified\r\n  if (!suite || suite === \"all\") {\r\n    const isAddon = await ProjectUtilities.getIsAddon(project);\r\n\r\n    if (isAddon) {\r\n      // CLI context: enable aggressive cleanup for memory efficiency\r\n      pis = new ProjectInfoSet(\r\n        project,\r\n        ProjectInfoSuite.cooperativeAddOn,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        true\r\n      );\r\n\r\n      await pis.generateForProject();\r\n\r\n      const projectSet = {\r\n        projectContainerName: project.containerName,\r\n        projectPath: project.projectFolder?.storageRelativePath,\r\n        projectName: project.name,\r\n        projectTitle: project.title,\r\n        infoSetData: pis.getDataObject(),\r\n        suite: ProjectInfoSuite.cooperativeAddOn,\r\n      };\r\n\r\n      resultStates.push(projectSet);\r\n\r\n      await outputResults(projectSet, pis, \"addon\", outputStorage, undefined);\r\n    }\r\n\r\n    // CLI context: enable aggressive cleanup for memory efficiency\r\n    pis = new ProjectInfoSet(project, ProjectInfoSuite.sharing, undefined, undefined, undefined, undefined, true);\r\n\r\n    await pis.generateForProject();\r\n\r\n    const projectSet = {\r\n      projectContainerName: project.containerName,\r\n      projectPath: project.projectFolder?.storageRelativePath,\r\n      projectName: project.name,\r\n      projectTitle: project.title,\r\n      infoSetData: pis.getDataObject(),\r\n      suite: ProjectInfoSuite.sharing,\r\n    };\r\n\r\n    resultStates.push(projectSet);\r\n\r\n    await outputResults(projectSet, pis, \"sharing\", outputStorage, undefined);\r\n\r\n    const shouldRunPlatformVersion = (pisData.info as any)[\"CWave\"] !== undefined;\r\n\r\n    if (shouldRunPlatformVersion) {\r\n      // CLI context: enable aggressive cleanup for memory efficiency\r\n      pis = new ProjectInfoSet(\r\n        project,\r\n        ProjectInfoSuite.currentPlatformVersions,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        undefined,\r\n        true\r\n      );\r\n\r\n      await pis.generateForProject();\r\n\r\n      const projectSet = {\r\n        projectContainerName: project.containerName,\r\n        projectPath: project.projectFolder?.storageRelativePath,\r\n        projectName: project.name,\r\n        projectTitle: project.title,\r\n        infoSetData: pis.getDataObject(),\r\n        suite: ProjectInfoSuite.currentPlatformVersions,\r\n      };\r\n\r\n      resultStates.push(projectSet);\r\n\r\n      await outputResults(projectSet, pis, \"currentplatform\", outputStorage, undefined);\r\n    }\r\n  }\r\n\r\n  project.dispose();\r\n\r\n  return resultStates;\r\n}\r\n\r\nasync function outputResults(\r\n  projectSet: IProjectMetaState,\r\n  pis: ProjectInfoSet,\r\n  fileNameModifier: string,\r\n  outputStorage: NodeStorage | undefined,\r\n  mcrJsonFile: NodeFile | undefined,\r\n  outputMci?: boolean,\r\n  outputType?: OutputType\r\n) {\r\n  if (outputStorage) {\r\n    if (outputType !== OutputType.noReports) {\r\n      const reportHtmlFile = outputStorage.rootFolder.ensureFile(\r\n        StorageUtilities.ensureFileNameIsSafe(StorageUtilities.getBaseFromName(projectSet.projectContainerName)) +\r\n          fileNameModifier +\r\n          \".report.html\"\r\n      );\r\n\r\n      const reportContent = pis.getReportHtml(projectSet.projectName, projectSet.projectPath, undefined);\r\n\r\n      reportHtmlFile.setContent(reportContent);\r\n\r\n      await reportHtmlFile.saveContent();\r\n    }\r\n\r\n    if (outputMci) {\r\n      const indexFolder = outputStorage.rootFolder.ensureFolder(\"mci\");\r\n      const hashCatalogFolder = outputStorage.rootFolder.ensureFolder(\"mch\");\r\n\r\n      await indexFolder.ensureExists();\r\n      await hashCatalogFolder.ensureExists();\r\n\r\n      const mciContentFile = indexFolder.ensureFile(\r\n        StorageUtilities.ensureFileNameIsSafe(StorageUtilities.getBaseFromName(projectSet.projectContainerName)) +\r\n          fileNameModifier +\r\n          \".mci.json\"\r\n      );\r\n      const mchContentFile = hashCatalogFolder.ensureFile(\r\n        StorageUtilities.ensureFileNameIsSafe(StorageUtilities.getBaseFromName(projectSet.projectContainerName)) +\r\n          fileNameModifier +\r\n          \".mch.json\"\r\n      );\r\n\r\n      if (outputType === OutputType.noReports) {\r\n        mciContentFile.setContent(pis.getStrictIndexJson(projectSet.projectName, projectSet.projectPath, undefined));\r\n      } else {\r\n        mciContentFile.setContent(pis.getIndexJson(projectSet.projectName, projectSet.projectPath, undefined));\r\n      }\r\n\r\n      await mciContentFile.saveContent();\r\n\r\n      const hashCatalogContent = pis.getHashCatalogJson();\r\n\r\n      mchContentFile.setContent(hashCatalogContent);\r\n\r\n      await mchContentFile.saveContent();\r\n\r\n      const mciContentFileZip = indexFolder.ensureFile(\r\n        StorageUtilities.ensureFileNameIsSafe(StorageUtilities.getBaseFromName(projectSet.projectContainerName)) +\r\n          fileNameModifier +\r\n          \".mci.json.zip\"\r\n      );\r\n\r\n      let contentStr = \"\";\r\n\r\n      if (outputType === OutputType.noReports) {\r\n        contentStr = pis.getStrictIndexJson(projectSet.projectName, projectSet.projectPath, undefined);\r\n      } else {\r\n        contentStr = pis.getIndexJson(projectSet.projectName, projectSet.projectPath, undefined);\r\n      }\r\n      mciContentFile.setContent(contentStr);\r\n\r\n      await mciContentFile.saveContent();\r\n\r\n      const zs = ZipStorage.fromJsonString(contentStr);\r\n\r\n      const contentBytes = await zs.generateUint8ArrayAsync();\r\n\r\n      mciContentFileZip.setContent(contentBytes);\r\n\r\n      await mciContentFileZip.saveContent();\r\n    }\r\n\r\n    if (outputType !== OutputType.noReports) {\r\n      const csvFile = outputStorage.rootFolder.ensureFile(\r\n        StorageUtilities.ensureFileNameIsSafe(StorageUtilities.getBaseFromName(projectSet.projectContainerName)) +\r\n          fileNameModifier +\r\n          \".csv\"\r\n      );\r\n\r\n      const pisLines = pis.getItemCsvLines();\r\n\r\n      const csvContent = ProjectInfoSet.CommonCsvHeader + \"\\n\" + pisLines.join(\"\\n\");\r\n\r\n      csvFile.setContent(csvContent);\r\n\r\n      await csvFile.saveContent();\r\n    }\r\n\r\n    if (mcrJsonFile) {\r\n      if (projectSet.infoSetData.index) {\r\n        projectSet.infoSetData.index = undefined;\r\n      }\r\n\r\n      const mcrContent = JSON.stringify(projectSet.infoSetData, null, 2);\r\n\r\n      mcrJsonFile.setContent(mcrContent);\r\n\r\n      await mcrJsonFile.saveContent();\r\n    }\r\n  }\r\n}\r\n", "import CreatorTools from \"../app/CreatorTools\";\r\nimport CreatorToolsHost from \"../app/CreatorToolsHost\";\r\nimport Project, { ProjectAutoDeploymentMode } from \"../app/Project\";\r\nimport IStatus, { StatusType } from \"../app/Status\";\r\nimport Log from \"../core/Log\";\r\nimport LocalEnvironment, { OperationColors, consoleText_reset } from \"../local/LocalEnvironment\";\r\nimport LocalUtilities from \"../local/LocalUtilities\";\r\nimport NodeStorage from \"../local/NodeStorage\";\r\nimport Database from \"../minecraft/Database\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport StorageUtilities from \"../storage/StorageUtilities\";\r\nimport IProjectStartInfo from \"./IProjectStartInfo\";\r\nimport * as path from \"path\";\r\n\r\nexport enum TaskType {\r\n  noCommand = 0,\r\n  runTests = 1,\r\n  exportAddon = 2,\r\n  exportWorld = 3,\r\n  ensureRefWorld = 4,\r\n  deploy = 5,\r\n  runDedicatedServer = 6,\r\n  info = 7,\r\n  add = 8,\r\n  create = 9,\r\n  validate = 10,\r\n  serve = 11,\r\n  version = 12,\r\n  passcodes = 13,\r\n  setPasscode = 14,\r\n  setServerProperties = 15,\r\n  minecraftEulaAndPrivacyStatement = 16,\r\n  deployTestWorld = 17,\r\n  world = 18,\r\n  fix = 19,\r\n  setProjectProperty = 20,\r\n  autoTest = 21,\r\n  aggregateReports = 22,\r\n  docsUpdateFormSource = 23,\r\n  docsGenerateFormJson = 24,\r\n  docsGenerateMarkdown = 25,\r\n  search = 26,\r\n  docsGenerateTypes = 27,\r\n  profileValidation = 28,\r\n  mcp = 29,\r\n  docsUpdateMCCat = 30,\r\n  renderModel = 31,\r\n  renderVanilla = 32,\r\n  renderStructure = 33,\r\n  buildStructure = 34,\r\n  view = 35,\r\n  edit = 36,\r\n  docsGenerateJsonSchema = 37,\r\n  setup = 38,\r\n  generateSchemaPackage = 39,\r\n}\r\n\r\nexport enum OutputType {\r\n  normal = 0,\r\n  noReports = 1,\r\n  json = 2,\r\n}\r\n\r\nexport default class ClUtils {\r\n  static createProject(creatorTools: CreatorTools, startInfo: IProjectStartInfo) {\r\n    const proj = new Project(creatorTools, startInfo.ctorProjectName, null);\r\n\r\n    if (startInfo.localFilePath) {\r\n      proj.localFilePath = startInfo.localFilePath;\r\n    }\r\n\r\n    if (startInfo.localFolderPath) {\r\n      proj.localFolderPath = startInfo.localFolderPath;\r\n    }\r\n\r\n    if (startInfo.accessoryFiles) {\r\n      proj.accessoryFilePaths = startInfo.accessoryFiles;\r\n    }\r\n\r\n    proj.autoDeploymentMode = ProjectAutoDeploymentMode.noAutoDeployment;\r\n\r\n    return proj;\r\n  }\r\n\r\n  static handleStatusAdded(creatorTools: CreatorTools, status: IStatus) {\r\n    let message = status.message;\r\n\r\n    if (status.type === StatusType.operationStarted) {\r\n      message =\r\n        OperationColors[(status.operationId ? status.operationId : 0) % OperationColors.length] +\r\n        \"[[ START: \" +\r\n        message +\r\n        consoleText_reset;\r\n    } else if (status.type === StatusType.operationEndedComplete) {\r\n      message =\r\n        OperationColors[(status.operationId ? status.operationId : 0) % OperationColors.length] +\r\n        \"          \" +\r\n        message +\r\n        \" :END ]]\" +\r\n        consoleText_reset;\r\n    } else if (status.type === StatusType.operationEndedErrors) {\r\n      message =\r\n        OperationColors[(status.operationId ? status.operationId : 0) % OperationColors.length] +\r\n        \"          \" +\r\n        message +\r\n        \" :END - ERRORS ]]\" +\r\n        consoleText_reset;\r\n    }\r\n\r\n    Log.verbose(message);\r\n  }\r\n\r\n  static async localFolderExists(path: string) {\r\n    const ls = new NodeStorage(path, \"\");\r\n\r\n    return await ls.rootFolder.exists();\r\n  }\r\n\r\n  static async localFileExists(path: string) {\r\n    const folderPath = StorageUtilities.getFolderPath(path);\r\n    const fileName = StorageUtilities.getLeafName(path);\r\n\r\n    if (!fileName || fileName.length < 2 || !folderPath || folderPath.length < 2) {\r\n      throw new Error(\"Could not process file with path: `\" + path + \"`\");\r\n    }\r\n\r\n    const ls = new NodeStorage(folderPath, \"\");\r\n\r\n    const file = ls.rootFolder.ensureFile(fileName);\r\n\r\n    return await file.exists();\r\n  }\r\n\r\n  static ensureLocalFolder(path: string) {\r\n    const ls = new NodeStorage(path, \"\");\r\n\r\n    return ls.rootFolder;\r\n  }\r\n\r\n  static getIsWriteCommand(taskType: TaskType) {\r\n    return (\r\n      taskType === TaskType.world ||\r\n      taskType === TaskType.create ||\r\n      taskType === TaskType.add ||\r\n      taskType === TaskType.fix\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Returns true for commands that edit content in place (no separate output folder).\r\n   * These commands: edit, view, add, create, fix\r\n   */\r\n  static getIsEditInPlaceCommand(taskType: TaskType) {\r\n    return (\r\n      taskType === TaskType.edit ||\r\n      taskType === TaskType.view ||\r\n      taskType === TaskType.add ||\r\n      taskType === TaskType.create ||\r\n      taskType === TaskType.fix\r\n    );\r\n  }\r\n\r\n  static async getMainWorkFolder(taskType: TaskType, inputFolder?: string, outputFolder?: string) {\r\n    // console.log(\"Using local path: '\" + inputFolder + \"' from '\" + __dirname + \"'\");\r\n    let workFolder: IFolder | undefined;\r\n\r\n    if (!inputFolder && outputFolder && ClUtils.getIsWriteCommand(taskType)) {\r\n      // Resolve relative output paths against current working directory\r\n      const resolvedOutput = path.isAbsolute(outputFolder) ? outputFolder : path.resolve(process.cwd(), outputFolder);\r\n      const outputStorage = new NodeStorage(resolvedOutput, \"\");\r\n      workFolder = outputStorage.rootFolder;\r\n      await workFolder.ensureExists();\r\n    }\r\n\r\n    if (!workFolder) {\r\n      if (!inputFolder) {\r\n        inputFolder = process.cwd();\r\n      } else {\r\n        // Resolve relative input paths against current working directory\r\n        inputFolder = path.isAbsolute(inputFolder) ? inputFolder : path.resolve(process.cwd(), inputFolder);\r\n      }\r\n\r\n      const inputStorage = new NodeStorage(inputFolder, \"\");\r\n      inputStorage.readOnly = true;\r\n      workFolder = inputStorage.rootFolder;\r\n    }\r\n\r\n    const exists = await workFolder.exists();\r\n\r\n    if (!exists) {\r\n      // Use a CLI-friendly message \u2014 referring to the bundled CLI's own\r\n      // installation directory (\"__dirname\") only confuses creators who are\r\n      // pointing at their own project folder.\r\n      throw new Error(\r\n        `Input folder does not exist: '${workFolder.fullPath}'. Use -i <path> to specify the project folder, or run from inside the project.`\r\n      );\r\n    }\r\n\r\n    await workFolder.load();\r\n\r\n    return workFolder;\r\n  }\r\n\r\n  static getCreatorTools(localEnv: LocalEnvironment, basePath?: string) {\r\n    CreatorToolsHost.localFolderExists = ClUtils.localFolderExists;\r\n    CreatorToolsHost.localFileExists = ClUtils.localFileExists;\r\n    CreatorToolsHost.ensureLocalFolder = ClUtils.ensureLocalFolder;\r\n\r\n    CreatorToolsHost.prefsStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"prefs\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    CreatorToolsHost.projectsStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"projects\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    CreatorToolsHost.packStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"packs\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    CreatorToolsHost.workingStorage = new NodeStorage(\r\n      path.join(localEnv.utilities.cliWorkingPath, \"working\") + NodeStorage.platformFolderDelimiter,\r\n      \"\"\r\n    );\r\n\r\n    if (localEnv.utilities && basePath) {\r\n      (localEnv.utilities as LocalUtilities).basePathAdjust = basePath;\r\n    }\r\n\r\n    const coreStorage = new NodeStorage(__dirname + \"/../data/content/\", \"\");\r\n    Database.contentFolder = coreStorage.rootFolder;\r\n\r\n    Database.local = localEnv.utilities;\r\n\r\n    CreatorToolsHost.init();\r\n\r\n    const ct = CreatorToolsHost.getCreatorTools();\r\n\r\n    if (ct) {\r\n      ct.local = localEnv.utilities;\r\n    }\r\n\r\n    return ct;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport * as os from \"os\";\r\nimport * as path from \"path\";\r\nimport * as crypto from \"crypto\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport IStorage from \"./../storage/IStorage\";\r\nimport ILocalUtilities, { Platform } from \"../core/ILocalUtilities\";\r\nimport Log from \"../core/Log\";\r\nimport IConversionSettings from \"../core/IConversionSettings\";\r\nimport ImageCodecNode from \"./ImageCodecNode\";\r\n\r\n/**\r\n * Ports that should never be used for MCTools HTTP servers.\r\n *\r\n * This list includes:\r\n * 1. Browser-blocked ports - Chrome/Firefox/Safari block these for security (ERR_UNSAFE_PORT)\r\n *    See: https://chromium.googlesource.com/chromium/src.git/+/refs/heads/main/net/base/port_util.cc\r\n *\r\n * 2. Security-sensitive service ports - commonly targeted for attacks or conflicts:\r\n *    - Database ports (Redis, etc.) - targeted for data theft\r\n *    - IRC ports - used by botnets and C&C servers\r\n *    - Other commonly exploited services\r\n */\r\nexport const UNSAFE_PORTS: ReadonlySet<number> = new Set([\r\n  // === Browser-blocked ports (Chrome/Firefox/Safari) ===\r\n  1, // tcpmux\r\n  7, // echo\r\n  9, // discard\r\n  11, // systat\r\n  13, // daytime\r\n  15, // netstat\r\n  17, // qotd\r\n  19, // chargen\r\n  20, // ftp data\r\n  21, // ftp access\r\n  22, // ssh\r\n  23, // telnet\r\n  25, // smtp\r\n  37, // time\r\n  42, // name\r\n  43, // nicname\r\n  53, // domain\r\n  69, // tftp\r\n  77, // priv-rjs\r\n  79, // finger\r\n  87, // ttylink\r\n  95, // supdup\r\n  101, // hostriame\r\n  102, // iso-tsap\r\n  103, // gppitnp\r\n  104, // acr-nema\r\n  109, // pop2\r\n  110, // pop3\r\n  111, // sunrpc\r\n  113, // auth\r\n  115, // sftp\r\n  117, // uucp-path\r\n  119, // nntp\r\n  123, // NTP\r\n  135, // loc-srv / epmap\r\n  137, // netbios\r\n  139, // netbios\r\n  143, // imap2\r\n  161, // snmp\r\n  179, // BGP\r\n  389, // ldap\r\n  427, // SLP (Also used by determine.exe)\r\n  465, // smtp+ssl\r\n  512, // print / exec\r\n  513, // login\r\n  514, // shell\r\n  515, // printer\r\n  526, // tempo\r\n  530, // courier\r\n  531, // chat\r\n  532, // netnews\r\n  540, // uucp\r\n  548, // AFP (Apple Filing Protocol)\r\n  554, // rtsp\r\n  556, // remotefs\r\n  563, // nntp+ssl\r\n  587, // smtp (submission)\r\n  601, // syslog-conn\r\n  636, // ldap+ssl\r\n  989, // ftps-data\r\n  990, // ftps\r\n  993, // ldap+ssl\r\n  995, // pop3+ssl\r\n  1719, // h323gatestat\r\n  1720, // h323hostcall\r\n  1723, // pptp\r\n  2049, // nfs\r\n  3659, // apple-sasl / PasswordServer\r\n  4045, // lockd\r\n  5060, // sip\r\n  5061, // sips\r\n  6000, // X11\r\n  6566, // sane-port\r\n  6665, // Alternate IRC (browser-blocked + botnet target)\r\n  6666, // Alternate IRC (browser-blocked + botnet target)\r\n  6667, // Standard IRC (browser-blocked + botnet target)\r\n  6668, // Alternate IRC (browser-blocked + botnet target)\r\n  6669, // Alternate IRC (browser-blocked + botnet target)\r\n  6697, // IRC + TLS (browser-blocked + botnet target)\r\n  10080, // Amanda\r\n\r\n  // === Security-sensitive service ports (not browser-blocked but should be avoided) ===\r\n  6379, // Redis\r\n]);\r\n\r\nexport default class LocalUtilities implements ILocalUtilities {\r\n  #productNameSeed = \"mctools\";\r\n\r\n  #basePathAdjust: string | undefined = undefined;\r\n\r\n  static #bedrockSchemasRoot: string | undefined = undefined;\r\n\r\n  /**\r\n   * Resolves the root directory of the @minecraft/bedrock-schemas package.\r\n   * Forms and schemas are served directly from this package at runtime\r\n   * rather than being copied into the build output.\r\n   */\r\n  static get bedrockSchemasRoot(): string | undefined {\r\n    if (LocalUtilities.#bedrockSchemasRoot !== undefined) {\r\n      return LocalUtilities.#bedrockSchemasRoot;\r\n    }\r\n\r\n    try {\r\n      // catalog.json is in the package exports map, so require.resolve works\r\n      const catalogPath = require.resolve(\"@minecraft/bedrock-schemas/catalog.json\");\r\n      LocalUtilities.#bedrockSchemasRoot = path.dirname(catalogPath);\r\n    } catch {\r\n      LocalUtilities.#bedrockSchemasRoot = \"\";\r\n    }\r\n\r\n    return LocalUtilities.#bedrockSchemasRoot || undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the data directory override from MCTOOLS_DATA_DIR environment variable.\r\n   * This is primarily used for Docker containers where data should be stored\r\n   * in a volume-mounted directory like /data.\r\n   */\r\n  static get dataDirectoryOverride(): string | undefined {\r\n    return process.env.MCTOOLS_DATA_DIR;\r\n  }\r\n\r\n  /**\r\n   * Check if MCTOOLS_I_ACCEPT_EULA_AT_MINECRAFTDOTNETSLASHEULA environment variable is set to \"true\".\r\n   * Used for non-interactive EULA acceptance in Docker containers.\r\n   * The long name is intentional to ensure users explicitly acknowledge the EULA.\r\n   */\r\n  static get eulaAcceptedViaEnvironment(): boolean {\r\n    const value = process.env.MCTOOLS_I_ACCEPT_EULA_AT_MINECRAFTDOTNETSLASHEULA;\r\n    return value?.toLowerCase() === \"true\";\r\n  }\r\n\r\n  get basePathAdjust() {\r\n    return this.#basePathAdjust;\r\n  }\r\n\r\n  set basePathAdjust(pathAdjust: string | undefined) {\r\n    this.#basePathAdjust = pathAdjust;\r\n  }\r\n\r\n  get platform() {\r\n    switch (os.platform()) {\r\n      case \"win32\":\r\n        return Platform.windows;\r\n      case \"darwin\":\r\n        return Platform.macOS;\r\n      case \"linux\":\r\n        return Platform.linux;\r\n      default:\r\n        return Platform.unsupported;\r\n    }\r\n  }\r\n\r\n  get productNameSeed() {\r\n    return this.#productNameSeed;\r\n  }\r\n\r\n  setProductNameSeed(newSeed: string) {\r\n    this.#productNameSeed = newSeed;\r\n  }\r\n\r\n  get userDataPath() {\r\n    return os.homedir();\r\n  }\r\n\r\n  get localAppDataPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Local\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return this.userDataPath;\r\n    }\r\n  }\r\n\r\n  get roamingAppDataPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Roaming\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return this.userDataPath;\r\n    }\r\n  }\r\n\r\n  get localReleaseServerLogPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Roaming\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Minecraft Bedrock\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"logs\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return \".\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n  }\r\n\r\n  get localPreviewServerLogPath() {\r\n    if (this.platform === Platform.windows) {\r\n      return (\r\n        this.userDataPath +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"AppData\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Roaming\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"Minecraft Bedrock Preview\" +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"logs\" +\r\n        NodeStorage.platformFolderDelimiter\r\n      );\r\n    } else {\r\n      return \".\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n  }\r\n\r\n  get minecraftPath() {\r\n    return (\r\n      this.userDataPath +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"AppData\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Roaming\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft Bedrock\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Users\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Shared\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get minecraftPreviewPath() {\r\n    return (\r\n      this.userDataPath +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"AppData\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Roaming\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft Bedrock Preview\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Users\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Shared\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get minecraftUwpPath() {\r\n    return (\r\n      this.localAppDataPath +\r\n      \"Packages\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft.MinecraftUWP_8wekyb3d8bbwe\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"LocalState\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get minecraftPreviewUwpPath() {\r\n    return (\r\n      this.localAppDataPath +\r\n      \"Packages\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"Microsoft.MinecraftWindowsBeta_8wekyb3d8bbwe\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"LocalState\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"games\" +\r\n      NodeStorage.platformFolderDelimiter +\r\n      \"com.mojang\" +\r\n      NodeStorage.platformFolderDelimiter\r\n    );\r\n  }\r\n\r\n  get testWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"test\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_test\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/test/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"test\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get cliWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"cli\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_cli\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/cli/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"cli\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get serverWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"server\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_server\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/server/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"server\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get worldsWorkingPath() {\r\n    // If MCTOOLS_DATA_DIR is set (e.g., in Docker), use it\r\n    const dataDir = LocalUtilities.dataDirectoryOverride;\r\n    if (dataDir) {\r\n      return NodeStorage.ensureEndsWithDelimiter(dataDir) + \"worlds\" + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    let path = this.localAppDataPath;\r\n\r\n    if (this.platform === Platform.windows) {\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        this.#productNameSeed +\r\n        \"_worlds\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    } else {\r\n      // Linux/macOS: Use ~/.mctools/worlds/ structure\r\n      path =\r\n        NodeStorage.ensureEndsWithDelimiter(path) +\r\n        \".\" +\r\n        this.#productNameSeed +\r\n        NodeStorage.platformFolderDelimiter +\r\n        \"worlds\" +\r\n        NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path;\r\n  }\r\n\r\n  get serversPath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"servers\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  get sourceServersPath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"serverSources\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  get packCachePath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"packCache\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  get envPrefsPath() {\r\n    let path = this.serverWorkingPath;\r\n\r\n    path = NodeStorage.ensureEndsWithDelimiter(path) + \"envprefs\" + NodeStorage.platformFolderDelimiter;\r\n\r\n    return path;\r\n  }\r\n\r\n  generateCryptoRandomNumber(toVal: number) {\r\n    // Use rejection sampling to avoid modulo bias when generating random numbers\r\n    // from a cryptographically secure source\r\n    const maxUint32 = 0xffffffff;\r\n    const limit = maxUint32 - (maxUint32 % toVal);\r\n    let randomValue: number;\r\n    do {\r\n      randomValue = new Uint32Array(crypto.randomBytes(4).buffer)[0];\r\n    } while (randomValue >= limit);\r\n    return randomValue % toVal;\r\n  }\r\n\r\n  generateUuid(): string {\r\n    return uuidv4();\r\n  }\r\n\r\n  validateFolderPath(path: string) {\r\n    // banned character combos\r\n    if (path.indexOf(\"..\") >= 0 || path.indexOf(\"\\\\\\\\\") >= 0 || path.indexOf(\"//\") >= 0) {\r\n      throw new Error(\"Unsupported path combinations: \" + path);\r\n    }\r\n\r\n    if (path.lastIndexOf(\":\") >= 3) {\r\n      throw new Error(\"Unsupported drive location: \" + path);\r\n    }\r\n\r\n    const count = this.countChar(path, \"\\\\\") + this.countChar(path, \"/\");\r\n\r\n    if (count < 3) {\r\n      throw new Error(\"Unsupported base path: \" + path);\r\n    }\r\n  }\r\n\r\n  countChar(source: string, find: string) {\r\n    let count = 0;\r\n\r\n    let index = source.indexOf(find);\r\n\r\n    while (index >= 0) {\r\n      count++;\r\n\r\n      index = source.indexOf(find, index + find.length);\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  ensureStartsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"/\")) {\r\n      pathSegment = \"/\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  ensureEndsWithSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"/\")) {\r\n      pathSegment += \"/\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  ensureStartsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.startsWith(\"\\\\\")) {\r\n      pathSegment = \"\\\\\" + pathSegment;\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  ensureEndsWithBackSlash(pathSegment: string) {\r\n    if (!pathSegment.endsWith(\"\\\\\")) {\r\n      pathSegment += \"\\\\\";\r\n    }\r\n\r\n    return pathSegment;\r\n  }\r\n\r\n  getFullPath(relativePath: string) {\r\n    // Redirect forms and schemas to @minecraft/bedrock-schemas package\r\n    const pkgRoot = LocalUtilities.bedrockSchemasRoot;\r\n    if (pkgRoot) {\r\n      if (relativePath.startsWith(\"data/forms/\") || relativePath.startsWith(\"data\\\\forms\\\\\")) {\r\n        const subPath = relativePath.substring(\"data/forms/\".length);\r\n        return path.join(pkgRoot, \"forms\", subPath);\r\n      }\r\n      const schemasPrefix = relativePath.startsWith(\"/schemas/\")\r\n        ? \"/schemas/\"\r\n        : relativePath.startsWith(\"schemas/\")\r\n          ? \"schemas/\"\r\n          : relativePath.startsWith(\"\\\\schemas\\\\\")\r\n            ? \"\\\\schemas\\\\\"\r\n            : undefined;\r\n      if (schemasPrefix) {\r\n        const subPath = relativePath.substring(schemasPrefix.length);\r\n        return path.join(pkgRoot, \"schemas\", subPath);\r\n      }\r\n    }\r\n\r\n    let fullPath: string;\r\n\r\n    if (this.#basePathAdjust) {\r\n      // When basePathAdjust is set (via --base-path CLI option),\r\n      // resolve it relative to process.cwd() (where the command was run)\r\n      // This allows users to specify paths relative to their working directory\r\n      fullPath = path.resolve(process.cwd(), this.#basePathAdjust);\r\n      fullPath = NodeStorage.ensureEndsWithDelimiter(fullPath);\r\n    } else {\r\n      // Fall back to __dirname-based resolution for backwards compatibility\r\n      fullPath = __dirname;\r\n\r\n      const lastSlash = Math.max(\r\n        fullPath.lastIndexOf(\"\\\\\", fullPath.length - 2),\r\n        fullPath.lastIndexOf(\"/\", fullPath.length - 2)\r\n      );\r\n\r\n      if (lastSlash >= 0) {\r\n        fullPath = fullPath.substring(0, lastSlash + 1);\r\n      }\r\n    }\r\n\r\n    if (this.platform === Platform.windows) {\r\n      fullPath += relativePath.replace(/\\//g, \"\\\\\");\r\n    } else {\r\n      fullPath += relativePath.replace(/\\\\/g, NodeStorage.platformFolderDelimiter);\r\n    }\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  createStorage(path: string): IStorage | null {\r\n    const fullPath = this.getFullPath(path);\r\n\r\n    return new NodeStorage(fullPath, \"\");\r\n  }\r\n\r\n  async readJsonFile(path: string): Promise<object | null> {\r\n    const fs = require(\"fs\");\r\n\r\n    const fullPath = this.getFullPath(path);\r\n\r\n    try {\r\n      if (!fs.existsSync(fullPath)) {\r\n        return null;\r\n      }\r\n\r\n      const rawData = fs.readFileSync(fullPath);\r\n\r\n      if (!rawData) {\r\n        return null;\r\n      }\r\n\r\n      const jsonData = JSON.parse(rawData);\r\n\r\n      return jsonData;\r\n    } catch (e: any) {\r\n      // Silently return null for parse errors - the caller can handle missing data\r\n      // This is common for malformed JSON files in vanilla/sample content\r\n      return null;\r\n    }\r\n  }\r\n\r\n  async processConversion(conversionSettings: IConversionSettings): Promise<boolean> {\r\n    // Placeholder for future conversion logic\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Check if a port is available for use.\r\n   * @param port The port number to check\r\n   * @param host The host to check (default: localhost)\r\n   * @returns Promise that resolves to true if the port is available, false otherwise\r\n   */\r\n  static isPortAvailable(port: number, host: string = \"localhost\"): Promise<boolean> {\r\n    const net = require(\"net\");\r\n\r\n    return new Promise((resolve) => {\r\n      const server = net.createServer();\r\n\r\n      server.once(\"error\", (err: NodeJS.ErrnoException) => {\r\n        if (err.code === \"EADDRINUSE\") {\r\n          resolve(false);\r\n        } else {\r\n          // Other errors - treat as unavailable\r\n          resolve(false);\r\n        }\r\n      });\r\n\r\n      server.once(\"listening\", () => {\r\n        server.close();\r\n        resolve(true);\r\n      });\r\n\r\n      server.listen(port, host);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Find an available port within a given range.\r\n   * @param startPort The starting port of the range (inclusive)\r\n   * @param endPort The ending port of the range (inclusive)\r\n   * @param host The host to check (default: localhost)\r\n   * @returns Promise that resolves to an available port, or undefined if none found\r\n   */\r\n  static async findAvailablePort(\r\n    startPort: number,\r\n    endPort: number,\r\n    host: string = \"localhost\"\r\n  ): Promise<number | undefined> {\r\n    // Create an array of ports in the range, excluding unsafe ports\r\n    const ports: number[] = [];\r\n    for (let port = startPort; port <= endPort; port++) {\r\n      if (!UNSAFE_PORTS.has(port)) {\r\n        ports.push(port);\r\n      }\r\n    }\r\n\r\n    // Fisher-Yates shuffle for random port selection\r\n    for (let i = ports.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      [ports[i], ports[j]] = [ports[j], ports[i]];\r\n    }\r\n\r\n    // Try each port until we find an available one\r\n    for (const port of ports) {\r\n      const available = await LocalUtilities.isPortAvailable(port, host);\r\n      if (available) {\r\n        return port;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get a random port within a range, excluding browser-unsafe ports.\r\n   * This is a synchronous function that doesn't check if the port is available.\r\n   * Use findAvailablePort() if you need to verify the port is not in use.\r\n   *\r\n   * @param startPort The starting port of the range (inclusive)\r\n   * @param endPort The ending port of the range (inclusive)\r\n   * @returns A random port in the range that is not in the UNSAFE_PORTS list\r\n   */\r\n  static getRandomSafePort(startPort: number, endPort: number): number {\r\n    // Build array of safe ports in range\r\n    const safePorts: number[] = [];\r\n    for (let port = startPort; port <= endPort; port++) {\r\n      if (!UNSAFE_PORTS.has(port)) {\r\n        safePorts.push(port);\r\n      }\r\n    }\r\n\r\n    if (safePorts.length === 0) {\r\n      // Fallback: if no safe ports in range, just return startPort\r\n      // This shouldn't happen with reasonable port ranges\r\n      Log.debugAlert(`No safe ports available in range ${startPort}-${endPort}, using ${startPort}`);\r\n      return startPort;\r\n    }\r\n\r\n    return safePorts[Math.floor(Math.random() * safePorts.length)];\r\n  }\r\n\r\n  /**\r\n   * Verifies the Authenticode digital signature of a Windows executable.\r\n   * Uses PowerShell's Get-AuthenticodeSignature cmdlet, which is built into\r\n   * every modern Windows and requires no native Node.js addons.\r\n   *\r\n   * @param exePath Absolute path to the executable to verify\r\n   * @returns Promise with verification result including validity, signer, and Microsoft check\r\n   */\r\n  static async verifyAuthenticodeSignature(exePath: string): Promise<{\r\n    isValid: boolean;\r\n    status: string;\r\n    signer?: string;\r\n    error?: string;\r\n    isMicrosoftSigned?: boolean;\r\n  }> {\r\n    // Only works on Windows\r\n    if (os.platform() !== \"win32\") {\r\n      return {\r\n        isValid: false,\r\n        status: \"UnsupportedPlatform\",\r\n        error: \"Authenticode signature verification is only supported on Windows\",\r\n      };\r\n    }\r\n\r\n    // Validate the path exists\r\n    const fs = await import(\"fs\");\r\n    if (!fs.existsSync(exePath)) {\r\n      return {\r\n        isValid: false,\r\n        status: \"FileNotFound\",\r\n        error: `File not found: ${exePath}`,\r\n      };\r\n    }\r\n\r\n    try {\r\n      const { execFile } = await import(\"child_process\");\r\n      const { existsSync: execExistsSync } = await import(\"fs\");\r\n\r\n      // Use PowerShell's Get-AuthenticodeSignature which wraps the Windows\r\n      // WinVerifyTrust API. This avoids the need for native Node.js addons\r\n      // (win-verify-signature) which require platform-specific compiled binaries\r\n      // that are fragile across Node.js versions and packaging scenarios.\r\n      //\r\n      // We use -EncodedCommand with a base64-encoded UTF-16LE script to avoid\r\n      // all command-line escaping issues between Node.js and PowerShell.\r\n      //\r\n      // We prefer pwsh.exe (PowerShell 7+) because it has more reliable module\r\n      // auto-loading. PowerShell 5.1 (powershell.exe) can fail on some machines\r\n      // due to type data conflicts in the Security module. We try both.\r\n\r\n      // SECURITY: Instead of interpolating the file path into the PowerShell script\r\n      // (which risks command injection via newlines, backticks, or other control\r\n      // characters in the path), we pass the path via an environment variable.\r\n      // The script reads $env:MCT_SIG_VERIFY_PATH, so the path never enters\r\n      // the script text and cannot break out of string boundaries.\r\n\r\n      // Defense-in-depth: reject paths with characters that have no business\r\n      // in a Windows file path. This guards against exotic injection even if\r\n      // the env-var approach were somehow bypassed.\r\n      if (/[\\x00-\\x1f\\x7f`${}]/.test(exePath)) {\r\n        return {\r\n          isValid: false,\r\n          status: \"InvalidPath\",\r\n          error: \"File path contains invalid characters\",\r\n        };\r\n      }\r\n\r\n      const psScript = [\r\n        `$sig = Get-AuthenticodeSignature -LiteralPath $env:MCT_SIG_VERIFY_PATH`,\r\n        `$r = @{ Status = $sig.Status.ToString(); SignerCN = ''; SignerSubject = '' }`,\r\n        `if ($sig.SignerCertificate) {`,\r\n        `  $r.SignerSubject = $sig.SignerCertificate.Subject`,\r\n        `  if ($sig.SignerCertificate.Subject -match 'CN=([^,]+)') { $r.SignerCN = $Matches[1].Trim('\"') }`,\r\n        `}`,\r\n        `$r | ConvertTo-Json -Compress`,\r\n      ].join(\"\\n\");\r\n\r\n      // Encode as UTF-16LE base64 for PowerShell's -EncodedCommand\r\n      const encoded = Buffer.from(psScript, \"utf16le\").toString(\"base64\");\r\n\r\n      // Build ordered list of PowerShell executables to try.\r\n      // pwsh.exe (PowerShell 7+) is preferred for reliability.\r\n      const candidates: string[] = [];\r\n      const pwsh7Path = \"C:\\\\Program Files\\\\PowerShell\\\\7\\\\pwsh.exe\";\r\n      if (execExistsSync(pwsh7Path)) {\r\n        candidates.push(pwsh7Path);\r\n      }\r\n      candidates.push(\"pwsh.exe\", \"powershell.exe\");\r\n\r\n      const runPowerShell = (psExe: string): Promise<string> =>\r\n        new Promise((resolve, reject) => {\r\n          execFile(\r\n            psExe,\r\n            [\"-NoProfile\", \"-NonInteractive\", \"-EncodedCommand\", encoded],\r\n            {\r\n              timeout: 15000,\r\n              // Pass the file path via environment variable instead of\r\n              // interpolating it into the script. This prevents injection.\r\n              env: { ...process.env, MCT_SIG_VERIFY_PATH: exePath },\r\n            },\r\n            (error, stdout, stderr) => {\r\n              if (error) {\r\n                reject(new Error(`${psExe} failed: ${error.message}`));\r\n                return;\r\n              }\r\n              const trimmed = stdout.trim();\r\n              if (!trimmed) {\r\n                reject(new Error(`${psExe} returned empty output${stderr ? \": \" + stderr.substring(0, 200) : \"\"}`));\r\n                return;\r\n              }\r\n              resolve(trimmed);\r\n            }\r\n          );\r\n        });\r\n\r\n      // Try each candidate until one succeeds\r\n      let psResult: string | undefined;\r\n      let lastError: Error | undefined;\r\n      for (const psExe of candidates) {\r\n        try {\r\n          psResult = await runPowerShell(psExe);\r\n          break;\r\n        } catch (err) {\r\n          lastError = err instanceof Error ? err : new Error(String(err));\r\n        }\r\n      }\r\n\r\n      if (!psResult) {\r\n        return {\r\n          isValid: false,\r\n          status: \"VerificationError\",\r\n          error: `No working PowerShell found. Install PowerShell 7+ (https://aka.ms/powershell) or use --unsafe-skip-signature-validation. Last error: ${lastError?.message}`,\r\n        };\r\n      }\r\n\r\n      const parsed = JSON.parse(psResult) as {\r\n        Status: string;\r\n        SignerCN: string;\r\n        SignerSubject: string;\r\n      };\r\n\r\n      const isValid = parsed.Status === \"Valid\";\r\n      const signerSubject = parsed.SignerSubject || undefined;\r\n      const signerCN = parsed.SignerCN || \"\";\r\n\r\n      // Microsoft Corporation is the expected signer for Minecraft Dedicated Server\r\n      // We also accept Mojang (owned by Microsoft) for legacy compatibility\r\n      const isMicrosoftSigned =\r\n        isValid &&\r\n        (signerCN === \"Microsoft Corporation\" ||\r\n          signerCN === \"Mojang\" ||\r\n          (signerSubject !== undefined &&\r\n            (signerSubject.includes(\"Microsoft Corporation\") || signerSubject.includes(\"Mojang\"))));\r\n\r\n      return {\r\n        isValid,\r\n        status: isValid ? \"Valid\" : parsed.Status,\r\n        signer: signerSubject,\r\n        isMicrosoftSigned,\r\n        error: isValid ? undefined : `Signature status: ${parsed.Status}`,\r\n      };\r\n    } catch (err) {\r\n      const errorMessage = err instanceof Error ? err.message : String(err);\r\n      return {\r\n        isValid: false,\r\n        status: \"VerificationError\",\r\n        error: `Failed to verify signature: ${errorMessage}`,\r\n      };\r\n    }\r\n  }\r\n\r\n  // ============================================================================\r\n  // IMAGE CODEC METHODS (Node.js specific)\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode PNG image data using pngjs.\r\n   * This is a Node.js-specific implementation that uses native modules.\r\n   */\r\n  decodePng(data: Uint8Array): { width: number; height: number; pixels: Uint8Array } | undefined {\r\n    return ImageCodecNode.decodePng(data);\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using pngjs.\r\n   * This is a Node.js-specific implementation that uses native modules.\r\n   */\r\n  encodeToPng(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    return ImageCodecNode.encodeToPng(pixels, width, height);\r\n  }\r\n}\r\n", "import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n  if (poolPtr > rnds8Pool.length - 16) {\n    crypto.randomFillSync(rnds8Pool);\n    poolPtr = 0;\n  }\n\n  return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;", "import crypto from 'crypto';\nexport default {\n  randomUUID: crypto.randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport NodeFolder from \"./NodeFolder\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport IFile, { FileUpdateType } from \"../storage/IFile\";\r\nimport FileBase from \"../storage/FileBase\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport * as fs from \"fs\";\r\n\r\nexport default class NodeFile extends FileBase implements IFile {\r\n  _name: string;\r\n  _parentFolder: NodeFolder;\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._parentFolder.fullPath;\r\n\r\n    if (!path.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      path += NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  get parentFolder(): NodeFolder {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get isContentLoaded(): boolean {\r\n    return this.lastLoadedOrSaved != null || this.modified != null;\r\n  }\r\n\r\n  constructor(parentFolder: NodeFolder, folderName: string) {\r\n    super();\r\n\r\n    this._parentFolder = parentFolder;\r\n    this._name = folderName;\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for node storage\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return fs.existsSync(this.fullPath);\r\n  }\r\n\r\n  loadContentSync(force: boolean): Date {\r\n    if (force || this.lastLoadedOrSaved == null) {\r\n      const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n      if (!fs.existsSync(this.fullPath)) {\r\n        this._content = null;\r\n      } else if (encoding === EncodingType.ByteBuffer) {\r\n        // Log.debug(`NodeFS loading '${this.fullPath}' as binary.`);\r\n        const byteResult = fs.readFileSync(this.fullPath);\r\n\r\n        if (byteResult instanceof ArrayBuffer) {\r\n          this._content = new Uint8Array(byteResult as ArrayBuffer);\r\n        } else {\r\n          this._content = byteResult as any;\r\n        }\r\n      } else {\r\n        // Log.debug(`NodeFS loading '${this.fullPath}' as text.`);\r\n\r\n        this._content = fs.readFileSync(this.fullPath, { encoding: \"utf8\" });\r\n      }\r\n\r\n      //  this._content += \"\";\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async loadContent(force: boolean): Promise<Date> {\r\n    return this.loadContentSync(force);\r\n  }\r\n\r\n  setContent(newContent: string | Uint8Array | null, updateType?: FileUpdateType) {\r\n    const areEqual = StorageUtilities.contentsAreEqual(this._content, newContent);\r\n\r\n    if (areEqual) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.lastLoadedOrSaved) {\r\n      this.lastLoadedOrSaved = new Date();\r\n      this.lastLoadedOrSaved = new Date(this.lastLoadedOrSaved.getTime() - 1);\r\n\r\n      // Log.debugAlert(\"Setting a file without loading it first.\");\r\n    }\r\n\r\n    let oldContent = this._content;\r\n    this._content = newContent;\r\n\r\n    this.contentWasModified(oldContent, updateType);\r\n\r\n    return true;\r\n  }\r\n\r\n  /*  update: rely consistenly on getHash() implementation in FileBase which uses the js-md5 library\r\n\r\n    async getHash(): Promise<string | undefined> {\r\n    await this.loadContent(false);\r\n\r\n    if (this._content === undefined || this._content === null) {\r\n      return undefined;\r\n    }\r\n\r\n    const hash = crypto.createHash(\"MD5\");\r\n\r\n    hash.update(this._content);\r\n\r\n    return hash.digest(\"base64\");\r\n  }\r\n    */\r\n\r\n  async saveContent(): Promise<Date> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (this.needsSave) {\r\n      this.lastLoadedOrSaved = new Date();\r\n\r\n      if (this.content != null) {\r\n        this.parentFolder.ensureExists();\r\n\r\n        const encoding = StorageUtilities.getEncodingByFileName(this._name);\r\n\r\n        if (encoding === EncodingType.ByteBuffer) {\r\n          // Log.verbose(\"Saving '\" + this.fullPath + \"' as binary. size: \" + this.content.length);\r\n\r\n          fs.writeFileSync(this.fullPath, this.content);\r\n        } else {\r\n          // Log.verbose(\"Saving '\" + this.fullPath + \"' as text. size: \" + this.content.length);\r\n\r\n          fs.writeFileSync(this.fullPath, this.content, { encoding: \"utf8\" });\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.lastLoadedOrSaved === null) {\r\n      this.lastLoadedOrSaved = new Date();\r\n    }\r\n\r\n    return this.lastLoadedOrSaved;\r\n  }\r\n\r\n  async writeContent(content: String[]) {\r\n    this.lastLoadedOrSaved = new Date();\r\n\r\n    await this._parentFolder.ensureExists();\r\n\r\n    return new Promise<void>((resolve, reject) => {\r\n      const writer = fs.createWriteStream(this.fullPath);\r\n\r\n      writer.on(\"finish\", resolve);\r\n      writer.on(\"error\", reject);\r\n\r\n      for (const str of content) {\r\n        writer.write(str + \"\\n\");\r\n      }\r\n\r\n      writer.end();\r\n    });\r\n  }\r\n\r\n  async deleteThisFile(skipRemoveFromParent?: boolean): Promise<boolean> {\r\n    if (this.parentFolder.storage.readOnly) {\r\n      throw new Error(\"Can't save read-only file.\");\r\n    }\r\n\r\n    if (skipRemoveFromParent !== true) {\r\n      this._parentFolder._removeFile(this);\r\n    }\r\n\r\n    return this._deleteItem(this.fullPath);\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFileName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFileName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n    if (newParentFolder.files[newFileName] !== undefined) {\r\n      throw new Error(\"File exists at specified path.\");\r\n    }\r\n\r\n    await this.loadContent(false);\r\n\r\n    const originalPath = this.fullPath;\r\n\r\n    this._name = newFileName;\r\n    this._parentFolder = newParentFolder as NodeFolder;\r\n\r\n    this.modified = new Date();\r\n\r\n    (newParentFolder as NodeFolder)._addExistingFile(this);\r\n\r\n    this._deleteItem(originalPath);\r\n\r\n    return true;\r\n  }\r\n\r\n  async _deleteItem(path: string): Promise<boolean> {\r\n    let isSuccess = true;\r\n\r\n    try {\r\n      fs.rmSync(path);\r\n    } catch (e) {\r\n      isSuccess = false;\r\n    }\r\n\r\n    return isSuccess;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFolder, { FolderErrorStatus } from \"../storage/IFolder\";\r\nimport IFile from \"../storage/IFile\";\r\nimport NodeFile from \"./NodeFile\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport StorageUtilities, { EncodingType } from \"../storage/StorageUtilities\";\r\nimport FolderBase from \"../storage/FolderBase\";\r\nimport Log from \"./../core/Log\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport * as crypto from \"crypto\";\r\n\r\nexport interface IFilePathAndSize {\r\n  path: string;\r\n  size?: number;\r\n  hash?: string;\r\n  sourcePath?: string;\r\n}\r\n\r\nexport interface FileListings {\r\n  [pathPlusSizePlusHash: string]: IFilePathAndSize | undefined;\r\n}\r\n\r\nexport interface IListingsFile {\r\n  path: string;\r\n  files: IFilePathAndSize[];\r\n}\r\n\r\nexport default class NodeFolder extends FolderBase implements IFolder {\r\n  private _name: string;\r\n  private _path: string;\r\n\r\n  folders: { [id: string]: NodeFolder | undefined };\r\n  files: { [id: string]: NodeFile | undefined };\r\n  private _storage: NodeStorage;\r\n  private _parentFolder: NodeFolder | null;\r\n\r\n  get storage(): NodeStorage {\r\n    return this._storage;\r\n  }\r\n\r\n  get parentFolder(): NodeFolder | null {\r\n    return this._parentFolder;\r\n  }\r\n\r\n  get name() {\r\n    return this._name;\r\n  }\r\n\r\n  get fullPath() {\r\n    let path = this._path;\r\n\r\n    if (!path.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      path += NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return path + this.name;\r\n  }\r\n\r\n  constructor(storage: NodeStorage, parentFolder: NodeFolder | null, parentPath: string, folderName: string) {\r\n    super();\r\n\r\n    this._storage = storage;\r\n    this._parentFolder = parentFolder;\r\n\r\n    this._path = parentPath;\r\n    this._name = folderName;\r\n\r\n    this.folders = {};\r\n    this.files = {};\r\n  }\r\n\r\n  async scanForChanges(): Promise<void> {\r\n    // No-op for node storage\r\n  }\r\n\r\n  ensureFile(name: string): NodeFile {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in file name: \" + name);\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFile = this.files[nameCanon];\r\n\r\n    if (candFile == null) {\r\n      candFile = new NodeFile(this, name);\r\n\r\n      this.files[nameCanon] = candFile;\r\n    }\r\n\r\n    return candFile;\r\n  }\r\n\r\n  _removeFile(file: IFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    const candFile = this.files[nameCanon];\r\n\r\n    Log.assert(candFile === file, \"Files don't match.\");\r\n\r\n    this.files[nameCanon] = undefined;\r\n\r\n    this.storage.notifyFileRemoved(this.storageRelativePath + file.name);\r\n  }\r\n\r\n  _addExistingFile(file: NodeFile) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(file.name);\r\n\r\n    this.files[nameCanon] = file;\r\n  }\r\n\r\n  async deleteThisFolder(): Promise<boolean> {\r\n    if (this.storage.readOnly) {\r\n      throw new Error(\"Deletion of this folder \" + this.fullPath + \" is not supported in read only mode.\");\r\n    }\r\n\r\n    let absPath = path.resolve(this.fullPath);\r\n    if (StorageUtilities.isPathRiskyForDelete(absPath)) {\r\n      throw new Error(\"Deletion of this folder \" + absPath + \" is not supported because it seems too basic.\");\r\n    }\r\n\r\n    let isSuccess = true;\r\n\r\n    if (fs.existsSync(this.fullPath)) {\r\n      try {\r\n        fs.rmdirSync(this.fullPath, {\r\n          recursive: true,\r\n        });\r\n      } catch (e) {\r\n        isSuccess = false;\r\n      }\r\n    }\r\n\r\n    this.removeMeFromParent();\r\n\r\n    return isSuccess;\r\n  }\r\n\r\n  async deleteAllFolderContents(): Promise<boolean> {\r\n    if (this.storage.readOnly) {\r\n      throw new Error(\"Deletion of folder contents at \" + this.fullPath + \" is not supported in read only mode.\");\r\n    }\r\n\r\n    return await this.recursiveDeleteContentsOfThisFolder();\r\n  }\r\n\r\n  ensureFolder(name: string): NodeFolder {\r\n    Log.assert(name.indexOf(\"/\") < 0, \"Unexpected to find / in folder name: \" + name);\r\n\r\n    const nameCanon = StorageUtilities.canonicalizeName(name);\r\n\r\n    let candFolder = this.folders[nameCanon];\r\n\r\n    if (!candFolder) {\r\n      candFolder = new NodeFolder(this._storage, this, this.fullPath, name);\r\n\r\n      this.folders[nameCanon] = candFolder;\r\n    }\r\n\r\n    return candFolder;\r\n  }\r\n\r\n  _addExistingFolderToParent(folder: NodeFolder) {\r\n    const nameCanon = StorageUtilities.canonicalizeName(folder.name);\r\n\r\n    this.folders[nameCanon] = folder;\r\n  }\r\n\r\n  async moveTo(newStorageRelativePath: string): Promise<boolean> {\r\n    const oldFullPath = this.fullPath;\r\n\r\n    const newFolderPath = StorageUtilities.getFolderPath(newStorageRelativePath);\r\n    const newFolderName = StorageUtilities.getLeafName(newStorageRelativePath);\r\n\r\n    if (newFolderName.length < 2) {\r\n      throw new Error(\"New path is not correct.\");\r\n    }\r\n\r\n    if (this.isSameFolder(newStorageRelativePath)) {\r\n      return false;\r\n    }\r\n\r\n    if (this._parentFolder !== null) {\r\n      const newParentFolder = await this._parentFolder.storage.ensureFolderFromStorageRelativePath(newFolderPath);\r\n\r\n      if (newParentFolder.folders[newFolderName] !== undefined) {\r\n        throw new Error(\"Could not move folder; folder exists at specified path: \" + newStorageRelativePath);\r\n      }\r\n\r\n      // Compute new full path from current _path before any in-memory changes.\r\n      // _path holds the parent directory, so _path + newFolderName = target location.\r\n      let parentPath = this._path;\r\n      if (!parentPath.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n        parentPath += NodeStorage.platformFolderDelimiter;\r\n      }\r\n      const newFullPath = parentPath + newFolderName;\r\n\r\n      // Perform disk rename FIRST. If this throws (e.g., EPERM from OneDrive/antivirus),\r\n      // in-memory state is still clean and callers can fall back to copy+delete.\r\n      Log.verbose(\"Renaming folder from: \" + oldFullPath + \" to \" + newFullPath);\r\n      fs.renameSync(oldFullPath, newFullPath);\r\n\r\n      // Disk rename succeeded \u2014 now update in-memory state to match.\r\n      this._parentFolder._removeExistingFolderFromParent(this);\r\n\r\n      this._parentFolder = newParentFolder as NodeFolder;\r\n\r\n      this._name = newFolderName;\r\n      (newParentFolder as NodeFolder)._addExistingFolderToParent(this);\r\n    }\r\n\r\n    this._name = newFolderName;\r\n\r\n    return true;\r\n  }\r\n\r\n  async exists(): Promise<boolean> {\r\n    return fs.existsSync(this.fullPath);\r\n  }\r\n\r\n  async ensureExists(): Promise<boolean> {\r\n    const exists = fs.existsSync(this.fullPath);\r\n\r\n    if (!exists) {\r\n      // Log.message(\"Creating folder '\" + this.fullPath + \"'\");\r\n\r\n      fs.mkdirSync(this.fullPath, { recursive: true });\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  async generateFileListings(listings?: FileListings) {\r\n    await this.load(true);\r\n\r\n    if (!listings) {\r\n      listings = {};\r\n    }\r\n\r\n    if (this.files[\"files.json\"] !== undefined) {\r\n      const file = this.files[\"files.json\"];\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const obj: IListingsFile | undefined = StorageUtilities.getJsonObject(file);\r\n\r\n      if (obj && obj.files) {\r\n        for (const fileInfo of obj.files) {\r\n          if (fileInfo.hash && fileInfo.size && fileInfo.path && fileInfo.sourcePath === undefined) {\r\n            const pathHash = this.generatePathHash(fileInfo);\r\n\r\n            if (!listings[pathHash]) {\r\n              const relativePath = this.storageRelativePath;\r\n\r\n              if (relativePath) {\r\n                listings[pathHash] = {\r\n                  path: fileInfo.path,\r\n                  size: fileInfo.size,\r\n                  hash: fileInfo.hash,\r\n                  sourcePath: StorageUtilities.canonicalizePath(relativePath + fileInfo.path),\r\n                };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      for (const dirName in this.folders) {\r\n        const folder = this.folders[dirName];\r\n\r\n        if (folder && !folder.errorStatus) {\r\n          await folder.generateFileListings(listings);\r\n        }\r\n      }\r\n    }\r\n\r\n    return listings;\r\n  }\r\n\r\n  generatePathHash(fileInfo: IFilePathAndSize) {\r\n    let pathHash = StorageUtilities.getBaseFromName(fileInfo.path).toLowerCase();\r\n\r\n    if (fileInfo.size) {\r\n      pathHash += \"|\" + fileInfo.size;\r\n    }\r\n\r\n    if (fileInfo.hash) {\r\n      pathHash += \"|\" + fileInfo.hash;\r\n    }\r\n\r\n    return pathHash;\r\n  }\r\n\r\n  async copyContentsTo(\r\n    destRootPath: string,\r\n    fileInclusionList: IFilePathAndSize[],\r\n    addFilesToInclusionList?: boolean,\r\n    listings?: FileListings,\r\n    destStorageRelativePath?: string,\r\n    copyPath?: string\r\n  ) {\r\n    await this.load(true);\r\n\r\n    destRootPath = NodeStorage.ensureEndsWithDelimiter(destRootPath);\r\n    let dirPath = NodeStorage.ensureEndsWithDelimiter(destRootPath);\r\n\r\n    if (copyPath) {\r\n      dirPath += copyPath;\r\n    }\r\n\r\n    const targetFolderExists = fs.existsSync(dirPath);\r\n\r\n    if (!targetFolderExists) {\r\n      fs.mkdirSync(dirPath, { recursive: true });\r\n    }\r\n\r\n    for (const fileName in this.files) {\r\n      const file = this.files[fileName];\r\n\r\n      let filePath = fileName;\r\n\r\n      if (copyPath) {\r\n        filePath = copyPath + filePath;\r\n      }\r\n\r\n      filePath = StorageUtilities.canonicalizePath(filePath);\r\n\r\n      let targetFileSize: IFilePathAndSize | undefined;\r\n\r\n      if (fileInclusionList) {\r\n        for (const filePathAndSize of fileInclusionList) {\r\n          if (StorageUtilities.canonicalizePath(filePathAndSize.path) === filePath) {\r\n            targetFileSize = filePathAndSize;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (file) {\r\n        await file.loadContent(true);\r\n\r\n        if (file.content) {\r\n          const encoding = StorageUtilities.getEncodingByFileName(file.name);\r\n\r\n          if (!targetFileSize) {\r\n            targetFileSize = {\r\n              size: file.content.length,\r\n              path: filePath,\r\n            };\r\n\r\n            if (addFilesToInclusionList === true) {\r\n              fileInclusionList.push(targetFileSize);\r\n            }\r\n          }\r\n\r\n          if (encoding === EncodingType.ByteBuffer) {\r\n            let arrData: any = file.content as any;\r\n\r\n            if (\r\n              targetFileSize &&\r\n              arrData instanceof Buffer &&\r\n              targetFileSize.size &&\r\n              arrData.length > targetFileSize.size\r\n            ) {\r\n              Log.verbose(\"Making truncated buffer copy of \" + file.fullPath + \" to size \" + targetFileSize.size);\r\n              arrData = arrData.subarray(0, targetFileSize.size);\r\n            } else if (\r\n              targetFileSize &&\r\n              arrData instanceof Uint8Array &&\r\n              targetFileSize.size &&\r\n              arrData.length > targetFileSize.size\r\n            ) {\r\n              Log.verbose(\"Making truncated array copy of \" + file.fullPath + \" to size \" + targetFileSize.size);\r\n              arrData = arrData.subarray(0, targetFileSize.size);\r\n            }\r\n\r\n            const hash = crypto.createHash(\"MD5\");\r\n\r\n            hash.update(arrData);\r\n\r\n            targetFileSize.hash = hash.digest(\"base64\");\r\n\r\n            const pathHash = this.generatePathHash(targetFileSize);\r\n            let usingSourcePath = false;\r\n\r\n            if (listings) {\r\n              const fileListing = listings[pathHash];\r\n\r\n              if (fileListing && fileListing.sourcePath) {\r\n                targetFileSize.sourcePath = fileListing.sourcePath;\r\n                usingSourcePath = true;\r\n              }\r\n            }\r\n\r\n            if (!usingSourcePath) {\r\n              fs.writeFileSync(dirPath + file.name, arrData);\r\n\r\n              if (listings) {\r\n                listings[pathHash] = {\r\n                  size: targetFileSize.size,\r\n                  hash: targetFileSize.hash,\r\n                  path: targetFileSize.path,\r\n                  sourcePath: StorageUtilities.canonicalizePath(destStorageRelativePath + targetFileSize.path),\r\n                };\r\n              }\r\n            }\r\n          } else {\r\n            const hash = crypto.createHash(\"MD5\");\r\n\r\n            hash.update(file.content);\r\n\r\n            targetFileSize.hash = hash.digest(\"base64\");\r\n\r\n            const pathHash = this.generatePathHash(targetFileSize);\r\n            let usingSourcePath = false;\r\n\r\n            if (listings) {\r\n              const fileListing = listings[pathHash];\r\n\r\n              if (fileListing && fileListing.sourcePath) {\r\n                targetFileSize.sourcePath = fileListing.sourcePath;\r\n                usingSourcePath = true;\r\n              }\r\n            }\r\n\r\n            if (!usingSourcePath) {\r\n              fs.writeFileSync(dirPath + file.name, file.content, { encoding: \"utf8\" });\r\n\r\n              if (listings) {\r\n                listings[pathHash] = {\r\n                  size: targetFileSize.size,\r\n                  hash: targetFileSize.hash,\r\n                  path: targetFileSize.path,\r\n                  sourcePath: StorageUtilities.canonicalizePath(destStorageRelativePath + targetFileSize.path),\r\n                };\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (copyPath === undefined) {\r\n      copyPath = \"\";\r\n    }\r\n\r\n    for (const folderName in this.folders) {\r\n      const nf = this.folders[folderName] as NodeFolder;\r\n\r\n      if (nf && !nf.errorStatus) {\r\n        await nf.copyContentsTo(\r\n          destRootPath,\r\n          fileInclusionList,\r\n          addFilesToInclusionList,\r\n          listings,\r\n          destStorageRelativePath,\r\n          copyPath + folderName + NodeStorage.platformFolderDelimiter\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  async saveFilesList(pathDescriptor: string, inclusionList: IFilePathAndSize[]) {\r\n    const obj: IListingsFile = { path: pathDescriptor, files: inclusionList };\r\n\r\n    fs.writeFileSync(NodeStorage.ensureEndsWithDelimiter(this.fullPath) + \"files.json\", JSON.stringify(obj, null, 2), {\r\n      encoding: \"utf8\",\r\n    });\r\n  }\r\n\r\n  async copyContentsOut(destFolder: IFolder) {\r\n    await this.load(true);\r\n\r\n    if (this.files[\"files.json\"] !== undefined) {\r\n      const file = this.files[\"files.json\"];\r\n\r\n      if (!file.isContentLoaded) {\r\n        await file.loadContent(false);\r\n      }\r\n\r\n      const obj: IListingsFile | undefined = StorageUtilities.getJsonObject(file);\r\n\r\n      if (obj && obj.files) {\r\n        for (const fileInfo of obj.files) {\r\n          if (fileInfo.hash && fileInfo.size && fileInfo.path) {\r\n            let file: IFile | undefined;\r\n\r\n            if (fileInfo.sourcePath) {\r\n              file = await this.storage.rootFolder.getFileFromRelativePath(\r\n                StorageUtilities.ensureStartsWithDelimiter(fileInfo.sourcePath)\r\n              );\r\n            } else {\r\n              file = await this.getFileFromRelativePath(StorageUtilities.ensureStartsWithDelimiter(fileInfo.path));\r\n            }\r\n\r\n            if (file) {\r\n              if (!file.isContentLoaded) {\r\n                await file.loadContent();\r\n              }\r\n\r\n              if (file.content !== null) {\r\n                const targetFile = await destFolder.ensureFileFromRelativePath(\r\n                  StorageUtilities.ensureStartsWithDelimiter(fileInfo.path)\r\n                );\r\n\r\n                if (targetFile) {\r\n                  // Log.verbose(\"Copying file '\" + file.fullPath + \"' out to '\" + targetFile.fullPath + \"'\");\r\n                  targetFile.setContent(file.content);\r\n                }\r\n              }\r\n            } else {\r\n              Log.debug(\"Could not find expected backup file '\" + fileInfo.path + \"' in \" + this.fullPath);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      Log.debug(\"Could not find files.json in \" + this.fullPath);\r\n    }\r\n\r\n    await destFolder.saveAll();\r\n  }\r\n\r\n  async createFile(name: string): Promise<IFile> {\r\n    return this.ensureFile(name);\r\n  }\r\n\r\n  loadSync(force?: boolean): Date {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    // Log.debug(\"Reading details on folder '\" + this.fullPath + \"'\");\r\n\r\n    if (fs.existsSync(this.fullPath)) {\r\n      const results = fs.readdirSync(this.fullPath);\r\n\r\n      results.forEach((fileOrFolderName: string) => {\r\n        let filePath = this.fullPath;\r\n\r\n        if (!filePath.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n          filePath += NodeStorage.platformFolderDelimiter;\r\n        }\r\n\r\n        filePath += fileOrFolderName;\r\n\r\n        try {\r\n          const stat = fs.statSync(filePath);\r\n          if (stat.isDirectory() && !StorageUtilities.isIgnorableFolder(fileOrFolderName)) {\r\n            this.ensureFolder(fileOrFolderName);\r\n          } else if (stat.isFile() && StorageUtilities.isUsableFile(filePath)) {\r\n            const file = this.ensureFile(fileOrFolderName);\r\n\r\n            if (stat.mtime) {\r\n              file.modifiedAtLoad = new Date(stat.mtime);\r\n            }\r\n          }\r\n        } catch (e: any) {\r\n          this.errorStatus = FolderErrorStatus.unreadable;\r\n          Log.error(\"Error opening folder '\" + filePath + \"': \" + e.toString());\r\n        }\r\n      });\r\n    }\r\n\r\n    this.updateLastLoadedOrSaved();\r\n\r\n    return this.lastLoadedOrSaved as Date;\r\n  }\r\n\r\n  async load(force?: boolean): Promise<Date> {\r\n    if (this.lastLoadedOrSaved != null && !force) {\r\n      return this.lastLoadedOrSaved;\r\n    }\r\n\r\n    return this.loadSync(force);\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * NodeStorage.ts\r\n *\r\n * ARCHITECTURE DOCUMENTATION\r\n * ==========================\r\n *\r\n * NodeStorage is the local file system implementation of IStorage for Node.js environments.\r\n * It provides real-time file system watching using Node.js fs.watch() API.\r\n *\r\n * FILE SYSTEM WATCHING:\r\n * ---------------------\r\n * - startWatching(): Begins recursive watching of the storage root folder\r\n * - stopWatching(): Stops a specific watcher by ID\r\n * - stopAllWatching(): Stops all watchers on this storage\r\n *\r\n * When file changes are detected:\r\n * 1. fs.watch() callback fires with filename and event type\r\n * 2. NodeStorage determines if it's a file or folder change\r\n * 3. Appropriate notify*() method is called on StorageBase\r\n * 4. Events propagate to listeners (HttpServer, etc.)\r\n *\r\n * DEBOUNCING:\r\n * -----------\r\n * File system events can fire multiple times for a single logical change.\r\n * We debounce events by path, waiting 100ms after the last event before\r\n * processing to coalesce rapid-fire events.\r\n *\r\n * PIPELINE INTEGRATION:\r\n * ---------------------\r\n * NodeStorage (this) -> HttpServer (traps events) -> WebSocket -> HttpStorage -> MCWorld -> WorldView\r\n *\r\n * RELATED FILES:\r\n * --------------\r\n * - IStorageWatcher.ts: Watcher interface definition\r\n * - NodeFolder.ts: Folder implementation (also supports watching)\r\n * - NodeFile.ts: File implementation\r\n * - HttpServer.ts: Traps events and broadcasts via WebSocket\r\n */\r\n\r\nimport NodeFolder from \"./NodeFolder\";\r\nimport StorageBase from \"../storage/StorageBase\";\r\nimport IStorage from \"../storage/IStorage\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport NodeFile from \"./NodeFile\";\r\nimport ZipStorage from \"../storage/ZipStorage\";\r\nimport IFolder from \"../storage/IFolder\";\r\nimport Log from \"../core/Log\";\r\nimport { IWatchableStorage, IStorageChangeEvent } from \"../storage/IStorageWatcher\";\r\nimport { EventDispatcher } from \"ste-events\";\r\n\r\n/** Default debounce delay for file system events in milliseconds */\r\nconst WATCHER_DEBOUNCE_MS = 100;\r\n\r\nexport default class NodeStorage extends StorageBase implements IStorage, IWatchableStorage {\r\n  rootPath: string;\r\n  name: string;\r\n\r\n  rootFolder: NodeFolder;\r\n\r\n  static platformFolderDelimiter = path.sep;\r\n\r\n  /** Active file system watchers, keyed by watcher ID */\r\n  private _watchers: Map<string, fs.FSWatcher[]> = new Map();\r\n\r\n  /** Debounce timers for coalescing rapid file system events */\r\n  private _debounceTimers: Map<string, NodeJS.Timeout> = new Map();\r\n\r\n  /** Counter for generating unique watcher IDs */\r\n  private _watcherIdCounter = 0;\r\n\r\n  /** Event dispatcher for storage change events */\r\n  #onStorageChange = new EventDispatcher<NodeStorage, IStorageChangeEvent>();\r\n\r\n  get folderDelimiter() {\r\n    return path.sep;\r\n  }\r\n\r\n  get isWatching(): boolean {\r\n    return this._watchers.size > 0;\r\n  }\r\n\r\n  public get onStorageChange() {\r\n    return this.#onStorageChange.asEvent();\r\n  }\r\n\r\n  constructor(incomingPath: string, name: string) {\r\n    super();\r\n\r\n    if (NodeStorage.platformFolderDelimiter === \"\\\\\") {\r\n      incomingPath = incomingPath.replace(/\\//gi, NodeStorage.platformFolderDelimiter);\r\n      incomingPath = incomingPath.replace(/\\\\\\\\/gi, \"\\\\\");\r\n    } else if (NodeStorage.platformFolderDelimiter === \"/\") {\r\n      incomingPath = incomingPath.replace(/\\\\/gi, NodeStorage.platformFolderDelimiter);\r\n      incomingPath = incomingPath.replace(/\\/\\//gi, NodeStorage.platformFolderDelimiter);\r\n    }\r\n\r\n    this.rootPath = incomingPath;\r\n    this.name = name;\r\n\r\n    this.rootFolder = new NodeFolder(this, null, incomingPath, name);\r\n  }\r\n\r\n  joinPath(pathA: string, pathB: string) {\r\n    let fullPath = pathA;\r\n\r\n    if (!fullPath.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      fullPath += NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    fullPath += pathB;\r\n\r\n    return fullPath;\r\n  }\r\n\r\n  static async createFromPath(path: string): Promise<NodeFile | NodeFolder> {\r\n    const lastDot = path.lastIndexOf(\".\");\r\n    let lastSlash = path.lastIndexOf(\"/\");\r\n    let lastBackslash = path.lastIndexOf(\"\\\\\");\r\n\r\n    if (lastBackslash > lastSlash) {\r\n      lastSlash = lastBackslash;\r\n    }\r\n\r\n    if (lastDot > lastSlash) {\r\n      const ns = new NodeStorage(path.substring(0, lastSlash), \"\");\r\n\r\n      return (await ns.rootFolder.ensureFileFromRelativePath(path.substring(lastSlash))) as NodeFile;\r\n    } else {\r\n      const ns = new NodeStorage(path, \"\");\r\n\r\n      return ns.rootFolder;\r\n    }\r\n  }\r\n\r\n  static async createFromPathIncludingZip(path: string): Promise<IFolder | undefined> {\r\n    const content = await NodeStorage.createFromPath(path);\r\n\r\n    if (\r\n      content instanceof NodeFile &&\r\n      (path.endsWith(\".mcpack\") ||\r\n        path.endsWith(\".mcaddon\") ||\r\n        path.endsWith(\".mcworld\") ||\r\n        path.endsWith(\".zip\") ||\r\n        path.endsWith(\".mcproject\"))\r\n    ) {\r\n      const zs = await ZipStorage.loadFromFile(content);\r\n\r\n      return zs?.rootFolder;\r\n    }\r\n\r\n    if (content instanceof NodeFolder) {\r\n      return content;\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  static getParentFolderPath(parentPath: string) {\r\n    const lastDelim = parentPath.lastIndexOf(this.platformFolderDelimiter);\r\n\r\n    if (lastDelim < 0) {\r\n      return parentPath;\r\n    }\r\n\r\n    return parentPath.substring(0, lastDelim);\r\n  }\r\n\r\n  public static ensureEndsWithDelimiter(pth: string) {\r\n    if (!pth.endsWith(NodeStorage.platformFolderDelimiter)) {\r\n      pth = pth + NodeStorage.platformFolderDelimiter;\r\n    }\r\n\r\n    return pth;\r\n  }\r\n\r\n  public static ensureStartsWithDelimiter(pth: string) {\r\n    if (!pth.startsWith(NodeStorage.platformFolderDelimiter)) {\r\n      pth = NodeStorage.platformFolderDelimiter + pth;\r\n    }\r\n\r\n    return pth;\r\n  }\r\n\r\n  async getAvailable() {\r\n    this.available = true;\r\n\r\n    return this.available;\r\n  }\r\n\r\n  /**\r\n   * Start watching the storage for file system changes.\r\n   * Uses Node.js fs.watch() with recursive option where supported.\r\n   *\r\n   * @returns A unique watcher ID that can be used to stop this watcher\r\n   */\r\n  startWatching(): string {\r\n    const watcherId = `watcher-${++this._watcherIdCounter}`;\r\n    const watchers: fs.FSWatcher[] = [];\r\n\r\n    try {\r\n      // Create a recursive watcher on the root path\r\n      const watcher = fs.watch(this.rootPath, { recursive: true, persistent: false }, (eventType, filename) => {\r\n        if (filename) {\r\n          this._handleWatchEvent(watcherId, eventType, filename);\r\n        }\r\n      });\r\n\r\n      watcher.on(\"error\", (err) => {\r\n        Log.debug(`Watcher error for ${this.rootPath}: ${err.message}`);\r\n      });\r\n\r\n      watchers.push(watcher);\r\n      this._watchers.set(watcherId, watchers);\r\n\r\n      Log.verbose(`Started watching ${this.rootPath} with ID ${watcherId}`);\r\n    } catch (err: any) {\r\n      Log.debug(`Failed to start watcher for ${this.rootPath}: ${err.message}`);\r\n    }\r\n\r\n    return watcherId;\r\n  }\r\n\r\n  /**\r\n   * Stop a specific watcher by ID.\r\n   */\r\n  stopWatching(watcherId: string): void {\r\n    const watchers = this._watchers.get(watcherId);\r\n    if (watchers) {\r\n      for (const watcher of watchers) {\r\n        try {\r\n          watcher.close();\r\n        } catch (e) {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n      this._watchers.delete(watcherId);\r\n      Log.verbose(`Stopped watcher ${watcherId} for ${this.rootPath}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Stop all watchers on this storage.\r\n   */\r\n  stopAllWatching(): void {\r\n    for (const watchers of this._watchers.values()) {\r\n      for (const watcher of watchers) {\r\n        try {\r\n          watcher.close();\r\n        } catch (e) {\r\n          // Ignore close errors\r\n        }\r\n      }\r\n    }\r\n    this._watchers.clear();\r\n\r\n    // Clear all debounce timers\r\n    for (const timer of this._debounceTimers.values()) {\r\n      clearTimeout(timer);\r\n    }\r\n    this._debounceTimers.clear();\r\n\r\n    Log.verbose(`Stopped all watchers for ${this.rootPath}`);\r\n  }\r\n\r\n  /**\r\n   * Handle a file system watch event with debouncing.\r\n   */\r\n  private _handleWatchEvent(watcherId: string, eventType: string, filename: string): void {\r\n    // Create a debounce key based on the filename\r\n    const debounceKey = `${watcherId}:${filename}`;\r\n\r\n    // Clear any existing debounce timer for this path\r\n    const existingTimer = this._debounceTimers.get(debounceKey);\r\n    if (existingTimer) {\r\n      clearTimeout(existingTimer);\r\n    }\r\n\r\n    // Set a new debounce timer\r\n    const timer = setTimeout(() => {\r\n      this._debounceTimers.delete(debounceKey);\r\n      this._processWatchEvent(eventType, filename);\r\n    }, WATCHER_DEBOUNCE_MS);\r\n\r\n    this._debounceTimers.set(debounceKey, timer);\r\n  }\r\n\r\n  /**\r\n   * Process a debounced file system event.\r\n   */\r\n  private async _processWatchEvent(eventType: string, filename: string): Promise<void> {\r\n    try {\r\n      const fullPath = path.join(this.rootPath, filename);\r\n      const relativePath = \"/\" + filename.replace(/\\\\/g, \"/\");\r\n\r\n      // Check if the path exists\r\n      const exists = fs.existsSync(fullPath);\r\n\r\n      // Determine if it's a file or folder\r\n      let isFile = true;\r\n      let isDirectory = false;\r\n\r\n      if (exists) {\r\n        try {\r\n          const stat = fs.statSync(fullPath);\r\n          isFile = stat.isFile();\r\n          isDirectory = stat.isDirectory();\r\n        } catch (e) {\r\n          // If we can't stat it, assume it was removed\r\n          isFile = true;\r\n        }\r\n      }\r\n\r\n      // Determine change type\r\n      let changeType: \"added\" | \"modified\" | \"removed\";\r\n      if (!exists) {\r\n        changeType = \"removed\";\r\n      } else if (eventType === \"rename\") {\r\n        // \"rename\" can mean added or removed - we check existence above\r\n        changeType = \"added\";\r\n      } else {\r\n        changeType = \"modified\";\r\n      }\r\n\r\n      // Create and dispatch the storage change event\r\n      const changeEvent: IStorageChangeEvent = {\r\n        changeType,\r\n        path: relativePath,\r\n        isFile,\r\n        timestamp: new Date(),\r\n        source: \"fswatch\",\r\n      };\r\n\r\n      this.#onStorageChange.dispatch(this, changeEvent);\r\n\r\n      // Also dispatch the appropriate specific event\r\n      if (isFile) {\r\n        if (changeType === \"removed\") {\r\n          this.notifyFileRemoved(relativePath);\r\n        } else if (changeType === \"added\") {\r\n          // Get or create the file and notify\r\n          const file = await this.rootFolder.getFileFromRelativePath(relativePath);\r\n          if (file) {\r\n            this.notifyFileAdded(file);\r\n          }\r\n        } else {\r\n          // Modified - reload and notify\r\n          const file = await this.rootFolder.getFileFromRelativePath(relativePath);\r\n          if (file) {\r\n            await file.scanForChanges();\r\n          }\r\n        }\r\n      } else if (isDirectory) {\r\n        if (changeType === \"removed\") {\r\n          // Folder removed - find and notify\r\n          this.notifyFolderRemoved({ storageRelativePath: relativePath, name: path.basename(filename) } as any);\r\n        } else if (changeType === \"added\") {\r\n          // Folder added\r\n          const folder = await this.rootFolder.getFolderFromRelativePath(relativePath);\r\n          if (folder) {\r\n            this.notifyFolderAdded(folder);\r\n          }\r\n        }\r\n      }\r\n\r\n      Log.verbose(`Storage change: ${changeType} ${isFile ? \"file\" : \"folder\"} ${relativePath}`);\r\n    } catch (err: any) {\r\n      Log.debug(`Error processing watch event for ${filename}: ${err.message}`);\r\n    }\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * ImageCodecNode - Node.js-specific image encoding/decoding utilities\r\n *\r\n * ARCHITECTURE NOTES:\r\n * ------------------\r\n * This module provides Node.js-specific image handling using:\r\n * - pngjs: Synchronous PNG encoding/decoding\r\n * - zlib: PNG compression\r\n * - Buffer: Binary data handling\r\n *\r\n * This is separated from ImageCodec.ts to:\r\n * 1. Allow webpack to tree-shake Node.js-only code from browser bundles\r\n * 2. Avoid problematic eval('require') patterns\r\n * 3. Provide a clean API for Node.js consumers\r\n *\r\n * USAGE:\r\n * ------\r\n * This module is imported by ImageCodec.ts when running in Node.js.\r\n * Direct usage is also possible in Node.js-only code:\r\n *\r\n * ```typescript\r\n * import ImageCodecNode from \"./ImageCodecNode\";\r\n * const png = ImageCodecNode.decodePng(data);\r\n * ```\r\n *\r\n * IMPORTANT:\r\n * ----------\r\n * This file should ONLY be imported in Node.js contexts. Importing it in\r\n * browser code will cause bundling errors. Use ImageCodec.ts which\r\n * handles environment detection automatically.\r\n */\r\n\r\nimport { PNG } from \"pngjs\";\r\nimport * as zlib from \"zlib\";\r\nimport Log from \"../core/Log\";\r\nimport { IDecodedImage } from \"../core/ImageCodec\";\r\n\r\n/**\r\n * Node.js-specific image codec implementation.\r\n * Uses native Node.js modules (pngjs, zlib) for optimal performance.\r\n */\r\nexport default class ImageCodecNode {\r\n  // Cached CRC32 table for PNG encoding\r\n  private static _crc32Table: Uint32Array | undefined;\r\n\r\n  // ============================================================================\r\n  // PNG DECODING (Node.js)\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Decode PNG image data to RGBA pixels using pngjs.\r\n   * This is synchronous and only works in Node.js.\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Decoded image, or undefined if decoding fails\r\n   */\r\n  static decodePng(data: Uint8Array): IDecodedImage | undefined {\r\n    try {\r\n      const png = PNG.sync.read(Buffer.from(data));\r\n      return {\r\n        width: png.width,\r\n        height: png.height,\r\n        pixels: new Uint8Array(png.data),\r\n      };\r\n    } catch (e) {\r\n      Log.debug(`PNG decode (Node) failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Decode PNG image data asynchronously.\r\n   * Wraps the synchronous decoder in a Promise for API consistency.\r\n   *\r\n   * @param data Raw PNG file bytes\r\n   * @returns Promise resolving to decoded image, or undefined if decoding fails\r\n   */\r\n  static async decodePngAsync(data: Uint8Array): Promise<IDecodedImage | undefined> {\r\n    return this.decodePng(data);\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG ENCODING (Node.js)\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using pngjs.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @returns PNG file bytes, or undefined if encoding fails\r\n   */\r\n  static encodeToPng(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    try {\r\n      const png = new PNG({ width, height });\r\n      png.data = Buffer.from(pixels);\r\n      const buffer = PNG.sync.write(png);\r\n      return new Uint8Array(buffer);\r\n    } catch (e) {\r\n      Log.debug(`PNG encode (pngjs) failed: ${e}`);\r\n      // Fall back to manual encoding\r\n      return this.encodeToPngManual(pixels, width, height);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format using manual chunk creation.\r\n   * Used as fallback if pngjs encoding fails.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @returns PNG file bytes, or undefined if encoding fails\r\n   */\r\n  static encodeToPngManual(pixels: Uint8Array, width: number, height: number): Uint8Array | undefined {\r\n    try {\r\n      // PNG signature\r\n      const signature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\r\n\r\n      // IHDR chunk\r\n      const ihdr = new Uint8Array(13);\r\n      const ihdrView = new DataView(ihdr.buffer);\r\n      ihdrView.setUint32(0, width, false);\r\n      ihdrView.setUint32(4, height, false);\r\n      ihdr[8] = 8; // bit depth\r\n      ihdr[9] = 6; // color type (RGBA)\r\n      ihdr[10] = 0; // compression\r\n      ihdr[11] = 0; // filter\r\n      ihdr[12] = 0; // interlace\r\n\r\n      const ihdrChunk = this.createPngChunk(\"IHDR\", ihdr);\r\n\r\n      // IDAT chunk - raw pixel data with filter bytes\r\n      const rawData = new Uint8Array(height * (1 + width * 4));\r\n      for (let y = 0; y < height; y++) {\r\n        rawData[y * (1 + width * 4)] = 0; // filter byte (none)\r\n        for (let x = 0; x < width; x++) {\r\n          const srcIdx = (y * width + x) * 4;\r\n          const dstIdx = y * (1 + width * 4) + 1 + x * 4;\r\n          rawData[dstIdx] = pixels[srcIdx]; // R\r\n          rawData[dstIdx + 1] = pixels[srcIdx + 1]; // G\r\n          rawData[dstIdx + 2] = pixels[srcIdx + 2]; // B\r\n          rawData[dstIdx + 3] = pixels[srcIdx + 3]; // A\r\n        }\r\n      }\r\n\r\n      const compressed = zlib.deflateSync(rawData, { level: 6 });\r\n      const idatChunk = this.createPngChunk(\"IDAT\", new Uint8Array(compressed));\r\n\r\n      // IEND chunk\r\n      const iendChunk = this.createPngChunk(\"IEND\", new Uint8Array(0));\r\n\r\n      // Combine all chunks\r\n      const totalLength = signature.length + ihdrChunk.length + idatChunk.length + iendChunk.length;\r\n      const png = new Uint8Array(totalLength);\r\n      let offset = 0;\r\n      png.set(signature, offset);\r\n      offset += signature.length;\r\n      png.set(ihdrChunk, offset);\r\n      offset += ihdrChunk.length;\r\n      png.set(idatChunk, offset);\r\n      offset += idatChunk.length;\r\n      png.set(iendChunk, offset);\r\n\r\n      return png;\r\n    } catch (e) {\r\n      Log.debug(`PNG manual encoding failed: ${e}`);\r\n      return undefined;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Encode RGBA pixel data to PNG format asynchronously.\r\n   * Wraps the synchronous encoder in a Promise for API consistency.\r\n   *\r\n   * @param pixels RGBA pixel data (4 bytes per pixel)\r\n   * @param width Image width\r\n   * @param height Image height\r\n   * @returns Promise resolving to PNG file bytes\r\n   */\r\n  static async encodeToPngAsync(pixels: Uint8Array, width: number, height: number): Promise<Uint8Array | undefined> {\r\n    return this.encodeToPng(pixels, width, height);\r\n  }\r\n\r\n  // ============================================================================\r\n  // PNG CHUNK UTILITIES\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Create a PNG chunk with type, data, and CRC.\r\n   */\r\n  private static createPngChunk(type: string, data: Uint8Array): Uint8Array {\r\n    const length = data.length;\r\n    const chunk = new Uint8Array(4 + 4 + length + 4);\r\n    const view = new DataView(chunk.buffer);\r\n\r\n    // Length\r\n    view.setUint32(0, length, false);\r\n\r\n    // Type\r\n    for (let i = 0; i < 4; i++) {\r\n      chunk[4 + i] = type.charCodeAt(i);\r\n    }\r\n\r\n    // Data\r\n    chunk.set(data, 8);\r\n\r\n    // CRC32 of type + data\r\n    const crc = this.crc32(chunk.subarray(4, 8 + length));\r\n    view.setUint32(8 + length, crc, false);\r\n\r\n    return chunk;\r\n  }\r\n\r\n  /**\r\n   * Calculate CRC32 checksum for PNG chunk validation.\r\n   */\r\n  private static crc32(data: Uint8Array): number {\r\n    let crc = 0xffffffff;\r\n    const table = this.getCrc32Table();\r\n\r\n    for (let i = 0; i < data.length; i++) {\r\n      crc = table[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);\r\n    }\r\n\r\n    return (crc ^ 0xffffffff) >>> 0;\r\n  }\r\n\r\n  /**\r\n   * Get the CRC32 lookup table (lazy initialized).\r\n   */\r\n  private static getCrc32Table(): Uint32Array {\r\n    if (this._crc32Table) {\r\n      return this._crc32Table;\r\n    }\r\n\r\n    const table = new Uint32Array(256);\r\n    for (let i = 0; i < 256; i++) {\r\n      let c = i;\r\n      for (let j = 0; j < 8; j++) {\r\n        c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\r\n      }\r\n      table[i] = c;\r\n    }\r\n\r\n    this._crc32Table = table;\r\n    return table;\r\n  }\r\n\r\n  // ============================================================================\r\n  // DATA URL CONVERSION\r\n  // ============================================================================\r\n\r\n  /**\r\n   * Convert raw image bytes to a data URL using Node.js Buffer.\r\n   *\r\n   * @param data Image file bytes (PNG, JPEG, etc.)\r\n   * @param mimeType MIME type (e.g., \"image/png\")\r\n   * @returns Data URL string\r\n   */\r\n  static toDataUrl(data: Uint8Array, mimeType: string): string {\r\n    return `data:${mimeType};base64,${Buffer.from(data).toString(\"base64\")}`;\r\n  }\r\n}\r\n", "// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport IFile from \"../storage/IFile\";\r\nimport ILocalEnvironmentData from \"./ILocalEnvironmentData\";\r\nimport ISslConfig from \"./ISslConfig\";\r\nimport LocalUtilities from \"./LocalUtilities\";\r\nimport NodeStorage from \"./NodeStorage\";\r\nimport IFolder from \"./../storage/IFolder\";\r\nimport * as fs from \"fs\";\r\nimport Utilities from \"../core/Utilities\";\r\nimport * as crypto from \"crypto\";\r\nimport { threadId } from \"worker_threads\";\r\nimport Log, { LogItem, LogItemLevel } from \"../core/Log\";\r\n\r\nexport const consoleText_reset = \"\\x1b[0m\";\r\nexport const consoleText_bright = \"\\x1b[1m\";\r\nexport const consoleText_dim = \"\\x1b[2m\";\r\nexport const consoleText_underscore = \"\\x1b[4m\";\r\nexport const consoleText_blink = \"\\x1b[5m\";\r\nexport const consoleText_reverse = \"\\x1b[7m\";\r\nexport const consoleText_hidden = \"\\x1b[8m\";\r\n\r\nexport const consoleText_fgBlack = \"\\x1b[30m\";\r\nexport const consoleText_fgRed = \"\\x1b[31m\";\r\nexport const consoleText_fgGreen = \"\\x1b[32m\";\r\nexport const consoleText_fgYellow = \"\\x1b[33m\";\r\nexport const consoleText_fgBlue = \"\\x1b[34m\";\r\nexport const consoleText_fgMagenta = \"\\x1b[35m\";\r\nexport const consoleText_fgCyan = \"\\x1b[36m\";\r\nexport const consoleText_fgWhite = \"\\x1b[37m\";\r\nexport const consoleText_fgGray = \"\\x1b[90m\";\r\n\r\nexport const consoleText_bgBlack = \"\\x1b[40m\";\r\nexport const consoleText_bgRed = \"\\x1b[41m\";\r\nexport const consoleText_bgGreen = \"\\x1b[42m\";\r\nexport const consoleText_bgYellow = \"\\x1b[43m\";\r\nexport const consoleText_bgBlue = \"\\x1b[44m\";\r\nexport const consoleText_bgMagenta = \"\\x1b[45m\";\r\nexport const consoleText_bgCyan = \"\\x1b[46m\";\r\nexport const consoleText_bgWhite = \"\\x1b[47m\";\r\nexport const consoleText_bgGray = \"\\x1b[100m\";\r\n\r\nexport const OperationColors = [consoleText_fgGreen, consoleText_fgCyan, consoleText_fgBlue, consoleText_fgMagenta];\r\n\r\nexport default class LocalEnvironment {\r\n  #data: ILocalEnvironmentData;\r\n  public utilities: LocalUtilities;\r\n  #isLoaded: boolean = false;\r\n  #prefsStorage: NodeStorage;\r\n  #rootPrefFolder: IFolder;\r\n  #configFile: IFile;\r\n  #worldContainerStorage: NodeStorage;\r\n\r\n  logToStdError: boolean = false;\r\n  #displayInfo: boolean = false;\r\n  #displayVerbose: boolean = false;\r\n\r\n  _inmemTokenEncryptionPassword?: string;\r\n\r\n  _inmemDisplayReadOnlyPasscode?: string;\r\n  _inmemDisplayReadOnlySessionId?: string;\r\n\r\n  _inmemFullReadOnlyPasscode?: string;\r\n  _inmemFullReadOnlySessionId?: string;\r\n\r\n  _inmemUpdateStatePasscode?: string;\r\n  _inmemUpdateStateSessionId?: string;\r\n\r\n  _inmemAdminPasscode?: string;\r\n  _inmemAdminSessionId?: string;\r\n\r\n  // Experimental SSL config - intentionally not persisted to disk\r\n  private _sslConfig?: ISslConfig;\r\n\r\n  public get sslConfig(): ISslConfig | undefined {\r\n    return this._sslConfig;\r\n  }\r\n\r\n  public set sslConfig(config: ISslConfig | undefined) {\r\n    this._sslConfig = config;\r\n  }\r\n\r\n  public get pathMappings() {\r\n    if (this.#data.pathMappings === undefined) {\r\n      return {};\r\n    }\r\n\r\n    return this.#data.pathMappings;\r\n  }\r\n\r\n  public set pathMappings(newVal: { [path: string]: string } | undefined) {\r\n    this.#data.pathMappings = newVal;\r\n  }\r\n\r\n  public get displayInfo() {\r\n    return this.#displayInfo;\r\n  }\r\n\r\n  public set displayInfo(newInfoValue: boolean) {\r\n    this.#displayInfo = newInfoValue;\r\n  }\r\n\r\n  public get displayVerbose() {\r\n    return this.#displayVerbose;\r\n  }\r\n\r\n  public set displayVerbose(newVerboseValue: boolean) {\r\n    this.#displayVerbose = newVerboseValue;\r\n  }\r\n\r\n  public get worldContainerStorage() {\r\n    return this.#worldContainerStorage;\r\n  }\r\n\r\n  public get worldContainerPath() {\r\n    return this.#data.worldContainerPath;\r\n  }\r\n\r\n  public get serverHostPort() {\r\n    return this.#data.serverHostPort;\r\n  }\r\n\r\n  public set serverHostPort(newPort: number | undefined) {\r\n    if (newPort !== this.#data.serverHostPort) {\r\n      this.#data.serverHostPort = newPort;\r\n    }\r\n  }\r\n\r\n  public get serverDomainName() {\r\n    return this.#data.serverDomainName;\r\n  }\r\n\r\n  public set serverDomainName(newDomainName: string | undefined) {\r\n    if (newDomainName !== this.#data.serverDomainName) {\r\n      this.#data.serverDomainName = newDomainName;\r\n    }\r\n  }\r\n\r\n  public get serverTitle() {\r\n    return this.#data.serverTitle;\r\n  }\r\n\r\n  public set serverTitle(newTitle: string | undefined) {\r\n    if (newTitle !== this.#data.serverTitle) {\r\n      this.#data.serverTitle = newTitle;\r\n    }\r\n  }\r\n\r\n  public get serverMessageOfTheDay() {\r\n    return this.#data.serverMessageOfTheDay;\r\n  }\r\n\r\n  public set serverMessageOfTheDay(messageOfTheDay: string | undefined) {\r\n    if (messageOfTheDay !== this.#data.serverMessageOfTheDay) {\r\n      this.#data.serverMessageOfTheDay = messageOfTheDay;\r\n    }\r\n  }\r\n\r\n  public get allowedCorsOrigins() {\r\n    return this.#data.allowedCorsOrigins;\r\n  }\r\n\r\n  public set allowedCorsOrigins(newOrigins: string[] | undefined) {\r\n    if (newOrigins !== this.#data.allowedCorsOrigins) {\r\n      this.#data.allowedCorsOrigins = newOrigins;\r\n    }\r\n  }\r\n\r\n  get tokenEncryptionKey() {\r\n    if (this._inmemTokenEncryptionPassword === undefined) {\r\n      this._inmemTokenEncryptionPassword = this.generateRandomTokenPassword();\r\n    }\r\n\r\n    return this._inmemTokenEncryptionPassword;\r\n  }\r\n\r\n  get displayReadOnlyPasscode() {\r\n    return this._inmemDisplayReadOnlyPasscode; //this.#data.displayReadOnlyPasscode;\r\n  }\r\n\r\n  get displayReadOnlySessionId() {\r\n    return this._inmemDisplayReadOnlySessionId; //this.#data.displayReadOnlySessionId;\r\n  }\r\n\r\n  setDisplayReadOnlyPasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\r\n        \"Improperly formatted display read-only passcode. Passcodes should be 8 alphanumeric characters.\"\r\n      );\r\n    }\r\n\r\n    this._inmemDisplayReadOnlyPasscode = newPasscode;\r\n    this._inmemDisplayReadOnlySessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get fullReadOnlyPasscode() {\r\n    return this._inmemFullReadOnlyPasscode;\r\n  }\r\n\r\n  get fullReadOnlySessionId() {\r\n    return this._inmemFullReadOnlySessionId;\r\n  }\r\n\r\n  setFullReadOnlyPasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\"Improperly formatted full read-only passcode. Passcodes should be 8 alphanumeric characters.\");\r\n    }\r\n\r\n    this._inmemFullReadOnlyPasscode = newPasscode;\r\n    this._inmemFullReadOnlySessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get updateStatePasscode() {\r\n    return this._inmemUpdateStatePasscode;\r\n  }\r\n\r\n  get updateStateSessionId() {\r\n    return this._inmemUpdateStateSessionId;\r\n  }\r\n\r\n  setUpdateStatePasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\"Improperly formatted update passcode. Passcodes should be 8 alphanumeric characters.\");\r\n    }\r\n\r\n    this._inmemUpdateStatePasscode = newPasscode;\r\n    this._inmemUpdateStateSessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get adminPasscode() {\r\n    return this._inmemAdminPasscode;\r\n  }\r\n\r\n  get adminSessionId() {\r\n    return this._inmemAdminSessionId;\r\n  }\r\n\r\n  setAdminPasscodeAndRandomizeComplement(newPasscode: string | undefined) {\r\n    if (newPasscode === undefined) {\r\n      throw new Error();\r\n    }\r\n\r\n    newPasscode = newPasscode.toLowerCase();\r\n    newPasscode = newPasscode.replace(\"-\", \"\");\r\n\r\n    if (newPasscode.length !== 8 || !Utilities.isAlphaNumeric(newPasscode)) {\r\n      throw new Error(\"Improperly formatted admin passcode. Passcodes should be 8 alphanumeric characters.\");\r\n    }\r\n\r\n    this._inmemAdminPasscode = newPasscode;\r\n    this._inmemAdminSessionId = this.generateRandomPasscode();\r\n  }\r\n\r\n  get iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula() {\r\n    return this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula;\r\n  }\r\n\r\n  set iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula(\r\n    iAgreeValue: boolean | undefined\r\n  ) {\r\n    this.#data.iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula = iAgreeValue;\r\n  }\r\n\r\n  public constructor(subscribeToLog: boolean) {\r\n    this.#data = {};\r\n\r\n    this.load = this.load.bind(this);\r\n    this.save = this.save.bind(this);\r\n\r\n    this.utilities = new LocalUtilities();\r\n\r\n    this.handleNewLogMessage = this.handleNewLogMessage.bind(this);\r\n\r\n    if (subscribeToLog) {\r\n      Log.onItemAdded.subscribe(this.handleNewLogMessage);\r\n    }\r\n\r\n    if (!fs.existsSync(this.utilities.serverWorkingPath)) {\r\n      fs.mkdirSync(this.utilities.serverWorkingPath, { recursive: true });\r\n    }\r\n\r\n    this.#data.worldContainerPath = this.utilities.worldsWorkingPath;\r\n\r\n    if (this.utilities.worldsWorkingPath && !fs.existsSync(this.utilities.worldsWorkingPath)) {\r\n      fs.mkdirSync(this.utilities.worldsWorkingPath, { recursive: true });\r\n    }\r\n\r\n    this.#worldContainerStorage = new NodeStorage(this.utilities.worldsWorkingPath, \"\");\r\n\r\n    if (!fs.existsSync(this.utilities.cliWorkingPath)) {\r\n      fs.mkdirSync(this.utilities.cliWorkingPath, { recursive: true });\r\n    }\r\n\r\n    if (!fs.existsSync(this.utilities.envPrefsPath)) {\r\n      fs.mkdirSync(this.utilities.envPrefsPath, { recursive: true });\r\n    }\r\n\r\n    if (!fs.existsSync(this.utilities.packCachePath)) {\r\n      fs.mkdirSync(this.utilities.packCachePath, { recursive: true });\r\n    }\r\n\r\n    this.#prefsStorage = new NodeStorage(this.utilities.envPrefsPath, \"\");\r\n\r\n    this.#rootPrefFolder = this.#prefsStorage.rootFolder;\r\n\r\n    this.#configFile = this.#rootPrefFolder.ensureFile(\"envprefs.json\");\r\n  }\r\n\r\n  public setWorldContainerPath(newPath: string | undefined) {\r\n    if (newPath !== this.#data.worldContainerPath) {\r\n      this.#data.worldContainerPath = newPath;\r\n\r\n      if (newPath) {\r\n        if (!fs.existsSync(newPath)) {\r\n          fs.mkdirSync(newPath, { recursive: true });\r\n        }\r\n\r\n        this.#worldContainerStorage = new NodeStorage(newPath, \"\");\r\n      }\r\n    }\r\n  }\r\n\r\n  handleNewLogMessage(log: Log, item: LogItem) {\r\n    if (item.level === LogItemLevel.verbose && !this.displayVerbose) {\r\n      return;\r\n    }\r\n\r\n    // In MCP/stdio mode, only send errors and important messages to stderr.\r\n    // Regular messages and debug output would show as [warning] in VS Code's\r\n    // MCP output panel, which is confusing for users.\r\n    if (this.logToStdError) {\r\n      let context = \"\";\r\n      if (item.context && item.context.length > 0) {\r\n        context = item.context + \" \";\r\n      }\r\n\r\n      if (item.level === LogItemLevel.error) {\r\n        console.error(consoleText_fgRed + context + \"Error: \" + item.message + consoleText_reset);\r\n      } else if (item.level === LogItemLevel.important) {\r\n        console.error(consoleText_fgYellow + context + item.message + consoleText_reset);\r\n      }\r\n      // Suppress message/verbose/debug in MCP mode \u2014 they're not actionable\r\n      return;\r\n    }\r\n\r\n    let context = \"\";\r\n\r\n    if (this.displayVerbose) {\r\n      context = threadId + \": \";\r\n    }\r\n\r\n    if (item.context && item.context.length > 0) {\r\n      context = item.context + \" \";\r\n    }\r\n\r\n    if (item.level === LogItemLevel.verbose) {\r\n      console.log(consoleText_fgGray + context + item.message + consoleText_reset);\r\n    } else if (item.level === LogItemLevel.error) {\r\n      console.error(consoleText_fgRed + context + \"Error: \" + item.message + consoleText_reset);\r\n    } else if (item.level === LogItemLevel.important) {\r\n      // NOTE: This is the Log framework's own output handler \u2014 using Log.important()\r\n      // here would cause infinite recursion. console.log with yellow coloring is intentional.\r\n      console.log(consoleText_fgYellow + context + \"Important: \" + item.message + consoleText_reset);\r\n    } else {\r\n      console.log(context + item.message);\r\n    }\r\n  }\r\n\r\n  async load() {\r\n    if (this.#isLoaded) {\r\n      return;\r\n    }\r\n\r\n    if (!this.#configFile.isContentLoaded) {\r\n      await this.#configFile.loadContent(false);\r\n    }\r\n\r\n    if (\r\n      this.#configFile.content !== null &&\r\n      this.#configFile.content !== undefined &&\r\n      typeof this.#configFile.content === \"string\"\r\n    ) {\r\n      this.#data = JSON.parse(this.#configFile.content as string);\r\n    }\r\n\r\n    this.#isLoaded = true;\r\n  }\r\n\r\n  async setDefaults() {\r\n    await this.load();\r\n\r\n    if (this.#data.serverDomainName === undefined) {\r\n      this.#data.serverDomainName = \"localhost\";\r\n    }\r\n\r\n    if (this.#data.serverHostPort === undefined) {\r\n      this.#data.serverHostPort = 6126;\r\n    }\r\n\r\n    if (this._inmemDisplayReadOnlyPasscode === undefined || this._inmemDisplayReadOnlySessionId === undefined) {\r\n      this.setDisplayReadOnlyPasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    if (this._inmemAdminPasscode === undefined || this._inmemAdminSessionId === undefined) {\r\n      this.setAdminPasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    if (this._inmemFullReadOnlyPasscode === undefined || this._inmemFullReadOnlySessionId === undefined) {\r\n      this.setFullReadOnlyPasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    if (this._inmemUpdateStatePasscode === undefined || this._inmemUpdateStateSessionId === undefined) {\r\n      this.setUpdateStatePasscodeAndRandomizeComplement(this.generateRandomPasscode());\r\n    }\r\n\r\n    await this.save();\r\n  }\r\n\r\n  generateRandomPasscode() {\r\n    let newPasscode = \"\";\r\n\r\n    for (let i = 0; i < 8; i++) {\r\n      const rand = crypto.randomInt(34); // don't include 0 and 1 to preclude O/I confusion\r\n\r\n      if (rand <= 7) {\r\n        newPasscode += String.fromCharCode(rand + 50);\r\n      } else {\r\n        newPasscode += String.fromCharCode(rand + 89); // 89 + 8 = starts at A range.\r\n      }\r\n    }\r\n\r\n    return newPasscode;\r\n  }\r\n\r\n  generateRandomTokenPassword() {\r\n    let newPasscode = \"\";\r\n\r\n    for (let i = 0; i < 12; i++) {\r\n      const rand = crypto.randomInt(36);\r\n\r\n      if (rand <= 9) {\r\n        newPasscode += String.fromCharCode(rand + 48);\r\n      } else {\r\n        newPasscode += String.fromCharCode(rand + 87); // 87 + 10 = starts at A range.\r\n      }\r\n    }\r\n\r\n    return newPasscode;\r\n  }\r\n\r\n  async save() {\r\n    const content = JSON.stringify(this.#data, null, 2);\r\n\r\n    this.#configFile.setContent(content);\r\n\r\n    this.#configFile.saveContent();\r\n  }\r\n}\r\n"],
  "mappings": "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AAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,K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AA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AA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AI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA;AAAA,UAGb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UACb,KAAK;AACH,mBAAO,IAAI;AAAA,UAEb;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,MAEA,eAAoB;AAClB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAAA,MAEA,aAAa,OAAkB;AAC7B,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAAA,MAEO,YAAY,IAAY,QAAkB;AAC/C,YAAI,KAAK,cAAc,QAAW;AAChC,eAAK,YAAY,IAAI,cAAc;AAAA,QACrC;AAEA,cAAM,KAAK,KAAK;AAEhB,gBAAQ,GAAG,YAAY,GAAG;AAAA;AAAA,UAExB,KAAK;AACH,eAAG,YAAY;AACf;AAAA,UACF,KAAK;AACH,eAAG,WAAW;AACd;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,YAAY;AACf;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA,UACF,KAAK;AACH,eAAG,mBAAmB;AACtB;AAAA;AAAA,UAGF,KAAK;AACH,iBAAK,SAAS;AACd;AAAA,UACF,KAAK;AACH,iBAAK,SAAS;AACd;AAAA,UACF,KAAK;AACH,iBAAK,SAAS;AACd;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,oBAAoB;AACvB;AAAA,UACF,KAAK;AACH,eAAG,oBAAoB;AACvB;AAAA,UACF,KAAK;AACH,eAAG,cAAc;AACjB;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,qBAAqB;AACxB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,qBAAqB;AACxB;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,YAAY;AACf;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,cAAc;AACjB;AAAA,UACF,KAAK;AACH,eAAG,iBAAiB;AACpB;AAAA,UACF,KAAK;AACH,eAAG,iBAAiB;AACpB;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,eAAe;AAClB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,cAAc;AACjB;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,MAAM;AACT;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA,UACF,KAAK;AACH,eAAG,oBAAoB;AACvB;AAAA,UACF,KAAK;AACH,eAAG,WAAW;AACd;AAAA,UACF,KAAK;AACH,eAAG,mBAAmB;AACtB;AAAA,UACF,KAAK;AACH,eAAG,cAAc;AACjB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,iBAAiB;AACpB;AAAA,UACF,KAAK;AACH,eAAG,YAAY;AACf;AAAA,UACF,KAAK;AACH,eAAG,oBAAoB;AACvB;AAAA,UACF,KAAK;AACH,eAAG,oBAAoB;AACvB;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,wBAAwB;AAC3B;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,cAAc;AACjB;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA,UACF,KAAK;AACH,eAAG,wBAAwB;AAC3B;AAAA,UACF,KAAK;AACH,eAAG,eAAe;AAClB;AAAA,UACF,KAAK;AACH,eAAG,qBAAqB;AACxB;AAAA,UACF,KAAK;AACH,eAAG,0BAA0B;AAC7B;AAAA,UACF,KAAK;AACH,eAAG,qBAAqB;AACxB;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,oBAAoB;AACvB;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,kBAAkB;AACrB;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,qBAAqB;AACxB;AAAA,UACF,KAAK;AACH,eAAG,qCAAqC;AACxC;AAAA,UACF,KAAK;AACH,eAAG,4BAA4B;AAC/B;AAAA,UACF,KAAK;AACH,eAAG,8BAA8B;AACjC;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,mBAAmB;AACtB;AAAA,UACF,KAAK;AACH,eAAG,yBAAyB;AAC5B;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,QAAQ;AACX;AAAA,UACF,KAAK;AACH,eAAG,mBAAmB;AACtB;AAAA,UACF,KAAK;AACH,eAAG,SAAS;AACZ;AAAA,UACF,KAAK;AACH,eAAG,aAAa;AAChB;AAAA,UACF,KAAK;AACH,eAAG,eAAe;AAClB;AAAA,UACF,KAAK;AACH,eAAG,YAAY;AACf;AAAA,UACF,KAAK;AACH,eAAG,SAAS;AACZ;AAAA,UACF,KAAK;AACH,eAAG,OAAO;AACV;AAAA,UACF,KAAK;AACH,eAAG,KAAK;AACR;AAAA,UACF,KAAK;AACH,eAAG,iBAAiB;AACpB;AAAA,UACF,KAAK;AACH,eAAG,WAAW;AACd;AAAA,UACF,KAAK;AACH,eAAG,WAAW;AACd;AAAA,UACF,KAAK;AACH,eAAG,YAAY;AACf;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,wBAAwB;AAC3B;AAAA,UACF,KAAK;AACH,eAAG,wBAAwB;AAC3B;AAAA,UACF,KAAK;AACH,eAAG,uBAAuB;AAC1B;AAAA,UACF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,mBAAmB;AACtB;AAAA,UACF,KAAK;AACH,eAAG,8BAA8B;AACjC;AAAA,UACF,KAAK;AACH,eAAG,iCAAiC;AACpC;AAAA,UACF,KAAK;AACH,eAAG,iCAAiC;AACpC;AAAA;AAAA,UAGF,KAAK;AACH,eAAG,sBAAsB;AACzB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,qBAAqB;AACxB;AAAA,UACF,KAAK;AACH,eAAG,0BAA0B;AAC7B;AAAA,UACF,KAAK;AACH,eAAG,mBAAmB;AACtB;AAAA,UACF,KAAK;AACH,eAAG,2BAA2B;AAC9B;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,gBAAgB;AACnB;AAAA,UACF,KAAK;AACH,eAAG,iBAAiB;AACpB;AAAA,UACF,KAAK;AACH,eAAG,YAAY;AACf;AAAA,UACF,KAAK;AACH,eAAG,WAAW;AACd;AAAA,QACJ;AAEA,aAAK,mBAAmB,SAAS,MAAM,EAAE;AAAA,MAC3C;AAAA,MAEA,MAAM,cAAc,OAAiB;AACnC,YAAK,KAAK,aAAa,CAAC,SAAW,KAAK,UAAU,UAAa,KAAK,YAAY,QAAY;AAC1F;AAAA,QACF;AAEA,YAAI,KAAK,OAAO;AACd,cAAI,CAAC,KAAK,MAAM,iBAAiB;AAC/B,kBAAM,KAAK,MAAM,YAAY;AAAA,UAC/B;AAEA,cAAI,KAAK,MAAM,YAAY,UAAa,EAAE,KAAK,MAAM,mBAAmB,aAAa;AACnF;AAAA,UACF;AACA,gBAAM,KAAK,cAAc,KAAK,MAAM,OAAO;AAAA,QAC7C;AAEA,YAAI,KAAK,SAAS;AAChB,gBAAM,KAAK,eAAe,KAAK,OAAO;AAAA,QACxC;AAAA,MACF;AAAA,MAEO,8BAA8B,SAAiB;AACpD,cAAM,OAAO,mBAAmB,kBAAkB,OAAO;AAEzD,mBAAW,OAAO,MAAM;AACtB,eAAK,mBAAmB,IAAI,MAAM,IAAI,SAAS,IAAI,IAAI;AAAA,QACzD;AAAA,MACF;AAAA,MAEO,8BAA8B,SAAiB;AACpD,cAAM,OAAO,mBAAmB,kBAAkB,OAAO;AAEzD,mBAAW,OAAO,MAAM;AACtB,eAAK,mBAAmB,IAAI,MAAM,IAAI,SAAS,IAAI,IAAI;AAAA,QACzD;AAAA,MACF;AAAA,MAEO,mBAAmB,QAAgBC,UAAmB,UAAkB,cAAuB;AACpG,YAAI,KAAK,uBAAuB,QAAW;AACzC,eAAK,qBAAqB,CAAC;AAAA,QAC7B;AAEA,YAAI,KAAK,6BAA6B,QAAW;AAC/C,eAAK,2BAA2B;AAAA,YAC9B,OAAO,CAAC;AAAA,UACV;AAAA,QACF;AAEA,YAAI,WAAW;AAEf,cAAM,KAAK,KAAK,gBAAgB,MAAM;AAEtC,YAAI,OAAO,QAAW;AACpB,eAAK,mBAAmB,KAAK;AAAA,YAC3B,SAAS;AAAA,YACT,SAASA;AAAA,YACT,UAAU;AAAA,UACZ,CAAC;AACD,qBAAW;AAAA,QACb;AAEA,cAAM,MAAM,KAAK,uBAAuB,MAAM;AAE9C,YAAI,QAAQ,QAAW;AACrB,eAAK,yBAAyB,MAAM,KAAK;AAAA,YACvC,MAAM;AAAA,YACN,SAASA;AAAA,YACT,MAAM;AAAA,YACN,qBAAqB;AAAA,UACvB,CAAC;AACD,qBAAW;AAAA,QACb;AACA,eAAO;AAAA,MACT;AAAA,MAEO,gBAAgB,QAAgB;AACrC,YAAI,KAAK,uBAAuB,QAAW;AACzC,iBAAO;AAAA,QACT;AAEA,iBAAS,UAAU,eAAe,MAAM;AAExC,iBAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,gBAAM,UAAU,KAAK,mBAAmB,CAAC;AAEzC,cAAI,UAAU,eAAe,QAAQ,OAAO,MAAM,QAAQ;AACxD,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEO,uBAAuB,QAAgB;AAC5C,YAAI,KAAK,6BAA6B,QAAW;AAC/C,iBAAO;AAAA,QACT;AAEA,iBAAS,UAAU,eAAe,MAAM;AAExC,cAAM,QAAQ,KAAK,yBAAyB;AAE5C,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,WAAW,MAAM,CAAC;AAExB,cAAI,UAAU,eAAe,SAAS,IAAI,MAAM,QAAQ;AACtD,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,sBAAsB,GAAsB,GAAsB;AACvE,gBAAQ,EAAE,aAAa,SAAY,QAAQ,EAAE,aAAa,EAAE,aAAa,SAAY,QAAQ,EAAE;AAAA,MACjG;AAAA,MAEA,OAAO,6BAA6B,UAA+B;AACjE,iBAAQ,4BAA4B,QAAQ;AAE5C,eAAO,SAAS,KAAK,SAAQ,qBAAqB;AAAA,MACpD;AAAA,MAEA,OAAO,4BAA4B,UAA+B;AAChE,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAI,SAAS,CAAC,EAAE,aAAa,QAAW;AACtC,qBAAS,CAAC,EAAE,WAAW,IAAI;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,yBAAyB;AAC7B,YAAI,KAAK,wBAAwB,QAAW;AAC1C;AAAA,QACF;AAEA,cAAM,aAAa,KAAK;AAExB,YAAI,KAAK,uBAAuB,UAAa,KAAK,mBAAmB,WAAW,GAAG;AACjF,gBAAM,WAAW,2BAA2B,sBAAsB;AAClE;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,WAAW,2BAA2B,sBAAsB;AAEpF,YAAI,cAAc,SAAQ,yBAAyB,KAAK,kBAAkB;AAE1E,kBAAU,WAAW,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAEzD,kBAAU,YAAY;AAAA,MACxB;AAAA,MAEA,OAAO,yBAAyB,MAA2B;AACzD,YAAI,aAAkC,CAAC;AAEvC,cAAM,WAAW,SAAQ,6BAA6B,IAAI;AAE1D,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,qBAAW,KAAK;AAAA,YACd,SAAS,SAAS,CAAC,EAAE;AAAA,YACrB,SAAS,SAAS,CAAC,EAAE;AAAA,UACvB,CAAC;AAAA,QACH;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,+BAA+B;AACnC,YAAI,KAAK,wBAAwB,QAAW;AAC1C;AAAA,QACF;AAEA,cAAM,aAAa,KAAK;AAExB,YAAI,KAAK,6BAA6B,UAAa,KAAK,yBAAyB,MAAM,WAAW,GAAG;AACnG,gBAAM,WAAW,2BAA2B,6BAA6B;AACzE;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,WAAW,2BAA2B,6BAA6B;AAE3F,kBAAU,WAAW,KAAK,UAAU,KAAK,0BAA0B,MAAM,CAAC,CAAC;AAE3E,kBAAU,YAAY;AAAA,MACxB;AAAA,MAEO,mBAAmB,QAAgBA,UAAmB,UAAkB,cAAuB;AACpG,YAAI,KAAK,uBAAuB,QAAW;AACzC,eAAK,qBAAqB,CAAC;AAAA,QAC7B;AAEA,YAAI,KAAK,6BAA6B,QAAW;AAC/C,eAAK,2BAA2B;AAAA,YAC9B,OAAO,CAAC;AAAA,UACV;AAAA,QACF;AAEA,YAAI,WAAW;AAEf,cAAM,KAAK,KAAK,gBAAgB,MAAM;AAEtC,YAAI,OAAO,QAAW;AACpB,eAAK,mBAAmB,KAAK;AAAA,YAC3B,SAAS;AAAA,YACT,SAASA;AAAA,YACT,UAAU;AAAA,UACZ,CAAC;AACD,qBAAW;AAAA,QACb;AAEA,cAAM,MAAM,KAAK,uBAAuB,MAAM;AAE9C,YAAI,QAAQ,QAAW;AACrB,eAAK,yBAAyB,MAAM,KAAK;AAAA,YACvC,MAAM;AAAA,YACN,SAASA;AAAA,YACT,MAAM;AAAA,YACN,qBAAqB;AAAA,UACvB,CAAC;AACD,qBAAW;AAAA,QACb;AAEA,eAAO;AAAA,MACT;AAAA,MAEO,gBAAgB,QAAgB;AACrC,YAAI,KAAK,uBAAuB,QAAW;AACzC,iBAAO;AAAA,QACT;AAEA,iBAAS,UAAU,eAAe,MAAM;AAExC,iBAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,KAAK;AACvD,gBAAM,UAAU,KAAK,mBAAmB,CAAC;AAEzC,cAAI,UAAU,eAAe,QAAQ,OAAO,MAAM,QAAQ;AACxD,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEO,uBAAuB,QAAgB;AAC5C,YAAI,KAAK,6BAA6B,QAAW;AAC/C,iBAAO;AAAA,QACT;AAEA,iBAAS,UAAU,eAAe,MAAM;AAExC,cAAM,QAAQ,KAAK,yBAAyB;AAE5C,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,WAAW,MAAM,CAAC;AAExB,cAAI,UAAU,eAAe,SAAS,IAAI,MAAM,QAAQ;AACtD,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,yBAAyB;AAC7B,YAAI,KAAK,wBAAwB,QAAW;AAC1C;AAAA,QACF;AAEA,cAAM,aAAa,KAAK;AAExB,YAAI,KAAK,uBAAuB,UAAa,KAAK,mBAAmB,WAAW,GAAG;AACjF,gBAAM,WAAW,2BAA2B,sBAAsB;AAClE;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,WAAW,2BAA2B,sBAAsB;AAEpF,YAAI,cAAc,SAAQ,yBAAyB,KAAK,kBAAkB;AAE1E,kBAAU,WAAW,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAEzD,kBAAU,YAAY;AAAA,MACxB;AAAA,MAEA,MAAM,+BAA+B;AACnC,YAAI,KAAK,wBAAwB,QAAW;AAC1C;AAAA,QACF;AAEA,cAAM,aAAa,KAAK;AAExB,YAAI,KAAK,6BAA6B,UAAa,KAAK,yBAAyB,MAAM,WAAW,GAAG;AACnG,gBAAM,WAAW,2BAA2B,6BAA6B;AACzE;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,WAAW,2BAA2B,6BAA6B;AAE3F,kBAAU,WAAW,KAAK,UAAU,KAAK,0BAA0B,MAAM,CAAC,CAAC;AAE3E,kBAAU,YAAY;AAAA,MACxB;AAAA,MAEA,MAAM,cAAc,SAAqB;AACvC,YAAI,UAAU;AAEd,YAAI,KAAK,OAAO;AACd,cAAI,CAAC,KAAK,MAAM,sBAAsB;AACpC,iBAAK,MAAM,uBAAuB,IAAI,WAAW;AAEjD,iBAAK,MAAM,qBAAqB,gBAAgB,KAAK;AACrD,iBAAK,MAAM,qBAAqB,cAAc,KAAK,MAAM,eAAe;AAAA,UAC1E;AAEA,oBAAU,KAAK,MAAM;AAAA,QACvB,OAAO;AACL,eAAK,cAAc,IAAI,WAAW;AAClC,oBAAU,KAAK;AAAA,QACjB;AAEA,cAAM,QAAQ,mBAAmB,SAAS,KAAK,OAAO,IAAI;AAE1D,cAAM,aAAa,QAAQ;AAE3B,cAAM,KAAK,eAAe,UAAU;AAAA,MACtC;AAAA,MAEA,MAAM,mBAAmB,eAAgC;AACvD,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,KAAK,cAAc,KAAK;AAAA,QAChC;AAEA,aAAK,gBAAgB;AAErB,YAAI,KAAK,WAAW;AAClB,eAAK,UAAU,eAAe;AAC9B,cAAI,eAAe;AACjB,iBAAK,UAAU,uBAAuB,aAAa;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,MAEA,kBAAkB;AAChB,YAAI,KAAK,cAAc,QAAW;AAChC,eAAK,YAAY,IAAI,cAAc;AAAA,QACrC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,eAAe,YAAqB;AACxC,cAAM,eAAe,MAAM,WAAW,wBAAwB,gBAAgB;AAE9E,YAAI,iBAAiB,QAAW;AAC9B,cAAI,CAAC,KAAK,MAAM,iBAAiB;AAC/B,kBAAM,aAAa,YAAY;AAAA,UACjC;AAEA,cAAI,aAAa,YAAY,UAAa,aAAa,mBAAmB,YAAY;AACpF,iBAAK,YAAY,IAAI,cAAc;AAEnC,iBAAK,UAAU,iBAAiB,aAAa,OAAO;AAEpD,sBAAU,aAAa,MAAM,KAAK,SAAS;AAE3C,iBAAK,aAAa;AAAA,UACpB;AAAA,QACF;AAEA,cAAM,oBAAoB,MAAM,WAAW,wBAAwB,oBAAoB;AAEvF,YAAI,sBAAsB,QAAW;AACnC,cAAI,CAAC,kBAAkB,iBAAiB;AACtC,kBAAM,kBAAkB,YAAY;AAAA,UACtC;AAEA,cAAI,kBAAkB,YAAY,UAAa,OAAO,kBAAkB,YAAY,UAAU;AAC5F,iBAAK,OAAO,kBAAkB;AAAA,UAChC;AAAA,QACF;AAEA,cAAM,mBAAmB,MAAM,WAAW,wBAAwB,gBAAgB;AAElF,YAAI,qBAAqB,QAAW;AAClC,cAAI,CAAC,iBAAiB,iBAAiB;AACrC,kBAAM,iBAAiB,YAAY;AAAA,UACrC;AAEA,cAAI,iBAAiB,YAAY,UAAa,OAAO,iBAAiB,YAAY,UAAU;AAC1F,iBAAK,YAAY,iBAAiB,cAAc,gBAAgB;AAAA,UAClE;AAAA,QACF;AAEA,YAAI,YAAY,MAAM,WAAW,wBAAwB,sBAAsB;AAE/E,YAAI,cAAc,QAAW;AAC3B,cAAI,CAAC,UAAU,iBAAiB;AAC9B,kBAAM,UAAU,YAAY;AAAA,UAC9B;AAEA,cAAI,UAAU,YAAY,UAAa,OAAO,UAAU,YAAY,UAAU;AAC5E,gBAAI;AACF,mBAAK,qBAAqB,iBAAiB,cAAc,SAAS;AAAA,YACpE,QAAQ;AACN,mBAAK,WAAW,4CAA4C;AAC5D,mBAAK,qBAAqB;AAAA,YAC5B;AAAA,UACF;AAAA,QACF;AAEA,oBAAY,MAAM,WAAW,wBAAwB,sBAAsB;AAE3E,YAAI,cAAc,QAAW;AAC3B,cAAI,CAAC,UAAU,iBAAiB;AAC9B,kBAAM,UAAU,YAAY;AAAA,UAC9B;AAEA,cAAI,UAAU,YAAY,UAAa,OAAO,UAAU,YAAY,UAAU;AAC5E,gBAAI;AACF,mBAAK,qBAAqB,iBAAiB,cAAc,SAAS;AAAA,YACpE,QAAQ;AACN,mBAAK,WAAW,gDAAgD,UAAU,QAAQ;AAClF,mBAAK,qBAAqB;AAAA,YAC5B;AAAA,UACF;AAAA,QACF;AAEA,YAAI,kBAAkB,MAAM,WAAW,wBAAwB,6BAA6B;AAE5F,YAAI,oBAAoB,QAAW;AACjC,cAAI,CAAC,gBAAgB,iBAAiB;AACpC,kBAAM,gBAAgB,YAAY;AAAA,UACpC;AAEA,cAAI,gBAAgB,YAAY,UAAa,OAAO,gBAAgB,YAAY,UAAU;AACxF,gBAAI;AACF,mBAAK,2BAA2B,iBAAiB,cAAc,eAAe;AAAA,YAChF,QAAQ;AACN,mBAAK,WAAW,oDAAoD;AACpE,mBAAK,2BAA2B;AAAA,YAClC;AAAA,UACF;AAAA,QACF;AAEA,0BAAkB,MAAM,WAAW,wBAAwB,6BAA6B;AAExF,YAAI,oBAAoB,QAAW;AACjC,cAAI,CAAC,gBAAgB,iBAAiB;AACpC,kBAAM,gBAAgB,YAAY;AAAA,UACpC;AAEA,cAAI,gBAAgB,YAAY,UAAa,OAAO,gBAAgB,YAAY,UAAU;AACxF,gBAAI;AACF,mBAAK,2BAA2B,iBAAiB,cAAc,eAAe;AAAA,YAChF,QAAQ;AACN,mBAAK,WAAW,yDAAyD,gBAAgB,QAAQ;AACjG,mBAAK,2BAA2B;AAAA,YAClC;AAAA,UACF;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,WAAW,wBAAwB,kBAAkB;AAE7E,YAAI,cAAc,QAAW;AAC3B,cAAI,CAAC,UAAU,iBAAiB;AAC9B,kBAAM,UAAU,YAAY;AAAA,UAC9B;AAEA,cAAI,UAAU,mBAAmB,YAAY;AAC3C,iBAAK,cAAc,UAAU,mBAAmB,UAAU,OAAO;AAAA,UACnE;AAAA,QACF;AAEA,aAAK,YAAY;AAEjB,aAAK,UAAU,SAAS,MAAM,IAAI;AAAA,MACpC;AAAA,MAEA,MAAM,YAAY,QAAiB,OAAO,SAAqD;AAC7F,YAAI,CAAC,SAAS,KAAK,eAAe;AAChC,iBAAO;AAAA,QACT;AAEA,cAAM,cAAc,SAAS,aAAa;AAC1C,aAAK,kBAAkB;AAGvB,YAAI,SAAS,qBAAqB,UAAa,aAAa;AAC1D,eAAK,cAAc,IAAI,gBAAgB,SAAS,oBAAoB,GAAK;AACzE,eAAK,YAAY,iBAAiB,CAAC,QAAQ,KAAK,cAAc,GAAG,CAAC;AAAA,QACpE;AAEA,cAAM,WAAW,MAAM,KAAK,UAAU,aAAa;AAAA,UACjD,kCAAkC,KAAK,OAAO;AAAA;AAAA,QAEhD;AAEA,cAAM,aAAa,KAAK;AAExB,YAAI,CAAC,YAAY;AACf,iBAAO;AAAA,QACT;AAEA,cAAM,WAAW,KAAK,KAAK;AAE3B,cAAM,WAAW,MAAM,WAAW,0BAA0B,KAAK;AAEjE,cAAM,aAAsB,CAAC;AAC7B,cAAM,aAAsB,CAAC;AAC7B,cAAM,kBAA2B,CAAC;AAElC,YAAI,UAAU;AACZ,gBAAM,SAAS,KAAK,KAAK;AAEzB,qBAAW,YAAY,SAAS,OAAO;AACrC,kBAAM,OAAO,SAAS,MAAM,QAAQ;AAEpC,gBAAI,MAAM;AACR,oBAAM,YAAY,iBAAiB,gBAAgB,KAAK,IAAI;AAE5D,kBAAI,SAAS,WAAW,UAAU,GAAG;AACnC,gCAAgB,KAAK,IAAI;AAAA,cAC3B,WAAW,cAAc,OAAO;AAE9B,2BAAW,KAAK,IAAI;AAAA,cACtB,WAAW,cAAc,OAAO;AAE9B,2BAAW,KAAK,IAAI;AAAA,cACtB;AAAA,YACF;AAAA,UACF;AACA,cAAI;AAAA,YACF,kCACE,WAAW,SACX,iBACA,WAAW,SACX,iBACA,gBAAgB,SAChB;AAAA,UACJ;AAAA,QACF,OAAO;AACL,cAAI,QAAQ,2CAA2C;AAAA,QACzD;AAEA,aAAK,UAAU,IAAI,QAAQ,YAAY,YAAY,iBAAiB,KAAK,IAAI;AAE7E,YAAI,aAAa;AAEf,gBAAM,KAAK,UAAU,aAAa;AAAA,YAChC,kCAAkC,KAAK,IAAI;AAAA;AAAA,UAE7C;AAEA,gBAAM,KAAK,QAAQ,SAAS;AAAA,YAC1B,iBAAiB;AAAA,YACjB,kBAAkB,SAAS;AAAA,UAC7B,CAAC;AAGD,gBAAM,aAAa,KAAK,QAAQ,OAAO,cAAc;AACrD,cAAI,cAAc;AAElB,gBAAM,KAAK,QAAQ,aAAa;AAAA,YAC9B,kBAAkB,CAAC,OAAO,SAAS,UAAU;AAC3C,4BAAc;AACd,oBAAM,UAAU,QAAQ,IAAI,KAAK,MAAO,UAAU,QAAS,GAAG,IAAI;AAClE,mBAAK,UAAU,aAAa,mBAAmB,GAAG,KAAK,QAAQ,OAAO,uBAA2B;AACjG,kBAAI,SAAS,kBAAkB;AAC7B,wBAAQ,iBAAiB,OAAO,SAAS,KAAK;AAAA,cAChD;AAAA,YACF;AAAA,YACA,uBAAuB;AAAA;AAAA,UACzB,CAAC;AAAA,QACH,OAAO;AAEL,gBAAM,gBAAgB,WAAW,SAAS,WAAW,SAAS,gBAAgB;AAC9E,cAAI,iBAAiB;AAErB,gBAAM,KAAK,QAAQ;AAAA,YACjB,OAAO,YAAmC;AACxC;AACA,oBAAM,UAAU,gBAAgB,IAAI,KAAK,MAAO,iBAAiB,gBAAiB,GAAG,IAAI;AACzF,oBAAM,KAAK,UAAU,aAAa;AAAA,gBAChC,iCAAiC,OAAO;AAAA;AAAA,cAE1C;AACA,kBAAI,SAAS,kBAAkB;AAC7B,wBAAQ,iBAAiB,6BAA6B,gBAAgB,aAAa;AAAA,cACrF;AAAA,YACF;AAAA,YACA,EAAE,uBAAuB,SAAS,0BAA0B,MAAM;AAAA,UACpE;AAAA,QACF;AAEA,kBAAU,aAAa,MAAM,KAAK,OAAO;AAEzC,YAAI,aAAa,QAAW;AAC1B,gBAAM,KAAK,UAAU,aAAa;AAAA,YAChC;AAAA,YACA,mCAAmC,KAAK,OAAO;AAAA;AAAA,UAEjD;AAAA,QACF;AAEA,eAAO,MAAM,KAAK,gBAAgB,KAAK,SAAS,OAAO;AAAA,MACzD;AAAA,MAEA,MAAM,gBAAgB,SAAkB,SAAqD;AAC3F,aAAK,UAAU;AAIf,YAAI,SAAS,oBAAoB;AAC/B,gBAAM,SAAS,MAAM,KAAK,uBAAuB,OAAO;AACxD,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AAAA,QACF,OAAO;AACL,gBAAM,SAAS,MAAM,KAAK,iBAAiB,OAAO;AAClD,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,aAAK,YAAY;AAEjB,aAAK,cAAc,SAAS,MAAM,IAAI;AAEtC,aAAK,gBAAgB;AACrB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,MAAc,uBAAuB,SAAqD;AACxF,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO;AAAA,QACT;AAEA,aAAK,SAAS,oBAAI,IAAI;AACtB,aAAK,aAAa;AAClB,aAAK,wBAAwB,oBAAI,IAAI;AACrC,aAAK,wBAAwB;AAC7B,aAAK,2BAA2B;AAEhC,cAAM,cAAc,MAAM,KAAK,UAAU,aAAa;AAAA,UACpD,iCAAiC,KAAK,OAAO;AAAA;AAAA,QAE/C;AAEA,cAAM,mBAAmB,MAAM,KAAK,KAAK,QAAQ,KAAK,KAAK,CAAC;AAC5D,cAAM,YAAY,iBAAiB;AACnC,YAAI,gBAAgB;AAGpB,cAAM,aAAa,oBAAI,IAAY;AAGnC,cAAM,gBAAgB,oBAAI,IAAsB;AAGhD,cAAM,sBAAsB,KAAK,IAAI,KAAM,KAAK,MAAM,YAAY,EAAE,CAAC;AAGrE,cAAM,gBAAgB;AAEtB,mBAAW,WAAW,kBAAkB;AACtC;AAGA,cAAI,gBAAgB,wBAAwB,GAAG;AAC7C,kBAAM,UAAU,YAAY,IAAI,KAAK,MAAO,gBAAgB,YAAa,GAAG,IAAI;AAChF,kBAAM,KAAK,UAAU,aAAa;AAAA,cAChC,4BAA4B,OAAO;AAAA;AAAA,YAErC;AACA,gBAAI,SAAS,kBAAkB;AAC7B,sBAAQ,iBAAiB,wBAAwB,eAAe,SAAS;AAAA,YAC3E;AAGA,gBAAI,gBAAgB,kBAAkB,GAAG;AACvC,oBAAM,IAAI,QAAQ,CAACC,aAAY,WAAWA,UAAS,CAAC,CAAC;AAAA,YACvD;AAAA,UACF;AAGA,cAAI,YAAY,wBAAwB;AACtC,kBAAMC,YAAW,KAAK,QAAQ,KAAK,IAAI,OAAO;AAE9C,gBAAIA,aAAY,OAAOA,cAAa,aAAaA,UAAS,OAAO;AAC/D,mBAAK,2BAA2BA,UAAS,KAAK;AAAA,YAChD,OAAO;AACL,mBAAK,2BAA2B;AAAA,YAClC;AACA;AAAA,UACF;AAMA,cACE,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,aAAa,KAChC,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,MAAM,KACzB,QAAQ,WAAW,aAAa,KAChC,QAAQ,WAAW,QAAQ,KAC3B,QAAQ,WAAW,SAAS,KAC5B,QAAQ,WAAW,YAAY,KAC/B,QAAQ,WAAW,mBAAmB,KACtC,QAAQ,WAAW,eAAe,KAClC,QAAQ,WAAW,OAAO,KAC1B,QAAQ,WAAW,kBAAkB,KACrC,QAAQ,WAAW,mBAAmB,KACtC,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,UAAU,KAC7B,QAAQ,WAAW,mBAAmB,KACtC,QAAQ,WAAW,cAAc,KACjC,QAAQ,WAAW,MAAM,KACzB,QAAQ,WAAW,YAAY,KAC/B,QAAQ,WAAW,aAAa,KAChC,QAAQ,WAAW,kBAAkB,KACrC,QAAQ,WAAW,gBAAgB,KACnC,QAAQ,WAAW,qBAAqB,KACxC,QAAQ,WAAW,wBAAwB,KAC3C,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,eAAe,KAClC,QAAQ,WAAW,cAAc,KACjC,QAAQ,WAAW,mBAAmB,KACtC,QAAQ,WAAW,mBAAmB,KACtC,QAAQ,WAAW,aAAa,KAChC,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,gBAAgB,KACnC,QAAQ,WAAW,iBAAiB,KACpC,QAAQ,WAAW,kBAAkB,KACrC,QAAQ,WAAW,mBAAmB,KACtC,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,sBAAsB,KACzC,QAAQ,WAAW,uBAAuB,KAC1C,QAAQ,WAAW,YAAY,KAC/B,QAAQ,WAAW,iBAAiB,KACpC,QAAQ,WAAW,oBAAoB,KACvC,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,sBAAsB,KACzC,QAAQ,WAAW,QAAQ,KAC3B,QAAQ,WAAW,MAAM,KACzB,QAAQ,WAAW,MAAM,KACzB,QAAQ,WAAW,aAAa,KAChC,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,QAAQ,KAC3B,QAAQ,WAAW,sBAAsB,GACzC;AACA;AAAA,UACF;AASA,cAAI,QAAQ,WAAW,KAAK,QAAQ,WAAW,MAAM,QAAQ,WAAW,MAAM,QAAQ,WAAW,IAAI;AACnG;AAAA,UACF;AAGA,gBAAM,WAAW,KAAK,QAAQ,KAAK,IAAI,OAAO;AAC9C,cAAI,CAAC,UAAU;AACb;AAAA,UACF;AAGA,cAAI,OAAO,aAAa,WAAW;AACjC;AAAA,UACF;AAEA,gBAAM,WAAW,SAAS;AAC1B,cAAI,CAAC,UAAU;AACb;AAAA,UACF;AAGA,cAAI,SAAS,UAAU,KAAK,SAAS,UAAU,IAAI;AACjD,kBAAM,oBAAoB,SAAS,UAAU;AAE7C,kBAAM,IAAI,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AACjG,kBAAM,IAAI,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AACjG,gBAAI,MAAM;AAEV,gBAAI,mBAAmB;AACrB,oBAAM,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI;AAG/F,mBAAK,sBAAsB,IAAI,GAAG;AAElC,kBAAI,MAAM,KAAK,MAAM,GAAG;AACtB;AAAA,cACF;AAAA,YACF,OAAO;AAEL,mBAAK,sBAAsB,IAAI,CAAC;AAAA,YAClC;AAGA,kBAAM,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACjC,gBAAI,CAAC,WAAW,IAAI,QAAQ,GAAG;AAC7B,yBAAW,IAAI,QAAQ;AACvB,mBAAK;AAGL,kBAAI,KAAK,UAAU,UAAa,IAAI,KAAK,KAAK,OAAO;AACnD,qBAAK,QAAQ,IAAI;AAAA,cACnB;AACA,kBAAI,KAAK,UAAU,WAAc,IAAI,KAAK,KAAK,KAAK,OAAO;AACzD,qBAAK,SAAS,IAAI,KAAK;AAAA,cACzB;AACA,kBAAI,KAAK,UAAU,UAAa,IAAI,KAAK,KAAK,OAAO;AACnD,qBAAK,QAAQ,IAAI;AAAA,cACnB;AACA,kBAAI,KAAK,UAAU,WAAc,IAAI,KAAK,KAAK,KAAK,OAAO;AACzD,qBAAK,SAAS,IAAI,KAAK;AAAA,cACzB;AAAA,YACF;AAGA,gBAAI,UAAU,cAAc,IAAI,QAAQ;AACxC,gBAAI,CAAC,SAAS;AACZ,wBAAU,CAAC;AACX,4BAAc,IAAI,UAAU,OAAO;AAAA,YACrC;AACA,oBAAQ,KAAK,OAAO;AAAA,UACtB;AAAA,QACF;AAGA,aAAK,kBAAkB;AAGvB,aAAK,iBAAiB;AAEtB,cAAM,KAAK,gBAAgB,WAAW;AAEtC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,iBAAiB,KAAa,GAAW,GAAmC;AAE1E,YAAI,SAAS,KAAK,OAAO,IAAI,GAAG;AAChC,YAAI,QAAQ;AACV,gBAAMC,UAAS,OAAO,IAAI,CAAC;AAC3B,cAAIA,SAAQ;AACV,kBAAM,WAAWA,QAAO,IAAI,CAAC;AAC7B,gBAAI,UAAU;AAEZ,kBAAI,KAAK,aAAa;AACpB,qBAAK,YAAY,OAAO,KAAK,GAAG,CAAC;AAAA,cACnC;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAGA,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO;AAAA,QACT;AAGA,cAAM,QAAQ,IAAI,WAAW,MAAM,GAAG,CAAC;AAGvC,cAAM,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACjC,cAAM,kBAAkB,KAAK,eAAe,IAAI,QAAQ;AAExD,YAAI,mBAAmB,gBAAgB,SAAS,GAAG;AAEjD,qBAAW,WAAW,iBAAiB;AACrC,kBAAM,WAAW,KAAK,QAAQ,KAAK,IAAI,OAAO;AAC9C,gBAAI,CAAC,YAAY,OAAO,aAAa,UAAW;AAChD,kBAAM,YAAY,QAAQ;AAAA,UAC5B;AAAA,QACF,WAAW,KAAK,eAAe,OAAO,GAAG;AAGvC,iBAAO;AAAA,QACT,OAAO;AAEL,gBAAM,SAAS,QAAQ;AACvB,qBAAW,CAAC,SAAS,QAAQ,KAAK,KAAK,QAAQ,MAAM;AACnD,gBAAI,CAAC,SAAU;AAEf,kBAAM,WAAW,SAAS;AAC1B,gBAAI,CAAC,SAAU;AACf,gBAAI,SAAS,SAAS,KAAK,SAAS,SAAS,GAAI;AAEjD,kBAAM,iBAAiB,SAAS,KAAK;AACrC,gBAAI,SAAS,WAAW,kBAAkB,SAAS,WAAW,iBAAiB,EAAG;AAElF,kBAAM,KAAK,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AAClG,kBAAM,KAAK,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AAElG,gBAAI,OAAO,KAAK,OAAO,EAAG;AAE1B,gBAAI,OAAO;AACX,gBAAI,UAAU,SAAS,UAAU,IAAI;AACnC,qBAAO,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI;AAAA,YAClG;AAEA,gBAAI,SAAS,IAAK;AAGlB,kBAAM,YAAY,QAAQ;AAAA,UAC5B;AAAA,QACF;AAGA,YAAI,CAAC,QAAQ;AACX,mBAAS,oBAAI,IAAI;AACjB,eAAK,OAAO,IAAI,KAAK,MAAM;AAAA,QAC7B;AAEA,YAAI,SAAS,OAAO,IAAI,CAAC;AACzB,YAAI,CAAC,QAAQ;AACX,mBAAS,oBAAI,IAAI;AACjB,iBAAO,IAAI,GAAG,MAAM;AAAA,QACtB;AAEA,eAAO,IAAI,GAAG,KAAK;AAGnB,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY,OAAO,KAAK,GAAG,CAAC;AAAA,QACnC;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBA,MAAM,aACJ,WACA,SAMe;AAEf,cAAM,yBAAyB,SAAS,0BAA0B;AAClE,cAAM,uBAAuB,SAAS,wBAAwB;AAC9D,cAAM,kBAAkB,SAAS;AACjC,YAAI,iBAAiB;AAErB,cAAM,YAAY,KAAK,OAAO,KAAK;AAEnC,mBAAW,YAAY,WAAW;AAChC,cAAI,oBAAoB,UAAa,aAAa,iBAAiB;AACjE;AAAA,UACF;AAEA,gBAAM,MAAM,KAAK,OAAO,IAAI,QAAQ;AACpC,cAAI,CAAC,KAAK;AACR;AAAA,UACF;AAEA,gBAAM,QAAQ,IAAI,KAAK;AACvB,qBAAW,oBAAoB,OAAO;AACpC,kBAAM,cAAc,IAAI,IAAI,gBAAgB;AAC5C,gBAAI,CAAC,aAAa;AAChB;AAAA,YACF;AAEA,kBAAM,QAAQ,YAAY,KAAK;AAC/B,uBAAW,UAAU,OAAO;AAC1B,oBAAM,QAAQ,YAAY,IAAI,MAAM;AACpC,kBAAI,CAAC,OAAO;AACV;AAAA,cACF;AAEA,oBAAM,UAAU,OAAO,kBAAkB,QAAQ,QAAQ;AACzD;AAGA,kBAAI,sBAAsB;AACxB,sBAAM,aAAa;AAAA,cACrB,WAAW,wBAAwB;AACjC,sBAAM,gBAAgB;AAAA,cACxB;AAIA,oBAAM,mBAAmB,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,aAAa,GAAG,CAAC;AACxE,kBAAI,SAAS,oBAAoB,iBAAiB,qBAAqB,GAAG;AACxE,sBAAM,QAAQ,iBAAiB,gBAAgB,KAAK,UAAU;AAAA,cAChE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,sBAAsB;AACpB,cAAM,YAAY,KAAK,OAAO,KAAK;AAEnC,mBAAW,YAAY,WAAW;AAChC,gBAAM,MAAM,KAAK,OAAO,IAAI,QAAQ;AACpC,cAAI,CAAC,KAAK;AACR;AAAA,UACF;AAEA,gBAAM,QAAQ,IAAI,KAAK;AACvB,qBAAW,KAAK,OAAO;AACrB,kBAAM,SAAS,IAAI,IAAI,CAAC;AACxB,gBAAI,CAAC,QAAQ;AACX;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO,KAAK;AAC1B,uBAAW,KAAK,OAAO;AACrB,oBAAM,QAAQ,OAAO,IAAI,CAAC;AAC1B,kBAAI,OAAO;AACT,sBAAM,gBAAgB;AAAA,cACxB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,mBAAmB;AACjB,YAAI,KAAK,SAAS;AAChB,eAAK,QAAQ,KAAK,MAAM;AAAA,QAC1B;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,eAAe;AAEb,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY,MAAM;AAAA,QACzB;AAGA,mBAAW,YAAY,KAAK,OAAO,KAAK,GAAG;AACzC,gBAAM,MAAM,KAAK,OAAO,IAAI,QAAQ;AACpC,cAAI,CAAC,IAAK;AAEV,qBAAW,KAAK,IAAI,KAAK,GAAG;AAC1B,kBAAM,SAAS,IAAI,IAAI,CAAC;AACxB,gBAAI,CAAC,OAAQ;AAEb,uBAAW,KAAK,OAAO,KAAK,GAAG;AAC7B,oBAAM,QAAQ,OAAO,IAAI,CAAC;AAC1B,kBAAI,OAAO;AACT,sBAAM,aAAa;AAAA,cACrB;AAAA,YACF;AACA,mBAAO,MAAM;AAAA,UACf;AACA,cAAI,MAAM;AAAA,QACZ;AACA,aAAK,OAAO,MAAM;AAGlB,aAAK,iBAAiB;AAGtB,aAAK,aAAa,CAAC;AAGnB,aAAK,gBAAgB;AACrB,aAAK,aAAa;AAClB,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,QAAQ;AAAA,MACf;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,iBAME;AACA,eAAO;AAAA,UACL,YAAY,KAAK;AAAA,UACjB,iBAAiB,KAAK,SAAS,KAAK,QAAQ;AAAA,UAC5C,YAAY,KAAK;AAAA,UACjB,gBAAgB,KAAK,aAAa;AAAA,UAClC,mBAAmB,KAAK,aAAa;AAAA,QACvC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,oBAAoB;AAClB,cAAM,YAAY,KAAK,OAAO,KAAK;AAEnC,mBAAW,YAAY,WAAW;AAChC,gBAAM,MAAM,KAAK,OAAO,IAAI,QAAQ;AACpC,cAAI,CAAC,KAAK;AACR;AAAA,UACF;AAEA,gBAAM,QAAQ,IAAI,KAAK;AACvB,qBAAW,KAAK,OAAO;AACrB,kBAAM,SAAS,IAAI,IAAI,CAAC;AACxB,gBAAI,CAAC,QAAQ;AACX;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO,KAAK;AAC1B,uBAAW,KAAK,OAAO;AACrB,oBAAM,QAAQ,OAAO,IAAI,CAAC;AAC1B,kBAAI,OAAO;AACT,sBAAM,aAAa;AAAA,cACrB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,aAAa,GAAW,GAAW,KAAc;AAC/C,cAAM,SAAS,KAAK,MAAM,IAAIP,aAAY;AAC1C,cAAM,SAAS,KAAK,MAAM,IAAIC,aAAY;AAC1C,cAAM,YAAY,OAAO;AAIzB,YAAI,KAAK,aAAa,WAAW,QAAQ,MAAM,MAAM,OAAO;AAC1D,iBAAO;AAAA,QACT;AAGA,cAAM,QAAQ,KAAK,iBAAiB,WAAW,QAAQ,MAAM;AAE7D,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,QACT;AAEA,eAAO,MAAM,aAAa,IAAI,SAASD,eAAc,IAAI,SAASC,aAAY;AAAA,MAChF;AAAA,MAEA,YAAY,GAAW,GAAW,KAAc;AAC9C,cAAM,SAAS,KAAK,MAAM,IAAID,aAAY;AAC1C,cAAM,SAAS,KAAK,MAAM,IAAIC,aAAY;AAC1C,cAAM,YAAY,OAAO;AAIzB,YAAI,KAAK,aAAa,WAAW,QAAQ,MAAM,MAAM,OAAO;AAC1D,iBAAO;AAAA,QACT;AAGA,cAAM,QAAQ,KAAK,iBAAiB,WAAW,QAAQ,MAAM;AAE7D,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,QACT;AAEA,eAAO,MAAM,YAAY,IAAI,SAASD,eAAc,IAAI,SAASC,aAAY;AAAA,MAC/E;AAAA,MAEA,YAAY,cAAsB,UAAyB;AACzD,cAAM,IAAI,IAAI,OAAO;AAErB,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,eAA8B,KAAc;AACnD,cAAM,SAAS,KAAK,MAAM,cAAc,IAAID,aAAY;AACxD,cAAM,SAAS,KAAK,MAAM,cAAc,IAAIC,aAAY;AACxD,cAAM,YAAY,OAAO;AAGzB,cAAM,QAAQ,KAAK,iBAAiB,WAAW,QAAQ,MAAM;AAE7D,YAAI,UAAU,QAAW;AACvB,iBAAO,IAAI,MAAM,KAAK;AAAA,QACxB;AAEA,YAAI,UAAU,cAAc,IAAI;AAChC,YAAI,UAAU,cAAc,IAAI;AAEhC,YAAI,UAAU,GAAG;AACf,qBAAW;AAAA,QACb;AAEA,YAAI,UAAU,GAAG;AACf,qBAAW;AAAA,QACb;AAEA,cAAM,QAAQ,MAAM,SAAS,SAAS,cAAc,GAAG,OAAO;AAE9D,YAAI,CAAC,OAAO;AACV,iBAAO,IAAI,MAAM,KAAK;AAAA,QACxB;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAc,iBAAiB,SAAmC;AAChE,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO;AAAA,QACT;AAEA,aAAK,SAAS,oBAAI,IAAI;AACtB,aAAK,aAAa;AAClB,aAAK,wBAAwB,oBAAI,IAAI;AACrC,aAAK,wBAAwB;AAC7B,aAAK,2BAA2B;AAEhC,cAAM,cAAc,MAAM,KAAK,UAAU,aAAa;AAAA,UACpD,mCAAmC,KAAK,OAAO;AAAA;AAAA,QAEjD;AAEA,cAAM,mBAAmB,MAAM,KAAK,KAAK,QAAQ,KAAK,KAAK,CAAC;AAC5D,cAAM,YAAY,iBAAiB;AACnC,YAAI,gBAAgB;AAIpB,cAAM,wBAAwB,SAAS,0BAA0B;AAGjE,cAAM,sBAAsB,KAAK,IAAI,KAAK,KAAK,MAAM,YAAY,GAAG,CAAC;AAGrE,cAAM,gBAAgB;AAEtB,mBAAW,WAAW,kBAAkB;AACtC,gBAAM,WAAW,KAAK,QAAQ,KAAK,IAAI,OAAO;AAE9C;AAGA,cAAI,gBAAgB,wBAAwB,GAAG;AAC7C,kBAAM,UAAU,YAAY,IAAI,KAAK,MAAO,gBAAgB,YAAa,GAAG,IAAI;AAChF,kBAAM,KAAK,UAAU,aAAa;AAAA,cAChC,sCAAsC,OAAO;AAAA;AAAA,YAE/C;AACA,gBAAI,SAAS,kBAAkB;AAC7B,sBAAQ,iBAAiB,oCAAoC,eAAe,SAAS;AAAA,YACvF;AAGA,gBAAI,gBAAgB,kBAAkB,GAAG;AACvC,oBAAM,IAAI,QAAQ,CAACI,aAAY,WAAWA,UAAS,CAAC,CAAC;AAAA,YACvD;AAAA,UACF;AAEA,cAAI,SAAS,+BAA+B,gBAAgB,QAAQ,6BAA6B;AAC/F,mBAAO;AAAA,UACT;AAEA,cAAI,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UAC9C,WAAW,QAAQ,WAAW,aAAa,GAAG;AAAA,UAC9C,WAAW,QAAQ,WAAW,WAAW,KAAK,UAAU;AACtD,kBAAM,iBAAiB,SAAS;AAEhC,gBAAI,gBAAgB;AAClB,oBAAM,YAAY,IAAI,UAAU;AAEhC,wBAAU,UAAU,KAAK,OAAO;AAEhC,wBAAU,WAAW,gBAAgB,MAAM,OAAO,GAAG,IAAI;AAEzD,mBAAK,iBAAiB;AAAA,YACxB;AAAA,UACF,WAAW,QAAQ,WAAW,WAAW,KAAK,UAAU;AACtD,kBAAM,iBAAiB,SAAS;AAEhC,gBAAI,gBAAgB;AAClB,oBAAM,YAAY,IAAI,UAAU;AAEhC,wBAAU,UAAU,KAAK,OAAO;AAEhC,wBAAU,WAAW,gBAAgB,MAAM,OAAO,GAAG,IAAI;AAEzD,mBAAK,aAAa;AAAA,YACpB;AAAA,UACF,WAAW,QAAQ,WAAW,kBAAkB,GAAG;AACjD,iBAAK,kBAAkB;AAAA,UACzB,WAAW,QAAQ,WAAW,mBAAmB,KAAK,UAAU;AAC9D,iBAAK,mBAAmB;AACxB,kBAAM,uBAAuB,SAAS;AAEtC,gBAAI,sBAAsB;AACxB,oBAAM,eAAe,IAAI,UAAU;AAEnC,2BAAa,UAAU,KAAK,OAAO;AAEnC,2BAAa,WAAW,sBAAsB,MAAM,OAAO,GAAG,IAAI;AAElE,kBAAI,aAAa,YAAY;AAC3B,sBAAM,WAAW,aAAa,WAAW,eAAe;AACxD,qBAAK,qBAAqB,CAAC;AAE3B,2BAAW,SAAS,UAAU;AAC5B,sBAAI,MAAM,QAAQ,UAAU,YAAY,MAAM,IAAI,GAAG;AACnD,yBAAK,mBAAmB,MAAM,IAAI,IAAI,CAAC;AAEvC,0BAAM,aAAa,MAAM,eAAe;AAExC,+BAAW,aAAa,YAAY;AAClC,0BACE,UAAU,QACV,UAAU,2BACV,UAAU,oBAAoB,MAAM,IAAI,KACxC,UAAU,oBAAoB,UAAU,IAAI,GAC5C;AACA,6BAAK,mBAAmB,MAAM,IAAI,EAAE,UAAU,IAAI,IAAI,UAAU;AAEhE,4BAAI,MAAM,SAAS,6BAA6B;AAC9C,+BAAK,iCAAiC;AAAA,wBACxC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,WAAW,QAAQ,WAAW,8BAA8B,KAAK,UAAU;AACzE,kBAAM,sBAAsB,SAAS;AAErC,gBAAI,qBAAqB;AACvB,oBAAM,iBAAiB,IAAI,UAAU;AAErC,6BAAe,UAAU,KAAK,OAAO;AAErC,6BAAe,WAAW,qBAAqB,MAAM,OAAO,IAAI,IAAI;AAEpE,mBAAK,sBAAsB;AAAA,YAC7B;AAAA,UACF,WAAW,YAAY,0BAA0B,UAAU;AACzD,gBAAI,SAAS,OAAO;AAClB,mBAAK,2BAA2B,SAAS,KAAK;AAAA,YAChD,OAAO;AACL,mBAAK,2BAA2B;AAAA,YAClC;AAAA,UACF,WAAW,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UACrD,WAAW,QAAQ,WAAW,MAAM,KAAK,UAAU;AACjD,kBAAM,WAAW,SAAS;AAE1B,gBAAI,UAAU;AACZ,oBAAM,IAAI,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AACjG,oBAAM,IAAI,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI;AAEnG,kBAAI;AAAA,gBACF,SAAS,WAAW,MAClB,SAAS,WAAW,MACpB,SAAS,WAAW,MACpB,SAAS,WAAW,MACpB,SAAS,WAAW,MACpB,SAAS,WAAW;AAAA,gBACtB,+BAA+B,SAAS,SAAS;AAAA,cACnD;AAEA,kBAAI,MAAM;AAEV,kBAAI,SAAS,UAAU,IAAI;AACzB,sBAAM,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI;AAE/F,oBAAI,OAAO,OAAO,KAAK,OAAO,GAAG,wCAAwC,MAAM,GAAG;AAAA,cACpF;AAEA,kBAAI,SAAS,KAAK,OAAO,IAAI,GAAG;AAEhC,kBAAI,CAAC,QAAQ;AACX,yBAAS,oBAAI,IAAI;AACjB,qBAAK,OAAO,IAAI,KAAK,MAAM;AAAA,cAC7B;AAEA,kBAAI,SAAS,OAAO,IAAI,CAAC;AAEzB,kBAAI,CAAC,QAAQ;AACX,yBAAS,oBAAI,IAAI;AACjB,uBAAO,IAAI,GAAG,MAAM;AAAA,cACtB;AAEA,kBAAI,KAAK,OAAO,IAAI,CAAC;AAErB,kBAAI,OAAO,QAAW;AACpB,qBAAK,IAAI,WAAW,MAAM,GAAG,CAAC;AAC9B,qBAAK;AAEL,uBAAO,IAAI,GAAG,EAAE;AAAA,cAClB;AAEA,kBAAI,SAAS,UAAU,QAAW;AAChC,sBAAM,gBAAgB,SAAS;AAC/B,oBAAI,cAAc,SAAS,KAAK,cAAc,SAAS,MAAM,GAAG;AAC9D,sBAAI,SAAS;AAEb,2BAAS,KAAK,GAAG,KAAK,cAAc,QAAQ,MAAM,GAAG;AACnD,8BAAU,UAAU,mBAAmB;AAAA,sBACrC,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,sBACpB,cAAc,KAAK,CAAC;AAAA,oBACtB,CAAC;AAAA,kBACH;AAEA,qBAAG,eAAe,MAAM;AAAA,gBAC1B,WAAW,cAAc,WAAW,GAAG;AAAA,gBAEvC;AAAA,cACF;AAAA,YACF;AAAA,UACF,WAAW,QAAQ,WAAW,aAAa,KAAK,UAAU;AACxD,kBAAM,WAAW,SAAS;AAE1B,gBAAI,YAAY,SAAS,WAAW,MAAM,SAAS,OAAO;AACxD,oBAAM,SAAS,UAAU,mBAAmB;AAAA,gBAC1C,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,cACb,CAAC;AAED,oBAAM,YAAY,IAAI,UAAU,QAAQ,SAAS,KAAK;AACtD,mBAAK,WAAW,MAAM,IAAI;AAAA,YAC5B,WAAW,YAAY,SAAS,WAAW,MAAM,SAAS,OAAO;AAC/D,oBAAM,SAAS,UAAU,mBAAmB;AAAA,gBAC1C,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,SAAS,EAAE;AAAA,cACb,CAAC;AAED,oBAAM,YAAY,IAAI,UAAU,QAAQ,SAAS,KAAK;AACtD,mBAAK,WAAW,MAAM,IAAI;AAAA,YAC5B,OAAO;AAAA,YAEP;AAAA,UACF,WAAW,QAAQ,WAAW,QAAQ,GAAG;AAAA,UACzC,WAAW,QAAQ,WAAW,SAAS,GAAG;AAAA,UAC1C,WAAW,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UACrD,WAAW,QAAQ,WAAW,UAAU,GAAG;AAAA,UAC3C,WAAW,QAAQ,WAAW,mBAAmB,GAAG;AAAA,UACpD,WAAW,QAAQ,WAAW,cAAc,GAAG;AAAA,UAC/C,WAAW,QAAQ,WAAW,MAAM,GAAG;AAAA,UACvC,WAAW,QAAQ,WAAW,YAAY,GAAG;AAAA,UAC7C,WAAW,QAAQ,WAAW,aAAa,GAAG;AAAA,UAC9C,WAAW,QAAQ,WAAW,kBAAkB,GAAG;AAAA,UACnD,WAAW,QAAQ,WAAW,gBAAgB,GAAG;AAAA,UACjD,WAAW,QAAQ,WAAW,qBAAqB,GAAG;AAAA,UACtD,WAAW,QAAQ,WAAW,wBAAwB,GAAG;AAAA,UACzD,WAAW,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UACrD,WAAW,QAAQ,WAAW,eAAe,GAAG;AAAA,UAChD,WAAW,QAAQ,WAAW,cAAc,GAAG;AAAA,UAC/C,WAAW,QAAQ,WAAW,mBAAmB,GAAG;AAAA,UACpD,WAAW,QAAQ,WAAW,mBAAmB,GAAG;AAAA,UACpD,WAAW,QAAQ,WAAW,aAAa,GAAG;AAAA,UAC9C,WAAW,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UACrD,WAAW,QAAQ,WAAW,gBAAgB,GAAG;AAAA,UACjD,WAAW,QAAQ,WAAW,iBAAiB,GAAG;AAAA,UAClD,WAAW,QAAQ,WAAW,kBAAkB,GAAG;AAAA,UACnD,WAAW,QAAQ,WAAW,eAAe,GAAG;AAAA,UAChD,WAAW,QAAQ,WAAW,mBAAmB,GAAG;AAAA,UACpD,WAAW,QAAQ,WAAW,WAAW,GAAG;AAAA,UAC5C,WAAW,QAAQ,WAAW,sBAAsB,GAAG;AAAA,UACvD,WAAW,QAAQ,WAAW,WAAW,GAAG;AAAA,UAC5C,WAAW,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UACrD,WAAW,QAAQ,WAAW,sBAAsB,GAAG;AAAA,UACvD,WAAW,QAAQ,WAAW,uBAAuB,GAAG;AAAA,UACxD,WAAW,QAAQ,WAAW,YAAY,GAAG;AAAA,UAC7C,WAAW,QAAQ,WAAW,iBAAiB,GAAG;AAAA,UAClD,WAAW,QAAQ,WAAW,oBAAoB,GAAG;AAAA,UACrD,WAAW,QAAQ,WAAW,WAAW,GAAG;AAAA,UAC5C,WAAW,QAAQ,WAAW,sBAAsB,GAAG;AAAA,UACvD,WAAW,QAAQ,WAAW,QAAQ,GAAG;AAAA,UACzC,WAAW,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAAA,UAC9C,WAAW,QAAQ,QAAQ,QAAQ,KAAK,GAAG;AAAA,UAC3C,WAAW,QAAQ,WAAW,WAAW,GAAG;AAAA,UAC5C,WAAW,QAAQ,WAAW,UAAU,GAAG;AAAA,UAC3C,WAAW,QAAQ,WAAW,UAAU,GAAG;AAAA,UAC3C,WAAW,QAAQ,WAAW,MAAM,GAAG;AAAA,UACvC,WAAW,QAAQ,WAAW,MAAM,GAAG;AAAA,UACvC,WAAW,QAAQ,WAAW,aAAa,GAAG;AAAA,UAC9C,WAAW,QAAQ,WAAW,WAAW,GAAG;AAAA,UAC5C,WAAW,QAAQ,WAAW,QAAQ,GAAG;AAAA,UACzC,WACE,aACC,QAAQ,WAAW,KAAK,QAAQ,WAAW,MAAM,QAAQ,WAAW,MAAM,QAAQ,WAAW,KAC9F;AACA,kBAAM,WAAW,SAAS;AAC1B,kBAAM,oBAAoB,QAAQ,UAAU;AAE5C,gBAAI,cAAc,QAAQ;AAE1B,gBAAI,UAAU;AACZ,oBAAM,IAAI,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AACjG,oBAAM,IAAI,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI;AACjG,kBAAI,MAAM;AAEV,kBAAI,mBAAmB;AACrB,sBAAM,cAAc,iBAAiB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI;AAG/F,qBAAK,sBAAsB,IAAI,GAAG;AAElC,oBAAI,MAAM,KAAK,MAAM,GAAG;AAGtB;AAAA,gBACF;AAAA,cACF,OAAO;AAEL,qBAAK,sBAAsB,IAAI,CAAC;AAAA,cAClC;AAEA,kBAAI,KAAK,UAAU,UAAa,IAAI,KAAK,KAAK,OAAO;AACnD,qBAAK,QAAQ,IAAI;AAAA,cACnB;AAEA,kBAAI,KAAK,UAAU,WAAc,IAAI,KAAK,KAAK,KAAK,OAAO;AACzD,qBAAK,SAAS,IAAI,KAAK;AAAA,cACzB;AAEA,kBAAI,KAAK,UAAU,UAAa,IAAI,KAAK,KAAK,OAAO;AACnD,qBAAK,QAAQ,IAAI;AAAA,cACnB;AAEA,kBAAI,KAAK,UAAU,WAAc,IAAI,KAAK,KAAK,KAAK,OAAO;AACzD,qBAAK,SAAS,IAAI,KAAK;AAAA,cACzB;AAEA,kBAAI,eAAe;AACnB,kBAAI,SAAS,KAAK,OAAO,IAAI,GAAG;AAEhC,kBAAI,CAAC,QAAQ;AACX,yBAAS,oBAAI,IAAI;AACjB,qBAAK,OAAO,IAAI,KAAK,MAAM;AAAA,cAC7B;AAEA,kBAAI,SAAS,OAAO,IAAI,CAAC;AAEzB,kBAAI,CAAC,QAAQ;AACX,yBAAS,oBAAI,IAAI;AACjB,uBAAO,IAAI,GAAG,MAAM;AAAA,cACtB;AAEA,kBAAI,KAAK,OAAO,IAAI,CAAC;AAErB,kBAAI,OAAO,QAAW;AACpB,qBAAK,IAAI,WAAW,MAAM,GAAG,CAAC;AAC9B,qBAAK;AACL,+BAAe;AACf,uBAAO,IAAI,GAAG,EAAE;AAAA,cAClB;AAEA,iBAAG,YAAY,QAAQ;AAEvB,kBAAI,KAAK,aAAa,QAAU,KAAK,cAAc;AACjD,sBAAM,eAAe,YAAY,IAAI,KAAK,MAAO,gBAAgB,YAAa,GAAG,IAAI;AACrF,sBAAM,KAAK,UAAU,aAAa;AAAA,kBAChC,eAAe,KAAK,aAAa,GAAI,gBAAgB,YAAY;AAAA;AAAA,gBAEnE;AAAA,cACF;AAAA,YACF;AAAA,UACF,WACE,aAAa,UACZ,QAAQ,WAAW,KAAK,QAAQ,WAAW,MAAM,QAAQ,WAAW,MAAM,QAAQ,WAAW,KAC9F;AAAA,UAIF,WAAW,aAAa,OAAO;AAAA,UAE/B,WAAW,aAAa,QAAW;AAAA,UAEnC,OAAO;AAAA,UAEP;AAIA,cAAI,uBAAuB;AACzB,iBAAK,QAAQ,KAAK,OAAO,OAAO;AAAA,UAClC;AAAA,QACF;AAEA,cAAM,KAAK,gBAAgB,WAAW;AAEtC,eAAO;AAAA,MACT;AAAA,MAEA,MAAc,gBAAgB,aAAsB;AAClD,YAAI,gBAAgB,QAAW;AAC7B,gBAAM,KAAK,UAAU,aAAa;AAAA,YAChC;AAAA,YACA,oCAAoC,KAAK,OAAO;AAAA;AAAA,UAElD;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAc,mBAAmB;AAC/B,YAAI,CAAC,KAAK,UAAU;AAClB;AAAA,QACF;AAEA,YAAI,KAAK,mBAAmB,QAAW;AAAA,QAkBvC;AAEA,YAAI,KAAK,gBAAgB;AACvB,gBAAM,UAAU,KAAK,iBAAiB;AAEtC,eAAK,eAAe,WAAW,OAAO;AAEtC,gBAAM,KAAK,eAAe,YAAY,KAAK;AAAA,QAC7C;AAAA,MACF;AAAA,MAEQ,mBAAmB;AACzB,cAAM,UAAoB,CAAC;AAE3B,gBAAQ,KAAK,kBAAkB,mBAAmB,mBAAmB,KAAK,IAAI,IAAI,MAAM;AACxF,YAAI,KAAK,SAAS;AAChB,gBAAM,aAAa,KAAK,QAAQ,QAAQ;AAExC,kBAAQ,KAAK,cAAc;AAC3B,qBAAW,aAAa,YAAY;AAClC,kBAAM,SAAS,KAAK,QAAQ,IAAI,SAAS;AAEzC,gBAAI,QAAQ;AACV,sBAAQ;AAAA,gBACN,SACE,mBAAmB,mBAAmB,OAAO,IAAI,IACjD,oBACA,OAAO,KAAK,IACZ,UACA,OAAO,KAAK,IACZ,SACA,OAAO,KAAK,IACZ;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAEA,kBAAQ,KAAK,KAAK;AAAA,QACpB;AAEA,gBAAQ,KAAK,GAAG;AAEhB,eAAO,QAAQ,KAAK,IAAI;AAAA,MAC1B;AAAA,MAEA,QAAQ,MAAqB,IAAmB,KAAc;AAC5D,cAAM,KAAK,IAAI,YAAY;AAE3B,YAAI,QAAQ,KAAK;AACjB,YAAI,OAAO;AACT,cAAI,QAAQ,KAAK,WAAW;AAC1B,oBAAQ,KAAK;AAAA,UACf;AAAA,QACF;AAEA,WAAG,iBAAiB,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC;AAE5F,cAAM,iBAAiB,KAAK,MAAM,KAAK,IAAI,EAAE;AAC7C,cAAM,eAAe,KAAK,MAAM,GAAG,IAAI,EAAE;AAEzC,cAAM,iBAAiB,KAAK,MAAM,KAAK,IAAI,EAAE;AAC7C,cAAM,eAAe,KAAK,MAAM,GAAG,IAAI,EAAE;AAEzC,YAAI,QAAQ;AACZ,YAAI,UAAU,KAAK,IAAI,iBAAiB,MAAM;AAC9C,YAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI;AAEtC,iBAAS,KAAK,gBAAgB,MAAM,cAAc,MAAM;AACtD,gBAAM,iBAAiB,KAAK,IAAI,OAAO,IAAI,KAAK,MAAM;AAEtD,cAAI,QAAQ;AACZ,cAAI,UAAU,KAAK,IAAI,iBAAiB,MAAM;AAC9C,cAAI,QAAQ,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI;AAEtC,mBAAS,KAAK,gBAAgB,MAAM,cAAc,MAAM;AACtD,kBAAM,SAAS,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,GAAG,IAAI,EAAE;AAErD,gBAAI,QAAQ;AACV,oBAAM,QAAQ,OAAO,IAAI,EAAE;AAC3B,oBAAM,iBAAiB,KAAK,IAAI,OAAO,IAAI,KAAK,MAAM;AAEtD,kBAAI,OAAO;AACT,sBAAM;AAAA,kBACJ;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,QAAQ;AAAA,kBACR,KAAK,IAAI,GAAG,IAAI,KAAK;AAAA,kBACrB,QAAQ;AAAA,kBACR;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,OAAO,gBAAgB;AACzB,uBAAS,KAAK;AACd,uBAAS,KAAK;AACd,uBAAS;AAAA,YACX,OAAO;AACL,uBAAS;AACT,uBAAS;AAAA,YACX;AAAA,UACF;AAEA,cAAI,OAAO,gBAAgB;AACzB,qBAAS,KAAK;AACd,qBAAS,KAAK;AACd,qBAAS;AAAA,UACX,OAAO;AACL,qBAAS;AACT,qBAAS;AAAA,UACX;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,gBAAgB,GAAW,GAAW,GAAW,KAAc;AAC7D,cAAM,OAAO,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC,GAAG,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC;AAEnE,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA,QACT;AAEA,cAAM,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC;AAExC,YAAI,SAAS,QAAW;AACtB,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,gBAAgB,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,MAChD;AAAA,IACF;AAAA;AAAA;;;ACr0HA,IAcY,4BAcS;AA5BrB;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEO,IAAK,6BAAL,kBAAKG,gCAAL;AACL,MAAAA,wDAAA,wBAAqB,OAArB;AACA,MAAAA,wDAAA,+BAA4B,OAA5B;AACA,MAAAA,wDAAA,wCAAqC,OAArC;AACA,MAAAA,wDAAA,qBAAkB,OAAlB;AACA,MAAAA,wDAAA,eAAY,OAAZ;AACA,MAAAA,wDAAA,sBAAmB,OAAnB;AANU,aAAAA;AAAA,OAAA;AAcZ,IAAqB,yBAArB,MAAiF;AAAA,MAC/E,KAAK;AAAA,MACL,QAAQ;AAAA,MAER,UAAU,MAAW,SAAyB;AAC5C,aAAK,kBAAkB,QAAQ,oBAAoB,KAAK,IAAI,yBAA0C;AAEtG,aAAK,2BAA2B,QAAQ;AAAA,UACtC,KAAK;AAAA,UACL;AAAA,QACF;AAEA,aAAK,qBAAqB,mBAAmB,iBAAiB,KAAK,wBAAwB;AAAA,MAC7F;AAAA,MAEA,MAAM,SAAS,aAAsD;AACnE,cAAM,QAA2B,CAAC;AAElC,YACE,YAAY,gCACZ,YAAY,mCACZ,YAAY,mCACZ;AACA,cAAI,UAA+B,MAAM,QAAQ,aAAa,WAAW;AAEzE,cAAI,CAAC,SAAS;AACZ,gBAAI,WAAW,kCAAkC;AACjD,mBAAO;AAAA,UACT;AAEA,gBAAM,QAAQ,cAAc,KAAK;AAEjC,gBAAM;AAAA,YACJ,IAAI;AAAA;AAAA,cAEF,KAAK;AAAA,cACL;AAAA,cACA,qBAAqB;AAAA,gBACnB;AAAA,gBACA;AAAA,cACF;AAAA,cACA;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ;AAAA,YACV;AAAA,UACF;AAEA,gBAAM;AAAA,YACJ,IAAI;AAAA;AAAA,cAEF,KAAK;AAAA,cACL;AAAA,cACA,qBAAqB;AAAA,gBACnB;AAAA,gBACA;AAAA,cACF;AAAA,cACA;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ;AAAA,YACV;AAAA,UACF;AAEA,gBAAM;AAAA,YACJ,IAAI;AAAA;AAAA,cAEF,KAAK;AAAA,cACL;AAAA,cACA,qBAAqB;AAAA,gBACnB;AAAA,gBACA;AAAA,cACF;AAAA,cACA;AAAA,cACA,QAAQ;AAAA,cACR,QAAQ;AAAA,YACV;AAAA,UACF;AAEA,cAAI,QAAQ,YAAY,QAAQ,SAAS,UAAU,QAAQ,SAAS,OAAO,mBAAmB;AAC5F,gBAAI,MAAW,QAAQ,SAAS,OAAO;AAEvC,gBAAI,IAAI,MAAM;AACZ,oBAAM,IAAI,KAAK,GAAG;AAAA,YACpB;AAEA,kBAAM,IAAI,SAAS;AAEnB,kBAAM;AAAA,cACJ,IAAI;AAAA;AAAA,gBAEF,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,QAAQ;AAAA,cACV;AAAA,YACF;AAEA,kBAAM;AAAA,cACJ,IAAI;AAAA;AAAA,gBAEF;AAAA,gBACA;AAAA,gBACA,qBAAqB,iBAAiB,4BAA4B,mBAAoC;AAAA,gBACtG;AAAA,gBACA,QAAQ,SAAS,OAAO;AAAA,gBACxB,QAAQ;AAAA,cACV;AAAA,YACF;AAEA,kBAAM;AAAA,cACJ,IAAI;AAAA;AAAA,gBAEF;AAAA,gBACA;AAAA,gBACA,qBAAqB;AAAA,kBACnB;AAAA,kBACA;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA,QAAQ,SAAS,OAAO;AAAA,gBACxB,QAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC7JA,IAcM,cACA,kBACA,eAEA,gBAyBe;AA3CrB;AAAA;AAAA;AAGA;AAGA;AAEA;AAEA;AAEA;AAEA,IAAM,eAAe,CAAC,iBAAiB,kBAAkB,SAAS,eAAe,eAAe,YAAY;AAC5G,IAAM,mBAA6B,CAAC,gBAAgB;AACpD,IAAM,gBAA0B,CAAC,eAAe,qBAAqB,iBAAiB,iBAAiB;AAEvG,IAAM,iBAA2B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAqBA,IAAqB,4BAArB,MAAgF;AAAA,MAC9E,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,mBAAmB;AAAA,MAEnB,MAAM,SAAS,SAAkB,cAAwD;AACvF,cAAM,QAA2B,CAAC;AAElC,YAAI,QAAQ,eAAe;AACzB,gBAAM,KAAK,mBAAmB,SAAS,QAAQ,eAAe,OAAO,YAAY;AAAA,QACnF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,UAAU,MAAW,SAAyB;AAC5C,cAAM,uBAAuB,QAAQ,SAAS,KAAK,IAAI,oBAAwC;AAC/F,cAAM,sBAAsB,QAAQ,SAAS,KAAK,IAAI,mBAAuC;AAC7F,cAAM,qBAAqB,QAAQ,SAAS,KAAK,IAAI,kBAAsC;AAC3F,cAAM,8BAA8B,QAAQ,SAAS,KAAK,IAAI,2BAA+C;AAC7G,cAAM,4BAA4B,QAAQ,SAAS,KAAK,IAAI,yBAA6C;AACzG,cAAM,yBAAyB,QAAQ,SAAS,KAAK,IAAI,sBAA0C;AAEnG,aAAK,uBAAuB,CAAC;AAC7B,aAAK,sBAAsB,CAAC;AAC5B,aAAK,qBAAqB,CAAC;AAC3B,aAAK,8BAA8B,CAAC;AACpC,aAAK,4BAA4B,CAAC;AAClC,aAAK,gCAAgC,CAAC;AACtC,aAAK,yBAAyB,CAAC;AAE/B,mBAAW,uBAAuB,sBAAsB;AACtD,cAAI,sBAAsB,oBAAoB;AAE9C,cAAI,qBAAqB;AACvB,kBAAM,SAAS,oBAAoB,iCAAiC;AAEpE,gBAAI,QAAQ;AACV,uBAAS,QAAQ,QAAQ;AACvB,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,qBAAqB,SAAS,IAAI,GAAG;AAC7C,uBAAK,qBAAqB,KAAK,IAAI;AAAA,gBACrC;AAAA,cACF;AAAA,YACF;AACA,kBAAM,gBAAgB,oBAAoB,mBAAmB;AAE7D,gBAAI,eAAe;AACjB,uBAAS,QAAQ,eAAe;AAC9B,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,qBAAqB,SAAS,IAAI,GAAG;AAC7C,uBAAK,qBAAqB,KAAK,IAAI;AAAA,gBACrC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,sBAAsB,qBAAqB;AACpD,cAAI,qBAAqB,mBAAmB;AAE5C,cAAI,oBAAoB;AACtB,kBAAMC,uBAAsB,mBAAmB,wBAAwB;AAEvE,gBAAIA,sBAAqB;AACvB,uBAAS,QAAQA,sBAAqB;AACpC,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,oBAAoB,SAAS,IAAI,GAAG;AAC5C,uBAAK,oBAAoB,KAAK,IAAI;AAAA,gBACpC;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,iCAAiC,mBAAmB,4BAA4B;AAEtF,gBAAI,gCAAgC;AAClC,uBAAS,QAAQ,gCAAgC;AAC/C,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,oBAAoB,SAAS,IAAI,GAAG;AAC5C,uBAAK,oBAAoB,KAAK,IAAI;AAAA,gBACpC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,qBAAqB,oBAAoB;AAClD,cAAI,oBAAoB,kBAAkB;AAE1C,cAAI,mBAAmB;AACrB,kBAAMC,sBAAqB,kBAAkB,YAAY;AAEzD,gBAAIA,qBAAoB;AACtB,uBAAS,QAAQA,qBAAoB;AACnC,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,mBAAmB,SAAS,IAAI,GAAG;AAC3C,uBAAK,mBAAmB,KAAK,IAAI;AAAA,gBACnC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,8BAA8B,6BAA6B;AACpE,cAAI,qBAAqB,2BAA2B;AAEpD,cAAI,oBAAoB;AACtB,kBAAM,kBAAkB,mBAAmB,iBAAiB;AAE5D,gBAAI,iBAAiB;AACnB,uBAAS,QAAQ,iBAAiB;AAChC,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,4BAA4B,SAAS,IAAI,GAAG;AACpD,uBAAK,4BAA4B,KAAK,IAAI;AAAA,gBAC5C;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,4BAA4B,2BAA2B;AAChE,cAAI,2BAA2B,yBAAyB;AAExD,cAAI,0BAA0B;AAC5B,kBAAM,wBAAwB,yBAAyB,uBAAuB;AAE9E,gBAAI,uBAAuB;AACzB,uBAAS,QAAQ,uBAAuB;AACtC,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,0BAA0B,SAAS,IAAI,GAAG;AAClD,uBAAK,0BAA0B,KAAK,IAAI;AAAA,gBAC1C;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,yBAAyB,wBAAwB;AAC1D,cAAI,wBAAwB,sBAAsB;AAElD,cAAI,uBAAuB;AACzB,kBAAM,oBAAoB,sBAAsB,2BAA2B;AAE3E,gBAAI,mBAAmB;AACrB,uBAAS,QAAQ,mBAAmB;AAClC,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,8BAA8B,SAAS,IAAI,GAAG;AACtD,uBAAK,8BAA8B,KAAK,IAAI;AAAA,gBAC9C;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,qBAAqB,sBAAsB,oBAAoB;AAErE,gBAAI,oBAAoB;AACtB,uBAAS,QAAQ,oBAAoB;AACnC,oBAAI,KAAK,WAAW,YAAY,GAAG;AACjC,yBAAO,KAAK,UAAU,EAAE;AAAA,gBAC1B;AAEA,oBAAI,CAAC,KAAK,uBAAuB,SAAS,IAAI,GAAG;AAC/C,uBAAK,uBAAuB,KAAK,IAAI;AAAA,gBACvC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,aAAK,qBAAqB,KAAK;AAC/B,aAAK,mBAAmB,KAAK;AAC7B,aAAK,oBAAoB,KAAK;AAC9B,aAAK,4BAA4B,KAAK;AACtC,aAAK,0BAA0B,KAAK;AACpC,aAAK,8BAA8B,KAAK;AACxC,aAAK,uBAAuB,KAAK;AAAA,MACnC;AAAA,MAEA,MAAM,mBAAmB,SAAkB,QAAiB,OAA0B,OAAqB;AACzG,YAAI,CAAC,OAAO,UAAU;AACpB,gBAAM,OAAO,KAAK;AAAA,QACpB;AAEA,mBAAW,YAAY,OAAO,OAAO;AACnC,gBAAM,WAAW,iBAAiB,gBAAgB,QAAQ;AAC1D,gBAAM,OAAO,OAAO,MAAM,QAAQ;AAElC,cAAI,aAAa,UAAU,MAAM;AAC/B,kBAAM,KAAK,iBAAiB,SAAS,MAAM,OAAO,KAAK;AAAA,UACzD,WAAW,iBAAiB,gBAAgB,QAAQ,KAAK,MAAM;AAC7D,gBAAI,CAAC,KAAK,iBAAiB;AACzB,oBAAM,KAAK,YAAY;AAAA,YACzB;AAEA,gBAAI,KAAK,WAAW,KAAK,mBAAmB,YAAY;AACtD,kBAAI,CAAC,KAAK,sBAAsB;AAC9B,sBAAM,aAAa,IAAI,WAAW;AAElC,2BAAW,cAAc,KAAK,sBAAsB;AAEpD,sBAAM,WAAW,mBAAmB,KAAK,SAAS,KAAK,IAAI;AAE3D,qBAAK,uBAAuB;AAAA,cAC9B;AAEA,kBAAI,KAAK,sBAAsB;AAC7B,sBAAM,KAAK,mBAAmB,SAAS,KAAK,qBAAqB,YAAY,OAAO,KAAK;AAAA,cAC3F;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,cAAc,OAAO,SAAS;AACvC,gBAAM,cAAc,OAAO,QAAQ,UAAU;AAE7C,cAAI,eAAe,CAAC,OAAO,aAAa;AACtC,kBAAM,KAAK,mBAAmB,SAAS,aAAa,OAAO,KAAK;AAAA,UAClE;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,iBAAiB,SAAkB,MAAa,OAA0B,OAAqB;AACnG,cAAM,SAAS,KAAK,oBAAoB,YAAY;AAEpD,YAAI,OAAO,QAAQ,YAAY,KAAK,KAAK,CAAC,OAAO,SAAS,cAAc,GAAG;AACzE,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,UAAU,QAAW;AACvB,kBAAM,aAAa,MAAM,kBAAkB;AAE3C,gBAAI,YAAY;AACd,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA,WAAW,YAAY;AAAA,cACzB;AAEA,oBAAM,iBAAiB,WAAW,kBAAkB;AAEpD,kBAAI,gBAAgB;AAClB,2BAAW,gBAAgB,gBAAgB;AACzC,wBAAM,KAAK;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA;AAAA,oBAEA,eAAe,YAAY;AAAA,kBAC7B;AAAA,gBACF;AAAA,cACF;AACA,oBAAM,aAAa,WAAW,QAAQ;AAEtC,kBAAI,YAAY;AACd,2BAAW,cAAc,YAAY;AACnC,wBAAM,KAAK,WAAW,IAAI,gBAAgB,8BAAuC,WAAW,UAAU,CAAC;AAAA,gBACzG;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf;AAEA,YAAI,OAAO,QAAQ,SAAS,KAAK,GAAG;AAClC,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,UAAU,QAAW;AACvB,kBAAM,WAAW,MAAM,gBAAgB;AAEvC,gBAAI,UAAU;AACZ,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA,SAAS,YAAY;AAAA,cACvB;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf;AAEA,YAAI,OAAO,QAAQ,UAAU,KAAK,GAAG;AACnC,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,OAAO;AACT,kBAAM,YAAY,MAAM,iBAAiB;AAEzC,gBAAI,WAAW;AACb,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA,UAAU,YAAY;AAAA,cACxB;AAEA,oBAAM,kBAAkB,UAAU,aAAa;AAE/C,kBAAI,iBAAiB;AACnB,oBAAI,YAAY,gBAAgB,QAAQ;AAExC,oBAAI,cAAc,QAAW;AAC3B,8BAAY,gBAAgB,YAAY;AAAA,gBAC1C;AAEA,oBAAI,eAAe;AAEnB,oBAAI,WAAW;AACb,6BAAW,OAAO,WAAW;AAC3B,0BAAM,MAAM,UAAU,GAAG;AAEzB,wBAAI,OAAO,IAAI,QAAQ;AACrB,0BAAI,iBAAiB,GAAG;AACtB,uCAAe,IAAI;AAAA,sBACrB,OAAO;AACL,wCAAgB,IAAI;AAAA,sBACtB;AAEA,yBAAG,WAAW,eAAe,uBAAuB,IAAI,MAAM;AAAA,oBAChE;AAAA,kBACF;AAAA,gBACF;AAEA,oBAAI,aAAa,gBAAgB,QAAQ;AAEzC,oBAAI,YAAY;AACd,sBAAI,WAAW,+BAA+B,GAAG;AAC/C,0BAAM,gBAAgB,WAAW,+BAA+B,EAAE,gBAAgB;AAElF,wBAAI,iBAAiB,cAAc,SAAS,8BAA8B,GAAG;AAC3E,0BAAI,iBAAiB,GAAG;AACtB,uCAAe;AAAA,sBACjB,OAAO;AACL,wCAAgB;AAAA,sBAClB;AAAA,oBACF;AAEA,wBAAI,iBAAiB,cAAc,SAAS,4BAA4B,GAAG;AACzE,0BAAI,iBAAiB,GAAG;AACtB,uCAAe;AAAA,sBACjB,OAAO;AACL,wCAAgB;AAAA,sBAClB;AAAA,oBACF;AAAA,kBACF;AAEA,sBAAI,WAAW,8BAA8B,GAAG;AAC9C,0BAAM,gBAAgB,WAAW,8BAA8B,EAAE,gBAAgB;AAEjF,wBAAI,iBAAiB,cAAc,SAAS,sBAAsB,GAAG;AACnE,0BAAI,iBAAiB,GAAG;AACtB,uCAAe;AAAA,sBACjB,OAAO;AACL,wCAAgB;AAAA,sBAClB;AAAA,oBACF;AAEA,wBAAI,iBAAiB,cAAc,SAAS,yBAAyB,GAAG;AACtE,0BAAI,iBAAiB,GAAG;AACtB,uCAAe;AAAA,sBACjB,OAAO;AACL,wCAAgB;AAAA,sBAClB;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAEA,oBAAI,aAAa,YAAY;AAC3B,qBAAG,WAAW,eAAe,mBAAmB,YAAY;AAC5D,qBAAG,iBAAiB,eAAe,UAAU,YAAY;AAAA,gBAC3D;AAAA,cACF;AAEA,oBAAM,YAAY,UAAU,cAAc;AAE1C,kBAAI,WAAW;AACb,2BAAW,YAAY,WAAW;AAChC,wBAAM,qBAAqB,SAAS,YAAY;AAEhD,sBAAI,oBAAoB;AACtB,0BAAM,KAAK;AAAA,sBACT;AAAA,sBACA;AAAA,sBACA;AAAA;AAAA,sBAEA;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf;AAEA,YAAI,OAAO,QAAQ,UAAU,KAAK,GAAG;AACnC,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,OAAO;AACT,kBAAM,YAAY,MAAM,iBAAiB;AAEzC,gBAAI,WAAW;AACb,oBAAM,KAAK,IAAI;AAAA;AAAA,gBAEb,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,gBAC/D,KAAK;AAAA,cACP;AAEA,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA,UAAU,YAAY;AAAA,cACxB;AAEA,oBAAM,KAAK,EAAE;AAAA,YACf;AAEA,kBAAM,kBAAkB,MAAM,wBAAwB;AAEtD,gBAAI,iBAAiB;AACnB,oBAAM,KAAK,IAAI;AAAA;AAAA,gBAEb,KAAK;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,gBAC/D,KAAK;AAAA,cACP;AAEA,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA,gBAAgB,YAAY;AAAA,cAC9B;AAEA,oBAAM,KAAK,EAAE;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAEA,YAAI,OAAO,QAAQ,aAAa,KAAK,GAAG;AACtC,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,UAAU,QAAW;AACvB,kBAAM,qBAAqB,MAAM,iBAAiB;AAElD,gBAAI,oBAAoB;AACtB,oBAAM,iBAAiB,mBAAmB,YAAY;AAEtD,kBAAI,gBAAgB;AAClB,sBAAM,oBAA4C,CAAC;AACnD,sBAAM,qBAA6C,CAAC;AAEpD,2BAAW,YAAY,gBAAgB;AACrC,sBAAI,SAAS,WAAW,qBAAqB,KAAK,SAAS,WAAW,WAAW,GAAG;AAClF,uCAAmB,QAAQ,IAAI,eAAe,QAAQ;AAAA,kBACxD,OAAO;AACL,sCAAkB,QAAQ,IAAI,eAAe,QAAQ;AAAA,kBACvD;AAAA,gBACF;AAEA,sBAAM,KAAK;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,kBAEA;AAAA,gBACF;AAEA,sBAAM,KAAK;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,kBAEA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf;AAEA,YAAI,OAAO,QAAQ,gCAAgC,KAAK,GAAG;AACzD,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,SAAS,MAAM,cAAc;AAC/B,kBAAM,KAAK;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA;AAAA,cAEA,MAAM;AAAA,cACN;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf,WAAW,OAAO,QAAQ,6BAA6B,KAAK,GAAG;AAC7D,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,gBAAM,KAAK,YAAY,KAAK;AAE5B,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,SAAS,MAAM,cAAc;AAC/B,kBAAM,KAAK;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA;AAAA,cAEA,MAAM;AAAA,cACN;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf,WAAW,OAAO,QAAQ,gCAAgC,KAAK,GAAG;AAChE,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,OAAO;AACT,kBAAM,WAAW,MAAM,mBAAmB;AAE1C,gBAAI,UAAU;AACZ,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf,WAAW,OAAO,QAAQ,gCAAgC,KAAK,GAAG;AAChE,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,OAAO;AACT,kBAAM,KAAK;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA;AAAA,cAEA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf,WAAW,OAAO,QAAQ,cAAc,KAAK,GAAG;AAC9C,gBAAM,KAAK,IAAI;AAAA;AAAA,YAEb,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,+BAA+B,KAAK,mBAAmB;AAAA,YAC/D,KAAK;AAAA,UACP;AAEA,cAAI,CAAC,KAAK,iBAAiB;AACzB,kBAAM,KAAK,YAAY,KAAK;AAAA,UAC9B;AAEA,gBAAM,QAAQ,iBAAiB,cAAc,IAAI;AAEjD,cAAI,OAAO;AACT,kBAAM,cAAc,MAAM,cAAc;AACxC,gBAAI,aAAa;AACf,oBAAM,KAAK,WAAW,IAAI,gBAAgB,8BAAuC,aAAa,IAAI;AAAA,YACpG;AAEA,kBAAM,eAAe,MAAM,eAAe;AAC1C,gBAAI,cAAc;AAChB,oBAAM,KAAK,WAAW,IAAI,iBAAiB,+BAAwC,cAAc,IAAI;AAAA,YACvG;AAEA,kBAAM,wBAAwB,MAAM,yBAAyB;AAC7D,gBAAI,uBAAuB;AACzB,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,oBAAoB,MAAM,oBAAoB;AACpD,gBAAI,mBAAmB;AACrB,oBAAM,KAAK;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBAEA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,KAAK,EAAE;AAAA,QACf;AAAA,MACF;AAAA,MAEA,MAAM,WACJ,IACA,QACA,OACA,YACA,SACA,gBACA;AACA,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AAEA,mBAAW,gBAAgB,SAAS;AAClC,cAAI,cAAc;AAChB,gBAAI,QAAQ,aAAa,QAAQ,GAAG;AACpC,kBAAM,WAAgB,QAAQ,YAAY;AAE1C,gBAAI,SAAS,KAAK,aAAa,UAAU,GAAG,KAAK,MAAM,aAAa;AAClE,kBAAI,CAAC,gBAAgB;AACnB,mBAAG,iBAAiB,QAAQ,YAAY;AAAA,cAC1C;AAEA,kBAAI,UAAU;AAEd,kBAAI,QAAQ,KAAK,QAAQ,aAAa,SAAS,GAAG;AAChD,0BAAU,aAAa,UAAU,QAAQ,CAAC;AAAA,cAC5C;AAEA,kBAAI,GAAG,eAAe,GAAG,YAAY,aAAa;AAChD,oBAAI,mBAAmB,MAAM,GAAG,YAAY,oBAAoB;AAEhE,oBAAI,kBAAkB;AACpB,qCAAmB,iBAAiB;AAAA,oBAClC,iBAAiB,6BAA6B,gBAAgB;AAAA,kBAChE;AAEA,wBAAM,OAAO,SAAS,kBAAkB,UAAU;AAAA,gBACpD;AAEA,sBAAM,OAAO,SAAS,GAAG,YAAY,aAAa,UAAU;AAE5D,oBAAI,OAAO,aAAa,UAAU;AAChC,sBAAI,iBAAiB,SAAS,OAAO,GAAG;AACtC,0BAAM,OAAO,UAAU,OAAO,KAAK,MAAM,QAAQ,GAAG,GAAG,YAAY,aAAa,UAAU;AAAA,kBAC5F;AAAA,gBACF,WAAW,OAAO,aAAa,WAAW;AACxC,sBAAI,cAAc,SAAS,OAAO,GAAG;AACnC,0BAAM,OAAO,UAAU,QAAQ,WAAW,MAAM,MAAM,GAAG,YAAY,aAAa,UAAU;AAAA,kBAC9F;AAAA,gBACF,WAAW,MAAM,QAAQ,QAAQ,GAAG;AAClC,wBAAM,OAAO,UAAU,OAAO,GAAG,YAAY,aAAa,UAAU;AACpE,uBAAK,mBAAmB,IAAI,SAAS,OAAO,YAAY,QAAQ;AAAA,gBAClE,WAAW,OAAO,aAAa,YAAY,SAAS,SAAS,GAAG;AAC9D,sBAAI,aAAa,SAAS,OAAO,GAAG;AAClC,0BAAM,OAAO,UAAU,OAAO,UAAU,GAAG,YAAY,aAAa,UAAU;AAC9E,0BAAM,OAAO,UAAU,GAAG,YAAY,aAAa,UAAU;AAAA,kBAC/D;AAAA,gBACF,OAAO;AACL,sBAAI,YAAY,CAAC,MAAM,QAAQ,QAAQ,GAAG;AACxC,yBAAK,qBAAqB,IAAI,SAAS,OAAO,YAAY,UAAU,YAAY;AAAA,kBAClF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,mBAAmB,IAAqB,QAAgB,OAAqB,YAAoB,SAAiB;AAChH,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AAEA,mBAAW,YAAY,SAAS;AAC9B,cAAI,OAAO,aAAa,YAAY,SAAS,SAAS,GAAG;AACvD,gBAAI,MAAM,GAAG,eAAe,GAAG,YAAY,aAAa;AACtD,oBAAM,OAAO,SAAS,MAAM,UAAU,GAAG,YAAY,aAAa,UAAU;AAC5E,oBAAM,OAAO,UAAU,GAAG,YAAY,aAAa,UAAU;AAAA,YAC/D;AAAA,UACF,OAAO;AACL,gBAAI,YAAY,OAAO,aAAa,YAAY,OAAO,aAAa,aAAa,CAAC,MAAM,QAAQ,QAAQ,GAAG;AACzG,mBAAK,qBAAqB,IAAI,QAAQ,OAAO,YAAY,QAAQ;AAAA,YACnE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,qBACE,IACA,QACA,OACA,YACA,SACA,YACA;AACA,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AAEA,mBAAW,gBAAgB,SAAS;AAClC,cAAI,cAAc;AAChB,kBAAM,MAAW,QAAQ,YAAY;AAErC,gBAAI,GAAG,eAAe,GAAG,YAAY,aAAa;AAChD,kBAAI,iBAAiB,UAAU,eAAe,aAAa,OAAO,QAAQ,UAAU;AAClF,sBAAM,OAAO,KAAK,GAAG,aAAa,mCAA4C;AAAA,cAChF;AAEA,oBAAM,OAAO,SAAS,MAAM,cAAc,GAAG,aAAa,aAAa,UAAU;AAEjF,kBAAI,UAAU;AACd,kBAAI,QAAQ,aAAa,QAAQ,GAAG;AAEpC,kBAAI,SAAS,KAAK,aAAa,UAAU,GAAG,KAAK,MAAM,aAAa;AAClE,oBAAI,QAAQ,KAAK,QAAQ,aAAa,SAAS,GAAG;AAChD,4BAAU,aAAa,UAAU,QAAQ,CAAC;AAAA,gBAC5C;AACA,sBAAM,aAAa,cAAc,eAAe,SAAS,UAAU;AAEnE,oBAAI,OAAO,QAAQ,UAAU;AAC3B,sBAAI,iBAAiB,SAAS,OAAO,KAAK,YAAY;AACpD,0BAAM,OAAO,SAAS,MAAM,UAAU,OAAO,KAAK,MAAM,GAAG,GAAG,GAAG,YAAY,aAAa,UAAU;AAAA,kBACtG;AAAA,gBACF,WAAW,OAAO,QAAQ,WAAW;AACnC,sBAAI,cAAc,SAAS,OAAO,KAAK,YAAY;AACjD,0BAAM,OAAO,SAAS,MAAM,UAAU,QAAQ,MAAM,MAAM,MAAM,GAAG,YAAY,aAAa,UAAU;AAAA,kBACxG;AAAA,gBACF,WAAW,OAAO,QAAQ,UAAU;AAClC,sBAAI,aAAa,SAAS,OAAO,KAAK,YAAY;AAChD,0BAAM,OAAO,SAAS,MAAM,UAAU,OAAO,KAAK,GAAG,YAAY,aAAa,UAAU;AAAA,kBAC1F;AAAA,gBACF,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,uBAAK,mBAAmB,IAAI,SAAS,MAAM,SAAS,OAAO,YAAY,GAAG;AAAA,gBAC5E,OAAO;AACL,sBAAI,OAAO,CAAC,MAAM,QAAQ,GAAG,GAAG;AAC9B,yBAAK,qBAAqB,IAAI,SAAS,MAAM,SAAS,OAAO,YAAY,KAAK,YAAY;AAAA,kBAC5F;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACj6BA,IAGqB;AAHrB;AAAA;AAAA;AAGA,IAAqB,mBAArB,MAAqB,kBAAiB;AAAA,MAC7B;AAAA,MACA;AAAA,MAEP,YAAY,iBAAyB,kBAA4B;AAC/D,aAAK,WAAW;AAChB,aAAK,mBAAmB;AAAA,MAC1B;AAAA,MAEA,IAAI,eAAe;AACjB,cAAM,iBAAiB,KAAK,SAAS,QAAQ,GAAG;AAEhD,eAAO,iBAAiB;AAAA,MAC1B;AAAA,MAEA,IAAI,YAAY;AACd,cAAM,iBAAiB,KAAK,SAAS,QAAQ,GAAG;AAEhD,YAAI,iBAAiB,GAAG;AACtB,iBAAO,KAAK,SAAS,UAAU,GAAG,cAAc;AAAA,QAClD;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,MAAM,aAAqB;AAChC,YAAI,cAAc;AAElB,sBAAc,YAAY,KAAK;AAE/B,YAAI,YAAY,WAAW,GAAG,GAAG;AAC/B,wBAAc,YAAY,UAAU,GAAG,YAAY,MAAM;AAAA,QAC3D;AAEA,cAAM,aAAa,YAAY,QAAQ,GAAG;AAE1C,YAAI,YAAsB,CAAC;AAE3B,YAAI,aAAa,GAAG;AAClB,wBAAc,YAAY,YAAY;AAAA,QACxC,OAAO;AACL,wBAAc,YAAY,UAAU,GAAG,UAAU,EAAE,YAAY;AAE/D,gBAAM,cAAc,YAAY,UAAU,aAAa,CAAC;AAExD,cAAI,YAAY,YAAY,QAAQ,GAAG;AACvC,cAAI,kBAAkB,YAAY,QAAQ,GAAG;AAC7C,cAAI,kBAAkB,YAAY,QAAQ,GAAG;AAC7C,cAAI,aAAa;AAEjB,iBAAO,aAAa,KAAK,aAAa,YAAY,QAAQ;AACxD,gBAAI,uBAAuB;AAE3B,gBACE,mBAAmB,KACnB,kBAAkB,cACjB,kBAAkB,KAAK,kBAAkB,kBAC1C;AACA,kBAAI,sBAAsB,YAAY,QAAQ,KAAK,kBAAkB,CAAC;AAEtE,kBAAI,sBAAsB,iBAAiB;AACzC,0BAAU,KAAK,YAAY,UAAU,aAAa,GAAG,mBAAmB,CAAC;AACzE,6BAAa,sBAAsB;AAEnC,oBAAI,aAAa,YAAY,QAAQ;AACnC,8BAAY,YAAY,QAAQ,KAAK,UAAU;AAC/C,oCAAkB,YAAY,QAAQ,KAAK,UAAU;AACrD,oCAAkB,YAAY,QAAQ,KAAK,UAAU;AAAA,gBACvD;AACA,uCAAuB;AAAA,cACzB;AAAA,YACF,WAAW,mBAAmB,KAAK,kBAAkB,WAAW;AAC9D,oBAAM,sBAAsB,YAAY,QAAQ,KAAK,kBAAkB,CAAC;AAExE,kBAAI,sBAAsB,iBAAiB;AACzC,0BAAU,KAAK,YAAY,UAAU,aAAa,GAAG,mBAAmB,CAAC;AACzE,6BAAa,sBAAsB;AAEnC,oBAAI,aAAa,YAAY,QAAQ;AACnC,8BAAY,YAAY,QAAQ,KAAK,UAAU;AAC/C,oCAAkB,YAAY,QAAQ,KAAK,UAAU;AACrD,oCAAkB,YAAY,QAAQ,KAAK,UAAU;AAAA,gBACvD;AACA,uCAAuB;AAAA,cACzB;AAAA,YACF;AAGA,gBAAI,CAAC,sBAAsB;AACzB,wBAAU,KAAK,YAAY,UAAU,YAAY,SAAS,CAAC;AAE3D,2BAAa,YAAY;AAEzB,kBAAI,aAAa,YAAY,QAAQ;AACnC,4BAAY,YAAY,QAAQ,KAAK,UAAU;AAC/C,kCAAkB,YAAY,QAAQ,KAAK,UAAU;AACrD,kCAAkB,YAAY,QAAQ,KAAK,UAAU;AAAA,cACvD;AAAA,YACF;AAAA,UACF;AAEA,oBAAU,KAAK,YAAY,UAAU,UAAU,CAAC;AAAA,QAClD;AAIA,YAAI,YAAY,QAAQ,GAAG,KAAK,GAAG;AACjC,cAAI,UAAU,CAAC;AAEf,kBAAQ,KAAK,WAAW;AAExB,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,oBAAQ,KAAK,UAAU,CAAC,CAAC;AAAA,UAC3B;AAEA,sBAAY;AACZ,wBAAc;AAAA,QAChB;AAEA,eAAO,IAAI;AAAA,UACT;AAAA,UACA;AAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/HA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IA8LsB;AA9LtB;AAAA;AAAA;AA8LO,IAAe,kBAAf,MAAuD;AAAA;AAAA;AAAA;AAAA,MAY5D,MAAM,eACJ,SACA,MACA,YACA,UACmB;AACnB,cAAM,SAAS,KAAK,SAAS,YAAY,QAAQ;AACjD,YAAI,CAAC,QAAQ,sBAAsB;AACjC,iBAAO,CAAC;AAAA,QACV;AAEA,eAAO,OAAO,qBAAqB,YAAY,OAAO;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA,MAKU,QAAQ,SAAkB,MAAoC;AACtE,eAAO,EAAE,SAAS,MAAM,SAAS,KAAK;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA,MAKU,MAAM,MAAc,SAAiB,SAAuC;AACpF,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,EAAE,MAAM,SAAS,QAAQ;AAAA,QAClC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKU,qBAAqB,MAAgD;AAC7E,cAAM,eAAe,KAAK,SAAS,WAAW,OAAO,CAAC,MAAM,EAAE,QAAQ,KAAK,CAAC;AAE5E,iBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,cAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,KAAK,MAAM,IAAI;AACrC,mBAAO,KAAK,MAAM,oBAAoB,8BAA8B,aAAa,CAAC,EAAE,IAAI,IAAI;AAAA,cAC1F,cAAc,aAAa,CAAC,EAAE;AAAA,cAC9B,eAAe;AAAA,YACjB,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC1PA;AAAA;AAAA;AAOA;AAAA;AAAA;;;ACPA,IA8Da;AA9Db;AAAA;AAAA;AA8DO,IAAM,oBAAN,MAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM7B,OAAO,MAAM,MAA6C;AACxD,cAAM,UAAU,KAAK,KAAK;AAC1B,YAAI,CAAC,QAAS,QAAO;AAGrB,cAAM,cAAc,QAAQ,WAAW,GAAG,IAAI,QAAQ,MAAM,CAAC,IAAI;AACjE,YAAI,CAAC,YAAa,QAAO;AAEzB,cAAM,SAAS,KAAK,SAAS,WAAW;AACxC,YAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,cAAM,cAAc,OAAO,CAAC,EAAE;AAC9B,cAAM,OAAiB,CAAC;AACxB,cAAM,QAAqD,CAAC;AAE5D,YAAI,IAAI;AACR,eAAO,IAAI,OAAO,QAAQ;AACxB,gBAAM,QAAQ,OAAO,CAAC;AAEtB,cAAI,MAAM,SAAS,QAAQ;AACzB,kBAAM,WAAW,MAAM,MAAM,QAAQ,OAAO,EAAE;AAG9C,gBAAI,IAAI,IAAI,OAAO,UAAU,OAAO,IAAI,CAAC,EAAE,SAAS,aAAa;AAC/D,oBAAM,aAAa,OAAO,IAAI,CAAC;AAE/B,kBAAI,WAAW,MAAM,SAAS,GAAG,GAAG;AAClC,sBAAM,QAAQ,IAAI,WAAW,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,cACnE,OAAO;AACL,sBAAM,QAAQ,IAAI,WAAW;AAAA,cAC/B;AACA,mBAAK;AAAA,YACP,OAAO;AAEL,oBAAM,QAAQ,IAAI;AAClB;AAAA,YACF;AAAA,UACF,WAAW,MAAM,SAAS,OAAO;AAC/B,iBAAK,KAAK,MAAM,KAAK;AACrB;AAAA,UACF,OAAO;AACL;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,cAAc;AAAA,QAChB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,OAAe,SAAS,MAA8B;AACpD,cAAM,SAAyB,CAAC;AAChC,YAAI,IAAI;AACR,YAAI,eAAe;AACnB,YAAI,qBAAqB;AAEzB,eAAO,IAAI,KAAK,QAAQ;AAEtB,iBAAO,IAAI,KAAK,UAAU,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG;AAC5C;AAAA,UACF;AACA,cAAI,KAAK,KAAK,OAAQ;AAEtB,gBAAM,QAAQ;AAGd,cAAI,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,KAAK;AACtC,kBAAM,QAAQ,KAAK,CAAC;AACpB;AACA,mBAAO,IAAI,KAAK,UAAU,KAAK,CAAC,MAAM,OAAO;AAC3C,kBAAI,KAAK,CAAC,MAAM,QAAQ,IAAI,IAAI,KAAK,QAAQ;AAC3C,qBAAK;AAAA,cACP,OAAO;AACL;AAAA,cACF;AAAA,YACF;AACA,gBAAI,IAAI,KAAK,OAAQ;AAErB,kBAAMC,SAAQ,KAAK,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,QAAQ,UAAU,IAAI;AACjE,mBAAO,KAAK;AAAA,cACV,MAAM,qBAAqB,cAAc,eAAe,YAAY;AAAA,cACpE,OAAAA;AAAA,cACA;AAAA,cACA,KAAK;AAAA,YACP,CAAC;AACD,iCAAqB;AACrB,2BAAe;AACf;AAAA,UACF;AAGA,cAAI,KAAK,CAAC,MAAM,KAAK;AACnB,gBAAI,UAAU;AAEd,mBAAO,UAAU,KAAK,UAAU,KAAK,OAAO,MAAM,KAAK;AACrD;AAAA,YACF;AAEA,mBAAO,UAAU,KAAK,UAAU,gBAAgB,KAAK,KAAK,OAAO,CAAC,GAAG;AACnE;AAAA,YACF;AAEA,mBAAO,KAAK;AAAA,cACV,MAAM;AAAA,cACN,OAAO,KAAK,MAAM,GAAG,OAAO;AAAA,cAC5B;AAAA,cACA,KAAK;AAAA,YACP,CAAC;AACD,gBAAI;AACJ,iCAAqB;AACrB,2BAAe;AACf;AAAA,UACF;AAGA,iBAAO,IAAI,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG;AAC7C;AAAA,UACF;AAEA,gBAAM,QAAQ,KAAK,MAAM,OAAO,CAAC;AACjC,iBAAO,KAAK;AAAA,YACV,MAAM,qBAAqB,cAAc,eAAe,YAAY;AAAA,YACpE;AAAA,YACA;AAAA,YACA,KAAK;AAAA,UACP,CAAC;AACD,+BAAqB;AACrB,yBAAe;AAAA,QACjB;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,eACX,MACA,WACA,UAKA,SACmB;AACnB,cAAM,eAAe,KAAK,MAAM,GAAG,SAAS;AAC5C,cAAM,UAAU,aAAa,KAAK;AAGlC,cAAM,oBAAoB,MAAgB;AACxC,gBAAM,QAAQ,QAAQ;AACtB,gBAAMC,OAAM,SAAS,OAAO,KAAK;AACjC,iBAAOA,KACJ,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,mBAAmB,QAAQ,OAAO,EAC5D,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,QAC/B;AAGA,YAAI,CAAC,WAAW,YAAY,KAAK;AAC/B,iBAAO,kBAAkB,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC;AAAA,QAC/C;AAGA,cAAM,cAAc,QAAQ,WAAW,GAAG,IAAI,QAAQ,MAAM,CAAC,IAAI;AACjE,cAAM,SAAS,KAAK,SAAS,WAAW;AAExC,YAAI,OAAO,WAAW,GAAG;AACvB,iBAAO,kBAAkB,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC;AAAA,QAC/C;AAGA,cAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,cAAM,wBAAwB,cAAc,QAAQ,WAAW,GAAG,IAAI,IAAI,KAAK,UAAU;AAGzF,cAAM,aAAa,aAAa,SAAS,GAAG;AAG5C,YAAI,OAAO,WAAW,KAAK,yBAAyB,CAAC,YAAY;AAC/D,gBAAMC,WAAU,UAAU,MAAM,YAAY;AAC5C,iBAAO,kBAAkB,EACtB,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,WAAWA,QAAO,CAAC,EACjD,IAAI,CAAC,MAAM,MAAM,CAAC;AAAA,QACvB;AAGA,cAAM,UAAU,SAAS,IAAI,OAAO,CAAC,EAAE,KAAK;AAC5C,YAAI,CAAC,SAAS;AACZ,iBAAO,CAAC;AAAA,QACV;AAGA,YAAI,UAAU,SAAS,UAAU,yBAAyB,CAAC,YAAY;AACrE,gBAAM,WAAW,QAAQ,SAAS,SAAS,CAAC;AAC5C,gBAAMA,WAAU,UAAU,MAAM,QAAQ,OAAO,EAAE,EAAE,YAAY;AAC/D,iBAAO,SAAS,OAAO,CAAC,MAAM,EAAE,KAAK,YAAY,EAAE,WAAWA,QAAO,CAAC,EAAE,IAAI,CAAC,MAAM,OAAO,EAAE,IAAI;AAAA,QAClG;AAGA,YAAI,UAAU,SAAS,UAAU,YAAY;AAC3C,gBAAM,WAAW,UAAU,MAAM,QAAQ,OAAO,EAAE;AAClD,gBAAM,UAAU,QAAQ,SAAS,OAAO;AAAA,YACtC,CAAC,MAAM,EAAE,KAAK,YAAY,MAAM,SAAS,YAAY,KAAK,EAAE,cAAc;AAAA,UAC5E;AACA,cAAI,SAAS;AACX,gBAAI,QAAQ,SAAS;AACnB,qBAAO,QAAQ;AAAA,YACjB;AACA,gBAAI,QAAQ,sBAAsB;AAChC,qBAAO,QAAQ,qBAAqB,IAAI,OAAO;AAAA,YACjD;AAAA,UACF;AACA,iBAAO,CAAC;AAAA,QACV;AAGA,YAAI,UAAU,SAAS,eAAe,uBAAuB;AAE3D,gBAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,cAAI,WAAW,SAAS,QAAQ;AAC9B,kBAAM,WAAW,UAAU,MAAM,QAAQ,OAAO,EAAE;AAClD,kBAAM,UAAU,QAAQ,SAAS,OAAO;AAAA,cACtC,CAAC,MAAM,EAAE,KAAK,YAAY,MAAM,SAAS,YAAY,KAAK,EAAE,cAAc;AAAA,YAC5E;AACA,gBAAI,SAAS;AACX,kBAAI,QAAQ,SAAS;AACnB,uBAAO,QAAQ,QAAQ,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,UAAU,MAAM,YAAY,CAAC,CAAC;AAAA,cAChG;AACA,kBAAI,QAAQ,sBAAsB;AAChC,uBAAO,QAAQ,qBAAqB,UAAU,OAAO,OAAO;AAAA,cAC9D;AAAA,YACF;AAAA,UACF;AACA,iBAAO,CAAC;AAAA,QACV;AAGA,cAAM,YAAY,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK;AACvD,cAAM,WAAW,aAAa,UAAU,SAAS,UAAU,SAAS;AACpE,cAAM,UAAU,aAAa,KAAK,UAAU;AAG5C,YAAI,QAAQ,gBAAgB;AAC1B,gBAAM,YAAY,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK;AAC9C,gBAAM,cAAc,MAAM,QAAQ,eAAe,SAAS,WAAW,SAAS,QAAQ;AACtF,cAAI,YAAY,SAAS,GAAG;AAC1B,mBAAO;AAAA,UACT;AAAA,QAEF;AAGA,cAAM,SAAS,QAAQ,SAAS,YAAY,QAAQ;AACpD,YAAI,QAAQ;AACV,cAAI,OAAO,SAAS;AAClB,mBAAO,OAAO,QAAQ,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,QAAQ,YAAY,CAAC,CAAC;AAAA,UACvF;AACA,cAAI,OAAO,sBAAsB;AAC/B,mBAAO,OAAO,qBAAqB,SAAS,OAAO;AAAA,UACrD;AAEA,cAAI,CAAC,SAAS;AACZ,mBAAO,CAAC,IAAI,OAAO,IAAI,GAAG;AAAA,UAC5B;AAAA,QACF;AAEA,eAAO,CAAC;AAAA,MACV;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,OAAO,aAAqB,MAAgB,OAA4D;AAC7G,cAAM,QAAQ,CAAC,MAAM,WAAW;AAEhC,mBAAW,OAAO,MAAM;AACtB,gBAAM,KAAK,IAAI,SAAS,GAAG,IAAI,IAAI,GAAG,MAAM,GAAG;AAAA,QACjD;AAEA,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,cAAI,UAAU,MAAM;AAClB,kBAAM,KAAK,KAAK,GAAG,EAAE;AAAA,UACvB,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,kBAAM,KAAK,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC;AAAA,UACxC,WAAW,UAAU,OAAO;AAC1B,kBAAM,KAAK,KAAK,GAAG,IAAI,MAAM,SAAS,GAAG,IAAI,IAAI,KAAK,MAAM,KAAK;AAAA,UACnE;AAAA,QACF;AAEA,eAAO,MAAM,KAAK,GAAG;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;;;AClXA,IAsCa;AAtCb;AAAA;AAAA;AAiCA;AAKO,IAAM,sBAAN,MAAM,qBAAoB;AAAA,MAC/B,OAAe;AAAA,MAEP,WAAsC,oBAAI,IAAI;AAAA;AAAA;AAAA;AAAA,MAKtD,WAAW,WAAgC;AACzC,YAAI,CAAC,KAAK,WAAW;AACnB,eAAK,YAAY,IAAI,qBAAoB;AAAA,QAC3C;AACA,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,SAAS,SAA6B;AACpC,cAAM,EAAE,MAAM,QAAQ,IAAI,QAAQ;AAGlC,cAAM,YAAY,KAAK,YAAY;AACnC,YAAI,KAAK,SAAS,IAAI,SAAS,GAAG;AAChC,gBAAM,IAAI,MAAM,gBAAgB,IAAI,yBAAyB;AAAA,QAC/D;AACA,aAAK,SAAS,IAAI,WAAW,OAAO;AAGpC,YAAI,SAAS;AACX,qBAAW,SAAS,SAAS;AAC3B,kBAAM,aAAa,MAAM,YAAY;AACrC,gBAAI,KAAK,SAAS,IAAI,UAAU,GAAG;AACjC,oBAAM,IAAI,MAAM,sBAAsB,KAAK,mCAAmC;AAAA,YAChF;AACA,iBAAK,SAAS,IAAI,YAAY,OAAO;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,UAAgC;AAC1C,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,gBAAM,UAAU,SAAS,CAAC;AAC1B,cAAI,CAAC,SAAS;AACZ,kBAAM,IAAI,MAAM,wBAAwB,CAAC,iCAAiC,SAAS,MAAM,YAAY;AAAA,UACvG;AACA,eAAK,SAAS,OAAO;AAAA,QACvB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,MAAwC;AAC1C,eAAO,KAAK,SAAS,IAAI,KAAK,YAAY,CAAC;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,MAAuB;AACzB,eAAO,KAAK,SAAS,IAAI,KAAK,YAAY,CAAC;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAO,OAA0C;AAC/C,cAAM,OAAO,oBAAI,IAAkB;AACnC,cAAM,SAAyB,CAAC;AAEhC,mBAAW,WAAW,KAAK,SAAS,OAAO,GAAG;AAC5C,cAAI,KAAK,IAAI,OAAO,EAAG;AACvB,eAAK,IAAI,OAAO;AAGhB,cAAI,OAAO;AACT,kBAAM,SAAS,QAAQ,SAAS;AAEhC,gBAAI,UAAU,CAAC,OAAO,SAAS,KAAK,GAAG;AACrC;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,KAAK,OAAO;AAAA,QACrB;AAGA,eAAO,KAAK,CAAC,GAAG,MAAM;AACpB,gBAAM,SAAS,EAAE,SAAS,SAAS,cAAc,EAAE,SAAS,QAAQ;AACpE,cAAI,WAAW,EAAG,QAAO;AACzB,iBAAO,EAAE,SAAS,KAAK,cAAc,EAAE,SAAS,IAAI;AAAA,QACtD,CAAC;AAED,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,gBAAgB,OAAoC;AAClD,eAAO,KAAK,OAAO,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,MACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,QAAQ,aAAqB,SAAuE;AACxG,cAAM,SAAS,kBAAkB,MAAM,WAAW;AAElD,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,eAAe,OAAO,aAAa,OAAO,MAAM,OAAO,OAAO,OAAO;AAAA,MACnF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,eACJ,MACA,MACA,OACA,SACyC;AACzC,cAAM,UAAU,KAAK,IAAI,IAAI;AAE7B,YAAI,CAAC,SAAS;AACZ,iBAAO;AAAA,QACT;AAGA,cAAM,SAAS,QAAQ,SAAS;AAChC,YAAI,UAAU,CAAC,OAAO,SAAS,QAAQ,KAAyB,GAAG;AACjE,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,cACL,MAAM;AAAA,cACN,SAAS,YAAY,IAAI,yBAAyB,QAAQ,KAAK;AAAA,YACjE;AAAA,UACF;AAAA,QACF;AAGA,YAAI,QAAQ,SAAS,mBAAmB,CAAC,QAAQ,SAAS;AACxD,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,cACL,MAAM;AAAA,cACN,SAAS,YAAY,IAAI;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAGA,YAAI,QAAQ,SAAS,qBAAqB,CAAC,QAAQ,WAAW;AAC5D,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,cACL,MAAM;AAAA,cACN,SAAS,YAAY,IAAI;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AACF,iBAAO,MAAM,QAAQ,QAAQ,SAAS,MAAM,KAAK;AAAA,QACnD,SAAS,OAAgB;AACvB,gBAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,cACL,MAAM;AAAA,cACN,SAAS,oBAAoB,IAAI,MAAM,OAAO;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,eAAe,MAAc,WAAmB,SAAiD;AACrG,eAAO,kBAAkB,eAAe,MAAM,WAAW,MAAM,OAAO;AAAA,MACxE;AAAA;AAAA;AAAA;AAAA,MAKA,QAAc;AACZ,aAAK,SAAS,MAAM;AAAA,MACtB;AAAA,IACF;AAAA;AAAA;;;ACnPA;AAAA;AAAA;AAAA;AAAA;;;AC2OO,SAAS,0BAA0B,UAAkD;AAC1F,SAAO,OAAO,SAAiB,YAAiC;AAC9D,UAAM,QAAQ,QAAQ,YAAY;AAElC,QAAI,CAAC,QAAQ,cAAc;AACzB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,QAAQ,aAAa,YAAY;AAEvC,QAAI;AACJ,QAAI,aAAa,QAAW;AAC1B,cAAQ,QAAQ,aAAa,wBAAwB,QAAQ,KAAK,CAAC;AAAA,IACrE,OAAO;AAEL,YAAM,UAAU,QAAQ,aAAa;AACrC,cAAQ,SAAS,SAAS,CAAC;AAAA,IAC7B;AAEA,WAAO,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,EACvF;AACF;AAkBA,SAAS,qBAAqBC,OAAuB;AACnD,SAAO,yBAAyB,KAAK,CAACC,aAAYA,SAAQ,KAAKD,KAAI,CAAC;AACtE;AApRA,IA0Ba,eAsBA,cAgBA,aAgBA,YAYA,eA2BA,yBA8BA,mBAiBA,qBAmCA,mBAQA,yBAwDP,0BAaO,qBAiBA;AAvSb;AAAA;AAAA;AAaA;AAaO,IAAM,gBAAgB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAKO,IAAM,eAAe;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAKO,IAAM,cAAc;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAKO,IAAM,aAAa,CAAC,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW;AAYrE,IAAM,gBAAgB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAKO,IAAM,0BAA2D;AAAA,MACtE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AASO,IAAM,oBAAoB;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AASO,IAAM,sBAA4C,CAAC,SAAiB,aAAkC;AAC3G,YAAM,QAAQ,QAAQ,YAAY;AAClC,aAAO,cAAc,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,IACxD;AAgCO,IAAM,oBAA0C,CAAC,SAAiB,aAAkC;AACzG,YAAM,QAAQ,QAAQ,YAAY;AAClC,aAAO,WAAW,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,IACrD;AAKO,IAAM,0BAAgD,OAAO,SAAiB,YAAiC;AACpH,YAAM,QAAQ,QAAQ,YAAY;AAElC,UAAI,CAAC,QAAQ,cAAc;AACzB,eAAO,kBAAkB,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5D;AAGA,YAAM,QAAQ,aAAa,YAAY;AACvC,YAAM,WAAW,QAAQ,aAAa,uCAA+C,KAAK,CAAC;AAC3F,YAAM,iBAAiB,QAAQ,aAAa,6CAAqD,KAAK,CAAC;AAEvG,YAAM,cAAc,CAAC,GAAG,UAAU,GAAG,cAAc;AAEnD,UAAI,YAAY,SAAS,GAAG;AAC1B,eAAO,YAAY,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MACvF;AAGA,aAAO,kBAAkB,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,IAC5D;AAoCA,IAAM,2BAA2B;AAAA,MAC/B;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACF;AAMO,IAAM,sBAA4C,CAAC,SAAiB,YAAiC;AAC1G,UAAI,CAAC,QAAQ,SAAS;AACpB,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,QAAQ,QAAQ,YAAY;AAClC,YAAM,QAAQ,QAAQ,QAAQ,SAAS,CAAC;AAExC,aAAO,MACJ,OAAO,CAAC,SAAS,KAAK,WAAW,EACjC,IAAI,CAAC,SAAS,KAAK,WAAY,EAC/B,OAAO,CAACA,UAASA,MAAK,YAAY,EAAE,SAAS,KAAK,KAAK,CAAC,qBAAqBA,KAAI,CAAC;AAAA,IACvF;AAKO,IAAM,0BAAgD,CAAC,SAAiB,YAAiC;AAC9G,UAAI,CAAC,QAAQ,SAAS;AACpB,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,QAAQ,QAAQ,YAAY;AAClC,YAAM,QAAQ,QAAQ,QAAQ,SAAS,CAAC;AAExC,aAAO,MACJ,OAAO,CAAC,SAAS,KAAK,IAAI,EAC1B,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE,SAAS,KAAK,CAAC;AAAA,IACxD;AAAA;AAAA;;;ACnTA,IAoBM,kBA8EO,aA6LA;AA/Rb;AAAA;AAAA;AAYA;AAEA;AAMA,IAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEO,IAAM,cAAN,cAA0B,gBAAgB;AAAA,MACtC,WAAiC;AAAA,QACxC,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS,CAAC,GAAG;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,QACA,UAAU,CAAC,SAAS,gBAAgB,aAAa,cAAc;AAAA,MACjE;AAAA,MAEA,MAAM,QACJ,SACA,MACA,QAC6B;AAC7B,cAAM,cAAc,KAAK,CAAC;AAE1B,YAAI,aAAa;AACf,iBAAO,KAAK,gBAAgB,SAAS,WAAW;AAAA,QAClD;AAEA,eAAO,KAAK,YAAY,OAAO;AAAA,MACjC;AAAA,MAEQ,YAAY,SAAkD;AACpE,cAAM,SAAS,QAAQ;AACvB,cAAM,WAAW,oBAAoB;AAErC,eAAO,KAAK,0CAA0C;AAGtD,cAAM,WAAW,SAAS,OAAO;AACjC,cAAM,aAAa,oBAAI,IAA4B;AAEnD,mBAAW,OAAO,UAAU;AAC1B,gBAAM,WAAW,IAAI,SAAS;AAC9B,cAAI,CAAC,WAAW,IAAI,QAAQ,GAAG;AAC7B,uBAAW,IAAI,UAAU,CAAC,CAAC;AAAA,UAC7B;AACA,qBAAW,IAAI,QAAQ,EAAG,KAAK,GAAG;AAAA,QACpC;AAGA,mBAAW,CAAC,UAAU,IAAI,KAAK,YAAY;AACzC,iBAAO,KAAK;AAAA,EAAK,QAAQ,GAAG;AAC5B,qBAAW,OAAO,MAAM;AACtB,kBAAM,UAAU,IAAI,SAAS,UAAU,KAAK,IAAI,SAAS,QAAQ,KAAK,IAAI,CAAC,MAAM;AACjF,mBAAO,KAAK,MAAM,IAAI,SAAS,IAAI,GAAG,OAAO,MAAM,IAAI,SAAS,WAAW,EAAE;AAAA,UAC/E;AAAA,QACF;AAGA,eAAO,KAAK,qCAAqC;AACjD,eAAO,KAAK,oEAAoE;AAChF,eAAO,KAAK,KAAK,iBAAiB,MAAM,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,OAAO;AAChE,eAAO,KAAK,oEAAoE;AAEhF,eAAO,KAAK,8DAA8D;AAE1E,eAAO,KAAK,QAAQ,gBAAgB;AAAA,MACtC;AAAA,MAEQ,gBAAgB,SAA8B,aAAyC;AAC7F,cAAM,SAAS,QAAQ;AACvB,cAAM,WAAW,oBAAoB;AAGrC,cAAM,UAAU,SAAS,IAAI,WAAW;AACxC,YAAI,SAAS;AACX,iBAAO,KAAK,oBAAoB,SAAS,OAAO;AAAA,QAClD;AAGA,YAAI,iBAAiB,SAAS,YAAY,YAAY,CAAC,GAAG;AACxD,iBAAO,KAAK,IAAI,WAAW,+BAA+B;AAC1D,iBAAO,KAAK,yDAAyD;AACrE,iBAAO,KAAK,8EAA8E;AAC1F,iBAAO,KAAK,QAAQ,oBAAoB,WAAW,EAAE;AAAA,QACvD;AAEA,eAAO,KAAK,MAAM,qBAAqB,oBAAoB,WAAW,EAAE;AAAA,MAC1E;AAAA,MAEQ,oBAAoB,SAA8B,SAA2C;AACnG,cAAM,SAAS,QAAQ;AACvB,cAAM,OAAO,QAAQ;AAErB,eAAO,KAAK,QAAQ,KAAK,IAAI,MAAM;AACnC,eAAO,KAAK,KAAK,WAAW;AAE5B,YAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,iBAAO,KAAK;AAAA,WAAc,KAAK,QAAQ,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,QACzE;AAGA,YAAI,QAAQ,IAAI,KAAK,IAAI;AACzB,YAAI,KAAK,WAAW;AAClB,qBAAW,OAAO,KAAK,WAAW;AAChC,qBAAS,IAAI,WAAW,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,UAC1D;AAAA,QACF;AACA,YAAI,KAAK,OAAO;AACd,qBAAW,QAAQ,KAAK,OAAO;AAC7B,kBAAM,UAAU,KAAK,YAAY,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI;AAClE,qBAAS,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,OAAO;AAAA,UACvD;AAAA,QACF;AACA,eAAO,KAAK;AAAA,SAAY,KAAK,EAAE;AAG/B,YAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,iBAAO,KAAK,cAAc;AAC1B,qBAAW,OAAO,KAAK,WAAW;AAChC,kBAAM,WAAW,IAAI,WAAW,eAAe;AAC/C,gBAAI,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,MAAM,IAAI,WAAW;AACzD,gBAAI,IAAI,cAAc;AACpB,sBAAQ,cAAc,IAAI,YAAY;AAAA,YACxC;AACA,gBAAI,IAAI,SAAS;AACf,sBAAQ,cAAc,IAAI,QAAQ,KAAK,IAAI,CAAC;AAAA,YAC9C;AACA,mBAAO,KAAK,IAAI;AAAA,UAClB;AAAA,QACF;AAGA,YAAI,KAAK,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,iBAAO,KAAK,UAAU;AACtB,qBAAW,QAAQ,KAAK,OAAO;AAC7B,kBAAM,YAAY,KAAK,YAAY,MAAM,KAAK,SAAS,KAAK;AAC5D,gBAAI,OAAO,OAAO,KAAK,IAAI,GAAG,SAAS,MAAM,KAAK,WAAW;AAC7D,gBAAI,KAAK,iBAAiB,QAAW;AACnC,sBAAQ,cAAc,KAAK,YAAY;AAAA,YACzC;AACA,gBAAI,KAAK,SAAS;AAChB,sBAAQ,cAAc,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,YAC/C;AACA,mBAAO,KAAK,IAAI;AAAA,UAClB;AAAA,QACF;AAGA,YAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,iBAAO,KAAK,aAAa;AACzB,qBAAW,WAAW,KAAK,UAAU;AACnC,mBAAO,KAAK,KAAK,OAAO,EAAE;AAAA,UAC5B;AAAA,QACF;AAGA,cAAM,OAAiB,CAAC;AACxB,YAAI,KAAK,gBAAiB,MAAK,KAAK,SAAS;AAC7C,YAAI,KAAK,kBAAmB,MAAK,KAAK,kBAAkB;AACxD,YAAI,KAAK,SAAS,GAAG;AACnB,iBAAO,KAAK;AAAA,YAAe,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,QAC9C;AAEA,eAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,EAAE;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,eACJ,SACA,MACA,YACA,UACmB;AACnB,YAAI,aAAa,EAAG,QAAO,CAAC;AAE5B,cAAM,QAAQ,WAAW,YAAY;AACrC,cAAM,WAAW,oBAAoB;AAGrC,cAAM,eAAe,SAAS,gBAAgB;AAC9C,cAAM,cAAc,CAAC,GAAG,cAAc,GAAG,gBAAgB;AAEzD,eAAO,YAAY,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MAC1E;AAAA,IACF;AAEO,IAAM,cAAc,IAAI,YAAY;AAAA;AAAA;;;AC/R3C,IAgBqB;AAhBrB;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AACA,IAAAE;AACA;AAKA,IAAqB,aAArB,cAAwC,SAA0B;AAAA,MACxD;AAAA,MACA;AAAA,MAED;AAAA,MAEP,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,kBAAkB;AACpB,eAAO,KAAK,sBAAsB;AAAA,MACpC;AAAA,MAEA,IAAI,eAA6B;AAC/B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,YAAIC,QAAO,KAAK,cAAc;AAE9B,YAAI,CAACA,MAAK,SAAS,cAAc,oBAAoB,GAAG;AACtD,UAAAA,SAAQ,cAAc;AAAA,QACxB;AAEA,QAAAA,SAAQ,KAAK;AAEb,eAAOA;AAAA,MACT;AAAA,MAEA,YAAY,cAA4B,YAAoB;AAC1D,cAAM;AAEN,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,MAAM,eAAe,sBAAkD;AACrE,cAAM,IAAI,MAAM,kBAAkB;AAAA,MACpC;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,IAAI,MAAM,kBAAkB;AAAA,MACpC;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,MAAM,YAAY,OAAgC;AAChD,YAAI,SAAS,CAAC,KAAK,mBAAmB;AACpC,eAAK,WAAW;AAEhB,gBAAM,UAAU,KAAK,cAAc;AAInC,cAAI,iBAAiB,OAAO;AAC1B,kBAAM,OAAO,QAAQ,QAAQ;AAE7B,gBAAI,qBAAqB,KAAK;AAE9B,gBAAI,mBAAmB,WAAW,GAAG,GAAG;AACtC,mCAAqB,mBAAmB,UAAU,GAAG,mBAAmB,MAAM;AAAA,YAChF;AAEA,gBAAI,OAAO;AAEX,gBAAI;AACF,qBAAO,MAAM,KAAK,KAAK,MAAM,WAAW;AAAA,gBACtC,OAAO,QAAQ;AAAA,gBACf,MAAM,QAAQ;AAAA,gBACd,KAAK,QAAQ;AAAA,gBACb,MAAM;AAAA,cACR,CAAC;AAAA,YACH,SAAS,GAAQ;AACf,kBAAI,EAAE,QAAQ,EAAE,SAAS,eAAe,EAAE,QAAQ,QAAQ,YAAY,KAAK,GAAG;AAC5E,sBAAM,IAAI,MAAM,EAAE,OAAO;AAAA,cAC3B,OAAO;AACL,oBAAI,WAAW,6CAA6C,EAAE,SAAS,IAAI,GAAG;AAAA,cAChF;AAAA,YACF;AAEA,gBAAI,MAAM;AACR,oBAAM,WAAW,KAAK;AAKtB,kBAAI,SAAS,YAAY,UAAa,SAAS,aAAa,QAAW;AACrE,oBAAI,SAAS,aAAa,UAAU;AAClC,sBAAI,WAAW,SAAS;AAExB,sBAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,+BAAW,SAAS,QAAQ,QAAQ,EAAE;AAAA,kBACxC;AAEA,uBAAK,WAAW,IAAI,WAAW,UAAU,oBAAoB,QAAQ,CAAC;AAEtE,wBAAM,oBAAoB,iBAAiB,sBAAsB,KAAK,IAAI;AAE1E,sBAAI,0CAA+C;AACjD,0BAAM,SAAS,UAAU,eAAe,IAAI,SAAS,KAAK,SAAS,MAAM,GAAG,GAAG,KAAK,SAAS,MAAM;AAEnG,yBAAK,WAAW,OAAO;AAAA,kBACzB;AAAA,gBACF,OAAO;AACL,uBAAK,WAAW,SAAS;AAAA,gBAC3B;AAAA,cACF;AAAA,YACF;AAAA,UACF,OAAO;AACL,iBAAK,WAAW;AAMhB,kBAAM,MAAM,KAAK,cAAc;AAC/B,kBAAMA,QACJ,uCACA,IAAI,YACJ,MACA,IAAI,WACJ,OACC,IAAI,SAAS,IAAI,SAAS,UAC3B,UAAU,sBAAsB,KAAK,QAAQ;AAE/C,gBAAI,iBAAiB,sBAAsB,KAAK,IAAI,0BAA+B;AACjF,kBAAI,WAAW;AAEf,kBAAI;AACF,2BAAW,MAAM,cAAM,IAAIA,OAAM;AAAA,kBAC/B,cAAc;AAAA,kBACd,SAAS,CAAC;AAAA,gBACZ,CAAC;AAAA,cACH,SAAS,GAAQ;AACf,oBAAI,MAAM,8BAA8B,KAAK,WAAW,aAAaA,QAAO,SAAS,EAAE,SAAS,CAAC;AACjG,qBAAK,oBAAoB,oBAAI,KAAK;AAClC,uBAAO,KAAK;AAAA,cACd;AAEA,mBAAK,WAAW,IAAI,WAAW,SAAS,IAAI;AAAA,YAC9C,OAAO;AACL,kBAAI,WAAW;AAEf,kBAAI;AACF,2BAAW,MAAM,cAAM,IAAIA,OAAM;AAAA,kBAC/B,SAAS,CAAC;AAAA,gBACZ,CAAC;AAAA,cACH,SAAS,GAAQ;AACf,oBAAI,MAAM,8BAA8B,KAAK,WAAW,SAAS,EAAE,SAAS,GAAGA,KAAI;AAEnF,qBAAK,oBAAoB,oBAAI,KAAK;AAClC,uBAAO,KAAK;AAAA,cACd;AAEA,kBAAI,SAAS,SAAS;AAEtB,kBAAI,OAAO,WAAW,UAAU;AAC9B,oBAAI;AACF,2BAAS,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,gBACzC,SAAS,GAAG;AACV,sBAAI,KAAK,gCAAgC;AAAA,gBAC3C;AAAA,cACF;AAEA,kBAAI,SAAS,WAAW,KAAK;AAC3B,oBAAI,KAAK,mCAAmCA,QAAO,0BAA0B,SAAS,MAAM;AAC5F,oBAAI,QAAQ,mCAAmCA,QAAO,0BAA0B,SAAS,MAAM;AAAA,cACjG;AAEA,kBAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC,oBAAI,KAAK,mCAAmCA,QAAO,qBAAqB;AACxE,oBAAI,QAAQ,mCAAmCA,QAAO,qBAAqB;AAAA,cAC7E;AAEA,mBAAK,WAAW;AAAA,YAClB;AAAA,UACF;AAEA,eAAK,oBAAoB,oBAAI,KAAK;AAAA,QACpC;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,WAAW,YAAwC,YAA6B,UAAmB;AACjG,cAAM,WAAW,iBAAiB,iBAAiB,KAAK,UAAU,UAAU;AAE5E,YAAI,UAAU;AACZ,iBAAO;AAAA,QACT;AAEA,YAAI,aAAa,KAAK;AACtB,aAAK,WAAW;AAEhB,aAAK,mBAAmB,YAAY,YAAY,QAAQ;AAExD,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,cAA6B;AACjC,YAAI,KAAK,aAAa,QAAQ,UAAU;AACtC,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,aAAK,oBAAoB,oBAAI,KAAK;AAElC,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;ACnOA,IAeqB;AAfrB;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAIA,IAAqB,eAArB,MAAqB,sBAAqB,WAA8B;AAAA,MAC9D;AAAA,MACA;AAAA,MAED;AAAA,MAEP;AAAA,MACA;AAAA,MAEQ;AAAA,MACA;AAAA,MAER,IAAI,UAAyB;AAC3B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAAoC;AACtC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,YAAIC,QAAO,KAAK;AAEhB,YAAI,CAACA,MAAK,SAAS,cAAc,oBAAoB,GAAG;AACtD,UAAAA,SAAQ,cAAc;AAAA,QACxB;AAEA,QAAAA,SAAQ,KAAK;AAEb,eAAOA;AAAA,MACT;AAAA,MAEA,YAAY,SAAwB,cAAmC,YAAoB,YAAoB;AAC7G,cAAM;AAEN,aAAK,WAAW;AAChB,aAAK,gBAAgB;AAErB,aAAK,cAAc;AACnB,aAAK,QAAQ;AACb,aAAK,UAAU,CAAC;AAChB,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,SAAS;AACb,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAAe;AACnB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,IAAI,MAAM,kBAAkB;AAAA,MACpC;AAAA,MAEA,MAAM,mBAAqC;AACzC,cAAM,IAAI,MAAM,6BAA6B,KAAK,WAAW,oBAAoB;AAAA,MACnF;AAAA,MAEA,MAAM,0BAA4C;AAChD,cAAM,IAAI,MAAM,wCAAwC,KAAK,WAAW,oBAAoB;AAAA,MAC9F;AAAA,MAEA,MAAM,iBAAgC;AAAA,MAEtC;AAAA,MAEA,WAAW,MAA0B;AACnC,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,CAAC,UAAU,oBAAoB,SAAS,GAAG;AAC7C,cAAI,iBAAiB,SAAS;AAC9B,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,YAAI,WAAW,KAAK,MAAM,SAAS;AAEnC,YAAI,YAAY,MAAM;AACpB,qBAAW,IAAI,WAAW,MAAM,IAAI;AAEpC,eAAK,MAAM,SAAS,IAAI;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,MAA4B;AACvC,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,aAAa,KAAK,QAAQ,SAAS;AAEvC,YAAI,CAAC,YAAY;AACf,uBAAa,IAAI,cAAa,KAAK,UAAU,MAAM,KAAK,UAAU,IAAI;AAEtE,eAAK,QAAQ,SAAS,IAAI;AAAA,QAC5B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,MAAgC;AAC/C,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAAA,MAEA,MAAM,WAAW,MAA8B;AAC7C,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAAA,MAEA,MAAM,KAAK,OAAgC;AACzC,YAAI,KAAK,qBAAqB,QAAQ,CAAC,OAAO;AAC5C,iBAAO,KAAK;AAAA,QACd;AAEA,cAAM,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAChD,YAAI,iBAAiB,KAAK;AAE1B,YAAI,mBAAmB,KAAK;AAC1B,2BAAiB;AAAA,QACnB,WAAW,CAAC,eAAe,WAAW,GAAG,GAAG;AAC1C,2BAAiB,MAAM;AAAA,QACzB;AAEA,YAAI,eAAe,SAAS,GAAG,GAAG;AAChC,2BAAiB,eAAe,UAAU,GAAG,eAAe,SAAS,CAAC;AAAA,QACxE;AAIA,cAAM,UAAU;AAAA,UACd,OAAO,KAAK,QAAQ;AAAA,UACpB,MAAM,KAAK,QAAQ;AAAA,UACnB,MAAM;AAAA,QACR;AAEA,YAAI,iBAAiB;AAErB,YAAI;AACF,2BAAiB,MAAM,MAAM,WAAW,OAAO;AAAA,QACjD,SAAS,GAAG;AACV,cAAI,MAAM,wCAAwC,KAAK,QAAQ,YAAY,MAAM,KAAK,QAAQ,WAAW,MAAM,CAAC;AAAA,QAClH;AAEA,YAAI,mBAAmB,QAAW;AAChC,cAAI,MAAM,kCAAkC,KAAK,QAAQ,YAAY,MAAM,KAAK,QAAQ,QAAQ;AAEhG,eAAK,wBAAwB;AAE7B,iBAAO,KAAK;AAAA,QACd;AAEA,cAAM,WAAoC;AAE1C,cAAM,cAAc,SAAS;AAgB7B,mBAAW,KAAK,aAAa;AAC3B,gBAAM,MAAM,YAAY,CAAC;AAEzB,cAAI,IAAI,SAAS,OAAO;AACtB,kBAAM,cAAc,KAAK,aAAa,IAAI,IAAI;AAC9C,wBAAY,MAAM,IAAI;AAAA,UACxB,WAAW,IAAI,SAAS,QAAQ;AAC9B,gBAAI,iBAAiB,aAAa,IAAI,IAAI,GAAG;AAC3C,oBAAM,YAAY,KAAK,WAAW,IAAI,IAAI;AAC1C,wBAAU,MAAM,IAAI;AAAA,YACtB;AAAA,UACF;AAAA,QACF;AAEA,aAAK,wBAAwB;AAE7B,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;AC9MA,IAQqB;AARrB;AAAA;AAAA;AAGA;AACA;AAIA,IAAqB,gBAArB,MAAqB,uBAAsB,YAAgC;AAAA,MACzE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MAEA,YAAY,SAAwB,UAAkB,WAAmB,QAAiB,UAAkB,IAAI;AAC9G,cAAM;AAEN,aAAK,UAAU;AACf,aAAK,WAAW;AAChB,aAAK,SAAS;AACd,aAAK,YAAY;AAEjB,YAAI,cAAc,eAAe,cAAc,UAAU;AACvD,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAC9C;AAEA,aAAK,UAAU;AAEf,aAAK,aAAa,IAAI,aAAa,MAAM,MAAM,SAAS,EAAE;AAAA,MAC5D;AAAA,MAEA,SAAS,OAAe,OAAe;AACrC,YAAI,WAAW;AAEf,YAAI,CAAC,SAAS,SAAS,eAAc,oBAAoB,GAAG;AAC1D,sBAAY,eAAc;AAAA,QAC5B;AAEA,oBAAY;AAEZ,eAAO;AAAA,MACT;AAAA,MAEA,OAAO,oBAAoBC,OAAc;AACvC,cAAM,YAAYA,MAAK,YAAY,KAAK,oBAAoB;AAE5D,YAAI,YAAY,GAAG;AACjB,iBAAOA;AAAA,QACT;AAEA,eAAOA,MAAK,UAAU,GAAG,SAAS;AAAA,MACpC;AAAA,MAEA,MAAM,eAAe;AACnB,aAAK,YAAY;AAEjB,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;AC7DA,IAUqB;AAVrB;AAAA;AAAA;AAGA;AAGA;AACA,IAAAC;AACA;AAEA,IAAqB,WAArB,cAAsC,SAA0B;AAAA,MACtD;AAAA,MACA;AAAA,MAEA,uBAAqD,CAAC;AAAA,MACtD,aAAa;AAAA,MAErB,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,kBAAkB;AACpB,eAAO,KAAK,sBAAsB;AAAA,MACpC;AAAA,MAEA,IAAI,eAA2B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW;AACb,eAAO,KAAK,cAAc,WAAW,KAAK;AAAA,MAC5C;AAAA,MAEA,YAAY,cAA0B,YAAoB;AACxD,cAAM;AAEN,aAAK,gBAAgB;AACrB,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,MAAM,SAAS;AACb,cAAM,KAAK,YAAY,KAAK;AAE5B,eAAO,KAAK,aAAa;AAAA,MAC3B;AAAA,MAEA,MAAM,iBAAgC;AACpC,cAAM,KAAK,YAAY,IAAI;AAAA,MAC7B;AAAA,MAEA,MAAM,YAAY,OAAgC;AAGhD,YAAI,SAAS,KAAK,sBAAsB,MAAM;AAC5C,cAAI,KAAK,YAAY;AACnB,kBAAM,cAAc,KAAK;AAEzB,kBAAM,OAAO,CAACC,UAAmC,WAAmC;AAClF,0BAAY,KAAKA,QAAO;AAAA,YAC1B;AAEA,kBAAM,IAAI,QAAQ,IAAI;AAEtB,gBAAI,KAAK,sBAAsB,MAAM;AACnC,oBAAM,IAAI,MAAM;AAAA,YAClB;AAEA,mBAAO,KAAK;AAAA,UACd,OAAO;AACL,iBAAK,WAAW;AAEhB,kBAAMC,QAAO,KAAK;AAElB,gBAAI,iBAAiB,sBAAsB,KAAK,IAAI,0BAA+B;AACjF,kBAAI;AACF,sBAAM,UAAkC,CAAC;AACzC,oBAAI,KAAK,cAAc,QAAQ,WAAW;AACxC,0BAAQ,eAAe,IAAI,kBAAkB,KAAK,cAAc,QAAQ,SAAS;AAAA,gBACnF;AACA,sBAAM,WAAW,MAAM,cAAM,IAAIA,OAAM;AAAA,kBACrC,cAAc;AAAA,kBACd;AAAA,gBACF,CAAC;AAED,qBAAK,WAAW,IAAI,WAAW,SAAS,IAAI;AAAA,cAC9C,SAAS,GAAG;AAAA,cAAC;AAAA,YACf,OAAO;AACL,kBAAI,SAAS;AAEb,kBAAI;AACF,sBAAM,UAAkC,CAAC;AACzC,oBAAI,KAAK,cAAc,QAAQ,WAAW;AACxC,0BAAQ,eAAe,IAAI,kBAAkB,KAAK,cAAc,QAAQ,SAAS;AAAA,gBACnF;AACA,sBAAM,WAAW,MAAM,cAAM,IAAIA,OAAM;AAAA,kBACrC;AAAA,gBACF,CAAC;AAED,yBAAS,SAAS;AAElB,oBAAI,OAAO,WAAW,UAAU;AAC9B,sBAAI;AACF,6BAAS,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,kBACzC,SAAS,GAAG;AACV,wBAAI,KAAK,gCAAgC;AAAA,kBAC3C;AAAA,gBACF;AAEA,oBAAI,SAAS,WAAW,KAAK;AAC3B,sBAAI,QAAQ,mCAAmCA,QAAO,0BAA0B,SAAS,MAAM;AAAA,gBACjG;AAEA,oBAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC,sBAAI,QAAQ,mCAAmCA,QAAO,qBAAqB;AAAA,gBAC7E;AAAA,cACF,SAAS,GAAG;AACV,oBAAI,QAAQ,mCAAmCA,QAAO,SAAS,IAAI,QAAS,GAAW,KAAK;AAAA,cAC9F;AAEA,mBAAK,WAAW;AAAA,YAClB;AAEA,iBAAK,oBAAoB,oBAAI,KAAK;AAElC,iBAAK,aAAa;AAElB,kBAAM,cAAc,KAAK;AACzB,iBAAK,uBAAuB,CAAC;AAE7B,uBAAW,QAAQ,aAAa;AAC9B,mBAAK,MAAS;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,MAAM,eAAe,sBAAkD;AACrE,YAAI,KAAK,cAAc,QAAQ,UAAU;AACvC,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C;AAEA,YAAI;AACF,gBAAMA,QAAO,KAAK;AAClB,gBAAM,UAAkC,CAAC;AACzC,cAAI,KAAK,cAAc,QAAQ,WAAW;AACxC,oBAAQ,eAAe,IAAI,kBAAkB,KAAK,cAAc,QAAQ,SAAS;AAAA,UACnF;AAEA,gBAAM,cAAM,OAAOA,OAAM,EAAE,QAAQ,CAAC;AAEpC,cAAI,CAAC,sBAAsB;AACzB,iBAAK,cAAc,WAAW,KAAK,IAAI;AAAA,UACzC;AAEA,iBAAO;AAAA,QACT,SAAS,GAAG;AACV,cAAI,MAAM,4BAA4B,CAAC;AACvC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AAAA,MAEA,WAAW,YAAiD;AAC1D,YAAI,KAAK,cAAc,QAAQ,UAAU;AACvC,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C;AAEA,aAAK,WAAW;AAChB,aAAK,WAAW,oBAAI,KAAK;AACzB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,cAA6B;AACjC,YAAI,KAAK,cAAc,QAAQ,UAAU;AACvC,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C;AAEA,YAAI,KAAK,aAAa,MAAM;AAC1B,gBAAM,IAAI,MAAM,oCAAoC;AAAA,QACtD;AAEA,YAAI;AACF,gBAAMA,QAAO,KAAK;AAClB,gBAAM,UAAkC,CAAC;AACzC,cAAI,KAAK,cAAc,QAAQ,WAAW;AACxC,oBAAQ,eAAe,IAAI,kBAAkB,KAAK,cAAc,QAAQ,SAAS;AAAA,UACnF;AAGA,gBAAM,WAAW,iBAAiB,sBAAsB,KAAK,IAAI;AACjE,cAAI,iCAAsC;AACxC,oBAAQ,cAAc,IAAI;AAAA,UAC5B,OAAO;AACL,oBAAQ,cAAc,IAAI;AAAA,UAC5B;AAEA,gBAAM,cAAM,IAAIA,OAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;AAEhD,eAAK,oBAAoB,oBAAI,KAAK;AAClC,eAAK,WAAW;AAEhB,iBAAO,KAAK;AAAA,QACd,SAAS,GAAG;AACV,cAAI,MAAM,0BAA0B,CAAC;AACrC,gBAAM,IAAI,MAAM,0BAA0B,CAAC;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACpNA,IAaqB;AAbrB;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA,IAAAC;AAGA,IAAqB,aAArB,MAAqB,oBAAmB,WAA8B;AAAA,MAC5D;AAAA,MAER;AAAA,MACA;AAAA,MAEQ;AAAA,MACA;AAAA,MAEA,uBAAqD,CAAC;AAAA,MACtD,aAAa;AAAA,MAErB,IAAI,UAAuB;AACzB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,eAAkC;AACpC,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAmB;AACrB,YAAI,KAAK,kBAAkB,MAAM;AAC/B,iBAAO,KAAK,SAAS;AAAA,QACvB;AAEA,eAAO,KAAK,cAAc,WAAW,KAAK,OAAO,YAAY;AAAA,MAC/D;AAAA,MAEA,YAAY,SAAsB,cAAiC,YAAoB;AACrF,cAAM;AAEN,aAAK,WAAW;AAChB,aAAK,gBAAgB;AAErB,aAAK,QAAQ;AACb,aAAK,UAAU,CAAC;AAChB,aAAK,QAAQ,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,iBAAgC;AACpC,cAAM,KAAK,KAAK,IAAI;AAAA,MACtB;AAAA,MAEA,MAAM,SAAS;AACb,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAAiC;AACrC,YAAI,KAAK,SAAS,UAAU;AAC1B,iBAAO;AAAA,QACT;AAEA,YAAI;AACF,gBAAM,UAAkC,CAAC;AACzC,cAAI,KAAK,SAAS,WAAW;AAC3B,oBAAQ,eAAe,IAAI,kBAAkB,KAAK,SAAS,SAAS;AAAA,UACtE;AAGA,gBAAM,cAAM,KAAK,KAAK,WAAW,iBAAiB,MAAM,EAAE,QAAQ,CAAC;AACnE,iBAAO;AAAA,QACT,SAAS,GAAG;AACV,cAAI,MAAM,8BAA8B,CAAC;AACzC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,WAAW,MAAwB;AACjC,YAAI,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,wCAAwC,IAAI;AAE9E,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,WAAW,KAAK,MAAM,SAAS;AAEnC,YAAI,aAAa,QAAW;AAC1B,qBAAW,IAAI,SAAS,MAAM,IAAI;AAElC,eAAK,MAAM,SAAS,IAAI;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,OAAO,wBAAkD;AAC7D,cAAM,IAAI,MAAM,kBAAkB;AAAA,MACpC;AAAA,MAEA,YAAY,MAAa;AACvB,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,cAAM,WAAW,KAAK,MAAM,SAAS;AAErC,YAAI,OAAO,aAAa,MAAM,oBAAoB;AAElD,aAAK,MAAM,SAAS,IAAI;AAAA,MAC1B;AAAA,MAEA,iBAAiB,MAAgB;AAC/B,cAAM,YAAY,iBAAiB,iBAAiB,KAAK,IAAI;AAE7D,aAAK,MAAM,SAAS,IAAI;AAAA,MAC1B;AAAA,MAEA,aAAa,MAA0B;AACrC,YAAI,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,0CAA0C,IAAI;AAChF,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AAExD,YAAI,aAAa,KAAK,QAAQ,SAAS;AAEvC,YAAI,CAAC,YAAY;AACf,uBAAa,IAAI,YAAW,KAAK,UAAU,MAAM,IAAI;AAErD,eAAK,QAAQ,SAAS,IAAI;AAAA,QAC5B;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,MAAgC;AAC/C,YAAI,KAAK,SAAS,UAAU;AAC1B,gBAAM,IAAI,MAAM,kDAAkD;AAAA,QACpE;AAEA,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AACxD,cAAM,OAAO,KAAK,MAAM,SAAS;AAEjC,YAAI,MAAM;AACR,iBAAO,MAAM,KAAK,eAAe;AAAA,QACnC;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,WAAW,MAA8B;AAC7C,cAAM,OAAO,KAAK,WAAW,IAAI;AACjC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,MAAoB;AAC7B,cAAM,YAAY,iBAAiB,iBAAiB,IAAI;AACxD,aAAK,MAAM,SAAS,IAAI;AAAA,MAC1B;AAAA,MAEA,MAAM,mBAAqC;AACzC,cAAM,IAAI,MAAM,6BAA6B,KAAK,WAAW,oBAAoB;AAAA,MACnF;AAAA,MAEA,MAAM,0BAA4C;AAChD,cAAM,IAAI,MAAM,wCAAwC,KAAK,WAAW,oBAAoB;AAAA,MAC9F;AAAA,MAEA,MAAM,KAAK,OAAgC;AACzC,YAAI,KAAK,qBAAqB,QAAQ,CAAC,OAAO;AAC5C,iBAAO,KAAK;AAAA,QACd;AAEA,YAAI,KAAK,YAAY;AACnB,gBAAM,cAAc,KAAK;AAEzB,gBAAM,OAAO,CAACC,UAAmC,WAAmC;AAClF,wBAAY,KAAKA,QAAO;AAAA,UAC1B;AAEA,gBAAM,IAAI,QAAQ,IAAI;AAEtB,cAAI,KAAK,sBAAsB,MAAM;AACnC,kBAAM,IAAI,MAAM;AAAA,UAClB;AAEA,iBAAO,KAAK;AAAA,QACd,OAAO;AACL,eAAK,aAAa;AAClB,cAAI,WAAW;AAEf,cAAI;AAEF,kBAAM,UAAkC,CAAC;AACzC,gBAAI,KAAK,SAAS,WAAW;AAC3B,sBAAQ,eAAe,IAAI,kBAAkB,KAAK,SAAS,SAAS;AAAA,YACtE;AACA,kBAAM,aAAa,KAAK,WAAW;AACnC,uBAAW,MAAM,cAAM,IAAI,YAAY;AAAA,cACrC;AAAA,YACF,CAAC;AAAA,UACH,SAAS,GAAQ;AACf,gBAAI,MAAM,0CAA0C,KAAK,WAAW,SAAS,GAAG,WAAW,EAAE;AAAA,UAC/F;AAEA,cAAI,UAAU;AACZ,kBAAM,QAAoB,SAAS;AAEnC,gBAAI,MAAM,UAAU,QAAQ,MAAM,UAAU,QAAW;AACrD,uBAAS,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,KAAK;AAC3C,sBAAM,OAAO,MAAM,MAAM,CAAC;AAE1B,oBAAI,iBAAiB,aAAa,IAAI,GAAG;AACvC,uBAAK,WAAW,IAAI;AAAA,gBACtB;AAAA,cACF;AAAA,YACF;AAEA,gBAAI,MAAM,YAAY,QAAQ,MAAM,YAAY,QAAW;AACzD,uBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,QAAQ,KAAK;AAC7C,sBAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,qBAAK,aAAa,MAAM;AAAA,cAC1B;AAAA,YACF;AAAA,UACF;AAEA,eAAK,wBAAwB;AAE7B,eAAK,aAAa;AAElB,gBAAM,cAAc,KAAK;AACzB,eAAK,uBAAuB,CAAC;AAE7B,qBAAW,QAAQ,aAAa;AAC9B,iBAAK,MAAS;AAAA,UAChB;AAAA,QACF;AAEA,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA;AAAA;;;ACpPA,IAoDAC,qBAuBqB;AA3ErB;AAAA;AAAA;AA8CA;AACA;AAEA;AAEA;AACA,IAAAA,sBAAgC;AAuBhC,IAAqB,cAArB,MAAqB,qBAAoB,YAAuD;AAAA,MAC9F;AAAA,MAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,WAAoB;AAAA;AAAA,MAGZ,aAA+B;AAAA;AAAA,MAG/B,oBAAiC,oBAAI,IAAI;AAAA;AAAA,MAGzC;AAAA;AAAA,MAGA,eAAwB;AAAA;AAAA,MAGxB;AAAA;AAAA,MAGA,iBAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ1B,oBAAoB,IAAI,oCAAoE;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpG,IAAW,mBAAmB;AAC5B,eAAO,KAAK,kBAAkB,QAAQ;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAe,gBAA0C,oBAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjE,OAAO,IAAI,SAA8B;AAEvC,YAAI,gBAAgB;AACpB,YAAI,CAAC,cAAc,SAAS,YAAY,oBAAoB,GAAG;AAC7D,2BAAiB,YAAY;AAAA,QAC/B;AAEA,YAAI,UAAU,aAAY,cAAc,IAAI,aAAa;AACzD,YAAI,CAAC,SAAS;AACZ,oBAAU,IAAI,aAAY,OAAO;AACjC,uBAAY,cAAc,IAAI,eAAe,OAAO;AAAA,QACtD;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,aAAa;AAClB,qBAAY,cAAc,MAAM;AAAA,MAClC;AAAA,MAEA,YAAY,QAAgB;AAC1B,cAAM;AAEN,aAAK,UAAU;AAEf,YAAI,CAAC,KAAK,QAAQ,SAAS,YAAY,oBAAoB,GAAG;AAC5D,eAAK,WAAW,YAAY;AAAA,QAC9B;AAEA,aAAK,aAAa,IAAI,WAAW,MAAM,MAAM,EAAE;AAAA,MACjD;AAAA,MAEA,MAAM,eAAe;AACnB,aAAK,YAAY;AAEjB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,cAAuB;AACzB,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,YAA8B;AAChC,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,KAAK,OAA2B;AAClC,aAAK,QAAQ;AAAA,MACf;AAAA,MAEA,IAAI,OAA2B;AAC7B,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAM,QAAQC,MAAc,WAAmC;AAC7D,YAAI,KAAK,cAAc;AACrB;AAAA,QACF;AAEA,cAAM,QAAQ,aAAa,KAAK;AAChC,YAAI,CAAC,OAAO;AACV,cAAI,MAAM,gDAAgD;AAC1D;AAAA,QACF;AAGA,YAAI,QAAQA;AACZ,YAAI,CAAC,OAAO;AAGV,cAAI;AACJ,cAAI;AAEF,qBAAS,IAAI,IAAI,KAAK,OAAO;AAAA,UAC/B,QAAQ;AAGN,kBAAM,eAAe;AACrB,gBAAI,aAAa,UAAU,QAAQ;AACjC,uBAAS,IAAI,IAAI,KAAK,SAAS,aAAa,SAAS,MAAM;AAAA,YAC7D,OAAO;AACL,kBAAI,QAAQ,yEAAyE;AACrF;AAAA,YACF;AAAA,UACF;AACA,gBAAM,aAAa,OAAO,aAAa,WAAW,SAAS;AAC3D,kBAAQ,GAAG,UAAU,KAAK,OAAO,IAAI;AAAA,QACvC;AAGA,iBAAS,UAAU,mBAAmB,KAAK,CAAC;AAE5C,YAAI;AACF,eAAK,aAAa,IAAI,UAAU,KAAK;AAGrC,eAAK,WAAW,SAAS,MAAM;AAC7B,iBAAK,eAAe;AACpB,gBAAI,QAAQ,wCAAwC,OAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE;AAG1E,gBAAI,KAAK,kBAAkB,OAAO,GAAG;AACnC,mBAAK,kBAAkB,aAAa,MAAM,KAAK,KAAK,iBAAiB,CAAC;AAAA,YACxE;AAAA,UACF;AAEA,eAAK,WAAW,UAAU,MAAM;AAC9B,iBAAK,eAAe;AACpB,gBAAI,QAAQ,2CAA2C;AAGvD,gBAAI,KAAK,kBAAkB,CAAC,KAAK,iBAAiB;AAChD,mBAAK,kBAAkB,WAAW,MAAM;AACtC,qBAAK,kBAAkB;AACvB,qBAAK,QAAQA,MAAK,SAAS,EAAE,MAAM,CAACC,SAAQ;AAC1C,sBAAI,MAAM,kDAAkDA,IAAG;AAAA,gBACjE,CAAC;AAAA,cACH,GAAG,GAAI;AAAA,YACT;AAAA,UACF;AAEA,eAAK,WAAW,UAAU,CAAC,UAAU;AACnC,gBAAI,QAAQ,oCAAoC,KAAK;AAAA,UACvD;AAEA,eAAK,WAAW,YAAY,CAAC,UAAU;AACrC,gBAAI,MAAM,+CAA+C,MAAM,KAAK,UAAU,GAAG,GAAG,CAAC;AACrF,iBAAK,oBAAoB,MAAM,IAAI;AAAA,UACrC;AAGA,gBAAM,IAAI,QAAc,CAACC,UAAS,WAAW;AAC3C,gBAAI,CAAC,KAAK,YAAY;AACpB,qBAAO,IAAI,MAAM,uBAAuB,CAAC;AACzC;AAAA,YACF;AAEA,kBAAM,SAAS,MAAM;AACnB,mBAAK,YAAY,oBAAoB,QAAQ,MAAM;AACnD,mBAAK,YAAY,oBAAoB,SAAS,OAAO;AACrD,cAAAA,SAAQ;AAAA,YACV;AAEA,kBAAM,UAAU,CAAC,MAAa;AAC5B,mBAAK,YAAY,oBAAoB,QAAQ,MAAM;AACnD,mBAAK,YAAY,oBAAoB,SAAS,OAAO;AACrD,qBAAO,IAAI,MAAM,6BAA6B,CAAC;AAAA,YACjD;AAEA,gBAAI,KAAK,WAAW,eAAe,UAAU,MAAM;AACjD,cAAAA,SAAQ;AAAA,YACV,OAAO;AACL,mBAAK,WAAW,iBAAiB,QAAQ,MAAM;AAC/C,mBAAK,WAAW,iBAAiB,SAAS,OAAO;AAAA,YACnD;AAAA,UACF,CAAC;AAAA,QACH,SAAS,GAAG;AACV,cAAI,MAAM,+CAA+C,CAAC;AAC1D,gBAAM;AAAA,QACR;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,aAAmB;AACjB,aAAK,iBAAiB;AAEtB,YAAI,KAAK,iBAAiB;AACxB,uBAAa,KAAK,eAAe;AACjC,eAAK,kBAAkB;AAAA,QACzB;AAEA,YAAI,KAAK,YAAY;AACnB,eAAK,WAAW,MAAM;AACtB,eAAK,aAAa;AAAA,QACpB;AAEA,aAAK,eAAe;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,UAAU,YAAsB,MAA8B;AAClE,mBAAW,QAAQ,YAAY;AAC7B,eAAK,kBAAkB,IAAI,IAAI;AAAA,QACjC;AAEA,YAAI,SAAS,QAAW;AACtB,eAAK,QAAQ;AAAA,QACf;AAEA,YAAI,KAAK,cAAc;AACrB,eAAK,kBAAkB,aAAa,UAAU;AAAA,QAChD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,YAAY,YAAqC;AACrD,mBAAW,QAAQ,YAAY;AAC7B,eAAK,kBAAkB,OAAO,IAAI;AAAA,QACpC;AAEA,YAAI,KAAK,cAAc;AACrB,eAAK,kBAAkB,eAAe,UAAU;AAAA,QAClD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKQ,kBAAkB,SAAsC,YAA4B;AAC1F,YAAI,CAAC,KAAK,cAAc,KAAK,WAAW,eAAe,UAAU,MAAM;AACrE;AAAA,QACF;AAEA,cAAMC,WAAU;AAAA,UACd,QAAQ;AAAA,YACN,SAAS;AAAA,YACT,WAAW,OAAO,aAAa,OAAO,WAAW,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAAA,YACnF,aAAa;AAAA,YACb,gBAAgB;AAAA,UAClB;AAAA,UACA,MAAM;AAAA,YACJ;AAAA,YACA,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAEA,YAAI,QAAQ,+CAA+C,KAAK,UAAUA,QAAO,CAAC,EAAE;AACpF,aAAK,WAAW,KAAK,KAAK,UAAUA,QAAO,CAAC;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA,MAKA,MAAc,oBAAoB,MAA6B;AAC7D,YAAI;AACF,gBAAM,UAAsC,KAAK,MAAM,IAAI;AAE3D,cAAI;AAAA,YACF,kDAAkD,QAAQ,QAAQ,WAAW,eAAe,QAAQ,MAAM,SAAS,UAAU,QAAQ,MAAM,IAAI,cAAc,QAAQ,MAAM,QAAQ;AAAA,UACrL;AAEA,cAAI,QAAQ,OAAO,gBAAgB,gBAAgB;AACjD,gBAAI,MAAM,oDAAoD,QAAQ,OAAO,WAAW,EAAE;AAC1F;AAAA,UACF;AAEA,gBAAM,EAAE,WAAW,MAAAC,OAAM,SAAS,IAAI,QAAQ;AAG9C,cAAI,cAAc,kBAAkB;AAClC,kBAAM,SAAS,QAAQ,KAAK,UAAU;AACtC,kBAAM,WAAW,QAAQ,KAAK,aAAa;AAE3C,gBAAI,QAAQ,wDAAwD,MAAM,EAAE;AAG5E,iBAAK,iBAAiB;AAGtB,iBAAK,kBAAkB,SAAS,MAAM,EAAE,QAAQ,SAAS,CAAC;AAC1D;AAAA,UACF;AAGA,cAAI,CAACA,OAAM;AACT,gBAAI,MAAM,qDAAqD,SAAS,EAAE;AAC1E;AAAA,UACF;AAMA,cAAI,WAAWA;AACf,cAAI,YAAY,CAACA,MAAK,WAAW,WAAW,GAAG,KAAK,CAACA,MAAK,WAAW,MAAM,WAAW,GAAG,GAAG;AAE1F,kBAAM,YAAYA,MAAK,WAAW,GAAG,IAAIA,MAAK,UAAU,CAAC,IAAIA;AAC7D,uBAAW,IAAI,QAAQ,IAAI,SAAS;AAAA,UACtC;AAEA,cAAI,CAAC,SAAS,WAAW,GAAG,GAAG;AAC7B,uBAAW,MAAM;AAAA,UACnB;AAEA,cAAI,QAAQ,4BAA4B,SAAS,cAAcA,KAAI,OAAO,QAAQ,EAAE;AAGpF,kBAAQ,WAAW;AAAA,YACjB,KAAK,aAAa;AAEhB,oBAAM,OAAO,MAAM,KAAK,WAAW,2BAA2B,QAAQ;AACtE,kBAAI,MAAM,yCAAyC,MAAM,QAAQ,EAAE;AACnE,kBAAI,MAAM;AACR,qBAAK,gBAAgB,IAAI;AAAA,cAC3B;AACA;AAAA,YACF;AAAA,YAEA,KAAK,eAAe;AAClB,mBAAK,kBAAkB,QAAQ;AAC/B,kBAAI,MAAM,2CAA2C,QAAQ,EAAE;AAC/D;AAAA,YACF;AAAA,YAEA,KAAK,eAAe;AAElB,kBAAI;AACF,sBAAM,OAAO,MAAM,KAAK,WAAW,wBAAwB,QAAQ;AACnE,oBAAI,MAAM;AAER,wBAAM,KAAK,YAAY,IAAI;AAC3B,uBAAK,0BAA0B;AAAA,oBAC7B;AAAA,oBACA;AAAA,oBACA,UAAU;AAAA,kBACZ,CAAC;AAAA,gBACH,OAAO;AACL,sBAAI,MAAM,sDAAsD,QAAQ,EAAE;AAAA,gBAC5E;AAAA,cACF,SAAS,SAAS;AAChB,oBAAI,MAAM,+CAA+C,QAAQ,KAAK,OAAO,EAAE;AAAA,cACjF;AACA;AAAA,YACF;AAAA,YAEA,KAAK,iBAAiB;AAEpB,oBAAM,SAAS,MAAM,KAAK,WAAW,0BAA0B,QAAQ;AACvE,kBAAI,MAAM,2CAA2C,QAAQ,QAAQ,EAAE;AACvE,kBAAI,QAAQ;AACV,sBAAM,OAAO,eAAe;AAC5B,qBAAK,kBAAkB,MAAM;AAAA,cAC/B;AACA;AAAA,YACF;AAAA,UACF;AAEA,cAAI,QAAQ,yCAAyC,SAAS,IAAI,QAAQ,EAAE;AAAA,QAC9E,SAAS,GAAG;AACV,cAAI,QAAQ,gDAAgD,CAAC;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClfA,YAAY,aAAa;AARzB,IAeqB;AAfrB;AAAA;AAAA;AAGA;AACA;AAEA;AAKA;AACA;AACA;AAEA,IAAqB,eAArB,MAAqB,cAAmC;AAAA,MAC9C;AAAA,MACA,oBAAyC;AAAA,MACzC,OAA+B;AAAA,MAC/B,oBAAyC;AAAA,MACzC,QAA4B;AAAA,MAEpC,OAAe,gBAAgB;AAAA,MAE/B,YAAY,WAAoB;AAC9B,aAAK,UAAU;AAEf,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,MACzC;AAAA,MAEA;AAAA,MACA;AAAA,MAEA,YAAYC,UAAyD;AACnE,YAAI,SAAS,qBAAqB,SAASA,SAAQ,IAAI,GAAG;AACxD,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,WAAW;AAAA,UACb;AAAA,QACF;AAEA,eAAO;AAAA,UACL,MAAMA,SAAQ;AAAA,UACd,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MAEA,WAAW,SAAiB;AAC1B,aAAK,iBAAiB;AACtB,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,gBAAgB,CAAC;AAAA,QACxB;AAEA,aAAK,cAAc,KAAK,EAAE,QAAiB,CAAC;AAAA,MAC9C;AAAA,MAEA,kBAAkB,IAAY,SAAiB;AAC7C,aAAK,WAAW,mBAAmB,OAAO;AAE1C,eAAO;AAAA,UACL,QAAQ;AAAA,YACN;AAAA,cACE;AAAA,cACA,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,qBAAqB,MAAc,MAAqC;AACtE,YAAI,CAAC,KAAK,MAAM;AACd,iBAAO,KAAK,kBAAkB,oBAAoB,6BAA6B,OAAO,GAAG;AAAA,QAC3F;AAEA,mBAAW,WAAW,KAAK,KAAK,UAAU;AACxC,cAAI,QAAQ,SAAS,MAAM;AACzB,mBAAO;AAAA,cACL,UAAU,QAAQ,QAAQ,KAAK,IAAI;AAAA,cACnC,QAAQ,OAAO,OAAO;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAEA,eAAO,KAAK,kBAAkB,oBAAoB,6BAA6B,OAAO,GAAG;AAAA,MAC3F;AAAA,MAEA,IAAI,cAAc;AAChB,eAAO,KAAK,WAAW,KAAK,QAAQ,kBAAkB;AAAA,MACxD;AAAA,MAEA,0BAA0B;AACxB,mBAAW,eAAe,KAAK,QAAQ,OAAO;AAC5C,cAAI,YAAY,0BAAiC;AAC/C,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,SAASC,QAA0D;AACvE,YACE,CAAC,KAAK,WACN,CAAC,KAAK,QAAQ,iBACd,CAAC,KAAK,qBACN,CAAC,KAAK,qBACN,CAAC,KAAK,MACN;AACA,iBAAO,KAAK,kBAAkB,cAAc,2CAA2C;AAAA,QACzF;AAEA,YAAIA,OAAM,SAAS,2BAA2B;AAC5C,iBAAO,KAAK,qBAAqB,2BAA2B,IAAI;AAAA,QAClE,WAAWA,OAAM,SAAS,mBAAmB;AAC3C,iBAAO,KAAK,qBAAqB,mBAAmB,KAAK;AAAA,QAC3D;AAEA,YAAIC,QAAOD,OAAM;AAEjB,YAAIC,MAAK,WAAW,IAAI,GAAG;AACzB,UAAAA,QAAOA,MAAK,UAAU,CAAC;AAAA,QACzB;AAEA,cAAM,MAAM,iBAAiB,gBAAgBA,KAAI;AAEjD,YAAI,QAAQ,MAAM;AAChB,UAAAA,QAAOA,MAAK,UAAU,GAAGA,MAAK,SAAS,CAAC,IAAI;AAAA,QAC9C,WAAW,QAAQ,IAAI;AACrB,UAAAA,QAAOA,QAAO;AAAA,QAChB;AAEA,YAAI,CAACA,MAAK,WAAW,GAAG,GAAG;AACzB,iBAAO,KAAK,kBAAkB,sBAAsB,4BAA4BA,QAAO,GAAG;AAAA,QAC5F;AAEA,YAAI,OAAO,MAAM,KAAK,kBAAkB,2BAA2BA,KAAI;AAIvE,YAAI,CAAC,KAAK,iBAAiB;AACzB,gBAAM,KAAK,YAAY,IAAI;AAAA,QAC7B;AAEA,YAAI,UAAU,KAAK;AAEnB,YAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,cAAI,iBAAiB,gBAAgBA,KAAI,MAAM,MAAM;AACnD,YAAAA,QAAOA,MAAK,UAAU,GAAGA,MAAK,SAAS,CAAC,IAAI;AAE5C,mBAAO,MAAM,KAAK,kBAAkB,2BAA2BA,KAAI;AAGnE,gBAAI,CAAC,KAAK,iBAAiB;AACzB,oBAAM,KAAK,YAAY,IAAI;AAAA,YAC7B;AACA,sBAAU,KAAK;AAEf,gBAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,wBAAU;AAAA,YACZ;AAAA,UACF,OAAO;AACL,mBAAO,KAAK,kBAAkB,oBAAoB,0BAA0BD,OAAM,OAAO,GAAG;AAAA,UAC9F;AAAA,QACF;AAEA,eAAO;AAAA,UACL,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,YAAY,iBAAiB,cAAcA,OAAM,IAAI;AAAA,QACvD;AAAA,MACF;AAAA,MAEA,MAAM,QAAQ;AACZ,YAAI,CAAC,KAAK,aAAa;AACrB;AAAA,QACF;AAEA,YAAI,CAAC,KAAK,wBAAwB,GAAG;AACnC;AAAA,QACF;AAEA,cAAM,SAAS,MAAM,KAAK,QAAQ,aAAa;AAAA,UAC7C,sBAAsB,KAAK,QAAQ,OAAO;AAAA,QAC5C;AAEA,cAAM,sBAAsB,MAAM,KAAK,QAAQ,uBAAuB;AAEtE,YAAI,wBAAwB,QAAW;AACrC;AAAA,QACF;AAEA,cAAM,yBAAyB,MAAM,oBAAoB,eAAe;AAExE,YAAI,CAAC,0BAA0B,EAAE,kCAAkC,6BAA6B;AAC9F;AAAA,QACF;AAEA,cAAM,eAAe,uBAAuB,gBAAgB;AAC5D,cAAM,mBAAmB,KAAK,QAAQ,oBAAoB;AAC1D,aAAK,oBAAoB,MAAM,KAAK,QAAQ,qBAAqB;AAEjE,YAAI,gBAAgB,aAAa,SAAS,kBAAkB;AAC1D,eAAK,OAAO,MAAM,SAAS,QAAQ;AAEnC,eAAK,oBAAoB,MAAM,KAAK,QAAQ,6BAA6B;AAEzE,cAAI,KAAK,MAAM;AACb,iBAAK,QAAQ,aAAa;AAE1B,gBAAI,KAAK,MAAM,YAAY,EAAE,WAAW,UAAU,GAAG;AACnD,mBAAK,QAAQ,KAAK,MAAM,UAAU,CAAC;AAAA,YACrC;AAEA,gBAAI,CAAC,cAAa,eAAe;AAC/B,kBAAI;AAIF,sBAAM,WAAW,OAAO,YAAY,eAAe,QAAQ,UAAU;AACrE,oBAAI,UAAU;AACZ,wBAAc,mBAAW,CAAC,CAAC;AAAA,gBAC7B,OAAO;AACL,wBAAc,mBAAW;AAAA,oBACvB,SAAS;AAAA,kBACX,CAAC;AAAA,gBACH;AAAA,cACF,SAAS,GAAQ;AACf,qBAAK,WAAW,wCAAwC,EAAE,SAAS,CAAC;AACpE,sBAAM,KAAK,QAAQ,cAAc;AAAA,kBAC/B;AAAA,kBACA,yCAAyC,KAAK,QAAQ,OAAO;AAAA;AAAA,kBAE7D,KAAK;AAAA,gBACP;AACA;AAAA,cACF;AAEA,4BAAa,gBAAgB;AAAA,YAC/B;AAEA,kBAAM,KAAK;AAEX,gBAAI;AACF,oBAAM,SAAS,MAAc,cAAM;AAAA,gBACjC,QAAQ;AAAA,gBACR,aAAa,CAAC,KAAK,KAAK;AAAA,gBACxB,QAAQ;AAAA,gBACR,UAAU,SAAS;AAAA,gBACnB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,MAAMA,QAAO;AACX,sBAAAA,OAAM,UAAU,EAAE,QAAQ,KAAK,GAAG,GAAG,WAAW;AAChD,sBAAAA,OAAM,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAK,GAAG,GAAG,QAAQ;AAAA,oBAC7D;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAED,kBAAI,UAAU,OAAO,eAAe,OAAO,YAAY,SAAS,GAAG;AACjE,sBAAM,aAAa,MAAM,KAAK,kBAAkB,2BAA2B,KAAK,KAAK;AAErF,2BAAW,WAAW,OAAO,YAAY,CAAC,EAAE,yBAAgC;AAE5E,sBAAM,WAAW,YAAY;AAAA,cAC/B;AAAA,YACF,SAAS,GAAQ;AACf,kBAAI,CAAC,KAAK,kBAAkB,GAAG;AAC7B,qBAAK,WAAW,EAAE,SAAS,CAAC;AAAA,cAC9B;AAAA,YACF;AAEA,kBAAM,GAAG,QAAQ,cAAc;AAAA,cAC7B;AAAA,cACA,gCAAgC,KAAK,QAAQ,OAAO;AAAA;AAAA,cAEpD,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,iBAAiB,cAAuB;AAC5C,YAAI,CAAC,aAAa,UAAU;AAC1B,gBAAM,aAAa,KAAK;AAAA,QAC1B;AAEA,YAAI,SAAS;AAEb,mBAAW,YAAY,aAAa,OAAO;AACzC,gBAAM,MAAM,iBAAiB,gBAAgB,QAAQ;AAErD,cAAI,QAAQ,MAAM;AAChB,kBAAM,aAAa,aAAa,MAAM,QAAQ;AAE9C,gBAAI,YAAY;AACd,kBAAI,CAAC,WAAW,iBAAiB;AAC/B,sBAAM,WAAW,YAAY;AAAA,cAC/B;AAEA,kBAAI,WAAW,WAAW,OAAO,WAAW,YAAY,UAAU;AAChE,0BAAU,QAAQ,WAAW,OAAO,WAAW,UAAU;AAAA,cAC3D;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,cAAc,aAAa,SAAS;AAC7C,gBAAM,cAAc,aAAa,QAAQ,UAAU;AAEnD,cAAI,aAAa;AACf,kBAAM,aAAa,MAAM,KAAK,iBAAiB,WAAW;AAE1D,sBAAU;AAAA,UACZ;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,mBAAmB,gBAAyB;AAChD,YAAI,CAAC,KAAK,wBAAwB,GAAG;AACnC;AAAA,QACF;AAEA,cAAM,oBAAoB,MAAM,KAAK,QAAQ,6BAA6B;AAE1E,cAAM,gBAAgB,eAAe,aAAa,SAAS;AAE3D,cAAM,iBAAiB,aAAa,mBAAmB,eAAe,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA,MAC7F;AAAA,IACF;AAAA;AAAA;;;AC3UA,IAOqB;AAPrB;AAAA;AAAA;AAGA;AACA;AAGA,IAAqB,gBAArB,MAAqB,eAAc;AAAA,MAkBjC,YAAoB,qBAA6B;AAA7B;AAAA,MAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAVlD,OAAgB,gBAAwC;AAAA,QACtD,qBAAqB;AAAA,QACrB,+BAA+B;AAAA,QAC/B,uBAAuB;AAAA,MACzB;AAAA,MAEA,OAAO,mBAAmB,gBAAwB,cAA+B;AAC/E,eAAO,eAAc,cAAc,cAAc,KAAK,iBAAiB,OAAO,gBAAgB;AAAA,MAChG;AAAA,MAIQ,kBAAkB;AACxB,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,gBAAgB,MAAoB;AACzC,YAAI,KAAK,cAAc,UAAa,KAAK,cAAc,QAAW;AAChE,iBAAO,KAAK,gBAAgB;AAAA,QAC9B;AAEA,YAAI,YAAY,KAAK;AAErB,YAAI,cAAc,QAAW;AAC3B,sBAAY,iBAAiB,sBAAsB,IAAI,iDAAiD,KAAK;AAAA,QAC/G;AAEA,YAAI,KAAK,cAAc,OAAW,QAAO;AAEzC,YAAI,KAAK,mBAAmB,mBAAmB;AAC7C,sBAAY,iBAAiB,sBAAsB,IAAI,UAAU,oBAAoB,uBAAuB;AAAA,QAC9G,OAAO;AACL,sBACE,iBAAiB,iBACjB,iBACA,KAAK,cACL,MACA,eAAc,mBAAmB,KAAK,kBAAkB,IAAI,KAAK,YAAY,IAC7E;AAAA,QACJ;AAEA,qBAAa,UAAU,yBAAyB,KAAK,SAAS;AAE9D,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BkB,cAML,yBAcQ;AAjDrB;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEO,IAAW,eAAX,kBAAWE,kBAAX;AACL,MAAAA,4BAAA,mBAAgB,KAAhB;AACA,MAAAA,4BAAA,wBAAqB,KAArB;AACA,MAAAA,4BAAA,eAAY,KAAZ;AAHgB,aAAAA;AAAA,OAAA;AAMX,IAAM,0BAA0B;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,IAAqB,kBAArB,MAAqB,iBAAgB;AAAA,MACnC,aAAa,2CAA2CC,eAA4B,SAAkB,MAAc;AAClH,cAAM,SAAS,YAAY;AAE3B,YAAI,SAAS,kBAAkB,MAAM;AACnC,cAAI,eAAe;AACnB,iBAAO;AAAA,QACT;AAEA,cAAM,UAAU,MAAM,KAAK,iCAAiC,SAAS,MAAM,QAAW;AAAA,UACpF;AAAA,UACA,oBAAoB;AAAA,QACtB,CAAC;AAED,YAAI,CAAC,SAAS;AACZ,iBAAO;AAAA,QACT;AAEA,cAAM,WAAW,MAAM,QAAQ,SAAS;AAGxC,cAAM,aAAsC,CAAC;AAE7C,cAAM,uBAAuB,QAAQ,oBAAoB,UAAU,MAAM,QAAQ,oBAAoB,UAAU;AAC/G,mBAAW,oBAAoB,sBAAsB,IAAI,sBAAsB,IAAI,sBAAsB;AAEzG,cAAM,oBAAoB,QAAQ,oBAAoB,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,KAAK,GAAG;AAC3F,mBAAW,oBAAoB,cAAc,IAAI,qBAAqB;AAEtE,cAAM,oBAAoB,QAAQ,oBAAoB,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,KAAK,GAAG;AAC3F,mBAAW,oBAAoB,cAAc,IAAI,qBAAqB;AAEtE,0BAAiB,WAAW;AAAA,UAC1B,MAAM,gBAAgB;AAAA,UACtB;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,sBACX,cACAA,eACA,gBACA,aACA,cACA,cACA,UACA,SACA,UACA,gBACA,4BACA;AACA,YAAI,KAAK;AAIT,cAAM,kBAAkB,cAAc,mBAAmB,gBAAgB,YAAY;AACrF,cAAM,oBAAoB,iBAAiB,cAAc,MAAM,kBAAkB,MAAM;AAEvF,YAAI,iBAAiB,OAAO;AAC1B,eAAK,YAAY,IAAI,UAAU,oBAAoB,iBAAiB,cAAc,IAAI,iBAAiB;AAAA,QACzG,WAAWA,cAAa,OAAO;AAI7B,gBAAM,UAAUA,cAAa,MAAM,cAAc,iBAAiB;AAElE,cAAI,SAAS;AACX,gBAAI;AAEF,oBAAM,SAAS,MAAM,QAAQ,WAAW,OAAO;AAC/C,kBAAI,QAAQ;AACV,qBAAK;AAAA,cACP;AAAA,YACF,QAAQ;AAAA,YAER;AAAA,UACF;AAAA,QACF;AAGA,YAAI,CAAC,IAAI;AACP,eAAK,IAAI,cAAcA,cAAa,YAAY,gBAAgB,aAAa,cAAc,YAAY;AAAA,QACzG;AAEA,YAAI,CAAC,UAAU;AACb,qBAAW,WAAW,cAAc,MAAM;AAE1C,cAAI,iBAAiB,QAAW;AAC9B,wBAAY,MAAM,aAAa,QAAQ,QAAQ,GAAG;AAClD,uBAAW,SAAS,QAAQ,mBAAmB,EAAE;AAAA,UACnD;AAAA,QACF;AAEA,cAAM,iBAAiB,MAAMA,cAAa,kBAAkB,QAAQ;AAEpE,YAAI,CAAC,SAAS;AACZ,oBAAU,MAAMA,cAAa;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,YAEA;AAAA,UACF;AAAA,QACF;AAKA,cAAM,GAAG,WAAW,KAAK;AAGzB,cAAM,aAAa,MAAM,QAAQ,oBAAoB;AAErD,YAAI;AACF,gBAAM,iBAAiB;AAAA,YACrB,GAAG;AAAA,YACH;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,SAAS,GAAG;AACV,cAAI,MAAM,qCAAsC,EAAU,SAAS,CAAC;AAAA,QACtE;AAEA,cAAM,WAAW,QAAQ;AAEzB,YAAI,cAAc;AAChB,gBAAM,iBAAiB,qBAAqB,SAAS,QAAQ;AAE7D,kBAAQ,sBAAsB;AAC9B,kBAAQ,yBAAyB;AACjC,kBAAQ,uBAAuB;AAC/B,kBAAQ,uBAAuB;AAC/B,kBAAQ,mBAAmB;AAAA,QAC7B;AAEA,cAAM,QAAQ,2BAA2B,IAAI;AAE7C,cAAM,MAAM,IAAI,oBAAoB,OAAO;AAE3C,cAAM,IAAI,cAAc;AAExB,cAAM,QAAQ,KAAK,IAAI;AAEvB,cAAMA,cAAa,KAAK;AAExB,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,cAAc,QAAiB,iBAA0B;AACpE,cAAM,OAAO,KAAK;AAElB,cAAM,WAAW,OAAO,MAAM,eAAe;AAE7C,YAAI,aAAa,QAAW;AAC1B,gBAAM,eAAe,OAAO;AAE5B,cAAI,aAAa;AAEjB,cAAI,iBAAiB,MAAM;AACzB,kBAAM,OAAO,iBAAiB,iBAAiB,aAAa,IAAI;AAEhE,gBAAI,KAAK,QAAQ,UAAU,KAAK,GAAG;AACjC,2BAAa;AAAA,YACf;AAAA,UACF;AAEA,cAAI,mBAAmB,YAAY;AACjC,mBAAO;AAAA,UACT,WAAW,CAAC,iBAAiB;AAC3B,mBAAO;AAAA,UACT;AAAA,QACF,OAAO;AACL,qBAAW,cAAc,OAAO,SAAS;AACvC,kBAAM,cAAc,OAAO,QAAQ,UAAU;AAE7C,gBAAI,gBAAgB,UAAa,CAAC,YAAY,aAAa;AACzD,oBAAM,SAAU,MAAM,iBAAgB,cAAc,aAAa,eAAe;AAEhF,kBAAI,WAAW,QAAW;AACxB,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,mBAAmB,qBAA8B;AAC5D,YAAI,eAAe,MAAM,oBAAoB,0BAA0B,mBAAmB;AAE1F,YAAI,CAAC,cAAc;AACjB,yBAAe,MAAM,oBAAoB,0BAA0B,UAAU;AAAA,QAC/E;AAEA,YAAI,CAAC,cAAc;AACjB,yBAAe,MAAM,oBAAoB,6BAA6B,mBAAmB;AAAA,QAC3F;AAEA,YAAI,CAAC,cAAc;AACjB,cAAI,oBAAoB,KAAK;AAC7B,iBAAO;AAAA,QACT;AAEA,cAAM,aAAa,aAAa;AAEhC,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,4BAA4BA,eAA4B;AACnE,YAAI,CAACA,cAAa,0BAA0B;AAC1C,cAAI,oBAAoB,MAAM;AAC9B,iBAAO;AAAA,QACT;AAEA,YAAI,cAAcA,cAAa,yBAAyB;AAExD,YAAI,gBAAgB,QAAW;AAC7B,wBAAc,MAAMA,cAAa,yBAAyB,aAAa;AAAA,QACzE;AAEA,YAAI,CAAC,aAAa;AAChB;AAAA,QACF;AAEA,eAAO,MAAM,KAAK,mBAAmBA,cAAa,yBAAyB,UAAU;AAAA,MACvF;AAAA,MAEA,aAAa,eAAe,SAAqD;AAC/E,cAAM,iBAAgB,eAAe,OAAO;AAE5C,cAAM,QAAQ,KAAK;AAEnB,cAAM,eAAe,IAAI,aAAa,OAAO;AAE7C,cAAM,aAAa,MAAM;AAEzB,YAAI,aAAa,gBAAgB;AAC/B,kBAAQ,aAAa,YAAY;AACjC,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,cACXA,eACA,SACA,oBACA,eAA6B,4BAC7B;AACA,cAAM,iBAAiB,MAAM,iBAAgB,eAAe,OAAO;AAEnE,YAAI,CAAC,gBAAgB;AACnB,iBAAO;AAAA,QACT;AAEA,cAAM,iBAAgB,mBAAmB,SAAS,gBAAgB,oBAAoB,QAAW,YAAY;AAE7G,cAAM,mBAAmB,QAAQ;AAEjC,cAAM,eACJ,iBAAiB,oBACb,SACA,iBAAiB,6BACf,+BACA;AAER,YAAI,cAAc;AAChB,gBAAM,4BAA4B,mBAAmB,aAAa,YAAY;AAC9E,gBAAM,uBAAuB,MAAM,0BAA0B,OAAO;AAEpE,cAAI,sBAAsB;AACxB,kBAAM,QAAQ,oBAAoB;AAElC,kBAAM,MAAM,MAAM,QAAQ,6BAA6B;AAEvD,gBAAI,KAAK;AACP,oBAAM,sBAAsB,0BAA0B,aAAa,QAAQ,IAAI;AAE/E,oBAAM,oBAAoB,aAAa;AAEvC,oBAAM,iBAAiB,aAAa,KAAK,qBAAqB,MAAM,MAAM,MAAM;AAAA,gBAC9E;AAAA,gBACA;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,mBACX,SACA,cACA,cACA,SACA,qBACA;AACA,cAAM,gBACJ,wBAAwB,oBACpB,eACA,aAAa;AAAA,UACX,wBAAwB,6BAAkC,+BAA+B;AAAA,QAC3F;AAEN,cAAM,cAAc,aAAa;AAEjC,cAAM,2BAA2B,MAAM,QAAQ,6BAA6B;AAC5E,cAAM,gBAAgB,MAAM,QAAQ,qBAAqB;AAEzD,YAAI,0BAA0B;AAC5B,gBAAM,iBAAiB,cAAc;AAAA,YACnC,yBAAyB,eAAe,wBAAwB,oBAAyB,QAAQ;AAAA,UACnG;AAEA,gBAAM,eAAe,aAAa;AAElC,gBAAM,iBAAiB,aAAa,0BAA0B,gBAAgB,MAAM,MAAM,OAAO;AAAA,YAC/F;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAED,gBAAM,aAAa,mBAAmB,cAAc;AAEpD,cAAI,iBAAiB,cAAc,iBAAiB,0BAA0B;AAC5E,kBAAM,sBAAsB,eAAe,aAAa,SAAS;AAEjE,kBAAM,oBAAoB,aAAa;AAEvC,kBAAM,iBAAiB,aAAa,eAAe,qBAAqB,MAAM,MAAM,OAAO,CAAC,MAAM,CAAC;AAAA,UACrG;AAEA,cAAI,SAAS;AACX,oBAAQ;AAAA,cACN,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,yBAAyB;AAAA,YAC3B;AAAA,UACF;AAEA,gBAAM,eAAe,QAAQ;AAAA,QAC/B;AAEA,cAAM,2BAA2B,MAAM,QAAQ,6BAA6B;AAE5E,YAAI,0BAA0B;AAC5B,gBAAM,gBACJ,wBAAwB,oBACpB,eACA,aAAa;AAAA,YACX,wBAAwB,6BAAkC,+BAA+B;AAAA,UAC3F;AAEN,gBAAM,cAAc,aAAa;AAEjC,gBAAM,iBAAiB,cAAc;AAAA,YACnC,yBAAyB,eAAe,wBAAwB,oBAAyB,QAAQ;AAAA,UACnG;AAEA,gBAAM,eAAe,aAAa;AAElC,gBAAM,iBAAiB,aAAa,0BAA0B,gBAAgB,MAAM,MAAM,OAAO;AAAA,YAC/F;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAED,cAAI,SAAS;AACX,oBAAQ;AAAA,cACN,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,yBAAyB;AAAA,YAC3B;AAEA,kBAAM,eAAe,QAAQ;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,aAAa,2BACXA,eACA,SACA,kBACA,gBACA,cACA;AACA,YAAI;AAEJ,cAAM,SAAS,MAAMA,cAAa;AAAA,UAChC,sBAAsB,iBAAiB,OAAO;AAAA,QAChD;AAEA,YAAI,CAAC,iBAAiB,iBAAiB;AACrC,gBAAM,iBAAiB,YAAY;AAAA,QACrC;AAEA,cAAM,WAAW,iBAAiB;AAClC,YAAI,CAAC,YAAY,CAAC,iBAAiB,eAAe;AAChD,cAAI,oBAAoB,QAAQ;AAChC;AAAA,QACF;AAEA,YAAI,iBAAiB,eAAe;AAClC,oBAAU,MAAM,QAAQ,sBAAsB,iBAAiB,eAAe,OAAO;AAAA,QACvF,WAAW,UAAU;AACnB,oBAAU,MAAM,QAAQ,aAAa,UAAU,OAAO;AAAA,QACxD;AAEA,YAAI,CAAC,SAAS;AACZ,cAAI,WAAW,kCAAkC;AACjD;AAAA,QACF;AAEA,cAAM,eAAe,MAAM,iBAAgB,eAAe,OAAO;AAEjE,YAAI,CAAC,cAAc;AACjB,gBAAMA,cAAa,qBAAqB,QAAQ,yCAAyC,QAAW,IAAI;AACxG;AAAA,QACF;AAEA,cAAM,UAAU,oBAAI,KAAK;AAEzB,cAAM,QAAQ,QAAQ,OAAO,QAAQ,UAAU,mBAAmB,OAAO;AAEzE,YAAI;AACJ,YAAI;AAEJ,YAAI,cAAc;AAChB,gBAAM,eAAe,MAAM,iBAAgB,mBAAmB,YAAY;AAE1E,cAAI,CAAC,cAAc;AACjB,gBAAI,oBAAoB,SAAS;AACjC;AAAA,UACF;AAEA,yBAAe,aAAa,aAAa,KAAK;AAE9C,gBAAM,aAAa,aAAa;AAAA,QAClC,WAAW,gBAAgB;AACzB,uBAAa,IAAI,WAAW;AAE5B,yBAAe,WAAW;AAAA,QAC5B,OAAO;AACL,gBAAM,eAAe,MAAM,iBAAgB,4BAA4BA,aAAY;AAEnF,cAAI,CAAC,cAAc;AACjB,gBAAI,oBAAoB,SAAS;AACjC;AAAA,UACF;AAEA,yBAAe,aAAa,aAAa,KAAK;AAE9C,gBAAM,aAAa,aAAa;AAAA,QAClC;AAEA,cAAM,QAAQ,aAAa,YAAY;AAEvC,YAAI,cAAc;AAChB,gBAAM,iBAAgB,mBAAmB,SAAS,cAAc,cAAc,OAAO;AAAA,QACvF;AAEA,cAAM,sBAAsB,MAAM,SAAS,gCAAgC;AAE3E,YAAI,qBAAqB;AACvB,gBAAM,iBAAiB,MAAM,iBAAgB,eAAe,mBAAmB;AAE/E,cAAI,gBAAgB;AAClB,kBAAM,iBAAgB,mBAAmB,qBAAqB,gBAAgB,cAAc,OAAO;AAAA,UACrG;AAEA,gBAAM,QAAQ,KAAK;AAAA,QACrB;AAEA,cAAM,aAAa,QAAQ;AAE3B,cAAM,aAAa,MAAM,QAAQ,sBAAsB,YAAY;AAEnE,YAAI,CAAC,YAAY;AACf,cAAI,WAAW,4BAA4B;AAC3C;AAAA,QACF;AAIA,cAAM,aAAa,QAAQ;AAE3B,cAAM,WAAW,KAAK;AAEtB,cAAMA,cAAa,qBAAqB,QAAQ,6CAA6C;AAE7F,YAAI,YAAY;AACd,gBAAM,WAAW,MAAM,WAAW,wBAAwB;AAE1D,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,cACXA,eACA,SACA,kBACA,gBACA,cACA;AACA,YAAI;AACJ,cAAM,SAAS,MAAMA,cAAa,uBAAuB,sBAAsB,iBAAiB,OAAO,GAAG;AAE1G,YAAI,CAAC,iBAAiB,iBAAiB;AACrC,gBAAM,iBAAiB,YAAY;AAAA,QACrC;AAEA,YAAI,CAAC,iBAAiB,eAAe,CAAC,iBAAiB,eAAe;AACpE,cAAI,oBAAoB,QAAQ;AAChC;AAAA,QACF;AAEA,YAAI,iBAAiB,eAAe;AAClC,oBAAU,MAAM,QAAQ,sBAAsB,iBAAiB,eAAe,OAAO;AAAA,QACvF,WAAW,iBAAiB,aAAa;AACvC,oBAAU,MAAM,QAAQ,aAAa,iBAAiB,aAAa,OAAO;AAAA,QAC5E;AAEA,YAAI,CAAC,SAAS;AACZ,cAAI,WAAW,kCAAkC;AACjD;AAAA,QACF;AAEA,cAAM,eAAe,MAAM,iBAAgB,eAAe,OAAO;AAEjE,YAAI,CAAC,cAAc;AACjB,gBAAMA,cAAa,qBAAqB,QAAQ,yCAAyC,QAAW,IAAI;AACxG;AAAA,QACF;AAEA,cAAM,UAAU,oBAAI,KAAK;AAEzB,cAAM,QAAQ,QAAQ,OAAO,QAAQ,UAAU,mBAAmB,OAAO;AAEzE,YAAI;AACJ,YAAI;AAEJ,YAAI,cAAc;AAChB,gBAAM,eAAe,MAAM,iBAAgB,mBAAmB,YAAY;AAE1E,cAAI,CAAC,cAAc;AACjB,gBAAI,oBAAoB,SAAS;AACjC;AAAA,UACF;AAEA,yBAAe,aAAa,aAAa,KAAK;AAE9C,gBAAM,aAAa,aAAa;AAAA,QAClC,WAAW,gBAAgB;AACzB,uBAAa,IAAI,WAAW;AAE5B,yBAAe,WAAW;AAAA,QAC5B,OAAO;AACL,gBAAM,eAAe,MAAM,iBAAgB,4BAA4BA,aAAY;AAEnF,cAAI,CAAC,cAAc;AACjB,gBAAI,oBAAoB,SAAS;AACjC;AAAA,UACF;AAEA,yBAAe,aAAa,aAAa,KAAK;AAE9C,gBAAM,aAAa,aAAa;AAAA,QAClC;AAEA,cAAM,QAAQ,aAAa,YAAY;AAEvC,cAAM,aAAa,QAAQ;AAE3B,cAAMA,cAAa,qBAAqB,QAAQ,wCAAwC;AAExF,YAAI,YAAY;AACd,gBAAM,WAAW,MAAM,WAAW,wBAAwB;AAE1D,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MACA,aAAa,eAAe,SAAkB;AAC5C,cAAM,MAAM,IAAI,oBAAoB,OAAO;AAE3C,cAAM,IAAI,cAAc,CAAC,cAAc,CAAC;AAAA,MAC1C;AAAA,MAEA,aAAa,uBACXA,eACA,SACA,eACA,cACA;AACA,cAAM,SAAS,MAAMA,cAAa,uBAAuB,qCAAqC,QAAQ,OAAO,IAAI;AAEjH,cAAM,eAAe,MAAM,iBAAgB,eAAe,OAAO;AAEjE,YAAI,iBAAiB,QAAW;AAC9B,gBAAMA,cAAa,qBAAqB,MAAM;AAC9C;AAAA,QACF;AAEA,YAAI,UAAU;AAEd,YAAI,iBAAiB,QAAW;AAC9B,oBAAU,IAAI,QAAQ;AAEtB,kBAAQ,iBAAiB;AAEzB,yBAAe,QAAQ;AAEvB,cAAI,iBAAiB,QAAW;AAC9B,gBAAI,yBAAyB,MAAM;AACnC;AAAA,UACF;AAAA,QACF,OAAO;AACL,oBAAU,MAAM,QAAQ,sBAAsB,YAAY;AAAA,QAC5D;AAEA,YAAI,CAAC,SAAS;AACZ,cAAI,WAAW,kCAAkC;AACjD;AAAA,QACF;AAEA,cAAM,QAAQ,cAAc,KAAK;AAEjC,cAAM,QAAQ,mBAAmB,aAAa;AAE9C,cAAM,iBAAgB,gCAAgC,SAAS,OAAO;AAEtE,YAAI,cAAc;AAChB,gBAAM,iBAAgB,mBAAmB,SAAS,cAAc,cAAc,OAAO;AAAA,QACvF;AAEA,gBAAQ,OAAO,QAAQ;AAEvB,cAAM,aAAa,QAAQ;AAE3B,cAAM,QAAQ,KAAK;AAEnB,cAAM,aAAsC,CAAC;AAE7C,cAAM,uBAAuB,QAAQ,oBAAoB,UAAU,MAAM,QAAQ,oBAAoB,UAAU;AAC/G,mBAAW,oBAAoB,sBAAsB,IAAI,sBAAsB,IAAI,sBAAsB;AAEzG,cAAM,oBAAoB,QAAQ,oBAAoB,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,KAAK,GAAG;AAC3F,mBAAW,oBAAoB,cAAc,IAAI,qBAAqB;AAEtE,cAAM,oBAAoB,QAAQ,oBAAoB,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,KAAK,GAAG;AAC3F,mBAAW,oBAAoB,cAAc,IAAI,qBAAqB;AAEtE,cAAM,WAAW,QAAQ;AACzB,YAAI,UAAU;AACZ,qBAAW,oBAAoB,SAAS,IAAI,SAAS;AACrD,qBAAW,oBAAoB,UAAU,IAAI,SAAS;AACtD,qBAAW,oBAAoB,SAAS,IAAI,SAAS,cAAc,SAAS,kBAAkB,SAAS;AACvG,qBAAW,oBAAoB,IAAI,IAAI,SAAS;AAAA,QAClD;AAEA,mBAAW,oBAAoB,mBAAmB,IAAI,eAAe,yBAAyB,SAC1F,OACA;AAEJ,0BAAiB,WAAW;AAAA,UAC1B,MAAM,gBAAgB;AAAA,UACtB;AAAA,QACF,CAAC;AAED,cAAMA,cAAa;AAAA,UACjB;AAAA,UACA,0CAA0C,aAAa,WAAW;AAAA,QACpE;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,iCACXA,eACA,SACA,eACA,cACA;AACA,cAAM,SAAS,MAAMA,cAAa;AAAA,UAChC,wBAAwB,QAAQ,OAAO;AAAA,QACzC;AAEA,cAAM,QAAQ,0BAA0B;AAExC,cAAM,kBAAkB,QAAQ;AAChC,cAAM,QAAQ,QAAQ,OAAO;AAE7B,YAAI;AAEJ,YAAI,cAAc;AAChB,gBAAM,eAAe,MAAM,iBAAgB,mBAAmB,YAAY;AAE1E,cAAI,CAAC,cAAc;AACjB,gBAAI,oBAAoB,SAAS;AACjC;AAAA,UACF;AAEA,yBAAe,aAAa,aAAa,eAAe;AAExD,gBAAM,aAAa,aAAa;AAAA,QAClC,OAAO;AACL,gBAAM,eAAe,MAAM,iBAAgB,4BAA4BA,aAAY;AAEnF,cAAI,CAAC,cAAc;AACjB,gBAAI,oBAAoB,SAAS;AACjC;AAAA,UACF;AAEA,yBAAe,aAAa,aAAa,eAAe;AAExD,gBAAM,aAAa,aAAa;AAAA,QAClC;AAEA,cAAM,UAAU,MAAM,iBAAgB,uBAAuBA,eAAc,SAAS,eAAe,YAAY;AAE/G,YAAI,SAAS;AACX,gBAAM,aAAa,QAAQ;AAE3B,gBAAM,QAAQ,KAAK;AAAA,QACrB;AAEA,cAAM,QAAQ,KAAK;AAEnB,cAAMA,cAAa;AAAA,UACjB;AAAA,UACA,qCAAqC,aAAa,WAAW;AAAA,QAC/D;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,yBAAyBA,eAA4B,SAAkB;AAClF,cAAMA,cAAa,mBAAmB,WAAW;AACjD,cAAM,iBAAgB,eAAe,OAAO;AAE5C,cAAM,QAAQ,KAAK;AACnB,cAAMA,cAAa,mBAAmB,OAAO;AAE7C,YAAI,eAAeA,cAAa;AAGhC;AAAA;AAAA,UAEE,gBACA,aAAa,8BAA8B,QAC3CA,cAAa;AAAA,UACb;AACA,gBAAMA,cAAa,mBAAmB,wBAAwB;AAC9D,UAAAA,cAAa,gBAAgB,mBAAmB;AAChD,gBAAMA,cAAa,mBAAmB,UAAU;AAAA,QAClD;AAEA,cAAM,OAAO,QAAQ,8BAA8B;AAEnD,aACG,QAAQ,wBAAwB,UAAa,QAAQ,wBAAwB,SAC9EA,cAAa,mBAAmB,MAChC;AACA,gBAAM,iBAAgB,oCAAoCA,eAAc,OAAO;AAE/E,kBAAQ,sBAAsB;AAC9B,kBAAQ,sBAAsB,oBAAI,KAAK;AAAA,QACzC;AAAA,MACF;AAAA,MAEA,aAAa,aACXA,eACA,SACA,UACA,OACA;AACA,YAAI,CAAC,OAAO;AACV;AAAA,QACF;AAEA,YAAIA,cAAa,mBAAmB,MAAM;AACxC,cAAI,KAAK,wCAAwC;AACjD;AAAA,QACF;AACA,cAAM,QAAQ,oBAAI,KAAK;AACvB,cAAM,sBAAsB,iBAAiB,UAAU,WAAW,KAAK;AAEvE,cAAM,gBAAgBA,cAAa,eAAe,WAAW,aAAa,mBAAmB;AAE7F,cAAM,cAAc,aAAa;AAEjC,YAAI,OAAO;AACT,gBAAM,cAAc,cAAc,aAAa,YAAY,SAAS,IAAI;AAExE,gBAAM,YAAY,aAAa;AAE/B,gBAAM,MAAM,eAAe,WAAW;AAAA,QACxC;AAEA,cAAM,cAAc,KAAK,UAAU,QAAQ;AAE3C,cAAM,gBAAgB,2CAA+C,aAAa,IAAI;AAEtF,cAAM,cAAc,KAAK,IAAI;AAE7B,YAAI,cAAc,aAAa,SAAS,IAAI,GAAG;AAC7C,gBAAM,eAAe,cAAc,aAAa,SAAS,IAAI;AAE7D,gBAAM,KAAK,IAAI,WAAW;AAE1B,gBAAM,iBAAiB,aAAa,cAAc,GAAG,YAAY,OAAO,OAAO,KAAK;AAEpF,gBAAM,cAAc,MAAM,GAAG,kCAAkC;AAE/D,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,uBACXA,eACA,SACA,aACA,MACA;AACA,YAAIA,cAAa,mBAAmB,MAAM;AACxC,cAAI,KAAK,wCAAwC;AACjD;AAAA,QACF;AAEA,cAAM,UAAU,MAAM,iBAAgB,sCAAsC,SAAS,IAAI;AAEzF,YAAI,YAAY,QAAW;AAGzB,gBAAM,QAAQ,aAAa,WAAW;AAAA,QACxC,OAAO;AACL,cAAI,KAAK,yCAAyC;AAAA,QACpD;AAAA,MACF;AAAA,MAEA,aAAa,oCAAoCA,eAA4B,SAAkB;AAC7F,YAAIA,cAAa,mBAAmB,MAAM;AACxC,cAAI,KAAK,wCAAwC;AACjD;AAAA,QACF;AAEA,cAAM,WAAW,QAAQ,OAAO;AAChC,cAAM,OAAO,QAAQ,OAAO;AAE5B,cAAM,UAAU,MAAM,iBAAgB,sCAAsC,SAAS,IAAI;AAEzF,YAAI,YAAY,QAAW;AACzB,gBAAM,WAAW,MAAM,QAAQ,SAAS;AAExC,cAAI,aAAa,QAAW;AAC1B,kBAAM,OAAOA,cAAa,eAAe,WAAW,WAAW,QAAQ;AAEvE,iBAAK,WAAW,QAAQ;AAExB,kBAAM,KAAK,YAAY;AAEvB,gBAAI,gBAAgB,eAAe;AACjC,oBAAM,gBAAgB,+CAAiD,KAAK,QAAQ;AAAA,YACtF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,aAAa,sCAAsC,SAAkB,WAAmB;AACtF,cAAM,SAAS,YAAY;AAE3B,YAAI,SAAS,kBAAkB,MAAM;AACnC,cAAI,uBAAuB;AAC3B,iBAAO;AAAA,QACT;AAEA,cAAM,OAAO,SAAS,cAAc,WAAW,wBAAwB;AAEvE,YAAI,CAAC,KAAK,iBAAiB;AACzB,gBAAM,KAAK,YAAY;AAAA,QACzB;AAEA,YAAI,KAAK,mBAAmB,YAAY;AACtC,gBAAM,UAAU,MAAM,KAAK,kCAAkC,SAAS,WAAW,KAAK,OAAO;AAE7F,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,8CAA8C;AAEvD,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,qBACXA,eACA,SACA,cACwC;AACxC,cAAM,SAAS,MAAMA,cAAa,uBAAuB,gBAAgB,QAAQ,OAAO,aAAa;AAErG,cAAM,aAAa,IAAI,WAAW;AAElC,cAAM,eAAe,MAAM,iBAAgB,eAAe,OAAO;AAEjE,YAAI,CAAC,cAAc;AACjB,iBAAO;AAAA,QACT;AAEA,cAAM,iBAAgB;AAAA,UACpB;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAEA,cAAM,WAAW,WAAW,QAAQ;AAEpC,YAAI,cAAc;AAChB,gBAAM,YAAY,MAAM,WAAW,kBAAkB;AAErD,gBAAMA,cAAa;AAAA,YACjB;AAAA,YACA,uBAAuB,QAAQ,OAAO;AAAA,UACxC;AAEA,iBAAO;AAAA,QACT,OAAO;AACL,gBAAM,WAAW,MAAM,WAAW,wBAAwB;AAE1D,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,aAAa,iCACX,SACA,WACA,cACA,eAC8B;AAC9B,cAAM,QAAQ,0BAA0B;AAExC,cAAM,UAAU,IAAI,QAAQ;AAE5B,YAAI,cAAc;AAChB,kBAAQ,cAAc,YAAY;AAAA,QACpC,WAAW,CAAC,eAAe;AACzB,gBAAM,WAAW,QAAQ,gBAAgB;AACzC,mBAAS,eAAe;AAAA,QAC1B;AAEA,YAAI,eAAe;AACjB,kBAAQ,mBAAmB,aAAa;AAAA,QAC1C;AAEA,gBAAQ,UAAU;AAElB,cAAM,eAAe,MAAM,iBAAgB,eAAe,OAAO;AAEjE,YAAI,CAAC,cAAc;AACjB,iBAAO;AAAA,QACT;AAEA,cAAM,KAAK,gCAAgC,SAAS,OAAO;AAE3D,gBAAQ,OAAO;AAEf,cAAM,iBAAgB,mBAAmB,SAAS,cAAc,QAAQ,QAAQ,YAAY,OAAO;AAEnG,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,gCAAgC,SAAkB,SAAkB;AAC/E,cAAM,YAAY,QAAQ,aAAa;AAEvC,mBAAW,eAAe,WAAW;AACnC,cAAI,YAAY,+CAAuD;AACrE,gBAAI,CAAC,YAAY,iBAAiB;AAChC,oBAAM,YAAY,YAAY;AAAA,YAChC;AAEA,kBAAM,WAAW,YAAY;AAE7B,gBAAI,UAAU;AACZ,kBAAI,CAAC,SAAS,iBAAiB;AAC7B,sBAAM,SAAS,YAAY;AAAA,cAC7B;AAEA,kBAAI,UAAU,SAAS;AAEvB,kBAAI,OAAO,YAAY,YAAY,QAAQ,QAAQ,OAAO,KAAK,GAAG;AAChE,wBAAQ,qBAAqB;AAAA,cAC/B;AAAA,YACF;AAAA,UACF,WAAW,YAAY,gDAAuD;AAC5E,gBAAI,CAAC,YAAY,iBAAiB;AAChC,oBAAM,YAAY,YAAY;AAAA,YAChC;AAEA,kBAAM,WAAW,YAAY;AAC7B,gBAAI,UAAU;AACZ,kBAAI,CAAC,SAAS,iBAAiB;AAC7B,sBAAM,SAAS,YAAY;AAAA,cAC7B;AAEA,kBAAI,UAAU,SAAS;AAEvB,kBAAI,OAAO,YAAY,YAAY,QAAQ,QAAQ,KAAK,KAAK,KAAK,QAAQ,QAAQ,cAAc,KAAK,GAAG;AACtG,wBAAQ,qCAAqC;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,aAAa,kCACX,SACA,WACA,cACkB;AAClB,cAAM,UAAU,IAAI,QAAQ;AAC5B,gBAAQ,UAAU;AAElB,cAAM,QAAQ,cAAc,YAAY;AAExC,cAAM,qBAAqB,MAAM,QAAQ,6BAA6B;AAEtE,YAAI,uBAAuB,MAAM;AAC/B,kBAAQ,mBAAmB,QAAQ,6BAA6B,QAAQ,4BAA4B,QAAQ,IAAI;AAAA,QAClH;AAEA,cAAM,qBAAqB,MAAM,QAAQ,6BAA6B;AACtE,YAAI,uBAAuB,MAAM;AAC/B,kBAAQ,mBAAmB,QAAQ,6BAA6B,QAAQ,4BAA4B,QAAQ,IAAI;AAAA,QAClH;AAEA,gBAAQ,qBAAqB;AAC7B,gBAAQ,OAAO;AAEf,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;AC3lCA,IAuBa,eAoLA;AA3Mb;AAAA;AAAA;AAcA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAM,gBAAN,cAA4B,gBAAgB;AAAA,MACxC,WAAiC;AAAA,QACxC,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS,CAAC,KAAK,KAAK;AAAA,QACpB,UAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,UAAU;AAAA,YACV,cAAc;AAAA,YACd,sBAAsB;AAAA,UACxB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW;AAAA,YACX,aAAa;AAAA,YACb,MAAM;AAAA,YACN,cAAc;AAAA,UAChB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,WAAW;AAAA,YACX,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,WAAW;AAAA,YACX,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,gBAAgB;AAAA,QAChB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,QACJ,SACA,MACA,OAC6B;AAC7B,cAAM,aAAa,KAAK,CAAC,KAAK;AAC9B,cAAM,cAAc,KAAK,CAAC,KAAK;AAC/B,cAAM,UAAW,MAAM,WAAsB;AAC7C,cAAM,cAAe,MAAM,eAA0B;AACrD,cAAM,aAAa,MAAM;AAEzB,YAAI,CAAC,QAAQ,cAAc;AACzB,iBAAO,KAAK,MAAM,oBAAoB,qCAAqC;AAAA,QAC7E;AAEA,cAAMC,gBAAe,QAAQ;AAG7B,cAAMA,cAAa,YAAY;AAE/B,YAAI,CAACA,cAAa,SAAS;AACzB,iBAAO,KAAK,MAAM,iBAAiB,gCAAgC;AAAA,QACrE;AAGA,cAAM,aAAa,MAAMA,cAAa,sBAAsB,UAAU;AAEtE,YAAI,CAAC,YAAY;AAEf,gBAAM,WAAWA,cAAa,uCAA+C,KAAK,CAAC;AACnF,gBAAM,YAAY,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI;AACrD,iBAAO,KAAK,MAAM,sBAAsB,aAAa,UAAU,2BAA2B,SAAS,EAAE;AAAA,QACvG;AAEA,gBAAQ,OAAO,KAAK,qBAAqB,WAAW,oBAAoB,WAAW,KAAK,MAAM;AAG9F,YAAI;AAEJ,YAAI,YAAY;AAEd,oBAAU,IAAIC,SAAQD,eAAc,aAAa,IAAI;AACrD,kBAAQ,kBAAkB;AAC1B,kBAAQ;AAAA,QACV,WAAW,QAAQ,SAAS;AAE1B,oBAAU,QAAQ;AAAA,QACpB,OAAO;AAEL,gBAAM,iBAAiB,MAAMA,cAAa,kBAAkB,WAAW;AACvE,oBAAU,MAAMA,cAAa;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,YAEA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,SAAS;AACZ,iBAAO,KAAK,MAAM,iBAAiB,0BAA0B;AAAA,QAC/D;AAEA,YAAI;AAEF,oBAAU,MAAM,gBAAgB;AAAA,YAC9B;AAAA,YACAA;AAAA,YACA,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,OAAO,YAAoB;AACzB,sBAAQ,OAAO,MAAM,OAAO;AAAA,YAC9B;AAAA,YACA;AAAA,UACF;AAGA,cAAI,SAAS;AACX,kBAAM,iBAAiB,aAAa,SAAS,OAAO;AAAA,UACtD;AAEA,gBAAM,qBAAqB,iBAAiB,6BAA6B,SAAS,WAAW;AAC7F,gBAAM,iBAAiB,kBAAkB,SAAS,aAAa,aAAa,oBAAoB,KAAK;AAErG,gBAAM,QAAQ,KAAK;AAGnB,kBAAQ,UAAU;AAElB,gBAAM,cAAc,QAAQ,eAAe,YAAY,QAAQ,mBAAmB;AAClF,kBAAQ,OAAO,QAAQ,uBAAuB,WAAW,EAAE;AAE3D,iBAAO,KAAK,QAAQ,YAAY,WAAW,0BAA0B;AAAA,YACnE;AAAA,YACA,UAAU,WAAW;AAAA,YACrB,MAAM;AAAA,UACR,CAAC;AAAA,QACH,SAAS,OAAgB;AACvB,gBAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,iBAAO,KAAK,MAAM,gBAAgB,6BAA6B,OAAO,EAAE;AAAA,QAC1E;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,eACJ,SACA,MACA,YACA,UACmB;AACnB,YAAI,aAAa,GAAG;AAElB,iBAAO,wBAAwB,YAAY,OAAO;AAAA,QACpD;AACA,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAEO,IAAM,gBAAgB,IAAI,cAAc;AAAA;AAAA;;;ACnLxC,SAAS,SAAS,KAAkD;AACzE,QAAM,IAAI,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AAC/C,SAAO;AAAA,IACL,GAAG,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK;AAAA,IAClC,GAAG,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK;AAAA,IAClC,GAAG,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK;AAAA,EACpC;AACF;AAKA,SAAS,2BACP,OACA,QACA,YACA,cACA,UACY;AACZ,QAAM,SAAS,IAAI,WAAW,QAAQ,SAAS,CAAC;AAChD,QAAM,UAAU,SAAS,UAAU;AACnC,QAAM,YAAY,SAAS,YAAY;AAEvC,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,YAAM,OAAO,IAAI,QAAQ,KAAK;AAC9B,YAAM,cAAc,KAAK,MAAM,IAAI,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,IAAI;AAChF,YAAM,QAAQ,cAAc,YAAY;AAExC,aAAO,GAAG,IAAI,MAAM;AACpB,aAAO,MAAM,CAAC,IAAI,MAAM;AACxB,aAAO,MAAM,CAAC,IAAI,MAAM;AACxB,aAAO,MAAM,CAAC,IAAI;AAAA,IACpB;AAAA,EACF;AAEA,SAAO;AACT;AA7DA,IAWM,sBAwDe;AAnErB;AAAA;AAAA;AAGA;AACA;AAOA,IAAM,uBAAuB;AAAA;AAAA,MAE3B,QACE;AAAA;AAAA,MAGF,OACE;AAAA;AAAA,MAGF,MAAM;AAAA,IACR;AA6CA,IAAqB,aAArB,MAAqB,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS9B,OAAO,oBAAoB,OAAe,QAAgB,UAA0C;AAClG,cAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,QAAQ;AAErC,cAAM,UAAU,WAAW,iBAAiB,OAAO,QAAQ,GAAG,GAAG,GAAG,GAAG;AACvE,eAAO,WAAW,gBAAgB,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AAAA,MACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,OAAO,sBACL,OACA,QACA,YACA,cACA,WAAmB,GACK;AACxB,cAAM,SAAS,2BAA2B,OAAO,QAAQ,YAAY,cAAc,QAAQ;AAG3F,cAAM,UAAU,WAAW,gBAAgB,QAAQ,OAAO,MAAM;AAChE,YAAI,SAAS;AACX,iBAAO;AAAA,QACT;AAGA,YAAI,UAAU,MAAM,WAAW,IAAI;AACjC,iBAAO,YAAW,sBAAsB,QAAQ;AAAA,QAClD,WAAW,UAAU,MAAM,WAAW,IAAI;AACxC,iBAAO,YAAW,sBAAsB,OAAO;AAAA,QACjD;AAGA,eAAO,YAAW,sBAAsB,QAAQ;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAa,2BACX,OACA,QACA,YACA,cACA,WAAmB,GACc;AACjC,cAAM,SAAS,2BAA2B,OAAO,QAAQ,YAAY,cAAc,QAAQ;AAG3F,cAAM,UAAU,WAAW,gBAAgB,QAAQ,OAAO,MAAM;AAChE,YAAI,SAAS;AACX,iBAAO;AAAA,QACT;AAGA,cAAM,iBAAiB,MAAM,WAAW,mBAAmB,QAAQ,OAAO,MAAM;AAChF,YAAI,gBAAgB;AAClB,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAO,sBAAsB,MAA+C;AAC1E,YAAI;AACJ,gBAAQ,MAAM;AAAA,UACZ,KAAK;AACH,qBAAS,qBAAqB;AAC9B;AAAA,UACF,KAAK;AACH,qBAAS,qBAAqB;AAC9B;AAAA,UACF,KAAK;AACH,qBAAS,qBAAqB;AAC9B;AAAA,UACF;AACE,qBAAS,qBAAqB;AAAA,QAClC;AACA,eAAO,UAAU,mBAAmB,MAAM;AAAA,MAC5C;AAAA,IACF;AAAA;AAAA;;;ACNA,SAAS,MAAM,GAAmB;AAChC,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AACjD;AAUO,SAAS,gBACd,cACA,UACmE;AACnE,QAAM,WAAW,UAAU,YAAY;AACvC,MAAI,CAAC,YAAY,SAAS,WAAW,KAAK;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,QAAQ;AACrC,QAAM,SAAS,IAAI,WAAW,KAAK,KAAK,CAAC;AAEzC,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,QAAQ,SAAS,WAAW,CAAC,IAAI;AACvC,UAAM,MAAM,IAAI;AAEhB,QAAI,UAAU,GAAG;AAEf,aAAO,GAAG,IAAI;AACd,aAAO,MAAM,CAAC,IAAI;AAClB,aAAO,MAAM,CAAC,IAAI;AAClB,aAAO,MAAM,CAAC,IAAI;AAAA,IACpB,WAAW,UAAU,GAAG;AAEtB,aAAO,GAAG,IAAI,MAAM,IAAI,IAAI;AAC5B,aAAO,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI;AAChC,aAAO,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI;AAChC,aAAO,MAAM,CAAC,IAAI;AAAA,IACpB,WAAW,UAAU,GAAG;AAEtB,aAAO,GAAG,IAAI,MAAM,IAAI,IAAI;AAC5B,aAAO,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI;AAChC,aAAO,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI;AAChC,aAAO,MAAM,CAAC,IAAI;AAAA,IACpB,OAAO;AAEL,aAAO,GAAG,IAAI,MAAM,IAAI,EAAE;AAC1B,aAAO,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE;AAC9B,aAAO,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE;AAC9B,aAAO,MAAM,CAAC,IAAI;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,OAAO,IAAI,QAAQ,GAAG;AACzC;AAMO,SAAS,qBAAqB,QAAsC;AACzE,MAAI,CAAC,OAAQ,QAAO;AAEpB,aAAW,WAAW,QAAQ;AAC5B,UAAM,WAAW,kBAAkB,OAAO;AAC1C,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAMA,eAAsB,gCACpB,QACA,UACiC;AACjC,QAAM,eAAe,qBAAqB,MAAM;AAChD,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,gBAAgB,cAAc,QAAQ;AACrD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAGA,QAAM,cAAc,WAAW,gBAAgB,OAAO,QAAQ,OAAO,OAAO,OAAO,MAAM;AACzF,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AAGA,QAAM,iBAAiB,MAAM,WAAW,mBAAmB,OAAO,QAAQ,OAAO,OAAO,OAAO,MAAM;AACrG,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AA/QA,IAwBM,WAiIA;AAzJN;AAAA;AAAA;AAiBA;AACA;AAMA,IAAM,YAAoC;AAAA,MACxC,OACE;AAAA,MAiBF,MACE;AAAA,MAiBF,QACE;AAAA,MAiBF,YACE;AAAA,MAiBF,UACE;AAAA,MAiBF,OACE;AAAA,MAiBF,MACE;AAAA,IAgBJ;AAGA,IAAM,oBAA4C;AAAA,MAChD,OAAO;AAAA,MACP,SAAS;AAAA,MACT,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA;AAAA;;;ACnKA,IAiVsB,oBAcA,mBAcA,kBAmBT;AAhYb;AAAA;AAAA;AAiVO,IAAe,qBAAf,MAAkC;AAAA,IASzC;AAKO,IAAe,oBAAf,MAAiC;AAAA,IASxC;AAKO,IAAe,mBAAf,MAAgC;AAAA,IASvC;AAUO,IAAM,gBAAN,MAAoB;AAAA,MACzB,OAAe,eAAgD,oBAAI,IAAI;AAAA,MACvE,OAAe,cAA8C,oBAAI,IAAI;AAAA,MACrE,OAAe,aAA4C,oBAAI,IAAI;AAAA,MAEnE,OAAO,oBAAoB,OAAiC;AAC1D,aAAK,aAAa,IAAI,MAAM,IAAI,KAAK;AAAA,MACvC;AAAA,MAEA,OAAO,mBAAmB,OAAgC;AACxD,aAAK,YAAY,IAAI,MAAM,IAAI,KAAK;AAAA,MACtC;AAAA,MAEA,OAAO,kBAAkB,OAA+B;AACtD,aAAK,WAAW,IAAI,MAAM,IAAI,KAAK;AAAA,MACrC;AAAA,MAEA,OAAO,eAAe,IAA4C;AAChE,eAAO,KAAK,aAAa,IAAI,EAAE;AAAA,MACjC;AAAA,MAEA,OAAO,cAAc,IAA2C;AAC9D,eAAO,KAAK,YAAY,IAAI,EAAE;AAAA,MAChC;AAAA,MAEA,OAAO,aAAa,IAA0C;AAC5D,eAAO,KAAK,WAAW,IAAI,EAAE;AAAA,MAC/B;AAAA,MAEA,OAAO,qBAA2C;AAChD,eAAO,MAAM,KAAK,KAAK,aAAa,OAAO,CAAC;AAAA,MAC9C;AAAA,MAEA,OAAO,oBAAyC;AAC9C,eAAO,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC;AAAA,MAC7C;AAAA,MAEA,OAAO,mBAAuC;AAC5C,eAAO,MAAM,KAAK,KAAK,WAAW,OAAO,CAAC;AAAA,MAC5C;AAAA,MAEA,OAAO,0BAA0B,UAA+C;AAC9E,eAAO,KAAK,mBAAmB,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,QAAQ;AAAA,MAClF;AAAA,MAEA,OAAO,yBAAyB,UAA8C;AAC5E,eAAO,KAAK,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,QAAQ;AAAA,MACjF;AAAA,MAEA,OAAO,wBAAwB,UAA6C;AAC1E,eAAO,KAAK,iBAAiB,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,QAAQ;AAAA,MAChF;AAAA,IACF;AAAA;AAAA;;;ACpbA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,mBAAmB;AAAA,MAC1D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB,CAAC;AAAA,YACxB,yBAAyB,CAAC;AAAA,YAC1B,4BAA4B,CAAC;AAAA,YAC7B,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,qBAAqB;AAAA,YACvB;AAAA,UACF;AAAA,UACA,WAAW;AAAA,YACT,YAAY;AAAA,cACV,MAAM;AAAA,cACN,MAAM;AAAA,cACN,QAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACrCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,uBAAN,cAAmC,mBAAmB;AAAA,MAC3D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB,CAAC;AAAA,YACxB,yBAAyB,CAAC;AAAA,YAC1B,4BAA4B,CAAC;AAAA,YAC7B,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,qBAAqB;AAAA,YACvB;AAAA,UACF;AAAA,UACA,WAAW;AAAA,YACT,YAAY;AAAA,cACV,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACpCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,4BAAN,cAAwC,mBAAmB;AAAA,MAChE,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB,CAAC;AAAA,YACxB,yBAAyB,EAAE,YAAY,IAAI;AAAA,YAC3C,4BAA4B,CAAC;AAAA,YAC7B,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,qBAAqB;AAAA,YACvB;AAAA,YACA,mBAAmB,EAAE,OAAO,IAAI;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,oBAAN,cAAgC,mBAAmB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,cAC1B,qBAAqB;AAAA,cACrB,oBAAoB;AAAA,YACtB;AAAA,YACA,qBAAqB,CAAC;AAAA,YACtB,0BAA0B,CAAC;AAAA,UAC7B;AAAA,UACA,WAAW;AAAA,YACT,YAAY;AAAA,cACV,KAAK;AAAA,cACL,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACnCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,MACzD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,UAAU;AAAA,cACV,qBAAqB;AAAA,YACvB;AAAA,YACA,iCAAiC,EAAE,OAAO,IAAI;AAAA,YAC9C,2BAA2B;AAAA,cACzB,gBAAgB;AAAA,YAClB;AAAA,YACA,wBAAwB;AAAA,cACtB,cAAc;AAAA,cACd,gBAAgB;AAAA,cAChB,gBAAgB;AAAA,cAChB,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACtCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,uBAAN,cAAmC,mBAAmB;AAAA,MAC3D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB,CAAC;AAAA,YACxB,0BAA0B,EAAE,OAAO,EAAE;AAAA,YACrC,4BAA4B,CAAC;AAAA,YAC7B,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,qBAAqB;AAAA,cACrB,kBAAkB;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,mBAAN,cAA+B,mBAAmB;AAAA,MACvD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,2BAA2B,EAAE,gBAAgB,EAAI;AAAA,YACjD,2BAA2B,CAAC;AAAA,YAC5B,yBAAyB,CAAC;AAAA,YAC1B,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,YACvB;AAAA,UACF;AAAA,UACA,WAAW;AAAA,YACT,YAAY;AAAA,cACV,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,MACzD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,eAAe,QAAQ,gBAAgB;AAE7C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,qCAAqC,EAAE,UAAU,EAAE;AAAA,YACnD,oBAAoB,EAAE,QAAQ,aAAa;AAAA,UAC7C;AAAA,UACA,iBAAiB;AAAA,YACf,cAAc;AAAA,cACZ,oCAAoC,EAAE,UAAU,GAAG,kBAAkB,EAAI;AAAA,cACzE,yCAAyC,EAAE,UAAU,EAAE;AAAA,YACzD;AAAA,YACA,eAAe;AAAA,cACb,gDAAgD;AAAA,gBAC9C,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV,kBAAkB;AAAA,gBAClB,cAAc;AAAA,kBACZ;AAAA,oBACE,SAAS,EAAE,MAAM,aAAa,SAAS,SAAS,OAAO,SAAS;AAAA,oBAChE,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,gBAAgB;AAAA,cACd,KAAK,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,YAC7C;AAAA,YACA,WAAW;AAAA,cACT,QAAQ,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,cAC9C,KAAK,EAAE,kBAAkB,CAAC,cAAc,EAAE;AAAA,YAC5C;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,KAAK,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC1DA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,MACzD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,cAC1B,UAAU;AAAA,cACV,kBAAkB;AAAA,YACpB;AAAA,YACA,oCAAoC,EAAE,UAAU,GAAG,kBAAkB,EAAI;AAAA,YACzE,yCAAyC,EAAE,UAAU,EAAE;AAAA,YACvD,qCAAqC;AAAA,cACnC,UAAU;AAAA,cACV,eAAe;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,MACzD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC,EAAE,UAAU,GAAG,kBAAkB,EAAI;AAAA,YACzE,yCAAyC,EAAE,UAAU,EAAE;AAAA,UACzD;AAAA,UACA,iBAAiB;AAAA,YACf,cAAc,CAAC;AAAA,YACf,eAAe;AAAA,cACb,qCAAqC;AAAA,gBACnC,UAAU;AAAA,gBACV,iBAAiB;AAAA,cACnB;AAAA,cACA,gDAAgD;AAAA,gBAC9C,UAAU;AAAA,gBACV,cAAc;AAAA,kBACZ;AAAA,oBACE,SAAS;AAAA,sBACP,QAAQ;AAAA,wBACN,EAAE,MAAM,aAAa,SAAS,SAAS,OAAO,SAAS;AAAA,wBACvD,EAAE,MAAM,iBAAiB,SAAS,QAAQ,OAAO,kBAAkB;AAAA,sBACrE;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA,mBAAmB;AAAA,gBACjB,UAAU;AAAA,gBACV,iBAAiB;AAAA,gBACjB,iBAAiB;AAAA,gBACjB,YAAY,EAAE,OAAO,UAAU;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,qBAAqB;AAAA,cACnB,KAAK,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,YAC7C;AAAA,YACA,SAAS;AAAA,cACP,QAAQ,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,cAC9C,KAAK,EAAE,kBAAkB,CAAC,cAAc,EAAE;AAAA,YAC5C;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,KAAK,EAAE,kBAAkB,CAAC,cAAc,EAAE;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjEA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,kBAAN,cAA8B,mBAAmB;AAAA,MACtD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,WAAW,QAAQ,YAAY;AACrC,cAAM,SAAS,QAAQ,UAAU;AAEjC,cAAM,kBAAuD,CAAC;AAC9D,cAAM,SAA8B,CAAC;AAGrC,iBAAS,IAAI,GAAG,KAAK,QAAQ,KAAK;AAChC,0BAAgB,SAAS,CAAC,EAAE,IAAI;AAAA,YAC9B,mBAAmB,EAAE,OAAO,KAAO,IAAI,KAAK,IAAI;AAAA,YAChD,sBAAsB,EAAE,OAAO,QAAQ,IAAI,KAAK,KAAK;AAAA,UACvD;AAEA,cAAI,IAAI,QAAQ;AACd,mBAAO,eAAe,IAAI,CAAC,EAAE,IAAI;AAAA,cAC/B,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE;AAAA,cAC3C,KAAK,EAAE,kBAAkB,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE;AAAA,YAC9C;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,kBAAkB;AAAA,cAChB,mBAAmB;AAAA,cACnB,WAAW;AAAA,cACX,MAAM;AAAA,YACR;AAAA,YACA,kCAAkC,EAAE,OAAO,EAAI;AAAA,UACjD;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,YACV,KAAK,EAAE,kBAAkB,CAAC,SAAS,EAAE;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACvDA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,MACzD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,cAAc,QAAQ,SAAS;AAErC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC;AAAA,cAClC,UAAU;AAAA,cACV,kBAAkB;AAAA,YACpB;AAAA,YACA,yCAAyC;AAAA,cACvC,UAAU;AAAA,YACZ;AAAA,YACA,qCAAqC;AAAA,cACnC,UAAU;AAAA,cACV,eAAe;AAAA,cACf,aAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACrCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,2BAAN,cAAuC,mBAAmB;AAAA,MAC/D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,YAAY,QAAQ,SAAS;AAEnC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,+BAA+B;AAAA,cAC7B,UAAU;AAAA,cACV,kBAAkB;AAAA,YACpB;AAAA,YACA,6BAA6B;AAAA,cAC3B,qBAAqB;AAAA,cACrB,WAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,2BAAN,cAAuC,mBAAmB;AAAA,MAC/D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,SAAS,QAAQ,UAAU;AACjC,cAAM,cAAc,QAAQ,eAAe;AAE3C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,mCAAmC;AAAA,cACjC,UAAU;AAAA,cACV,kBAAkB;AAAA,cAClB,cAAc;AAAA,YAChB;AAAA,YACA,oBAAoB,EAAE,OAAO;AAAA,UAC/B;AAAA,UACA,WAAW;AAAA,YACT,YAAY;AAAA,cACV,QAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACrCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,4BAAN,cAAwC,mBAAmB;AAAA,MAChE,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,aAAa,QAAQ,cAAc;AACzC,cAAM,eAAe,QAAQ,gBAAgB;AAE7C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC;AAAA,cAClC,UAAU;AAAA,cACV,qBAAqB;AAAA,cACrB,qBAAqB;AAAA,cACrB,eAAe;AAAA,YACjB;AAAA,YACA,qBAAqB;AAAA,cACnB,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACnCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,mBAAmB;AAAA,MAC1D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,QAAQ,QAAQ,SAAS;AAC/B,cAAM,WAAW,QAAQ,YAAY;AACrC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY,CAAC;AAAA,UACb,iBAAiB;AAAA,YACf,eAAe;AAAA,cACb,gDAAgD;AAAA,gBAC9C,UAAU;AAAA,gBACV,cAAc;AAAA,kBACZ;AAAA,oBACE,SAAS,EAAE,MAAM,aAAa,SAAS,SAAS,OAAO,SAAS;AAAA,oBAChE,UAAU;AAAA,kBACZ;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,mBAAmB;AAAA,cACjB,qBAAqB;AAAA,gBACnB,aAAa;AAAA,gBACb,UAAU;AAAA,gBACV;AAAA,gBACA,aAAa;AAAA,cACf;AAAA,cACA,mCAAmC;AAAA,gBACjC,UAAU;AAAA,gBACV,kBAAkB;AAAA,gBAClB,cAAc;AAAA,gBACd,kBAAkB;AAAA,cACpB;AAAA,YACF;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,iBAAiB;AAAA,cACf,QAAQ,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,cAC9C,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,EAAE;AAAA,YACjD;AAAA,YACA,gBAAgB;AAAA,cACd,QAAQ,EAAE,kBAAkB,CAAC,mBAAmB,EAAE;AAAA,cAClD,KAAK,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,YAC7C;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,KAAK,EAAE,kBAAkB,CAAC,eAAe,EAAE;AAAA,UAC7C;AAAA,UACA,WAAW;AAAA,YACT,QAAQ;AAAA,cACN,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACvEA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,mBAAmB;AAAA,MAC1D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,YAAY,QAAQ,aAAa,CAAC,MAAM;AAC9C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,cACpB,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,YAAY,EAAE,OAAO,WAAW,QAAQ,OAAO;AAAA,YACjD;AAAA,UACF;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,cACJ,qCAAqC;AAAA,gBACnC,UAAU;AAAA,gBACV,cAAc;AAAA,kBACZ;AAAA,oBACE,SAAS,EAAE,MAAM,aAAa,SAAS,SAAS,OAAO,SAAS;AAAA,oBAChE,UAAU;AAAA,oBACV,uBAAuB;AAAA,oBACvB,yBAAyB;AAAA,kBAC3B;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,OAAO;AAAA,cACL,sBAAsB,CAAC;AAAA,cACvB,mCAAmC;AAAA,gBACjC,UAAU;AAAA,gBACV,kBAAkB;AAAA,gBAClB,gBAAgB;AAAA,gBAChB,eAAe;AAAA,cACjB;AAAA,cACA,2CAA2C,EAAE,UAAU,EAAE;AAAA,cACzD,wCAAwC,EAAE,UAAU,EAAE;AAAA,cACtD,sBAAsB,CAAC;AAAA,cACvB,yCAAyC,EAAE,UAAU,EAAE;AAAA,YACzD;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE;AAAA,cACrC,KAAK,EAAE,kBAAkB,CAAC,OAAO,EAAE;AAAA,YACrC;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACpEA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,mBAAmB;AAAA,MAC1D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,YAAY,QAAQ,aAAa;AACvC,cAAM,eAAe,QAAQ,gBAAgB;AAC7C,cAAM,iBAAiB,QAAQ,kBAAkB;AAEjD,cAAM,iBAAsC;AAAA,UAC1C,sBAAsB;AAAA,YACpB,YAAY;AAAA,YACZ,cAAc,CAAC,QAAQ;AAAA,YACvB,eAAe;AAAA,YACf,OAAO,CAAC,EAAE,UAAU,CAAC,GAAK,KAAK,IAAI,EAAE,CAAC;AAAA,UACxC;AAAA,QACF;AAEA,YAAI,cAAc;AAChB,yBAAe,mCAAmC,IAAI,CAAC;AAAA,QACzD;AAEA,cAAM,kBAAuD,CAAC;AAC9D,cAAM,SAA8B,CAAC;AAErC,YAAI,gBAAgB;AAClB,0BAAgB,WAAW,IAAI,CAAC;AAChC,0BAAgB,SAAS,IAAI;AAAA,YAC3B,wBAAwB,CAAC;AAAA,YACzB,GAAG;AAAA,UACL;AAEA,iBAAO,WAAW,IAAI;AAAA,YACpB,QAAQ,EAAE,kBAAkB,CAAC,WAAW,EAAE;AAAA,YAC1C,KAAK,EAAE,kBAAkB,CAAC,SAAS,EAAE;AAAA,UACvC;AAEA,iBAAO;AAAA,YACL,IAAI;AAAA,YACJ,aAAa;AAAA,YACb,aAAa;AAAA,YACb,UAAU;AAAA,YACV,YAAY;AAAA,cACV,wBAAwB;AAAA,gBACtB,OAAO;AAAA,kBACL;AAAA,oBACE,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,gBAAgB,CAAC,QAAQ;AAAA,oBACzB,UAAU,EAAE,OAAO,YAAY;AAAA,kBACjC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY;AAAA,cACV,KAAK,EAAE,kBAAkB,CAAC,WAAW,EAAE;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/EA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,uBAAN,cAAmC,mBAAmB;AAAA,MAC3D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,aAAa,QAAQ,cAAc,CAAC,OAAO;AAEjD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB;AAAA,cACrB,cAAc;AAAA,cACd,aAAa;AAAA,gBACX,WAAW;AAAA,gBACX,WAAW;AAAA,cACb;AAAA,cACA,aAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,mBAAmB;AAAA,MAC1D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAA0C;AAChD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB;AAAA,cACrB,eAAe;AAAA,cACf,eAAe;AAAA,cACf,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,oBAAN,cAAgC,mBAAmB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAA0C;AAChD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,yBAAyB;AAAA,cACvB,cAAc;AAAA,cACd,OAAO;AAAA,YACT;AAAA,YACA,iCAAiC;AAAA,cAC/B,cAAc;AAAA,cACd,OAAO;AAAA,cACP,YAAY;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,oBAAN,cAAgC,mBAAmB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAA0C;AAChD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,yBAAyB;AAAA,cACvB,QAAQ,CAAC,UAAU,SAAS;AAAA,YAC9B;AAAA,YACA,+BAA+B,CAAC;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,yBAAN,cAAqC,mBAAmB;AAAA,MAC7D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,qBAAqB;AAAA,cACnB,UAAU;AAAA,cACV,SAAS;AAAA,gBACP,OAAO;AAAA,gBACP,QAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,cACJ,qBAAqB,CAAC;AAAA,cACtB,mBAAmB;AAAA,gBACjB,OAAO;AAAA,cACT;AAAA,cACA,qBAAqB;AAAA,gBACnB,UAAU;AAAA,gBACV,SAAS;AAAA,kBACP,OAAO;AAAA,kBACP,QAAQ;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AAAA,YACA,OAAO;AAAA,cACL,mBAAmB;AAAA,gBACjB,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE;AAAA,cACrC,KAAK,EAAE,kBAAkB,CAAC,OAAO,EAAE;AAAA,YACrC;AAAA,YACA,YAAY;AAAA,cACV,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE;AAAA,YACpC;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,WAAW;AAAA,cACT,EAAE,QAAQ,IAAI,KAAK,EAAE,kBAAkB,CAAC,OAAO,EAAE,EAAE;AAAA,cACnD,EAAE,QAAQ,GAAG,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,EAAE;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACnEA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,wBAAN,cAAoC,mBAAmB;AAAA,MAC5D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAyC;AAC/C,cAAM,iBAAiB,QAAQ,kBAAkB;AAEjD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,cACpB,kBAAkB;AAAA,cAClB,0BAA0B;AAAA,cAC1B,sBAAsB,CAAC,IAAI,IAAI,EAAE;AAAA,cACjC,iBAAiB;AAAA,cACjB,wBAAwB;AAAA,cACxB,uBAAuB;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,0BAAN,cAAsC,kBAAkB;AAAA,MAC7D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,WAAW,QAAQ,YAAY;AAErC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC;AAAA,cAClC,oBAAoB;AAAA,YACtB;AAAA,YACA,uCAAuC;AAAA,cACrC,sBAAsB;AAAA,YACxB;AAAA,YACA,uBAAuB;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,yBAAN,cAAqC,kBAAkB;AAAA,MAC5D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,WAAW,QAAQ,YAAY;AAErC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC;AAAA,cAClC,oBAAoB;AAAA,YACtB;AAAA,YACA,uCAAuC;AAAA,cACrC,sBAAsB;AAAA,YACxB;AAAA,YACA,uBAAuB;AAAA,cACrB,uBAAuB;AAAA,cACvB,yBAAyB;AAAA,YAC3B;AAAA,YACA,uBAAuB;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACpCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,0BAAN,cAAsC,kBAAkB;AAAA,MAC7D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,WAAW,QAAQ,YAAY;AAErC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC;AAAA,cAClC,oBAAoB;AAAA,YACtB;AAAA,YACA,uCAAuC;AAAA,cACrC,sBAAsB;AAAA,YACxB;AAAA,YACA,uBAAuB;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,yBAAN,cAAqC,kBAAkB;AAAA,MAC5D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,WAAW,QAAQ,YAAY;AAErC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oCAAoC;AAAA,cAClC,oBAAoB;AAAA,YACtB;AAAA,YACA,uCAAuC;AAAA,cACrC,sBAAsB;AAAA,YACxB;AAAA,YACA,uBAAuB;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,iBAAN,cAA6B,kBAAkB;AAAA,MACpD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,yBAAyB;AAAA,cACvB,OAAO;AAAA,YACT;AAAA,YACA,sBAAsB;AAAA,YACtB,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,IAAI,IAAI,CAAC;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,IAAI,IAAI,CAAC;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACnCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,kBAAkB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,yBAAyB;AAAA,cACvB,OAAO;AAAA,YACT;AAAA,YACA,sBAAsB;AAAA,YACtB,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,IAAI,GAAG,EAAE;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,IAAI,GAAG,EAAE;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACnCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,MACtD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,yBAAyB;AAAA,cACvB,OAAO;AAAA,YACT;AAAA,YACA,sBAAsB;AAAA,YACtB,2BAA2B;AAAA,YAC3B,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,kBAAN,cAA8B,kBAAkB;AAAA,MACrD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,yBAAyB;AAAA,cACvB,OAAO;AAAA,YACT;AAAA,YACA,sBAAsB;AAAA,YACtB,2BAA2B;AAAA,YAC3B,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AChCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,4BAAN,cAAwC,kBAAkB;AAAA,MAC/D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,eAAe,QAAQ,gBAAgB,CAAC,gBAAgB;AAE9D,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,cAC1B,eAAe;AAAA,cACf,YAAY;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC7BA,IASa;AATb;AAAA;AAAA;AAGA;AAMO,IAAM,6BAAN,cAAyC,kBAAkB;AAAA,MAChE,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,QAAQ,QAAQ,iBAAiB;AAEvC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,+BAA+B;AAAA,cAC7B;AAAA,cACA,iBAAiB,CAAC,QAAQ,MAAM,SAAS,SAAS,QAAQ,MAAM;AAAA,YAClE;AAAA,YACA,mCAAmC;AAAA,cACjC,oBAAoB;AAAA,cACpB,0BAA0B;AAAA,YAC5B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,gCAAN,cAA4C,kBAAkB;AAAA,MACnE,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,cAC1B,UAAU,CAAC,GAAG,GAAG,CAAC;AAAA,YACpB;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,oBAAoB,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,UACjC;AAAA,UACA,cAAc;AAAA,YACZ;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE;AAAA,YACpE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAAA,YACrE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/CA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,yBAAN,cAAqC,kBAAkB;AAAA,MAC5D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,cAC1B,UAAU,CAAC,GAAG,GAAG,CAAC;AAAA,YACpB;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,iBAAiB,CAAC,MAAM,QAAQ,SAAS,SAAS,QAAQ,MAAM;AAAA,UAClE;AAAA,UACA,cAAc;AAAA,YACZ;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE;AAAA,YACpE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE;AAAA,YACrE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE;AAAA,YACtE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE;AAAA,YACrE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACvDA,IASM,eAsCO;AA/Cb;AAAA;AAAA;AAGA;AAMA,IAAM,gBAAgB;AAAA,MACpB,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,QACpB;AAAA,UACE,aAAa;AAAA,YACX,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,gBAAgB;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,kBAClB,MAAM,CAAC,IAAI,GAAG,EAAE;AAAA,kBAChB,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACtC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACtC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACrC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE;AAAA,kBACxC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAOO,IAAM,iBAAN,cAA6B,kBAAkB;AAAA,MACpD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,YACtB,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,IAAI,GAAG,EAAE;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,IAAI,GAAG,EAAE;AAAA,YAClB;AAAA,UACF;AAAA,UACA,iBAAiB;AAAA,YACf,gCAAgC;AAAA,cAC9B,gBAAgB,CAAC,yBAAyB;AAAA,YAC5C;AAAA,UACF;AAAA,UACA,eAAe;AAAA,YACb;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,UACF;AAAA,UACA,cAAc;AAAA,YACZ;AAAA,cACE,WAAW;AAAA,cACX,YAAY;AAAA,gBACV,4BAA4B;AAAA,kBAC1B,aAAa,CAAC,GAAG,KAAK,CAAC;AAAA,gBACzB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5FA,IAUM,iBAmDO;AA7Db;AAAA;AAAA;AAGA;AAOA,IAAM,kBAAkB;AAAA,MACtB,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,QACpB;AAAA,UACE,aAAa;AAAA,YACX,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,gBAAgB;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,kBAClB,MAAM,CAAC,IAAI,GAAG,EAAE;AAAA,kBAChB,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACtC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACtC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACrC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE;AAAA,kBACxC;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,CAAC;AAAA,kBACjB,MAAM,CAAC,IAAI,GAAG,CAAC;AAAA,kBACf,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACtC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACtC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,oBACnC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;AAAA,kBACvC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAQO,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,MACtD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,YACtB,4BAA4B;AAAA,cAC1B,UAAU,CAAC,GAAG,GAAG,CAAC;AAAA,YACpB;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,oBAAoB,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,UACjC;AAAA,UACA,iBAAiB;AAAA,YACf,gCAAgC;AAAA,cAC9B,gBAAgB,CAAC,yBAAyB;AAAA,YAC5C;AAAA,YACA,wBAAwB;AAAA,cACtB,gBAAgB,CAAC,gCAAgC;AAAA,YACnD;AAAA,UACF;AAAA,UACA,eAAe;AAAA,YACb;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,UACF;AAAA,UACA,cAAc;AAAA;AAAA,YAEZ;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE;AAAA,YACpE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAAA,YACrE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA;AAAA,YAEA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE;AAAA,YACtE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE;AAAA,YACvE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC,EAAE,EAAE;AAAA,YACxE;AAAA,YACA;AAAA,cACE,WAAW;AAAA,cACX,YAAY,EAAE,4BAA4B,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC,EAAE,EAAE;AAAA,YACxE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACrIA,IAUM,gBA+JO;AAzKb;AAAA;AAAA;AAGA;AAOA,IAAM,iBAAiB;AAAA,MACrB,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,QACpB;AAAA,UACE,aAAa;AAAA,YACX,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,gBAAgB;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,kBAClB,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,kBACf,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE;AAAA,oBACtC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE;AAAA,oBACtC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE;AAAA,oBACrC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,kBAClB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,QAAQ,CAAC,IAAI,IAAI,EAAE;AAAA,kBACnB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,CAAC;AAAA,kBACjB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,QAAQ,CAAC,IAAI,IAAI,CAAC;AAAA,kBAClB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,GAAG,GAAG,EAAE;AAAA,kBACjB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,QAAQ,CAAC,GAAG,IAAI,EAAE;AAAA,kBAClB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,OAAO,CAAC,GAAG,GAAG,CAAC;AAAA,cACf,OAAO;AAAA,gBACL;AAAA,kBACE,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,kBAClB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,QAAQ,CAAC,IAAI,IAAI,EAAE;AAAA,kBACnB,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,kBACd,IAAI;AAAA,oBACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,oBAClC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;AAAA,kBACtC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAQO,IAAM,kBAAN,cAA8B,kBAAkB;AAAA,MACrD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,cACpB,YAAY;AAAA,cACZ,iBAAiB;AAAA,gBACf,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,UAAU;AAAA,gBACV,UAAU;AAAA,cACZ;AAAA,YACF;AAAA,YACA,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,YACjB;AAAA,YACA,2BAA2B;AAAA,cACzB,QAAQ,CAAC,IAAI,GAAG,EAAE;AAAA,cAClB,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,YACjB;AAAA,YACA,qBAAqB;AAAA,cACnB,OAAO;AAAA,YACT;AAAA,YACA,6BAA6B;AAAA,cAC3B,0BAA0B;AAAA,cAC1B,oBAAoB,CAAC,SAAS,SAAS,QAAQ,MAAM;AAAA,YACvD;AAAA,UACF;AAAA,UACA,iBAAiB;AAAA,YACf,wBAAwB;AAAA,cACtB,gBAAgB,CAAC,gCAAgC;AAAA,YACnD;AAAA,UACF;AAAA,UACA,eAAe;AAAA,YACb;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3NA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,wBAAN,cAAoC,kBAAkB;AAAA,MAC3D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC1BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,0BAAN,cAAsC,kBAAkB;AAAA,MAC7D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,gBAAgB,QAAQ,iBAAiB;AAE/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,UAC9B;AAAA,UACA,YAAY;AAAA,YACV,sBAAsB,MAAM,KAAK,EAAE,QAAQ,gBAAgB,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAAA,UAC7E;AAAA,UACA,cAAc,MAAM,KAAK,EAAE,QAAQ,gBAAgB,EAAE,GAAG,CAAC,GAAG,OAAO;AAAA,YACjE,WAAW,0CAA0C,CAAC;AAAA,YACtD,YAAY,EAAE,4BAA4B,EAAE;AAAA,UAC9C,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,kBAAkB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,2BAA2B;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxBA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,wBAAN,cAAoC,kBAAkB;AAAA,MAC3D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,6BAA6B;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxBA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,4BAAN,cAAwC,kBAAkB;AAAA,MAC/D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAyC;AAC/C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB;AAAA,cACrB,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC1BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,iBAAN,cAA6B,kBAAkB;AAAA,MACpD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,eAAe,QAAQ,gBAAgB;AAE7C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,2BAA2B;AAAA,YAC3B,kBAAkB;AAAA,cAChB,gBAAgB,CAAC,IAAI,EAAE;AAAA,cACvB,SAAS;AAAA,YACX;AAAA,YACA,4BAA4B;AAAA,cAC1B,SAAS;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,uBAAuB,MAAM,KAAK,EAAE,QAAQ,eAAe,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAAA,UAC7E;AAAA,UACA,cAAc,MAAM,KAAK,EAAE,QAAQ,eAAe,EAAE,GAAG,CAAC,GAAG,OAAO;AAAA,YAChE,WAAW,2CAA2C,CAAC;AAAA,YACvD,YAAY;AAAA,cACV,sBAAsB,uBAAuB,CAAC;AAAA,YAChD;AAAA,UACF,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5CA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,kBAAkB;AAAA,MACzD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,cAAc,QAAQ,uBAAuB;AACnD,cAAM,gBAAgB,QAAQ,yBAAyB;AAEvD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB;AAAA,cACrB,uBAAuB;AAAA,cACvB,yBAAyB;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC9BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,+BAAN,cAA2C,kBAAkB;AAAA,MAClE,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,aAAa,QAAQ,uBAAuB;AAElD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uCAAuC;AAAA,cACrC,sBAAsB;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5BA,IAUa;AAVb;AAAA;AAAA;AAGA;AAOO,IAAM,qBAAN,cAAiC,kBAAkB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAwC;AAC9C,cAAM,WAAW,QAAQ,YAAY;AAErC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,iBAAN,cAA6B,iBAAiB;AAAA,MACnD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,SAAS,QAAQ,UAAU;AACjC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oBAAoB;AAAA,cAClB,OAAO;AAAA,YACT;AAAA,YACA,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,YAC3B,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,YACA,qCAAqC;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACtCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,mBAAN,cAA+B,iBAAiB;AAAA,MACrD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,cAAc,QAAQ,eAAe;AAC3C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,YAC3B,oBAAoB;AAAA,cAClB,gBAAgB;AAAA,cAChB,gBAAgB;AAAA,gBACd;AAAA,kBACE,OAAO,EAAE,MAAM,uDAAuD;AAAA,kBACtE,OAAO;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3CA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,eAAN,cAA2B,iBAAiB;AAAA,MACjD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,cAAc,QAAQ,eAAe;AAC3C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,YAC3B,oBAAoB;AAAA,cAClB,gBAAgB;AAAA,cAChB,gBAAgB;AAAA,gBACd;AAAA,kBACE,OAAO,EAAE,MAAM,2BAA2B;AAAA,kBAC1C,OAAO;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3CA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,kBAAN,cAA8B,iBAAiB;AAAA,MACpD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,cAAc,QAAQ,eAAe;AAC3C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,YAC3B,oBAAoB;AAAA,cAClB,gBAAgB;AAAA,cAChB,gBAAgB;AAAA,gBACd;AAAA,kBACE,OAAO,EAAE,MAAM,2DAA2D;AAAA,kBAC1E,OAAO;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC3CA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,eAAN,cAA2B,iBAAiB;AAAA,MACjD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,YAC3B,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,kBAAN,cAA8B,iBAAiB;AAAA,MACpD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,aAAa,QAAQ,cAAc;AACzC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,mBAAmB;AAAA,cACjB;AAAA,YACF;AAAA,YACA,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,sBAAsB;AAAA,cACpB,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,iBAAiB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,aAAa,QAAQ,cAAc;AACzC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,mBAAmB;AAAA,cACjB;AAAA,YACF;AAAA,YACA,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,sBAAsB;AAAA,cACpB,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,oBAAN,cAAgC,iBAAiB;AAAA,MACtD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,aAAa,QAAQ,cAAc;AACzC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,mBAAmB;AAAA,cACjB;AAAA,YACF;AAAA,YACA,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,sBAAsB;AAAA,cACpB,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,iBAAN,cAA6B,iBAAiB;AAAA,MACnD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,aAAa,QAAQ,cAAc;AACzC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,mBAAmB;AAAA,cACjB;AAAA,YACF;AAAA,YACA,wBAAwB;AAAA,cACtB,gBAAgB;AAAA,YAClB;AAAA,YACA,sBAAsB;AAAA,cACpB,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,YACA,yBAAyB;AAAA,cACvB,OAAO;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,gBAAN,cAA4B,iBAAiB;AAAA,MAClD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,YAAY,QAAQ,aAAa;AACvC,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,kBAAkB;AAAA,cAChB;AAAA,cACA,qBAAqB;AAAA,cACrB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,cACzB,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,iBAAN,cAA6B,iBAAiB;AAAA,MACnD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,YAAY,QAAQ,aAAa;AAEvC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,kBAAkB;AAAA,cAChB;AAAA,cACA,qBAAqB;AAAA,cACrB,gBAAgB;AAAA,YAClB;AAAA,YACA,2BAA2B;AAAA,cACzB,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,MACvD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,cAAc,QAAQ,eAAe;AAE3C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,uBAAuB;AAAA,cACrB,oBAAoB;AAAA,cACpB,oBAAoB;AAAA,cACpB,kBAAkB;AAAA,YACpB;AAAA,YACA,wBAAwB;AAAA,cACtB,mBAAmB;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACjCA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,MACvD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,eAAe,QAAQ,gBAAgB;AAE7C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC1BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,wBAAN,cAAoC,iBAAiB;AAAA,MAC1D,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAwC;AAC9C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,4BAA4B;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxBA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,gBAAN,cAA4B,iBAAiB;AAAA,MAClD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,eAAe,QAAQ,gBAAgB;AAE7C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,kBAAkB;AAAA,cAChB,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,oBAAN,cAAgC,iBAAiB;AAAA,MACtD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,SAAwC;AAC9C,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,mBAAmB;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACxBA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,sBAAN,cAAkC,iBAAiB;AAAA,MACxD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,cAAc,QAAQ,eAAe,CAAC,sBAAsB;AAElE,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,wBAAwB;AAAA,cACtB,cAAc,YAAY,IAAI,CAAC,UAAkB;AAAA,gBAC/C,OAAO,CAAC,IAAI;AAAA,gBACZ,eAAe;AAAA,cACjB,EAAE;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,oBAAN,cAAgC,iBAAiB;AAAA,MACtD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,mBAAmB,QAAQ,oBAAoB;AACrD,cAAM,mBAAmB,QAAQ,oBAAoB;AAErD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,sBAAsB;AAAA,cACpB,UAAU;AAAA,cACV,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC9BA,IAQa;AARb;AAAA;AAAA;AAGA;AAKO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,MACvD,IAAI,KAAa;AACf,eAAO;AAAA,MACT;AAAA,MAEA,QAAQ,QAAuC;AAC7C,cAAM,aAAa,QAAQ,cAAc;AAEzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,YAAY;AAAA,YACV,oBAAoB;AAAA,cAClB,aAAa;AAAA,cACb,UAAU;AAAA,cACV,mBAAmB;AAAA,YACrB;AAAA,YACA,4BAA4B;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACkLO,SAAS,0BAAgC;AAE9C,gBAAc,oBAAoB,IAAI,oBAAoB,CAAC;AAC3D,gBAAc,oBAAoB,IAAI,qBAAqB,CAAC;AAC5D,gBAAc,oBAAoB,IAAI,0BAA0B,CAAC;AACjE,gBAAc,oBAAoB,IAAI,kBAAkB,CAAC;AACzD,gBAAc,oBAAoB,IAAI,mBAAmB,CAAC;AAC1D,gBAAc,oBAAoB,IAAI,qBAAqB,CAAC;AAC5D,gBAAc,oBAAoB,IAAI,iBAAiB,CAAC;AAGxD,gBAAc,oBAAoB,IAAI,mBAAmB,CAAC;AAC1D,gBAAc,oBAAoB,IAAI,mBAAmB,CAAC;AAC1D,gBAAc,oBAAoB,IAAI,mBAAmB,CAAC;AAC1D,gBAAc,oBAAoB,IAAI,gBAAgB,CAAC;AACvD,gBAAc,oBAAoB,IAAI,mBAAmB,CAAC;AAC1D,gBAAc,oBAAoB,IAAI,yBAAyB,CAAC;AAGhE,gBAAc,oBAAoB,IAAI,yBAAyB,CAAC;AAChE,gBAAc,oBAAoB,IAAI,0BAA0B,CAAC;AACjE,gBAAc,oBAAoB,IAAI,oBAAoB,CAAC;AAG3D,gBAAc,oBAAoB,IAAI,oBAAoB,CAAC;AAC3D,gBAAc,oBAAoB,IAAI,oBAAoB,CAAC;AAC3D,gBAAc,oBAAoB,IAAI,qBAAqB,CAAC;AAC5D,gBAAc,oBAAoB,IAAI,oBAAoB,CAAC;AAC3D,gBAAc,oBAAoB,IAAI,kBAAkB,CAAC;AAGzD,gBAAc,oBAAoB,IAAI,kBAAkB,CAAC;AACzD,gBAAc,oBAAoB,IAAI,uBAAuB,CAAC;AAC9D,gBAAc,oBAAoB,IAAI,sBAAsB,CAAC;AAC/D;AAKO,SAAS,yBAA+B;AAE7C,gBAAc,mBAAmB,IAAI,wBAAwB,CAAC;AAC9D,gBAAc,mBAAmB,IAAI,uBAAuB,CAAC;AAC7D,gBAAc,mBAAmB,IAAI,wBAAwB,CAAC;AAC9D,gBAAc,mBAAmB,IAAI,uBAAuB,CAAC;AAG7D,gBAAc,mBAAmB,IAAI,eAAe,CAAC;AACrD,gBAAc,mBAAmB,IAAI,mBAAmB,CAAC;AACzD,gBAAc,mBAAmB,IAAI,iBAAiB,CAAC;AACvD,gBAAc,mBAAmB,IAAI,gBAAgB,CAAC;AACtD,gBAAc,mBAAmB,IAAI,0BAA0B,CAAC;AAChE,gBAAc,mBAAmB,IAAI,2BAA2B,CAAC;AAGjE,gBAAc,mBAAmB,IAAI,8BAA8B,CAAC;AACpE,gBAAc,mBAAmB,IAAI,uBAAuB,CAAC;AAC7D,gBAAc,mBAAmB,IAAI,eAAe,CAAC;AACrD,gBAAc,mBAAmB,IAAI,iBAAiB,CAAC;AACvD,gBAAc,mBAAmB,IAAI,gBAAgB,CAAC;AAGtD,gBAAc,mBAAmB,IAAI,sBAAsB,CAAC;AAC5D,gBAAc,mBAAmB,IAAI,wBAAwB,CAAC;AAC9D,gBAAc,mBAAmB,IAAI,mBAAmB,CAAC;AACzD,gBAAc,mBAAmB,IAAI,sBAAsB,CAAC;AAC5D,gBAAc,mBAAmB,IAAI,0BAA0B,CAAC;AAChE,gBAAc,mBAAmB,IAAI,eAAe,CAAC;AACrD,gBAAc,mBAAmB,IAAI,oBAAoB,CAAC;AAC1D,gBAAc,mBAAmB,IAAI,6BAA6B,CAAC;AACnE,gBAAc,mBAAmB,IAAI,mBAAmB,CAAC;AAC3D;AAKO,SAAS,wBAA8B;AAE5C,gBAAc,kBAAkB,IAAI,eAAe,CAAC;AACpD,gBAAc,kBAAkB,IAAI,iBAAiB,CAAC;AACtD,gBAAc,kBAAkB,IAAI,aAAa,CAAC;AAClD,gBAAc,kBAAkB,IAAI,gBAAgB,CAAC;AACrD,gBAAc,kBAAkB,IAAI,aAAa,CAAC;AAGlD,gBAAc,kBAAkB,IAAI,gBAAgB,CAAC;AACrD,gBAAc,kBAAkB,IAAI,oBAAoB,CAAC;AACzD,gBAAc,kBAAkB,IAAI,kBAAkB,CAAC;AACvD,gBAAc,kBAAkB,IAAI,eAAe,CAAC;AAGpD,gBAAc,kBAAkB,IAAI,cAAc,CAAC;AACnD,gBAAc,kBAAkB,IAAI,eAAe,CAAC;AAGpD,gBAAc,kBAAkB,IAAI,mBAAmB,CAAC;AACxD,gBAAc,kBAAkB,IAAI,mBAAmB,CAAC;AACxD,gBAAc,kBAAkB,IAAI,sBAAsB,CAAC;AAC3D,gBAAc,kBAAkB,IAAI,cAAc,CAAC;AACnD,gBAAc,kBAAkB,IAAI,kBAAkB,CAAC;AACvD,gBAAc,kBAAkB,IAAI,oBAAoB,CAAC;AACzD,gBAAc,kBAAkB,IAAI,kBAAkB,CAAC;AACvD,gBAAc,kBAAkB,IAAI,mBAAmB,CAAC;AAC1D;AAxTA;AAAA;AAAA;AAoBA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAOA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACgEO,SAAS,sCAAsC,OAA+C;AACnG,QAAM,gBAA0D;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL,MAAM,cAAc,MAAM,WAAW,QAAQ,KAAK;AAAA,IAClD,QAAQ,MAAM;AAAA,IACd,QAAQ,MAAM;AAAA,IACd,MAAM,MAAM;AAAA,IACZ,WAAW,MAAM;AAAA,IACjB,OAAO,MAAM;AAAA,EACf;AACF;AAKO,SAAS,yBAAyB,OAAsD;AAC7F,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC,OAAO,UAAU,WAAW,QAAQ,KAAK;AAAA,EACpD;AACF;AAtSA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IA6Ba,cA4BP,kBAUe;AAnErB;AAAA;AAAA;AAaA;AAgBO,IAAM,eAAN,MAAmB;AAAA,MAChB;AAAA,MAER,YAAY,MAAc;AACxB,aAAK,QAAQ;A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AAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;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,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO;AAAA,UACT;AACE,mBAAO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;UAChC;QACF;QACA,qBAAqB;UACnB;QACF;QACA,kBAAkB;UAChB;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,gCAAgC;UAC9B;QACF;QACA,yBAAyB,CAAC,8CAA8C;QACxE,0BAA0B;UACxB;QACF;QACA,uCAAuC;UACrC;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,2CAA2C;UACzC;QACF;QACA,qCAAqC;UACnC;QACF;QACA,2BAA2B;UACzB;QACF;QACA,wCAAwC;UACtC;QACF;QACA,qBAAqB;UACnB;QACF;QACA,+BAA+B;UAC7B;QACF;MACF;MACA,gBAAgB;QACd,sBAAsB,CAAC,uBAAuB;QAC9C,gBAAgB,CAAC,6BAA6B;MAChD;MACA,YAAY;QACV,4CAA4C;UAC1C;QACF;QACA,4BAA4B;UAC1B;QACF;QACA,iCAAiC;UAC/B;QACF;QACA,uCAAuC;UACrC;QACF;QACA,4BAA4B,CAAC,uBAAuB;QACpD,yBAAyB;UACvB;QACF;QACA,0BAA0B;UACxB;QACF;QACA,0CAA0C;UACxC;QACF;QACA,kCAAkC;UAChC;QACF;QACA,oCAAoC;UAClC;QACF;QACA,4BAA4B,CAAC,0CAA0C;QACvE,wBAAwB;UACtB;QACF;QACA,iBAAiB,CAAC,qDAAqD;QACvE,kBAAkB;UAChB;QACF;QACA,kCAAkC;UAChC;QACF;QACA,4BAA4B;UAC1B;QACF;QACA,2BAA2B;UACzB;QACF;QACA,sCAAsC;UACpC;QACF;QACA,yBAAyB,CAAC,uCAAuC;QACjE,iBAAiB,CAAC,+CAA+C;QACjE,cAAc,CAAC,kDAAkD;QACjE,kCAAkC;UAChC;QACF;QACA,kBAAkB;UAChB;QACF;QACA,eAAe;UACb;QACF;QACA,+BAA+B;UAC7B;QACF;QACA,mDAAmD;UACjD;QACF;QACA,0BAA0B,CAAC,sBAAsB;QACjD,oBAAoB;UAClB;UACA,CAAC;UACD,EAAE,mBAAmB,EAAE,QAAQ,MAAM,EAAE;QACzC;QACA,sCAAsC;UACpC;QACF;QACA,gBAAgB,CAAC,oCAAoC;QACrD,iBAAiB,CAAC,8CAA8C;QAChE,+CA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",
  "names": ["handler", "handler", "handler", "handler", "EventDispatcher", "require_dist", "toString", "Buffer", "isArray", "isBoolean", "isNumber", "isString", "isUndefined", "isRegExp", "isObject", "isDate", "isFunction", "inherits", "util", "Buffer", "util", "join", "err", "self", "util", "Buffer", "stream", "err", "keys", "util", "Readable", "self", "err", "require_safe_buffer", "Buffer", "Buffer", "self", "Readable", "isArray", "Buffer", "util", "stream", "err", "self", "n", "util", "err", "err2", "stream", "util", "e", "isArray", "require_lib", "Promise", "resolve", "reject", "self", "all", "i", "global", "undefined", "setImmediate", "e", "path", "self", "isBlob", "resolve", "self", "_utf8len", "string2buf", "i", "utf8border", "buf2string", "Readable", "self", "resolve", "err", "self", "self", "makeTable", "crcTable", "crc32", "isArray", "crc32", "crc32", "_has", "Z_FIXED", "Z_BINARY", "Z_TEXT", "Z_UNKNOWN", "zero", "STORED_BLOCK", "STATIC_TREES", "DYN_TREES", "MIN_MATCH", "MAX_MATCH", "LENGTH_CODES", "LITERALS", "L_CODES", "D_CODES", "BL_CODES", "HEAP_SIZE", "MAX_BITS", "Buf_size", "MAX_BL_BITS", "END_BLOCK", "REP_3_6", "REPZ_3_10", "REPZ_11_138", "extra_lbits", "extra_dbits", "extra_blbits", "bl_order", "DIST_CODE_LEN", "static_ltree", "static_dtree", "_dist_code", "_length_code", "base_length", "base_dist", "StaticTreeDesc", "static_l_desc", "static_d_desc", "static_bl_desc", "TreeDesc", "d_code", "put_short", "send_bits", "send_code", "bi_reverse", "bi_flush", "gen_bitlen", "gen_codes", "tr_static_init", "init_block", "bi_windup", "copy_block", "smaller", "pqdownheap", "compress_block", "build_tree", "scan_tree", "send_tree", "build_bl_tree", "send_all_trees", "rank", "detect_data_type", "static_init_done", "_tr_init", "_tr_stored_block", "_tr_align", "_tr_flush_block", "_tr_tally", "adler32", "require_crc32", "makeTable", "crcTable", "crc32", "trees", "adler32", "crc32", "Z_NO_FLUSH", "Z_PARTIAL_FLUSH", "Z_FULL_FLUSH", "Z_FINISH", "Z_BLOCK", "Z_OK", "Z_STREAM_END", "Z_STREAM_ERROR", "Z_DATA_ERROR", "Z_BUF_ERROR", "Z_DEFAULT_COMPRESSION", "Z_FILTERED", "Z_HUFFMAN_ONLY", "Z_RLE", "Z_FIXED", "Z_DEFAULT_STRATEGY", "Z_UNKNOWN", "Z_DEFLATED", "MAX_MEM_LEVEL", "MAX_WBITS", "DEF_MEM_LEVEL", "LENGTH_CODES", "LITERALS", "L_CODES", "D_CODES", "BL_CODES", "HEAP_SIZE", "MAX_BITS", "MIN_MATCH", "MAX_MATCH", "MIN_LOOKAHEAD", "PRESET_DICT", "INIT_STATE", "EXTRA_STATE", "NAME_STATE", "COMMENT_STATE", "HCRC_STATE", "BUSY_STATE", "FINISH_STATE", "BS_NEED_MORE", "BS_BLOCK_DONE", "BS_FINISH_STARTED", "BS_FINISH_DONE", "OS_CODE", "err", "rank", "zero", "flush_pending", "flush_block_only", "put_byte", "putShortMSB", "read_buf", "longest_match", "fill_window", "deflate_stored", "deflate_fast", "deflate_slow", "deflate_rle", "deflate_huff", "Config", "configuration_table", "lm_init", "DeflateState", "deflateResetKeep", "deflateReset", "deflateSetHeader", "deflateInit2", "deflateInit", "deflate", "deflateEnd", "deflateSetDictionary", "STR_APPLY_UIA_OK", "_utf8len", "buf2binstring", "ZStream", "require_deflate", "strings", "ZStream", "toString", "Z_NO_FLUSH", "Z_FINISH", "Z_OK", "Z_STREAM_END", "Z_SYNC_FLUSH", "Z_DEFAULT_COMPRESSION", "Z_DEFAULT_STRATEGY", "Z_DEFLATED", "Deflate", "deflate", "deflateRaw", "gzip", "BAD", "TYPE", "inflate_fast", "MAXBITS", "ENOUGH_LENS", "ENOUGH_DISTS", "CODES", "LENS", "DISTS", "lbase", "lext", "dbase", "dext", "inflate_table", "adler32", "crc32", "inflate_fast", "inflate_table", "CODES", "LENS", "DISTS", "Z_FINISH", "Z_BLOCK", "Z_TREES", "Z_OK", "Z_STREAM_END", "Z_NEED_DICT", "Z_STREAM_ERROR", "Z_DATA_ERROR", "Z_MEM_ERROR", "Z_BUF_ERROR", "Z_DEFLATED", "HEAD", "FLAGS", "TIME", "OS", "EXLEN", "EXTRA", "NAME", "COMMENT", "HCRC", "DICTID", "DICT", "TYPE", "TYPEDO", "STORED", "COPY_", "COPY", "TABLE", "LENLENS", "CODELENS", "LEN_", "LEN", "LENEXT", "DIST", "DISTEXT", "MATCH", "LIT", "CHECK", "LENGTH", "DONE", "BAD", "MEM", "SYNC", "ENOUGH_LENS", "ENOUGH_DISTS", "MAX_WBITS", "DEF_WBITS", "zswap32", "InflateState", "inflateResetKeep", "inflateReset", "inflateReset2", "inflateInit2", "inflateInit", "virgin", "lenfix", "distfix", "fixedtables", "updatewindow", "inflate", "inflateEnd", "inflateGetHeader", "inflateSetDictionary", "GZheader", "require_inflate", "strings", "ZStream", "GZheader", "toString", "Inflate", "inflate", "inflateRaw", "assign", "deflate", "inflate", "constants", "self", "crc32", "platform", "self", "e", "stream", "self", "defaults", "path", "isRegExp", "file", "resolve", "data", "require_lib", "JSZip", "EXTRA", "isArray", "crypto", "Buffer", "buffer", "isString", "blocks", "buffer8", "exports", "url", "resolve", "require_isarray", "toString", "isObject", "isFunction", "isString", "isNaN", "require_implementation", "concatty", "slicy", "bind", "Empty", "bind", "bind", "bind", "undefined", "doEval", "bind", "stringToPath", "getBaseIntrinsic", "hasPropertyDescriptors", "define", "bind", "isArray", "stableStringify", "get", "stringify", "out", "resolve", "url", "err", "factory", "module", "exports", "parse", "parseModule", "parseScript", "tokenize", "CommentHandler", "getQualifiedElementName", "JSXParser", "Regex", "JSXClosingElement", "JSXElement", "JSXEmptyExpression", "JSXExpressionContainer", "JSXIdentifier", "JSXMemberExpression", "JSXAttribute", "JSXNamespacedName", "JSXOpeningElement", "JSXSpreadAttribute", "JSXText", "ArrayExpression", "ArrayPattern", "ArrowFunctionExpression", "AssignmentExpression", "AssignmentPattern", "AsyncArrowFunctionExpression", "AsyncFunctionDeclaration", "AsyncFunctionExpression", "AwaitExpression", "BinaryExpression", "BlockStatement", "BreakStatement", "CallExpression", "CatchClause", "ClassBody", "ClassDeclaration", "ClassExpression", "ComputedMemberExpression", "ConditionalExpression", "test", "ContinueStatement", "DebuggerStatement", "Directive", "DoWhileStatement", "EmptyStatement", "ExportAllDeclaration", "ExportDefaultDeclaration", "ExportNamedDeclaration", "ExportSpecifier", "ExpressionStatement", "ForInStatement", "ForOfStatement", "ForStatement", "FunctionDeclaration", "FunctionExpression", "Identifier", "IfStatement", "ImportDeclaration", "ImportDefaultSpecifier", "ImportNamespaceSpecifier", "ImportSpecifier", "LabeledStatement", "Literal", "MetaProperty", "MethodDefinition", "Module", "NewExpression", "ObjectExpression", "ObjectPattern", "Property", "RegexLiteral", "pattern", "RestElement", "ReturnStatement", "Script", "SequenceExpression", "SpreadElement", "StaticMemberExpression", "Super", "SwitchCase", "SwitchStatement", "TaggedTemplateExpression", "TemplateElement", "TemplateLiteral", "ThisExpression", "ThrowStatement", "TryStatement", "handler", "UnaryExpression", "UpdateExpression", "VariableDeclaration", "VariableDeclarator", "WhileStatement", "WithStatement", "YieldExpression", "ArrowParameterPlaceHolder", "Parser", "isAsync", "assert", "ErrorHandler", "hexValue", "octalValue", "Scanner", "self", "Reader", "Tokenizer", "require_common", "isObject", "isArray", "isString", "isNumber", "isFunction", "define", "assign", "isArray", "i", "CommentArray", "require_parse", "CommentArray", "define", "tokenize", "isObject", "parse", "require_stringify", "isArray", "isObject", "isFunction", "isNumber", "isString", "escape", "join", "stringify", "toString", "require_src", "parse", "tokenize", "stringify", "CommentArray", "assign", "import_ste_events", "currentObj", "import_ste_events", "path", "import_ste_events", "path", "parentFolder", "path", "JSZip", "path", "keepStartCensorStrategy", "keepEndCensorStrategy", "asteriskCensorStrategy", "fixedCharCensorStrategy", "grawlixCensorStrategy", "randomCharFromSetCensorStrategy", "fixedPhraseCensorStrategy", "compareMatchByPositionAndId", "TextCensor", "assignIncrementingIds", "pattern", "DataSet", "PhraseBuilder", "pattern", "SyntaxKind", "pattern", "RegExpMatcher", "ParserError", "Parser", "pattern", "strings", "parseRawPattern", "factory", "collapseDuplicatesTransformer", "remapCharactersTransformer", "resolveConfusablesTransformer", "resolveLeetSpeakTransformer", "toAsciiLowerCaseTransformer", "skipNonAlphabeticTransformer", "require_dist", "exports", "mod", "pattern", "path", "version", "pattern", "process", "import_ste_events", "import_ste_events", "prototype", "filter", "hasOwnProperty", "define", "request", "util", "util", "stream", "self", "err", "charset", "path", "extension", "isAsync", "err", "iterator", "iterator", "iterator", "iterator", "require_shams", "toStringTag", "util", "path", "http", "https", "parseUrl", "fs", "crypto", "FormData", "append", "err", "request", "defaults", "FormData", "path", "build", "toString", "encode", "url", "crypto", "init_utils", "init_utils", "path", "path", "isFormData", "isFileList", "transitional", "filter", "self", "prototype", "request", "resolve", "validateStatus", "url", "url", "parse", "require_common", "coerce", "self", "extend", "os", "version", "stream", "require_node", "util", "useColors", "require_src", "url", "URL", "http", "https", "assert", "isFunction", "noop", "self", "isString", "isBuffer", "request", "parseUrl", "exports", "spread", "url", "err", "stream", "err", "DEFAULT_PORTS", "url", "util", "stream", "followRedirects", "resolve", "err", "data", "auth", "path", "transitional", "origin", "url", "path", "merge", "auth", "resolve", "request", "err", "transitional", "err", "signal", "stream", "iterator", "done", "err", "isFunction", "ReadableStream", "TextEncoder", "url", "request", "resolve", "err", "fetch", "adapter", "adapter", "version", "validators", "err", "transitional", "url", "resolve", "request", "err", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "getAdapter", "mergeConfig", "init_axios", "e", "t", "i", "n", "s", "r", "a", "o", "l", "h", "u", "c", "f", "d", "G", "k", "decodeTgaCodec", "resolve", "import_ste_events", "Exifr", "import_ste_events", "path", "bytes", "AttributeComponent", "import_ste_events", "AttributeComponent", "import_ste_events", "import_ste_events", "import_ste_events", "version", "i", "state", "import_ste_events", "mod", "version", "import_ste_events", "mod", "version", "path", "import_ste_events", "import_ste_events", "import_ste_events", "version", "import_ste_events", "import_ste_events", "import_ste_events", "parse", "__defProp", "__export", "all", "isAsync", "test", "pattern", "handler", "AnnotationCategory", "all", "path", "item", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "path", "import_ste_events", "mod", "import_ste_events", "import_ste_events", "import_ste_events", "version", "i", "import_ste_events", "path", "obj", "key", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "path", "import_ste_events", "import_ste_events", "version", "import_ste_events", "path", "md5", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "path", "import_ste_events", "path", "gen", "resolve", "PackInfoGeneratorTest", "TopicTestIdBase", "sep", "isDefined", "isArray", "isObject", "cleanFieldId", "DataFormIssueType", "path", "pattern", "init_axios", "build", "toString", "assign", "constants", "rank", "resolve", "i", "i", "import_ste_events", "CHUNK_X_SIZE", "CHUNK_Z_SIZE", "path", "handler", "version", "resolve", "keyValue", "xPlane", "WorldItemInfoGeneratorTest", "blockTypeComponents", "itemTypeComponents", "value", "all", "partial", "path", "pattern", "init_axios", "path", "path", "path", "init_axios", "resolve", "path", "init_axios", "resolve", "import_ste_events", "url", "err", "resolve", "request", "path", "resolve", "build", "path", "FolderDeploy", "creatorTools", "creatorTools", "Project", "pattern", "rng", "rng", "err", "pattern", "rng", "pattern", "parseHex", "custom", "spread", "creatorTools", "ProjectExporter", "messages", "ContentGenerator", "ContentWriter", "Project", "all", "path", "import_ste_events", "WorldDataInfoGeneratorTest", "err", "import_ste_events", "path", "PackSizeInfoGeneratorTest", "path", "totalTextureMemoryByTier", "nonVanillaTextureMemoryByTier", "ver", "AnimationResourceInfoGeneratorTest", "path", "ItemTypeInfo", "TopicTestIdBase", "MCFunctionInfoGeneratorTest", "Exifr", "exifrModule", "test", "test", "util", "objectUtil", "util", "util", "path", "errorUtil", "errorMap", "version", "util", "r", "path", "err", "ctx", "result", "issues", "elements", "processed", "ZodFirstPartyTypeKind", "util", "SoundsDefinitionInfoGeneratorTest", "ScriptInfoGeneratorTest", "version", "test", "test", "require_validate", "factory", "exports", "validate", "schema", "path", "value", "j", "instance", "transforms", "import_json_schema", "init_axios", "err", "import_json_schema", "JsonSchemaErrorBase", "NotCurrentFormatVersionBase", "init_axios", "err", "Tests", "toCamelCase", "Tests", "Tests", "settings", "version", "CheckResourcePackDependenciesGeneratorTest", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "test", "import_ste_events", "test", "import_ste_events", "wtm", "import_ste_events", "import_ste_events", "import_ste_events", "path", "mod", "defaults", "mod", "path", "err", "import_ste_events", "import_ste_events", "import_ste_events", "import_ste_events", "handler", "firstDot", "url", "filePaths", "ProjectItemRelations", "path", "extension", "content", "path", "import_ste_events", "import_ste_events", "path", "pattern", "err", "path", "import_ste_events", "version", "init_axios", "path", "url", "version", "Project", "resolve", "import_ste_events", "import_ste_events", "path", "import_ste_events", "path", "variantKeys", "resolve", "import_ste_events", "path", "import_ste_events", "Project", "err", "path", "creatorTools", "resolve", "i", "mod", "folder", "fileName", "file", "name", "method", "hook", "hook", "bind", "isPlainObject", "defaults", "merge", "url", "parseUrl", "parse", "VERSION", "NullObject", "parse", "safeParse", "isPlainObject", "fetch", "url", "noop", "err", "withDefaults", "VERSION", "defaults_default", "init_dist_bundle", "withDefaults", "VERSION", "init_dist_bundle", "request", "endpoint", "init_dist_bundle", "VERSION", "noop", "init_dist_src", "init_dist_bundle", "VERSION", "defaults", "hook", "auth", "VERSION", "init_version", "request", "path", "init_dist_src", "init_version", "VERSION", "iterator", "url", "iterator2", "VERSION", "init_dist_bundle", "VERSION", "init_version", "defaults", "options", "endpoint", "url", "init_dist_src", "init_version", "VERSION", "VERSION", "init_version", "Octokit", "init_dist_src", "init_dist_bundle", "init_version", "VERSION", "init_dist_src", "Octokit", "creatorTools", "import_ste_events", "creatorTools", "import_ste_events", "init_axios", "creatorTools", "resolve", "Project", "url", "import_ste_events", "creatorTools", "path", "import_ste_events", "creatorTools", "path", "creatorTools", "Project", "import_ste_events", "creatorTools", "path", "path", "newFullPath", "result", "path", "import_ste_events", "CreatorTools", "init_axios", "url", "resolve", "firstPipe", "content", "Project", "path", "localStorage", "project", "define", "module", "exports", "o", "e", "n", "global", "Promise", "self", "resolve", "all", "i", "key", "toString", "length", "idb", "err", "forage", "iterator", "value", "keys", "db", "toString$1", "t", "error", "reject", "sameValue", "includes", "isArray", "extend", "LocalForage", "configureMissingMethods", "methodNotImplementedFactory", "promise", "setDriverSupport", "supportedDrivers", "createInstance", "localforage", "err", "import_localforage", "localforage", "import_localforage", "localforage", "import_ste_events", "CreatorTools", "path", "import_ste_events", "LogItem", "err", "util", "filter", "util", "require_constants", "crcTable", "constants", "Parser", "filter", "util", "zlib", "Parser", "err", "constants", "constants", "filter", "zlib", "util", "constants", "assert", "zlib", "util", "Inflate", "self", "err", "filter", "zlib", "Parser", "err", "inflatedData", "zlib", "constants", "parse", "util", "Parser", "PNG", "err", "path", "crypto", "crypto", "crypto", "path", "resolve", "fs", "crypto", "path", "file", "path", "fs", "import_ste_events", "path", "err", "isFile", "zlib", "path", "fs", "resolve", "err", "isValid", "fs", "crypto", "context", "path", "creatorTools", "Project", "path", "outputStorage", "localEnv", "validate", "creatorTools", "outputStorage", "projectSet"]
}
