diff --git a/CHANGELOG.md b/CHANGELOG.md index 059fb8c0cf..dffa584b6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Sessions: discover live pi and OMP sessions through one Pi-family scanner, with dialect-aware metadata, PID-only startup rows, and mixed-version CLI/remote support (#2529). Thanks @wdmitchelluk! - Kimi/GLM: distinguish Kimi Code from the regional Open Platform, bind China and international keys to their issuing hosts, and show GLM Coding Plan's 5-hour window as primary with MCP separate (#2351). Thanks @Leehow! - Provider plugins: declarative detail rows/charts plus bundled JavaScript conversions for OpenAI, z.ai, OpenRouter, Poe, and ClawRouter behind `CODEXBAR_JS_PROVIDERS=1`. +- Provider plugins: install local JavaScript or TypeScript providers with manifest-driven settings and generic menu cards, approval-bound network/cookie access, and sandboxed Sucrase transpilation. ### Changed - Menu: move each usage window's used percentage and reset time into its title row, with all pace detail on one line (#2182). Thanks @jack24254029! diff --git a/Scripts/regenerate-sucrase-bundle.sh b/Scripts/regenerate-sucrase-bundle.sh new file mode 100755 index 0000000000..e506b3032f --- /dev/null +++ b/Scripts/regenerate-sucrase-bundle.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# Reproducibly regenerates Sources/CodexBarCore/Resources/Plugins/sucrase-3.35.1.min.js +# from the official npm artifact. The vendored bundle MUST match EXPECTED_SHA256; +# review of the minified blob is by reproduction, not by reading. +set -euo pipefail + +SUCRASE_VERSION="3.35.1" +ESBUILD_VERSION="0.25.8" +EXPECTED_SHA256="4d997e15b72cbc9ccf6e743c30c6eb48bf4533f6709852367b40766be5eba70b" + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +OUTPUT_FILE="${ROOT_DIR}/Sources/CodexBarCore/Resources/Plugins/sucrase-${SUCRASE_VERSION}.min.js" +MODE="${1:-check}" + +WORK_DIR="$(mktemp -d /tmp/codexbar-sucrase-regen.XXXXXX)" +trap 'rm -rf "$WORK_DIR"' EXIT +cd "$WORK_DIR" + +npm init -y >/dev/null 2>&1 +npm install --ignore-scripts --no-audit --no-fund "sucrase@${SUCRASE_VERSION}" >/dev/null +npx --yes "esbuild@${ESBUILD_VERSION}" node_modules/sucrase/dist/index.js \ + --bundle --minify --platform=browser --format=iife --global-name=sucrase \ + --banner:js="/*! Sucrase v${SUCRASE_VERSION} | MIT License | Copyright (c) 2012-present various contributors | https://github.com/alangpierce/sucrase */" \ + --outfile="${WORK_DIR}/sucrase.min.js" >/dev/null 2>&1 + +ACTUAL_SHA256="$(shasum -a 256 "${WORK_DIR}/sucrase.min.js" | awk '{print $1}')" +if [[ "$ACTUAL_SHA256" != "$EXPECTED_SHA256" ]]; then + echo "error: reproduced bundle hash ${ACTUAL_SHA256} does not match expected ${EXPECTED_SHA256}" >&2 + echo "If the version or esbuild pin changed intentionally, update EXPECTED_SHA256." >&2 + exit 1 +fi + +case "$MODE" in + check | --check) + VENDORED_SHA256="$(shasum -a 256 "$OUTPUT_FILE" | awk '{print $1}')" + if [[ "$VENDORED_SHA256" != "$EXPECTED_SHA256" ]]; then + echo "error: vendored bundle ${VENDORED_SHA256} does not match reproducible build ${EXPECTED_SHA256}" >&2 + exit 1 + fi + echo "ok: vendored sucrase bundle matches reproducible build (${EXPECTED_SHA256})" + ;; + write | --write) + cp "${WORK_DIR}/sucrase.min.js" "$OUTPUT_FILE" + echo "wrote ${OUTPUT_FILE} (${EXPECTED_SHA256})" + ;; + *) + echo "Usage: $0 [check|write]" >&2 + exit 2 + ;; +esac diff --git a/Sources/CodexBar/PreferencesPluginsPane.swift b/Sources/CodexBar/PreferencesPluginsPane.swift new file mode 100644 index 0000000000..955b2104b9 --- /dev/null +++ b/Sources/CodexBar/PreferencesPluginsPane.swift @@ -0,0 +1,370 @@ +#if canImport(JavaScriptCore) +import AppKit +import CodexBarCore +import SwiftUI +import UniformTypeIdentifiers + +@MainActor +struct PluginsPane: View { + @Bindable var settings: SettingsStore + @Bindable var store: UsageStore + @State private var results: [UserProviderPluginLoadResult] = [] + @State private var pendingApproval: PendingPluginApproval? + @State private var pendingDelete: PluginDeleteRequest? + @State private var operationError: String? + + var body: some View { + Form { + Section { + HStack { + Button("Install…") { self.choosePlugin() } + Button("Refresh") { self.refresh() } + Spacer() + Text(UserProviderPluginLoader.defaultProvidersDirectory.path) + .font(.caption) + .foregroundStyle(.secondary) + .textSelection(.enabled) + } + } header: { + Text("Provider Plugins") + } footer: { + Text("Plugins are local JavaScript or TypeScript files. Network and cookie access require approval.") + } + + if self.results.isEmpty { + ContentUnavailableView( + "No Plugins Installed", + systemImage: "puzzlepiece.extension", + description: Text("Drop one .js or .ts file into the plugins directory, or choose Install….")) + } + + ForEach(self.results, id: \.fileURL) { result in + if let plugin = result.plugin { + self.pluginSection(plugin) + } else { + self.invalidPluginSection(result) + } + } + } + .formStyle(.grouped) + .onAppear { self.refresh() } + .sheet(item: self.$pendingApproval) { pending in + PluginApprovalSheet( + pending: pending, + onCancel: { self.pendingApproval = nil }, + onApprove: { confirmations, settings in + self.completeApproval(pending, confirmations: confirmations, settings: settings) + }) + } + .alert( + "Delete Plugin?", + isPresented: Binding( + get: { self.pendingDelete != nil }, + set: { + if !$0 { + self.pendingDelete = nil + } + }), + actions: { + Button("Delete", role: .destructive) { self.completeDelete() } + Button("Cancel", role: .cancel) { self.pendingDelete = nil } + }, + message: { + Text( + "This removes the plugin file, transpile cache, approval, saved settings and secrets, and history.") + }) + .alert( + "Plugin Error", + isPresented: Binding( + get: { self.operationError != nil }, + set: { + if !$0 { + self.operationError = nil + } + }), + actions: { Button("OK") { self.operationError = nil } }, + message: { Text(self.operationError ?? "") }) + } + + private func pluginSection(_ plugin: UserProviderPlugin) -> some View { + let binding = try? plugin.approvalBinding( + settings: self.settings.pluginConfig(plugin.manifest.id)?.pluginSettings ?? [:]) + let approved = binding.map(self.store.pluginApprovalStore.isApproved) == true + let status = if !self.settings.isPluginEnabled(plugin.manifest.id) { + "Disabled" + } else if approved { + "Active" + } else { + "Needs approval" + } + + return Section { + LabeledContent("File") { + Text(plugin.fileURL.path).textSelection(.enabled) + } + LabeledContent("Status", value: status) + LabeledContent("Origins", value: binding?.origins.joined(separator: ", ") ?? "Configure endpoint settings") + LabeledContent( + "Capabilities", + value: plugin.manifest.capabilities.map(\.rawValue).sorted().joined(separator: ", ") + .nilIfEmpty ?? "Network") + if !plugin.manifest.cookieDomains.isEmpty { + LabeledContent("Cookie domains", value: plugin.manifest.cookieDomains.sorted().joined(separator: ", ")) + } + Toggle("Enabled", isOn: self.enabledBinding(plugin.manifest.id)) + ForEach(plugin.manifest.settings, id: \.key) { setting in + if setting.kind == .secure { + SecureField(setting.title, text: self.settingBinding(plugin.manifest.id, setting: setting)) + } else { + TextField(setting.title, text: self.settingBinding(plugin.manifest.id, setting: setting)) + } + if let subtitle = setting.subtitle { + Text(subtitle).font(.caption).foregroundStyle(.secondary) + } + } + if let error = self.store.errors[plugin.manifest.id] { + Text(error).foregroundStyle(.red).textSelection(.enabled) + } + HStack { + if !approved { + Button("Approve…") { self.requestApproval(plugin: plugin, sourceURL: nil) } + } + Button("Refresh") { + Task { await self.store.refreshUserPlugin(plugin.manifest.id) } + } + Spacer() + Button("Delete…", role: .destructive) { + self.pendingDelete = PluginDeleteRequest(fileURL: plugin.fileURL, plugin: plugin) + } + } + } header: { + Label(plugin.manifest.name, systemImage: "puzzlepiece.extension") + } + } + + private func invalidPluginSection(_ result: UserProviderPluginLoadResult) -> some View { + Section { + LabeledContent("File") { Text(result.fileURL.path).textSelection(.enabled) } + LabeledContent("Status", value: "Error") + Text(result.error ?? "Unknown validation error") + .foregroundStyle(.red) + .textSelection(.enabled) + HStack { + Spacer() + Button("Delete…", role: .destructive) { + self.pendingDelete = PluginDeleteRequest(fileURL: result.fileURL, plugin: nil) + } + } + } header: { + Label(result.fileURL.deletingPathExtension().lastPathComponent, systemImage: "exclamationmark.triangle") + } + } + + private func refresh() { + self.store.refreshUserPluginDiscovery() + self.results = UserProviderPluginRegistry.allResults + } + + private func choosePlugin() { + let panel = NSOpenPanel() + panel.allowsMultipleSelection = false + panel.canChooseDirectories = false + panel.allowedContentTypes = ["js", "ts"].compactMap { UTType(filenameExtension: $0) } + guard panel.runModal() == .OK, let url = panel.url else { return } + do { + let plugin = try UserProviderPluginLoader().load(fileURL: url) + if plugin.manifest.id.firstPartyProvider != nil || + UserProviderPluginRegistry.plugin(for: plugin.manifest.id) != nil + { + throw ProviderPluginError.invalidManifest( + "provider id '\(plugin.manifest.id.rawValue)' collides with another provider") + } + self.requestApproval(plugin: plugin, sourceURL: url) + } catch { + self.operationError = error.localizedDescription + } + } + + private func requestApproval(plugin: UserProviderPlugin, sourceURL: URL?) { + let config = self.settings.pluginConfig(plugin.manifest.id) + self.pendingApproval = PendingPluginApproval( + plugin: plugin, + sourceURL: sourceURL, + initialSettings: config?.pluginSettings ?? [:]) + } + + private func completeApproval( + _ pending: PendingPluginApproval, + confirmations: [String: String], + settings: [String: String]) + { + do { + let binding = try pending.plugin.approvalBinding(settings: settings) + guard binding.typedConfirmationOrigins.allSatisfy({ confirmations[$0] == $0 }) else { return } + let plugin: UserProviderPlugin = if let sourceURL = pending.sourceURL { + try UserProviderPluginLoader().install(fileURL: sourceURL) + } else { + pending.plugin + } + let installedBinding = try plugin.approvalBinding(settings: settings) + guard installedBinding == binding else { + throw ProviderPluginError.load("plugin authority changed during installation; review it again") + } + self.settings.updatePluginConfig(instanceID: plugin.manifest.id) { + $0.enabled = true + $0.pluginSettings = settings + } + try self.store.pluginApprovalStore.record(installedBinding) + self.pendingApproval = nil + self.refresh() + Task { await self.store.refreshUserPlugin(plugin.manifest.id) } + } catch { + self.pendingApproval = nil + self.operationError = error.localizedDescription + } + } + + private func completeDelete() { + guard let request = self.pendingDelete else { return } + do { + if let plugin = request.plugin { + try self.store.deleteUserPlugin(plugin) + } else if FileManager.default.fileExists(atPath: request.fileURL.path) { + try FileManager.default.removeItem(at: request.fileURL) + } + self.pendingDelete = nil + self.refresh() + } catch { + self.pendingDelete = nil + self.operationError = error.localizedDescription + } + } + + private func enabledBinding(_ instanceID: ProviderInstanceID) -> Binding { + Binding( + get: { self.settings.isPluginEnabled(instanceID) }, + set: { self.settings.setPluginEnabled(instanceID, enabled: $0) }) + } + + private func settingBinding( + _ instanceID: ProviderInstanceID, + setting: ProviderPluginSetting) -> Binding + { + Binding( + get: { + let config = self.settings.pluginConfig(instanceID) + return setting.kind == .secure + ? config?.pluginSecrets?[setting.key] ?? "" + : config?.pluginSettings?[setting.key] ?? "" + }, + set: { value in + self.settings.updatePluginConfig(instanceID: instanceID) { config in + if setting.kind == .secure { + var values = config.pluginSecrets ?? [:] + values[setting.key] = value + config.pluginSecrets = values + } else { + var values = config.pluginSettings ?? [:] + values[setting.key] = value + config.pluginSettings = values + } + } + }) + } +} + +private struct PendingPluginApproval: Identifiable { + let id = UUID() + let plugin: UserProviderPlugin + let sourceURL: URL? + let initialSettings: [String: String] +} + +private struct PluginDeleteRequest { + let fileURL: URL + let plugin: UserProviderPlugin? +} + +private struct PluginApprovalSheet: View { + let pending: PendingPluginApproval + let onCancel: () -> Void + let onApprove: ([String: String], [String: String]) -> Void + @State private var confirmations: [String: String] = [:] + @State private var settings: [String: String] + + init( + pending: PendingPluginApproval, + onCancel: @escaping () -> Void, + onApprove: @escaping ([String: String], [String: String]) -> Void) + { + self.pending = pending + self.onCancel = onCancel + self.onApprove = onApprove + self._settings = State(initialValue: pending.initialSettings) + } + + var body: some View { + VStack(alignment: .leading, spacing: 14) { + Text(self.pending.sourceURL == nil ? "Approve Plugin" : "Install and Approve Plugin") + .font(.title2.bold()) + Text(self.pending.plugin.manifest.name) + ForEach(self.pending.plugin.manifest.settings.filter { $0.kind == .plain }, id: \.key) { setting in + TextField(setting.title, text: Binding( + get: { self.settings[setting.key] ?? "" }, + set: { self.settings[setting.key] = $0 })) + } + if let binding = self.binding { + GroupBox("Network authority") { + VStack(alignment: .leading, spacing: 6) { + ForEach(binding.origins, id: \.self) { Text($0).textSelection(.enabled) } + Text("Auth: \(binding.authMode)") + Text( + "Capabilities: " + + (binding.capabilities.joined(separator: ", ").nilIfEmpty ?? "network")) + Text("Secrets: \(binding.secretNames.joined(separator: ", ").nilIfEmpty ?? "none")") + if !binding.cookieDomains.isEmpty { + Text("Cookie domains: \(binding.cookieDomains.joined(separator: ", "))") + } + } + .frame(maxWidth: .infinity, alignment: .leading) + } + ForEach(binding.typedConfirmationOrigins, id: \.self) { origin in + TextField("Type \(origin) to confirm", text: Binding( + get: { self.confirmations[origin] ?? "" }, + set: { self.confirmations[origin] = $0 })) + } + } else { + Text("Enter every endpoint setting to review the exact network origins.") + .font(.caption) + .foregroundStyle(.secondary) + } + HStack { + Spacer() + Button("Cancel", role: .cancel, action: self.onCancel) + Button(self.pending.sourceURL == nil ? "Approve" : "Install") { + self.onApprove(self.confirmations, self.settings) + } + .keyboardShortcut(.defaultAction) + .disabled(!self.canApprove) + } + } + .padding(20) + .frame(width: 520) + } + + private var canApprove: Bool { + guard let binding = self.binding else { return false } + return binding.typedConfirmationOrigins.allSatisfy { self.confirmations[$0] == $0 } + } + + private var binding: ProviderPluginApprovalBinding? { + try? self.pending.plugin.approvalBinding(settings: self.settings) + } +} + +extension String { + fileprivate var nilIfEmpty: String? { + self.isEmpty ? nil : self + } +} +#endif diff --git a/Sources/CodexBar/PreferencesSelection.swift b/Sources/CodexBar/PreferencesSelection.swift index bd7e570c8d..f2af83e2f9 100644 --- a/Sources/CodexBar/PreferencesSelection.swift +++ b/Sources/CodexBar/PreferencesSelection.swift @@ -14,6 +14,7 @@ extension SettingsPane { case .menu: "menu" case .advanced: "advanced" case .hooks: "hooks" + case .plugins: "plugins" case .about: "about" case .debug: "debug" case let .provider(provider): "provider:\(provider.rawValue)" @@ -32,6 +33,7 @@ extension SettingsPane { case "menu": self = .menu case "advanced": self = .advanced case "hooks": self = .hooks + case "plugins": self = .plugins case "about": self = .about case "debug": self = .debug default: @@ -39,7 +41,7 @@ extension SettingsPane { guard persistenceToken.hasPrefix(providerPrefix), let instanceID = ProviderInstanceID( rawValue: String(persistenceToken.dropFirst(providerPrefix.count))), - instanceID.firstPartyProvider != nil + instanceID.firstPartyProvider != nil || UserProviderPluginRegistry.plugin(for: instanceID) != nil else { return nil } diff --git a/Sources/CodexBar/PreferencesSidebar.swift b/Sources/CodexBar/PreferencesSidebar.swift index 5e764f9ee9..5cabf60df4 100644 --- a/Sources/CodexBar/PreferencesSidebar.swift +++ b/Sources/CodexBar/PreferencesSidebar.swift @@ -40,6 +40,7 @@ struct SettingsSidebarView: View { SettingsSidebarPaneRow(pane: .menu, systemImage: "filemenu.and.selection", color: .teal) SettingsSidebarPaneRow(pane: .advanced, systemImage: "slider.horizontal.3", color: .purple) SettingsSidebarPaneRow(pane: .hooks, systemImage: "bolt.horizontal.circle.fill", color: .orange) + SettingsSidebarPaneRow(pane: .plugins, systemImage: "puzzlepiece.extension.fill", color: .indigo) SettingsSidebarAboutRow() if self.settings.debugMenuEnabled { SettingsSidebarPaneRow(pane: .debug, systemImage: "ladybug.fill", color: .red) diff --git a/Sources/CodexBar/PreferencesView.swift b/Sources/CodexBar/PreferencesView.swift index 10c97b3f87..38a6c9f661 100644 --- a/Sources/CodexBar/PreferencesView.swift +++ b/Sources/CodexBar/PreferencesView.swift @@ -12,6 +12,7 @@ enum SettingsPane: Hashable { case menu case advanced case hooks + case plugins case about case debug case provider(ProviderInstanceID) @@ -33,6 +34,7 @@ enum SettingsPane: Hashable { case .menu: L("tab_menu") case .advanced: L("tab_advanced") case .hooks: L("tab_hooks") + case .plugins: L("Plugins") case .about: L("tab_about") case .debug: L("tab_debug") case let .provider(instanceID): @@ -144,6 +146,8 @@ struct PreferencesView: View { AdvancedPane(settings: self.settings, store: self.store) case .hooks: HooksPane(settings: self.settings) + case .plugins: + PluginsPane(settings: self.settings, store: self.store) case .about: AboutPane(updater: self.updater) case .debug: diff --git a/Sources/CodexBar/SettingsStore+ConfigPersistence.swift b/Sources/CodexBar/SettingsStore+ConfigPersistence.swift index 72fcc8cf3f..5a96c437a2 100644 --- a/Sources/CodexBar/SettingsStore+ConfigPersistence.swift +++ b/Sources/CodexBar/SettingsStore+ConfigPersistence.swift @@ -47,7 +47,7 @@ extension SettingsStore { watcher.start() } - private func updateConfig( + func updateConfig( reason: String, affectsBackgroundWork: Bool, mutate: (inout CodexBarConfig) -> Void) diff --git a/Sources/CodexBar/SettingsStore.swift b/Sources/CodexBar/SettingsStore.swift index 6a17034841..6ee4934e72 100644 --- a/Sources/CodexBar/SettingsStore.swift +++ b/Sources/CodexBar/SettingsStore.swift @@ -284,6 +284,9 @@ final class SettingsStore { antigravityOAuthCredentialsStore: AntigravityOAuthCredentialsStore = AntigravityOAuthCredentialsStore(), performInitialProviderDetection: Bool = !SettingsStore.isRunningTests) { + if !Self.isRunningTests { + _ = UserProviderPluginRegistry.refresh() + } // Capture this before app-group/config migrations can create prior-installation state. let hadExistingConfig = (try? configStore.load()) != nil let hadPreviousInstallationState = hadExistingConfig || Self.hadPreviousAppLaunch(userDefaults: userDefaults) @@ -882,6 +885,20 @@ extension SettingsStore { self.providerConfigFingerprints[instanceID] = fingerprint enablement[instanceID] = isEnabled } + for plugin in UserProviderPluginRegistry.all { + let instanceID = plugin.manifest.id + let providerConfig = config.providerConfig(for: instanceID) ?? ProviderConfig(id: instanceID) + let isEnabled = providerConfig.enabled ?? true + if let previous = self.providerEnablement[instanceID], previous != isEnabled { + self.providerEnablementRevisions[instanceID, default: 0] &+= 1 + } + let fingerprint = Self.providerConfigFingerprint(providerConfig) + if let previous = self.providerConfigFingerprints[instanceID], previous != fingerprint { + self.providerConfigRevisions[instanceID, default: 0] &+= 1 + } + self.providerConfigFingerprints[instanceID] = fingerprint + enablement[instanceID] = isEnabled + } self.providerEnablement = enablement } @@ -945,6 +962,33 @@ extension SettingsStore { } } + func isPluginEnabled(_ instanceID: ProviderInstanceID) -> Bool { + self.providerEnablement[instanceID] ?? false + } + + func setPluginEnabled(_ instanceID: ProviderInstanceID, enabled: Bool) { + self.updatePluginConfig(instanceID: instanceID) { $0.enabled = enabled } + if !enabled, self.selectedMenuProvider == instanceID { + self.selectedMenuProvider = nil + } + } + + func pluginConfig(_ instanceID: ProviderInstanceID) -> ProviderConfig? { + self.configSnapshot.providerConfig(for: instanceID) + } + + func updatePluginConfig(instanceID: ProviderInstanceID, mutate: (inout ProviderConfig) -> Void) { + self.updateConfig(reason: "plugin-\(instanceID.rawValue)", affectsBackgroundWork: true) { config in + if let index = config.providers.firstIndex(where: { $0.id == instanceID }) { + mutate(&config.providers[index]) + } else { + var entry = ProviderConfig(id: instanceID, enabled: true) + mutate(&entry) + config.providers.append(entry) + } + } + } + func rerunProviderDetection() { self.runInitialProviderDetectionIfNeeded(force: true) } @@ -956,7 +1000,9 @@ extension SettingsStore { var ordered: [ProviderInstanceID] = [] for rawValue in raw { - guard let instanceID = ProviderInstanceID(rawValue: rawValue), instanceID.firstPartyProvider != nil else { + guard let instanceID = ProviderInstanceID(rawValue: rawValue), + instanceID.firstPartyProvider != nil || UserProviderPluginRegistry.plugin(for: instanceID) != nil + else { continue } guard !seen.contains(instanceID) else { continue } @@ -984,6 +1030,11 @@ extension SettingsStore { ordered.append(provider.instanceID) } + for plugin in UserProviderPluginRegistry.all where !seen.contains(plugin.manifest.id) { + ordered.append(plugin.manifest.id) + seen.insert(plugin.manifest.id) + } + return ordered } } diff --git a/Sources/CodexBar/StatusItemController+Menu.swift b/Sources/CodexBar/StatusItemController+Menu.swift index fd8109ad74..a417be4cb9 100644 --- a/Sources/CodexBar/StatusItemController+Menu.swift +++ b/Sources/CodexBar/StatusItemController+Menu.swift @@ -619,7 +619,9 @@ extension StatusItemController { private func addMenuCards(to menu: NSMenu, context: MenuCardContext, captureMenu: NSMenu? = nil) -> Bool { let fleetProjection = self.fleetAccountProjection(for: context.currentProvider) - if self.addFleetFallback(fleetProjection, to: menu, context: context) { return false } + if self.addFleetFallback(fleetProjection, to: menu, context: context) { + return false + } if let codexAccountDisplay = context.codexAccountDisplay, codexAccountDisplay.showAll { if !self.addCompactCodexAccountMenuIfPlanned( @@ -779,6 +781,7 @@ extension StatusItemController { menu.addItem(.separator()) } } + self.addUserPluginMenuCards(to: menu, width: context.menuWidth) } func addActionableSections( diff --git a/Sources/CodexBar/StatusItemController+UserPlugins.swift b/Sources/CodexBar/StatusItemController+UserPlugins.swift new file mode 100644 index 0000000000..9ea8c850c5 --- /dev/null +++ b/Sources/CodexBar/StatusItemController+UserPlugins.swift @@ -0,0 +1,136 @@ +#if canImport(JavaScriptCore) +import AppKit +import CodexBarCore +import SwiftUI + +extension StatusItemController { + func addUserPluginMenuCards(to menu: NSMenu, width: CGFloat) { + let plugins = UserProviderPluginRegistry.all.filter { self.settings.isPluginEnabled($0.manifest.id) } + guard !plugins.isEmpty else { return } + if menu.items.last?.isSeparatorItem != true { + menu.addItem(.separator()) + } + for (index, plugin) in plugins.enumerated() { + let snapshot = self.store.snapshots[plugin.manifest.id] + let error = self.store.errors[plugin.manifest.id] + let view = UserPluginMenuCardView( + plugin: plugin, + snapshot: snapshot, + error: error, + isRefreshing: self.store.refreshingProviders.contains(plugin.manifest.id), + width: width, + onRefresh: { [weak store = self.store] in + Task { @MainActor in await store?.refreshUserPlugin(plugin.manifest.id) } + }) + menu.addItem(self.makeMenuCardItem( + view, + id: "pluginCard:\(plugin.manifest.id.rawValue)", + width: width, + heightCacheScope: plugin.manifest.id.rawValue, + heightCacheFingerprint: UserPluginMenuCardView.fingerprint(snapshot: snapshot, error: error), + containsInteractiveControls: true)) + if index < plugins.count - 1 { + menu.addItem(.separator()) + } + } + menu.addItem(.separator()) + } +} + +private struct UserPluginMenuCardView: View { + let plugin: UserProviderPlugin + let snapshot: UsageSnapshot? + let error: String? + let isRefreshing: Bool + let width: CGFloat + let onRefresh: () -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 9) { + HStack(spacing: 8) { + Text(self.plugin.manifest.icon.monogram) + .font(.caption.bold()) + .foregroundStyle(.white) + .frame(width: 26, height: 26) + .background(self.tint, in: RoundedRectangle(cornerRadius: 6, style: .continuous)) + VStack(alignment: .leading, spacing: 1) { + Text(self.plugin.manifest.name).font(.headline) + Text(self.plugin.fileURL.lastPathComponent) + .font(.caption2) + .foregroundStyle(.secondary) + } + Spacer() + if self.isRefreshing { + ProgressView().controlSize(.small) + } else { + Button(action: self.onRefresh) { + Image(systemName: "arrow.clockwise") + } + .buttonStyle(.plain) + .help("Refresh") + } + } + if let snapshot { + self.window("Primary", snapshot.primary) + self.window("Secondary", snapshot.secondary) + self.window("Tertiary", snapshot.tertiary) + if let cost = snapshot.providerCost { + HStack { + Text(cost.period ?? "Cost").foregroundStyle(.secondary) + Spacer() + Text(UsageFormatter.currencyString(cost.used, currencyCode: cost.currencyCode)) + .fontWeight(.medium) + } + .font(.caption) + } + if !snapshot.details.isEmpty { + Divider() + ProviderDetailSectionsContent(sections: snapshot.details, chartColor: self.tint) + } + } else if let error { + Text(error).font(.caption).foregroundStyle(.red).textSelection(.enabled) + } else { + Text("No usage fetched yet").font(.caption).foregroundStyle(.secondary) + } + } + .padding(.horizontal, UsageMenuCardLayout.horizontalPadding) + .padding(.vertical, 8) + .frame(width: self.width, alignment: .leading) + } + + @ViewBuilder + private func window(_ title: String, _ window: RateWindow?) -> some View { + if let window { + VStack(alignment: .leading, spacing: 4) { + HStack { + Text(title).foregroundStyle(.secondary) + Spacer() + Text("\(Int(window.usedPercent.rounded()))% used").monospacedDigit() + } + .font(.caption) + UsageProgressBar( + percent: window.usedPercent, + tint: self.tint, + accessibilityLabel: "\(title) usage") + } + } + } + + private var tint: Color { + let raw = self.plugin.manifest.icon.tint.dropFirst() + let value = UInt32(raw, radix: 16) ?? 0x6B7280 + return Color( + red: Double((value >> 16) & 0xFF) / 255, + green: Double((value >> 8) & 0xFF) / 255, + blue: Double(value & 0xFF) / 255) + } + + static func fingerprint(snapshot: UsageSnapshot?, error: String?) -> String { + [ + snapshot?.updatedAt.timeIntervalSinceReferenceDate.description ?? "none", + String(snapshot?.details.count ?? 0), + error ?? "", + ].joined(separator: "|") + } +} +#endif diff --git a/Sources/CodexBar/UsageStore+BackgroundRefresh.swift b/Sources/CodexBar/UsageStore+BackgroundRefresh.swift index 559793369d..fa046382f8 100644 --- a/Sources/CodexBar/UsageStore+BackgroundRefresh.swift +++ b/Sources/CodexBar/UsageStore+BackgroundRefresh.swift @@ -98,6 +98,12 @@ extension UsageStore { self.clearProviderState(provider) } } + let dynamicIDs = Set(self.snapshots.keys).union(self.errors.keys).filter { $0.firstPartyProvider == nil } + for instanceID in dynamicIDs where !enabledProviders.contains(instanceID) { + self.snapshots.removeValue(forKey: instanceID) + self.errors.removeValue(forKey: instanceID) + self.lastSourceLabels.removeValue(forKey: instanceID) + } } func clearUnavailableProviderState( diff --git a/Sources/CodexBar/UsageStore+UserPlugins.swift b/Sources/CodexBar/UsageStore+UserPlugins.swift new file mode 100644 index 0000000000..4c6f33674f --- /dev/null +++ b/Sources/CodexBar/UsageStore+UserPlugins.swift @@ -0,0 +1,73 @@ +#if canImport(JavaScriptCore) +import CodexBarCore +import Foundation + +@MainActor +extension UsageStore { + func isEnabledProviderInstance(_ instanceID: ProviderInstanceID, now: Date) -> Bool { + if let provider = instanceID.firstPartyProvider { + return self.isProviderAvailable(provider, now: now) + } + return UserProviderPluginRegistry.plugin(for: instanceID) != nil + } + + func refreshUserPluginDiscovery(loader: UserProviderPluginLoader = UserProviderPluginLoader()) { + _ = UserProviderPluginRegistry.refresh(loader: loader) + self.settings.updateProviderState(config: self.settings.configSnapshot) + } + + func refreshUserPlugin(_ instanceID: ProviderInstanceID) async { + guard let plugin = UserProviderPluginRegistry.plugin(for: instanceID), + self.settings.isPluginEnabled(instanceID) + else { + self.snapshots.removeValue(forKey: instanceID) + self.errors.removeValue(forKey: instanceID) + return + } + self.refreshingProviders.insert(instanceID) + defer { self.refreshingProviders.remove(instanceID) } + let config = self.settings.pluginConfig(instanceID) + do { + let snapshot = try await plugin.fetchUsage( + settings: config?.pluginSettings ?? [:], + secrets: config?.pluginSecrets ?? [:], + environment: self.environmentBase, + approvalStore: self.pluginApprovalStore, + instanceCookieResolver: UserProviderPluginCookieBroker.resolver( + browserDetection: self.browserDetection)) + self.snapshots[instanceID] = snapshot + self.errors[instanceID] = nil + self.lastSourceLabels[instanceID] = plugin.fileURL.pathExtension.lowercased() + } catch { + self.errors[instanceID] = error.localizedDescription + } + } + + func approveUserPlugin(_ plugin: UserProviderPlugin) throws { + let settings = self.settings.pluginConfig(plugin.manifest.id)?.pluginSettings ?? [:] + try self.pluginApprovalStore.record(plugin.approvalBinding(settings: settings)) + } + + func deleteUserPlugin(_ plugin: UserProviderPlugin) throws { + var config = self.settings.configSnapshot + try UserProviderPluginManager.delete( + plugin, + approvalStore: self.pluginApprovalStore, + config: &config, + historyDirectory: self.planUtilizationHistoryStore.directoryURL) + self.settings.replaceConfigAfterPluginDeletion(config) + self.snapshots.removeValue(forKey: plugin.manifest.id) + self.errors.removeValue(forKey: plugin.manifest.id) + self.lastSourceLabels.removeValue(forKey: plugin.manifest.id) + self.refreshUserPluginDiscovery() + } +} + +extension SettingsStore { + func replaceConfigAfterPluginDeletion(_ replacement: CodexBarConfig) { + self.updateConfig(reason: "plugin-delete", affectsBackgroundWork: true) { config in + config = replacement + } + } +} +#endif diff --git a/Sources/CodexBar/UsageStore.swift b/Sources/CodexBar/UsageStore.swift index 5e0b0e5c43..9fd80274de 100644 --- a/Sources/CodexBar/UsageStore.swift +++ b/Sources/CodexBar/UsageStore.swift @@ -310,6 +310,7 @@ final class UsageStore { @ObservationIgnored private let registry: ProviderRegistry @ObservationIgnored let settings: SettingsStore @ObservationIgnored let environmentBase: [String: String] + @ObservationIgnored let pluginApprovalStore = ProviderPluginApprovalStore() @ObservationIgnored let sessionQuotaNotifier: any SessionQuotaNotifying @ObservationIgnored let sessionQuotaLogger = CodexBarLog.logger(LogCategories.sessionQuota) @ObservationIgnored let openAIWebLogger = CodexBarLog.logger(LogCategories.openAIWeb) @@ -560,9 +561,7 @@ final class UsageStore { // Use cached enablement to avoid repeated UserDefaults lookups in animation ticks. let enabled = self.settings.enabledProvidersOrdered(metadataByProvider: self.providerMetadata) let now = Date() - return enabled.filter { instanceID in - instanceID.firstPartyProvider.map { self.isProviderAvailable($0, now: now) } ?? false - } + return enabled.filter { self.isEnabledProviderInstance($0, now: now) } } /// Enabled providers without availability filtering. Used for display (switcher, merge-icons). @@ -653,7 +652,7 @@ final class UsageStore { self.isProviderAvailable(provider, now: Date()) } - private func isProviderAvailable(_ provider: UsageProvider, now: Date) -> Bool { + func isProviderAvailable(_ provider: UsageProvider, now: Date) -> Bool { guard provider != .codex else { return true } let configRevision = self.settings.configRevision @@ -745,7 +744,10 @@ final class UsageStore { await withTaskGroup(of: Void.self) { group in for instanceID in refreshProviders { - guard let provider = instanceID.firstPartyProvider else { continue } + guard let provider = instanceID.firstPartyProvider else { + group.addTask { await self.refreshUserPlugin(instanceID) } + continue + } group.addTask { await self.refreshProvider( provider, diff --git a/Sources/CodexBarCLI/CLIEntry.swift b/Sources/CodexBarCLI/CLIEntry.swift index 06cfe10ea0..226f076655 100644 --- a/Sources/CodexBarCLI/CLIEntry.swift +++ b/Sources/CodexBarCLI/CLIEntry.swift @@ -68,6 +68,10 @@ enum CodexBarCLI { await self.runDiagnose(invocation.parsedValues) case ["guard"]: await self.runGuard(invocation.parsedValues) + #if canImport(JavaScriptCore) + case let path where path.first == "plugins": + await self.runPlugins(path: path, values: invocation.parsedValues) + #endif default: Self.exit( code: .failure, @@ -163,7 +167,7 @@ enum CodexBarCLI { let diagnoseSignature = CommandSignature.describe(DiagnoseOptions()) let guardSignature = CommandSignature.describe(GuardOptions()) - return [ + var descriptors = [ CommandDescriptor( name: "cards", abstract: "Print usage as a terminal card grid", @@ -267,7 +271,34 @@ enum CodexBarCLI { discussion: nil, signature: diagnoseSignature), ] + #if canImport(JavaScriptCore) + descriptors.append(Self.pluginsCommandDescriptor()) + #endif + return descriptors + } + + #if canImport(JavaScriptCore) + private static func pluginsCommandDescriptor() -> CommandDescriptor { + CommandDescriptor( + name: "plugins", + abstract: "List or fetch user-installed provider plugins", + discussion: nil, + signature: CommandSignature(), + subcommands: [ + CommandDescriptor( + name: "list", + abstract: "List discovered local plugins", + discussion: nil, + signature: CommandSignature()), + CommandDescriptor( + name: "fetch", + abstract: "Fetch one plugin, interactively approving network access when needed", + discussion: nil, + signature: CommandSignature.describe(PluginFetchOptions())), + ], + defaultSubcommandName: "list") } + #endif private static func dashboardCommandDescriptor() -> CommandDescriptor { CommandDescriptor( diff --git a/Sources/CodexBarCLI/CLIHelp.swift b/Sources/CodexBarCLI/CLIHelp.swift index 16854efa90..1589a5e021 100644 --- a/Sources/CodexBarCLI/CLIHelp.swift +++ b/Sources/CodexBarCLI/CLIHelp.swift @@ -2,6 +2,22 @@ import CodexBarCore import Foundation extension CodexBarCLI { + static func pluginsHelp(version: String) -> String { + """ + CodexBar \(version) + + Usage: + codexbar plugins list + codexbar plugins fetch [--json] [--pretty] + + Description: + Discover local .js and .ts provider plugins. Fetch requires a recorded approval binding. + An interactive terminal can create the approval after showing exact origins, capabilities, + secret names, and cookie domains. Headless use fails closed. Browser-cookie plugins are + app-only and fail closed in the CLI. + """ + } + static func cardsHelp(version: String) -> String { """ CodexBar \(version) @@ -449,6 +465,7 @@ extension CodexBarCLI { --organization-id --workspace-id codexbar hooks [--format text|json] [--pretty] codexbar hooks test --provider + codexbar plugins > [--json] [--pretty] codexbar cache clear <--cookies|--cost|--all> [--provider ] codexbar cookie refresh <--provider |--all> [--allow-keychain-prompt] codexbar diagnose --provider --format json [--redact] [--output ] [--pretty] @@ -477,6 +494,7 @@ extension CodexBarCLI { codexbar config enable --provider grok codexbar config set-api-key --provider elevenlabs --stdin codexbar hooks test quota_reached --provider codex + codexbar plugins list codexbar cache clear --cookies codexbar cookie refresh --provider opencodego --allow-keychain-prompt codexbar diagnose --provider minimax --format json --redact --output diagnostic.json diff --git a/Sources/CodexBarCLI/CLIIO.swift b/Sources/CodexBarCLI/CLIIO.swift index 308de3ab9e..63cf704fb2 100644 --- a/Sources/CodexBarCLI/CLIIO.swift +++ b/Sources/CodexBarCLI/CLIIO.swift @@ -49,6 +49,8 @@ extension CodexBarCLI { print(Self.diagnoseHelp(version: version)) case "guard": print(Self.guardHelp(version: version)) + case "plugins": + print(Self.pluginsHelp(version: version)) default: print(Self.rootHelp(version: version)) } diff --git a/Sources/CodexBarCLI/CLIPluginsCommand.swift b/Sources/CodexBarCLI/CLIPluginsCommand.swift new file mode 100644 index 0000000000..a86a2c8a58 --- /dev/null +++ b/Sources/CodexBarCLI/CLIPluginsCommand.swift @@ -0,0 +1,135 @@ +#if canImport(JavaScriptCore) +import CodexBarCore +import Commander +import Darwin +import Foundation + +struct PluginFetchOptions: CommanderParsable { + @Argument(help: "Plugin provider instance ID") + var id: String = "" + + @Flag(name: .long("json"), help: "Emit the generic UsageSnapshot as JSON") + var json: Bool = false + + @Flag(name: .long("pretty"), help: "Pretty-print JSON output") + var pretty: Bool = false +} + +extension CodexBarCLI { + static func runPlugins(path: [String], values: ParsedValues) async { + let results = UserProviderPluginRegistry.refresh() + switch path { + case ["plugins", "list"]: + for result in results { + if let plugin = result.plugin { + print("\(plugin.manifest.id.rawValue)\t\(plugin.manifest.name)\t\(plugin.fileURL.path)") + } else { + print("error\t\(result.fileURL.path)\t\(result.error ?? "Unknown error")") + } + } + case ["plugins", "fetch"]: + await self.fetchPlugin(values: values) + default: + Self.exit(code: .failure, message: "Unknown plugins command", kind: .args) + } + } + + private static func fetchPlugin(values: ParsedValues) async { + guard let rawID = values.positional.first, + let instanceID = ProviderInstanceID(rawValue: rawID), + let plugin = UserProviderPluginRegistry.plugin(for: instanceID) + else { + exit(code: .failure, message: "Plugin was not found", kind: .args) + } + guard plugin.manifest.capabilities.contains(.browserCookies) == false else { + Self.exit( + code: .failure, + message: "Browser-cookie plugins are supported by the macOS app only; CLI access fails closed.", + kind: .provider) + } + + let output = CLIOutputPreferences.from(values: values) + let config = Self.loadConfig(output: output) + let pluginConfig = config.providerConfig(for: instanceID) + let settings = pluginConfig?.pluginSettings ?? [:] + let secrets = pluginConfig?.pluginSecrets ?? [:] + let approvalStore = ProviderPluginApprovalStore() + do { + let binding = try plugin.approvalBinding(settings: settings) + if !approvalStore.isApproved(binding) { + guard Self.isInteractiveTerminal else { + throw UserProviderPluginError.approvalRequired(binding) + } + guard self.confirmPluginApproval(binding) else { + Self.exit(code: .failure, message: "Plugin approval cancelled", kind: .provider) + } + try approvalStore.record(binding) + } + let snapshot = try await plugin.fetchUsage( + settings: settings, + secrets: secrets, + approvalStore: approvalStore) + if values.flags.contains("json") { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .iso8601 + if values.flags.contains("pretty") { + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + } + let data = try encoder.encode(snapshot) + guard let json = String(data: data, encoding: .utf8) else { + throw ProviderPluginError.load("could not encode plugin snapshot as UTF-8") + } + print(json) + } else { + self.printPluginSnapshot(plugin: plugin, snapshot: snapshot) + } + } catch { + Self.exit(code: .failure, message: error.localizedDescription, kind: .provider) + } + } + + private static var isInteractiveTerminal: Bool { + isatty(STDIN_FILENO) == 1 && isatty(STDERR_FILENO) == 1 + } + + private static func confirmPluginApproval(_ binding: ProviderPluginApprovalBinding) -> Bool { + writeStderr("Plugin \(binding.instanceID.rawValue) requests network access:\n") + for origin in binding.origins { + writeStderr(" origin: \(origin)\n") + } + writeStderr(" auth: \(binding.authMode)\n") + writeStderr(" capabilities: \(binding.capabilities.joined(separator: ", "))\n") + writeStderr(" secrets: \(binding.secretNames.joined(separator: ", "))\n") + for domain in binding.cookieDomains { + writeStderr(" cookie domain: \(domain)\n") + } + for origin in binding.typedConfirmationOrigins { + writeStderr("Type \(origin) to confirm: ") + guard readLine() == origin else { return false } + } + writeStderr("Approve? [y/N] ") + return readLine()?.lowercased() == "y" + } + + private static func printPluginSnapshot(plugin: UserProviderPlugin, snapshot: UsageSnapshot) { + print(plugin.manifest.name) + if let primary = snapshot.primary { + print("Primary: \(Int(primary.usedPercent.rounded()))% used") + } + if let secondary = snapshot.secondary { + print("Secondary: \(Int(secondary.usedPercent.rounded()))% used") + } + if let cost = snapshot.providerCost { + print("Cost: \(cost.used) \(cost.currencyCode)") + } + for section in snapshot.details { + if let title = section.title { + print(title) + } + for row in section.rows { + print("\(row.label): \(row.value)") + } + } + } +} +#endif diff --git a/Sources/CodexBarCore/Config/CodexBarConfig.swift b/Sources/CodexBarCore/Config/CodexBarConfig.swift index b42164c3b8..eef9454261 100644 --- a/Sources/CodexBarCore/Config/CodexBarConfig.swift +++ b/Sources/CodexBarCore/Config/CodexBarConfig.swift @@ -40,7 +40,9 @@ public struct CodexBarConfig: Codable, Sendable { let providerDecoder = try providersContainer.superDecoder() let providerContainer = try providerDecoder.container(keyedBy: ProviderCodingKeys.self) let rawID = try providerContainer.decode(String.self, forKey: .id) - guard let instanceID = ProviderInstanceID(rawValue: rawID), instanceID.firstPartyProvider != nil else { + guard let instanceID = ProviderInstanceID(rawValue: rawID), + Self.isKnownProviderInstance(instanceID) + else { Self.log.warning("Ignoring unknown provider in config", metadata: ["provider": rawID]) continue } @@ -50,6 +52,16 @@ public struct CodexBarConfig: Codable, Sendable { self.hooks = try container.decodeIfPresent(HooksConfig.self, forKey: .hooks) } + /// User plugins exist only where JavaScriptCore does; other platforms drop their config entries. + private static func isKnownProviderInstance(_ instanceID: ProviderInstanceID) -> Bool { + if instanceID.firstPartyProvider != nil { return true } + #if canImport(JavaScriptCore) + return UserProviderPluginRegistry.plugin(for: instanceID) != nil + #else + return false + #endif + } + public static func makeDefault( metadata: [UsageProvider: ProviderMetadata] = ProviderDescriptorRegistry.metadata) -> CodexBarConfig { @@ -194,6 +206,9 @@ public struct ProviderConfig: Codable, Sendable, Identifiable { public var deepseekProfileScope: String? /// Region that owns `apiKey`. Region-routed providers use this to keep credentials host-scoped. public var apiKeyRegion: String? + /// Arbitrary user-plugin values stay scoped to the provider instance. Secure values are redacted from config dumps. + public var pluginSettings: [String: String]? + public var pluginSecrets: [String: String]? public init( id: ProviderInstanceID, @@ -221,7 +236,9 @@ public struct ProviderConfig: Codable, Sendable, Identifiable { awsAuthMode: String? = nil, deepseekProfileID: String? = nil, deepseekProfileScope: String? = nil, - apiKeyRegion: String? = nil) + apiKeyRegion: String? = nil, + pluginSettings: [String: String]? = nil, + pluginSecrets: [String: String]? = nil) { self.id = id self.enabled = enabled @@ -249,6 +266,8 @@ public struct ProviderConfig: Codable, Sendable, Identifiable { self.deepseekProfileID = deepseekProfileID self.deepseekProfileScope = deepseekProfileScope self.apiKeyRegion = apiKeyRegion + self.pluginSettings = pluginSettings + self.pluginSecrets = pluginSecrets } public var sanitizedAPIKey: String? { @@ -310,6 +329,9 @@ public struct ProviderConfig: Codable, Sendable, Identifiable { if copy.cookieHeader != nil { copy.cookieHeader = "[REDACTED]" } + if copy.pluginSecrets != nil { + copy.pluginSecrets = copy.pluginSecrets?.mapValues { _ in "[REDACTED]" } + } if let tokenAccounts = copy.tokenAccounts { copy.tokenAccounts = tokenAccounts.sanitizedForDump() } diff --git a/Sources/CodexBarCore/Plugins/ProviderPluginCookieBroker.swift b/Sources/CodexBarCore/Plugins/ProviderPluginCookieBroker.swift index b319f0eb44..2e53f41e81 100644 --- a/Sources/CodexBarCore/Plugins/ProviderPluginCookieBroker.swift +++ b/Sources/CodexBarCore/Plugins/ProviderPluginCookieBroker.swift @@ -146,4 +146,35 @@ private struct PluginCookieSettings: ProviderCookieSettings { self.init(cookieSource: settings.cookieSource, manualCookieHeader: settings.manualCookieHeader) } } + +public enum UserProviderPluginCookieBroker { + public static func resolver( + browserDetection: BrowserDetection) -> ProviderPluginRuntime.InstanceCookieResolver + { + { _, domain in + #if os(macOS) + let query = BrowserCookieQuery(domains: [domain]) + let client = BrowserCookieClient() + for browser in [Browser.chrome].cookieImportCandidates(using: browserDetection) { + do { + let sources = try client.codexBarRecords(matching: query, in: browser) + for source in sources where !source.records.isEmpty { + let cookies = BrowserCookieClient.makeHTTPCookies(source.records, origin: query.origin) + let rawHeader = cookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; ") + if let header = CookieHeaderNormalizer.normalize(rawHeader) { + return header + } + } + } catch { + BrowserCookieAccessGate.recordIfNeeded(error) + } + } + throw ProviderPluginError.secretAccess("no Chrome browser session cookies were found") + #else + _ = domain + throw ProviderPluginError.secretAccess("browser cookie import is unavailable on this platform") + #endif + } + } +} #endif diff --git a/Sources/CodexBarCore/Plugins/ProviderPluginManifest.swift b/Sources/CodexBarCore/Plugins/ProviderPluginManifest.swift index ae2c5f00cf..688870beed 100644 --- a/Sources/CodexBarCore/Plugins/ProviderPluginManifest.swift +++ b/Sources/CodexBarCore/Plugins/ProviderPluginManifest.swift @@ -21,6 +21,16 @@ public struct ProviderPluginSetting: Equatable, Sendable { } } +public struct ProviderPluginIcon: Equatable, Sendable { + public let monogram: String + public let tint: String + + public init(monogram: String, tint: String) { + self.monogram = monogram + self.tint = tint + } +} + public struct ProviderPluginAuth: Equatable, Sendable { public enum Kind: String, Sendable { case bearer @@ -52,13 +62,14 @@ public enum ProviderPluginEndpoint: Equatable, Hashable, Sendable { case setting(key: String, policy: Policy) } -public enum ProviderPluginCapability: String, Sendable { +public enum ProviderPluginCapability: String, Hashable, Sendable { case browserCookies = "browser-cookies" } public struct ProviderPluginManifest: @unchecked Sendable { public let id: ProviderInstanceID public let name: String + public let icon: ProviderPluginIcon public let endpoints: Set public let auth: ProviderPluginAuth? public let settings: [ProviderPluginSetting] @@ -68,26 +79,31 @@ public struct ProviderPluginManifest: @unchecked Sendable { let fetchUsage: JSValue // Manifest parsing validates the complete security surface in one pass. - // swiftlint:disable:next cyclomatic_complexity - init(definition: JSValue) throws { + // swiftlint:disable:next cyclomatic_complexity function_body_length + init(definition: JSValue, allowsDynamicID: Bool = false) throws { guard definition.isObject else { throw ProviderPluginError.invalidManifest("defineProvider(...) requires an object") } let rawID = try Self.requiredString(definition, property: "id") - guard let id = ProviderInstanceID(rawValue: rawID), id.firstPartyProvider != nil else { + guard let id = ProviderInstanceID(rawValue: rawID) else { + throw ProviderPluginError.invalidManifest( + "provider id must contain 1-64 lowercase ASCII letters, digits, or hyphens") + } + guard allowsDynamicID || id.firstPartyProvider != nil else { throw ProviderPluginError.invalidManifest( "provider id '\(rawID)' must match an existing UsageProvider raw value") } self.id = id self.name = try Self.boundedString(definition, property: "name", maximumLength: 80) + self.icon = try Self.parseIcon(definition.forProperty("icon"), fallbackName: self.name) let endpointValue = definition.forProperty("endpoints") guard let endpointValue, endpointValue.isArray else { throw ProviderPluginError.invalidManifest("'endpoints' must be a non-empty array of HTTPS origins") } let endpointCount = Int(endpointValue.forProperty("length")?.toInt32() ?? 0) - guard endpointCount > 0 else { + guard (1...16).contains(endpointCount) else { throw ProviderPluginError.invalidManifest("'endpoints' must not be empty") } var endpoints: Set = [] @@ -116,6 +132,9 @@ public struct ProviderPluginManifest: @unchecked Sendable { throw ProviderPluginError.invalidManifest("'settings' must be an array") } let settingCount = Int(settingsValue.forProperty("length")?.toInt32() ?? 0) + guard settingCount <= 32 else { + throw ProviderPluginError.invalidManifest("'settings' exceeds 32 entries") + } var settings: [ProviderPluginSetting] = [] var settingKeys: Set = [] for index in 0.. Bool { + guard (1...64).contains(value.utf8.count), let first = value.utf8.first, + (65...90).contains(first) || (97...122).contains(first) + else { return false } + return value.utf8.allSatisfy { byte in + (48...57).contains(byte) || (65...90).contains(byte) || (97...122).contains(byte) || byte == 95 + } + } + + private static func parseIcon(_ value: JSValue?, fallbackName: String) throws -> ProviderPluginIcon { + let fallback = String(fallbackName.prefix(1)).uppercased() + guard let value, !value.isUndefined, !value.isNull else { + return ProviderPluginIcon(monogram: fallback, tint: "#6B7280") + } + guard value.isObject else { + throw ProviderPluginError.invalidManifest("'icon' must be an object when present") + } + let monogram = try Self.optionalString(value, property: "monogram")? + .trimmingCharacters(in: .whitespacesAndNewlines) ?? fallback + guard (1...3).contains(monogram.count), monogram.utf8.count <= 12 else { + throw ProviderPluginError.invalidManifest("icon monogram must contain 1-3 characters") + } + let tint = try Self.optionalString(value, property: "tint") ?? "#6B7280" + guard tint.utf8.count == 7, + tint.utf8.first == UInt8(ascii: "#"), + tint.utf8.dropFirst().allSatisfy({ byte in + (48...57).contains(byte) || (65...70).contains(byte) || (97...102).contains(byte) + }) + else { + throw ProviderPluginError.invalidManifest("icon tint must be a #RRGGBB color") + } + return ProviderPluginIcon(monogram: monogram, tint: tint.uppercased()) + } + private static func normalizedCookieDomain(_ rawValue: String) throws -> String { let value = rawValue.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() guard !value.isEmpty, value.utf8.count <= 253, @@ -314,7 +372,7 @@ enum ProviderPluginOrigin { throw ProviderPluginError.invalidManifest("endpoint '\(rawValue)' must be an HTTPS origin") } let port = components.port - return "https://\(host)\(port == nil || port == 443 ? "" : ":\(port!)")" + return "https://\(self.formattedHost(host))\(port == nil || port == 443 ? "" : ":\(port!)")" } static func normalizedOrigin(of url: URL) throws -> String { @@ -337,7 +395,11 @@ enum ProviderPluginOrigin { } let port = validated.port let defaultPort = scheme == "https" ? 443 : 80 - return "\(scheme)://\(host)\(port == nil || port == defaultPort ? "" : ":\(port!)")" + return "\(scheme)://\(self.formattedHost(host))\(port == nil || port == defaultPort ? "" : ":\(port!)")" + } + + private static func formattedHost(_ host: String) -> String { + host.contains(":") ? "[\(host)]" : host } } diff --git a/Sources/CodexBarCore/Plugins/ProviderPluginRuntime.swift b/Sources/CodexBarCore/Plugins/ProviderPluginRuntime.swift index 526958f15d..0f70a9b609 100644 --- a/Sources/CodexBarCore/Plugins/ProviderPluginRuntime.swift +++ b/Sources/CodexBarCore/Plugins/ProviderPluginRuntime.swift @@ -7,6 +7,7 @@ import FoundationNetworking public final class ProviderPluginRuntime: @unchecked Sendable { public typealias CookieResolver = @Sendable (UsageProvider, String) async throws -> String + public typealias InstanceCookieResolver = @Sendable (ProviderInstanceID, String) async throws -> String public static let defaultTimeout: TimeInterval = 20 public static let maximumResponseBytes = 5 * 1024 * 1024 @@ -18,6 +19,8 @@ public final class ProviderPluginRuntime: @unchecked Sendable { private let transport: any ProviderHTTPTransport private let timeout: TimeInterval private let responseSizeLimit: Int + private let rejectsNonSuccessResponses: Bool + private let allowsDynamicID: Bool private let lock = NSLock() private var worker: ProviderPluginWorker? @@ -37,7 +40,9 @@ public final class ProviderPluginRuntime: @unchecked Sendable { source: String, transport: any ProviderHTTPTransport = ProviderHTTPClient.shared, timeout: TimeInterval = ProviderPluginRuntime.defaultTimeout, - responseSizeLimit: Int = ProviderPluginRuntime.maximumResponseBytes) throws + responseSizeLimit: Int = ProviderPluginRuntime.maximumResponseBytes, + rejectsNonSuccessResponses: Bool = false, + allowsDynamicID: Bool = false) throws { guard timeout > 0 else { throw ProviderPluginError.load("timeout must be positive") } guard responseSizeLimit > 0 else { throw ProviderPluginError.load("response size limit must be positive") } @@ -53,12 +58,16 @@ public final class ProviderPluginRuntime: @unchecked Sendable { self.transport = transport self.timeout = timeout self.responseSizeLimit = responseSizeLimit + self.rejectsNonSuccessResponses = rejectsNonSuccessResponses + self.allowsDynamicID = allowsDynamicID let worker = try ProviderPluginWorker.make( source: source, preludeSource: self.preludeSource, transport: transport, - responseSizeLimit: responseSizeLimit) + responseSizeLimit: responseSizeLimit, + rejectsNonSuccessResponses: rejectsNonSuccessResponses, + allowsDynamicID: allowsDynamicID) self.worker = worker self.manifest = worker.manifest } @@ -67,7 +76,8 @@ public final class ProviderPluginRuntime: @unchecked Sendable { settings: [String: String] = [:], secrets: [String: String] = [:], now: Date = Date(), - cookieResolver: CookieResolver? = nil) async throws -> UsageSnapshot + cookieResolver: CookieResolver? = nil, + instanceCookieResolver: InstanceCookieResolver? = nil) async throws -> UsageSnapshot { let sanitizedSettings = settings.mapValues { $0.trimmingCharacters(in: .whitespacesAndNewlines) @@ -89,7 +99,8 @@ public final class ProviderPluginRuntime: @unchecked Sendable { settings: sanitizedSettings, secrets: sanitizedSecrets, now: now, - cookieResolver: cookieResolver) + cookieResolver: cookieResolver, + instanceCookieResolver: instanceCookieResolver) { result in gate.finish(result.mapError { self.redactedError($0, secrets: sanitizedSecrets.values) }) } @@ -118,7 +129,9 @@ public final class ProviderPluginRuntime: @unchecked Sendable { source: self.source, preludeSource: self.preludeSource, transport: self.transport, - responseSizeLimit: self.responseSizeLimit) + responseSizeLimit: self.responseSizeLimit, + rejectsNonSuccessResponses: self.rejectsNonSuccessResponses, + allowsDynamicID: self.allowsDynamicID) guard worker.manifest.id == self.manifest.id else { throw ProviderPluginError.load("reloaded plugin changed provider id") } @@ -255,14 +268,18 @@ private final class ProviderPluginWorker: @unchecked Sendable { private let applyPrelude: JSValue private let transport: any ProviderHTTPTransport private let responseSizeLimit: Int + private let rejectsNonSuccessResponses: Bool private var cache: [String: (value: JSValue, expiresAt: Date)] = [:] private var retainedCallbacks: [UUID: [Any]] = [:] + // swiftlint:disable:next function_parameter_count static func make( source: String, preludeSource: String, transport: any ProviderHTTPTransport, - responseSizeLimit: Int) throws -> ProviderPluginWorker + responseSizeLimit: Int, + rejectsNonSuccessResponses: Bool, + allowsDynamicID: Bool) throws -> ProviderPluginWorker { let queue = DispatchQueue(label: "com.steipete.codexbar.provider-plugin.\(UUID().uuidString)") return try queue.sync { @@ -271,7 +288,9 @@ private final class ProviderPluginWorker: @unchecked Sendable { source: source, preludeSource: preludeSource, transport: transport, - responseSizeLimit: responseSizeLimit) + responseSizeLimit: responseSizeLimit, + rejectsNonSuccessResponses: rejectsNonSuccessResponses, + allowsDynamicID: allowsDynamicID) } } @@ -280,7 +299,9 @@ private final class ProviderPluginWorker: @unchecked Sendable { source: String, preludeSource: String, transport: any ProviderHTTPTransport, - responseSizeLimit: Int) throws + responseSizeLimit: Int, + rejectsNonSuccessResponses: Bool, + allowsDynamicID: Bool) throws { guard let context = JSContext() else { throw ProviderPluginError.load("JavaScriptCore could not create a context") @@ -289,6 +310,7 @@ private final class ProviderPluginWorker: @unchecked Sendable { self.context = context self.transport = transport self.responseSizeLimit = responseSizeLimit + self.rejectsNonSuccessResponses = rejectsNonSuccessResponses var definition: JSValue? let defineProvider: @convention(block) (JSValue) -> Void = { value in @@ -310,7 +332,7 @@ private final class ProviderPluginWorker: @unchecked Sendable { guard let definition else { throw ProviderPluginError.invalidManifest("plugin did not call defineProvider(...)") } - self.manifest = try ProviderPluginManifest(definition: definition) + self.manifest = try ProviderPluginManifest(definition: definition, allowsDynamicID: allowsDynamicID) } func globalType(of name: String) throws -> String { @@ -326,11 +348,13 @@ private final class ProviderPluginWorker: @unchecked Sendable { } } + // swiftlint:disable:next function_parameter_count func fetch( settings: [String: String], secrets: [String: String], now: Date, cookieResolver: ProviderPluginRuntime.CookieResolver?, + instanceCookieResolver: ProviderPluginRuntime.InstanceCookieResolver?, completion: @escaping @Sendable (Result) -> Void) { self.queue.async { @@ -339,15 +363,18 @@ private final class ProviderPluginWorker: @unchecked Sendable { secrets: secrets, now: now, cookieResolver: cookieResolver, + instanceCookieResolver: instanceCookieResolver, completion: completion) } } + // swiftlint:disable:next function_parameter_count private func beginFetch( settings: [String: String], secrets: [String: String], now: Date, cookieResolver: ProviderPluginRuntime.CookieResolver?, + instanceCookieResolver: ProviderPluginRuntime.InstanceCookieResolver?, completion: @escaping @Sendable (Result) -> Void) { self.context.exception = nil @@ -356,6 +383,7 @@ private final class ProviderPluginWorker: @unchecked Sendable { settings: settings, secrets: secrets, cookieResolver: cookieResolver, + instanceCookieResolver: instanceCookieResolver, redactionValues: redactionValues) guard self.context.exception == nil else { completion(.failure(ProviderPluginError.script(Self.exceptionMessage(self.context) ?? "ctx setup failed"))) @@ -408,6 +436,7 @@ private final class ProviderPluginWorker: @unchecked Sendable { settings: [String: String], secrets: [String: String], cookieResolver: ProviderPluginRuntime.CookieResolver?, + instanceCookieResolver: ProviderPluginRuntime.InstanceCookieResolver?, redactionValues: ProviderPluginRedactionValues) -> JSValue { let ctx = JSValue(newObjectIn: self.context)! @@ -435,6 +464,7 @@ private final class ProviderPluginWorker: @unchecked Sendable { let cookieHeader = self.makeCookieBlock( resolver: cookieResolver, + instanceResolver: instanceCookieResolver, redactionValues: redactionValues) host.setObject(cookieHeader, forKeyedSubscript: "cookieHeader" as NSString) @@ -514,7 +544,17 @@ private final class ProviderPluginWorker: @unchecked Sendable { do { let response = try await transport.response(for: request) guard response.data.count <= responseSizeLimit else { - throw ProviderPluginError.http("response exceeded the 5 MiB limit") + throw ProviderPluginError.http("response exceeded the \(responseSizeLimit)-byte limit") + } + if worker.rejectsNonSuccessResponses, !(200..<300).contains(response.statusCode) { + throw ProviderPluginError.http("request returned HTTP \(response.statusCode)") + } + if worker.rejectsNonSuccessResponses, + let encoding = response.response.value(forHTTPHeaderField: "Content-Encoding"), + !encoding.isEmpty, + encoding.caseInsensitiveCompare("identity") != .orderedSame + { + throw ProviderPluginError.http("compressed responses are not allowed") } let payload = try ProviderPluginObjectBox(Self.responsePayload( response, @@ -534,6 +574,7 @@ private final class ProviderPluginWorker: @unchecked Sendable { private func makeCookieBlock( resolver: ProviderPluginRuntime.CookieResolver?, + instanceResolver: ProviderPluginRuntime.InstanceCookieResolver?, redactionValues: ProviderPluginRedactionValues) -> CookieBlock { { [weak self] rawDomain, resolve, reject in @@ -547,25 +588,23 @@ private final class ProviderPluginWorker: @unchecked Sendable { error: ProviderPluginError.secretAccess("cookie domain is not declared")) return } - guard let resolver else { + let resolveCookie: @Sendable () async throws -> String + if let provider = self.manifest.id.firstPartyProvider, let resolver { + resolveCookie = { try await resolver(provider, domain) } + } else if let instanceResolver { + resolveCookie = { try await instanceResolver(self.manifest.id, domain) } + } else { self.reject( ProviderPluginJSValueBox(reject), error: ProviderPluginError.secretAccess("browser cookie access is unavailable")) return } - - guard let provider = self.manifest.id.firstPartyProvider else { - self.reject( - ProviderPluginJSValueBox(reject), - error: ProviderPluginError.secretAccess("browser cookies require a first-party provider")) - return - } let worker = self let resolveBox = ProviderPluginJSValueBox(resolve) let rejectBox = ProviderPluginJSValueBox(reject) Task.detached { do { - let header = try await resolver(provider, domain) + let header = try await resolveCookie() redactionValues.insert(header) for pair in CookieHeaderNormalizer.pairs(from: header) { redactionValues.insert(pair.value) @@ -606,13 +645,11 @@ private final class ProviderPluginWorker: @unchecked Sendable { } request.httpMethod = method request.timeoutInterval = 15 - request.setValue("application/json", forHTTPHeaderField: "Accept") if method == "POST" { guard let bodyJSON = options.forProperty("bodyJSON"), bodyJSON.isString else { throw ProviderPluginError.http("POST JSON body is missing") } request.httpBody = Data(bodyJSON.toString().utf8) - request.setValue("application/json", forHTTPHeaderField: "Content-Type") } if options.isObject, let headers = options.forProperty("headers"), @@ -632,6 +669,15 @@ private final class ProviderPluginWorker: @unchecked Sendable { } } + // The broker owns representation headers so plugins cannot relax the user-plugin response boundary. + request.setValue("application/json", forHTTPHeaderField: "Accept") + if self.rejectsNonSuccessResponses { + request.setValue("identity", forHTTPHeaderField: "Accept-Encoding") + } + if method == "POST" { + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + } + if let auth = self.manifest.auth { guard let secret = secrets[auth.secret], !secret.isEmpty else { throw ProviderPluginError.secretAccess("required auth secret is unavailable") diff --git a/Sources/CodexBarCore/Plugins/UserProviderPlugins.swift b/Sources/CodexBarCore/Plugins/UserProviderPlugins.swift new file mode 100644 index 0000000000..d3b6ed1913 --- /dev/null +++ b/Sources/CodexBarCore/Plugins/UserProviderPlugins.swift @@ -0,0 +1,550 @@ +#if canImport(JavaScriptCore) +import Crypto +import Foundation +#if canImport(FoundationNetworking) +import FoundationNetworking +#endif +@preconcurrency import JavaScriptCore + +public struct ProviderPluginApprovalBinding: Codable, Equatable, Sendable { + public let instanceID: ProviderInstanceID + public let origins: [String] + public let authMode: String + public let authHeader: String? + public let secretNames: [String] + public let capabilities: [String] + public let cookieDomains: [String] + + public init(manifest: ProviderPluginManifest, settings: [String: String]) throws { + var origins: Set = [] + for endpoint in manifest.endpoints { + switch endpoint { + case let .fixed(origin): + origins.insert(origin) + case let .setting(key, policy): + guard let rawValue = settings[key]?.trimmingCharacters(in: .whitespacesAndNewlines), + !rawValue.isEmpty, + let url = URL(string: rawValue) + else { + throw ProviderPluginError.invalidManifest( + "endpoint setting '\(key)' must contain a valid URL before approval") + } + try origins.insert(ProviderPluginOrigin.normalizedOrigin(of: url, policy: policy)) + } + } + if manifest.auth != nil, origins.contains(where: { $0.hasPrefix("http://") }) { + throw ProviderPluginError.networkPolicy("authenticated plugin origins must use HTTPS") + } + + self.instanceID = manifest.id + self.origins = origins.sorted() + self.authMode = manifest.auth?.type.rawValue ?? "none" + self.authHeader = manifest.auth?.header + self.secretNames = manifest.settings.filter { $0.kind == .secure }.map(\.key).sorted() + self.capabilities = manifest.capabilities.map(\.rawValue).sorted() + self.cookieDomains = manifest.cookieDomains.sorted() + } + + public var typedConfirmationOrigins: [String] { + self.origins.filter(Self.requiresTypedConfirmation) + } + + private static func requiresTypedConfirmation(_ origin: String) -> Bool { + guard let host = URL(string: origin)?.host?.lowercased() else { return true } + if host == "localhost" || host.hasSuffix(".local") { + return true + } + if self.isIPv4Literal(host) || host.contains(":") { + return true + } + return false + } + + private static func isIPv4Literal(_ host: String) -> Bool { + let parts = host.split(separator: ".", omittingEmptySubsequences: false) + return parts.count == 4 && parts.allSatisfy { part in + !part.isEmpty && part.allSatisfy(\.isNumber) && Int(part).map { (0...255).contains($0) } == true + } + } +} + +public final class ProviderPluginApprovalStore: @unchecked Sendable { + private struct Payload: Codable { + var approvals: [String: ProviderPluginApprovalBinding] + } + + public static var defaultURL: URL { + FileManager.default.homeDirectoryForCurrentUser + .appendingPathComponent("Library/Application Support/CodexBar/plugin-approvals.json") + } + + private let fileURL: URL + private let lock = NSLock() + + public init(fileURL: URL = ProviderPluginApprovalStore.defaultURL) { + self.fileURL = fileURL + } + + public func isApproved(_ binding: ProviderPluginApprovalBinding) -> Bool { + self.lock.withLock { self.load()[binding.instanceID.rawValue] == binding } + } + + public func record(_ binding: ProviderPluginApprovalBinding) throws { + try self.lock.withLock { + var approvals = self.load() + approvals[binding.instanceID.rawValue] = binding + try self.save(approvals) + } + } + + public func remove(instanceID: ProviderInstanceID) throws { + try self.lock.withLock { + var approvals = self.load() + approvals[instanceID.rawValue] = nil + try self.save(approvals) + } + } + + private func load() -> [String: ProviderPluginApprovalBinding] { + guard let data = try? Data(contentsOf: self.fileURL), + let payload = try? JSONDecoder().decode(Payload.self, from: data) + else { return [:] } + return payload.approvals + } + + private func save(_ approvals: [String: ProviderPluginApprovalBinding]) throws { + let directory = self.fileURL.deletingLastPathComponent() + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + let data = try encoder.encode(Payload(approvals: approvals)) + try data.write(to: self.fileURL, options: .atomic) + } +} + +public struct UserProviderPlugin: @unchecked Sendable { + public static let maximumSourceBytes = 1024 * 1024 + + public let fileURL: URL + public let sourceHash: String + public let transpiledCacheURL: URL? + public let transpileCacheHit: Bool + public let runtime: ProviderPluginRuntime + + public var manifest: ProviderPluginManifest { + self.runtime.manifest + } + + public func approvalBinding(settings: [String: String]) throws -> ProviderPluginApprovalBinding { + try ProviderPluginApprovalBinding(manifest: self.manifest, settings: settings) + } + + public func fetchUsage( + settings: [String: String], + secrets: [String: String], + environment: [String: String] = ProcessInfo.processInfo.environment, + approvalStore: ProviderPluginApprovalStore, + now: Date = Date(), + cookieResolver: ProviderPluginRuntime.CookieResolver? = nil, + instanceCookieResolver: ProviderPluginRuntime.InstanceCookieResolver? = nil) async throws -> UsageSnapshot + { + let binding = try self.approvalBinding(settings: settings) + guard approvalStore.isApproved(binding) else { + throw UserProviderPluginError.approvalRequired(binding) + } + let resolvedSecrets = Self.applyingEnvironmentOverrides( + secrets: secrets, + manifest: self.manifest, + environment: environment) + return try await self.runtime.fetchUsage( + settings: settings, + secrets: resolvedSecrets, + now: now, + cookieResolver: cookieResolver, + instanceCookieResolver: instanceCookieResolver) + } + + public static func environmentKey(instanceID: ProviderInstanceID, settingKey: String) -> String { + let id = instanceID.rawValue.uppercased().replacingOccurrences(of: "-", with: "_") + let key = settingKey.uppercased().map { character in + character.isASCII && (character.isLetter || character.isNumber) ? character : "_" + } + return "CODEXBAR_PLUGIN_\(id)_\(String(key))" + } + + private static func applyingEnvironmentOverrides( + secrets: [String: String], + manifest: ProviderPluginManifest, + environment: [String: String]) -> [String: String] + { + var resolved = secrets + for setting in manifest.settings where setting.kind == .secure { + let key = self.environmentKey(instanceID: manifest.id, settingKey: setting.key) + if let value = environment[key]?.trimmingCharacters(in: .whitespacesAndNewlines), !value.isEmpty { + resolved[setting.key] = value + } + } + return resolved + } +} + +public enum UserProviderPluginError: LocalizedError, Sendable, Equatable { + case approvalRequired(ProviderPluginApprovalBinding) + + public var errorDescription: String? { + switch self { + case let .approvalRequired(binding): + "Provider plugin '\(binding.instanceID.rawValue)' needs approval before network access" + } + } +} + +public struct UserProviderPluginLoadResult: Sendable { + public let fileURL: URL + public let plugin: UserProviderPlugin? + public let error: String? + + public var instanceID: ProviderInstanceID? { + self.plugin?.manifest.id + } +} + +public final class UserProviderPluginLoader: @unchecked Sendable { + public static let sucraseVersion = "3.35.1" + + public static var defaultProvidersDirectory: URL { + FileManager.default.homeDirectoryForCurrentUser + .appendingPathComponent(".config/codexbar/providers", isDirectory: true) + } + + public static var defaultCacheDirectory: URL { + FileManager.default.homeDirectoryForCurrentUser + .appendingPathComponent("Library/Caches/CodexBar/plugins", isDirectory: true) + } + + private let providersDirectory: URL + private let cacheDirectory: URL + private let transport: any ProviderHTTPTransport + + public init( + providersDirectory: URL = UserProviderPluginLoader.defaultProvidersDirectory, + cacheDirectory: URL = UserProviderPluginLoader.defaultCacheDirectory, + transport: (any ProviderHTTPTransport)? = nil) + { + self.providersDirectory = providersDirectory + self.cacheDirectory = cacheDirectory + self.transport = transport ?? UserProviderPluginHTTPTransport.make() + } + + public func discover() -> [UserProviderPluginLoadResult] { + let urls: [URL] + do { + try FileManager.default.createDirectory(at: self.providersDirectory, withIntermediateDirectories: true) + urls = try FileManager.default.contentsOfDirectory( + at: self.providersDirectory, + includingPropertiesForKeys: [.isRegularFileKey, .fileSizeKey], + options: [.skipsHiddenFiles]) + .filter { ["js", "ts"].contains($0.pathExtension.lowercased()) } + .sorted { $0.lastPathComponent.localizedStandardCompare($1.lastPathComponent) == .orderedAscending } + } catch { + return [UserProviderPluginLoadResult( + fileURL: self.providersDirectory, + plugin: nil, + error: "Could not scan plugins directory: \(error.localizedDescription)")] + } + + var seen = Set(UsageProvider.allCases.map(\.instanceID)) + return urls.map { url in + do { + let plugin = try self.load(fileURL: url) + guard seen.insert(plugin.manifest.id).inserted else { + throw ProviderPluginError.invalidManifest( + "provider id '\(plugin.manifest.id.rawValue)' collides with another provider") + } + return UserProviderPluginLoadResult(fileURL: url, plugin: plugin, error: nil) + } catch { + return UserProviderPluginLoadResult(fileURL: url, plugin: nil, error: error.localizedDescription) + } + } + } + + public func load(fileURL: URL) throws -> UserProviderPlugin { + guard ["js", "ts"].contains(fileURL.pathExtension.lowercased()) else { + throw ProviderPluginError.load("plugin must use a .js or .ts extension") + } + let values = try fileURL.resourceValues(forKeys: [.isRegularFileKey, .fileSizeKey]) + guard values.isRegularFile == true else { + throw ProviderPluginError.load("plugin path is not a regular file") + } + guard let size = values.fileSize, size <= UserProviderPlugin.maximumSourceBytes else { + throw ProviderPluginError.load("plugin exceeds the 1 MiB source limit") + } + let data = try Data(contentsOf: fileURL, options: [.mappedIfSafe]) + guard data.count <= UserProviderPlugin.maximumSourceBytes else { + throw ProviderPluginError.load("plugin exceeds the 1 MiB source limit") + } + guard let source = String(data: data, encoding: .utf8) else { + throw ProviderPluginError.load("plugin source is not valid UTF-8") + } + let hash = SHA256.hash(data: data).map { String(format: "%02x", $0) }.joined() + let output: (source: String, cacheURL: URL?, cacheHit: Bool) = if fileURL.pathExtension.lowercased() == "ts" { + try self.transpile(source: source, hash: hash, sourceFileURL: fileURL) + } else { + (source, nil, false) + } + let runtime = try ProviderPluginRuntime( + source: output.source, + transport: self.transport, + responseSizeLimit: UserProviderPlugin.maximumSourceBytes, + rejectsNonSuccessResponses: true, + allowsDynamicID: true) + return UserProviderPlugin( + fileURL: fileURL, + sourceHash: hash, + transpiledCacheURL: output.cacheURL, + transpileCacheHit: output.cacheHit, + runtime: runtime) + } + + public func install(fileURL: URL) throws -> UserProviderPlugin { + let validated = try self.load(fileURL: fileURL) + guard validated.manifest.id.firstPartyProvider == nil, + UserProviderPluginRegistry.plugin(for: validated.manifest.id) == nil + else { + throw ProviderPluginError.invalidManifest( + "provider id '\(validated.manifest.id.rawValue)' collides with another provider") + } + try FileManager.default.createDirectory(at: self.providersDirectory, withIntermediateDirectories: true) + let destination = self.providersDirectory.appendingPathComponent(fileURL.lastPathComponent) + guard destination.standardizedFileURL != fileURL.standardizedFileURL else { return validated } + guard !FileManager.default.fileExists(atPath: destination.path) else { + throw ProviderPluginError.load("a plugin named '\(destination.lastPathComponent)' is already installed") + } + try FileManager.default.copyItem(at: fileURL, to: destination) + return try self.load(fileURL: destination) + } + + private func transpile( + source: String, + hash: String, + sourceFileURL: URL) throws -> (String, URL?, Bool) + { + try FileManager.default.createDirectory(at: self.cacheDirectory, withIntermediateDirectories: true) + let sourceName = sourceFileURL.deletingPathExtension().lastPathComponent + let cacheURL = self.cacheDirectory + .appendingPathComponent("\(sourceName)-\(hash)-sucrase-\(Self.sucraseVersion).js") + if let cached = try? String(contentsOf: cacheURL, encoding: .utf8) { + return (cached, cacheURL, true) + } + guard let resourceURL = Bundle.module.url( + forResource: "sucrase-\(Self.sucraseVersion).min", + withExtension: "js") + else { + throw ProviderPluginError.load("bundled Sucrase \(Self.sucraseVersion) resource was not found") + } + guard let context = JSContext() else { + throw ProviderPluginError.load("JavaScriptCore could not create a TypeScript transpiler context") + } + let sucraseSource = try String(contentsOf: resourceURL, encoding: .utf8) + context.exception = nil + _ = context.evaluateScript(sucraseSource) + if let exception = context.exception { + throw ProviderPluginError.load("Sucrase failed to initialize: \(exception.toString() ?? "unknown error")") + } + context.setObject(source, forKeyedSubscript: "__codexbarTypeScriptSource" as NSString) + context.exception = nil + let result = context.evaluateScript( + "sucrase.transform(__codexbarTypeScriptSource, {transforms:['typescript']}).code") + if let exception = context.exception { + throw ProviderPluginError + .load("TypeScript transpilation failed: \(exception.toString() ?? "unknown error")") + } + guard let output = result?.toString(), !output.isEmpty else { + throw ProviderPluginError.load("TypeScript transpilation returned no output") + } + try Data(output.utf8).write(to: cacheURL, options: .atomic) + return (output, cacheURL, false) + } +} + +public enum UserProviderPluginRegistry { + private final class Store: @unchecked Sendable { + var results: [UserProviderPluginLoadResult] = [] + var byID: [ProviderInstanceID: UserProviderPlugin] = [:] + } + + private static let lock = NSLock() + private static let store = Store() + + @discardableResult + public static func refresh(loader: UserProviderPluginLoader = UserProviderPluginLoader()) + -> [UserProviderPluginLoadResult] + { + let results = loader.discover() + self.lock.withLock { + self.store.results = results + self.store.byID = Dictionary(uniqueKeysWithValues: results.compactMap { result in + result.plugin.map { ($0.manifest.id, $0) } + }) + } + return results + } + + public static var allResults: [UserProviderPluginLoadResult] { + self.lock.withLock { self.store.results } + } + + public static var all: [UserProviderPlugin] { + self.lock.withLock { self.store.results.compactMap(\.plugin) } + } + + public static func plugin(for instanceID: ProviderInstanceID) -> UserProviderPlugin? { + self.lock.withLock { self.store.byID[instanceID] } + } +} + +public enum UserProviderPluginManager { + public static func delete( + _ plugin: UserProviderPlugin, + approvalStore: ProviderPluginApprovalStore, + config: inout CodexBarConfig, + historyDirectory: URL? = nil) throws + { + if FileManager.default.fileExists(atPath: plugin.fileURL.path) { + try FileManager.default.removeItem(at: plugin.fileURL) + } + let directory = plugin.transpiledCacheURL?.deletingLastPathComponent() + ?? UserProviderPluginLoader.defaultCacheDirectory + if FileManager.default.fileExists(atPath: directory.path) { + let prefix = plugin.fileURL.deletingPathExtension().lastPathComponent + "-" + let artifacts = try FileManager.default.contentsOfDirectory( + at: directory, + includingPropertiesForKeys: [.isRegularFileKey]) + .filter { $0.lastPathComponent.hasPrefix(prefix) && $0.pathExtension == "js" } + for artifact in artifacts { + try FileManager.default.removeItem(at: artifact) + } + } + try approvalStore.remove(instanceID: plugin.manifest.id) + config.providers.removeAll { $0.id == plugin.manifest.id } + if let historyDirectory { + let historyURL = historyDirectory.appendingPathComponent("\(plugin.manifest.id.rawValue).json") + if FileManager.default.fileExists(atPath: historyURL.path) { + try FileManager.default.removeItem(at: historyURL) + } + } + } +} + +private enum UserProviderPluginHTTPTransport { + static func make() -> any ProviderHTTPTransport { + UserProviderPluginHTTPClient(maximumResponseBytes: UserProviderPlugin.maximumSourceBytes) + } +} + +private final class UserProviderPluginHTTPClient: NSObject, ProviderHTTPTransport, URLSessionDataDelegate, + @unchecked Sendable +{ + private struct RequestState { + var data = Data() + var response: URLResponse? + let continuation: CheckedContinuation<(Data, URLResponse), Error> + } + + private let maximumResponseBytes: Int + private let lock = NSLock() + private var states: [Int: RequestState] = [:] + private lazy var session: URLSession = { + let configuration = URLSessionConfiguration.ephemeral + configuration.httpCookieStorage = nil + configuration.httpShouldSetCookies = false + configuration.urlCredentialStorage = nil + configuration.urlCache = nil + configuration.requestCachePolicy = .reloadIgnoringLocalCacheData + configuration.timeoutIntervalForRequest = 15 + configuration.timeoutIntervalForResource = 15 + return URLSession(configuration: configuration, delegate: self, delegateQueue: nil) + }() + + init(maximumResponseBytes: Int) { + self.maximumResponseBytes = maximumResponseBytes + } + + func data(for request: URLRequest) async throws -> (Data, URLResponse) { + try await withCheckedThrowingContinuation { continuation in + let task = self.session.dataTask(with: request) + self.lock.withLock { + self.states[task.taskIdentifier] = RequestState(continuation: continuation) + } + task.resume() + } + } + + func urlSession( + _: URLSession, + task _: URLSessionTask, + willPerformHTTPRedirection _: HTTPURLResponse, + newRequest _: URLRequest, + completionHandler: @escaping @Sendable (URLRequest?) -> Void) + { + completionHandler(nil) + } + + func urlSession( + _: URLSession, + dataTask: URLSessionDataTask, + didReceive response: URLResponse, + completionHandler: @escaping @Sendable (URLSession.ResponseDisposition) -> Void) + { + self.lock.withLock { self.states[dataTask.taskIdentifier]?.response = response } + completionHandler(.allow) + } + + func urlSession(_: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { + let exceeded = self.lock.withLock { + guard var state = self.states[dataTask.taskIdentifier] else { return false } + guard state.data.count + data.count <= self.maximumResponseBytes else { return true } + state.data.append(data) + self.states[dataTask.taskIdentifier] = state + return false + } + guard exceeded else { return } + dataTask.cancel() + self.finish( + taskIdentifier: dataTask.taskIdentifier, + result: .failure(ProviderPluginError.http("response exceeded the 1048576-byte limit"))) + } + + func urlSession(_: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + if let error { + self.finish(taskIdentifier: task.taskIdentifier, result: .failure(error)) + return + } + let result: Result<(Data, URLResponse), Error> = self.lock.withLock { + guard let state = self.states[task.taskIdentifier], let response = state.response else { + return .failure(URLError(.badServerResponse)) + } + return .success((state.data, response)) + } + self.finish(taskIdentifier: task.taskIdentifier, result: result) + } + + func urlSession( + _: URLSession, + task _: URLSessionTask, + didReceive challenge: URLAuthenticationChallenge, + completionHandler: @escaping @Sendable (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + { + if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { + completionHandler(.performDefaultHandling, nil) + } else { + completionHandler(.cancelAuthenticationChallenge, nil) + } + } + + private func finish(taskIdentifier: Int, result: Result<(Data, URLResponse), Error>) { + let continuation = self.lock.withLock { self.states.removeValue(forKey: taskIdentifier)?.continuation } + continuation?.resume(with: result) + } +} +#endif diff --git a/Sources/CodexBarCore/Resources/Plugins/sucrase-3.35.1.min.js b/Sources/CodexBarCore/Resources/Plugins/sucrase-3.35.1.min.js new file mode 100644 index 0000000000..85e6e6178c --- /dev/null +++ b/Sources/CodexBarCore/Resources/Plugins/sucrase-3.35.1.min.js @@ -0,0 +1,137 @@ +/*! Sucrase v3.35.1 | MIT License | Copyright (c) 2012-present various contributors | https://github.com/alangpierce/sucrase */ +"use strict";var sucrase=(()=>{var G=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var dt=G(Fs=>{"use strict";Object.defineProperty(Fs,"__esModule",{value:!0});var si;(function(e){e[e.NONE=0]="NONE";let n=1;e[e._abstract=n]="_abstract";let o=n+1;e[e._accessor=o]="_accessor";let s=o+1;e[e._as=s]="_as";let r=s+1;e[e._assert=r]="_assert";let u=r+1;e[e._asserts=u]="_asserts";let v=u+1;e[e._async=v]="_async";let R=v+1;e[e._await=R]="_await";let A=R+1;e[e._checks=A]="_checks";let K=A+1;e[e._constructor=K]="_constructor";let X=K+1;e[e._declare=X]="_declare";let N=X+1;e[e._enum=N]="_enum";let $=N+1;e[e._exports=$]="_exports";let V=$+1;e[e._from=V]="_from";let ne=V+1;e[e._get=ne]="_get";let j=ne+1;e[e._global=j]="_global";let ee=j+1;e[e._implements=ee]="_implements";let se=ee+1;e[e._infer=se]="_infer";let Pe=se+1;e[e._interface=Pe]="_interface";let Te=Pe+1;e[e._is=Te]="_is";let pe=Te+1;e[e._keyof=pe]="_keyof";let Je=pe+1;e[e._mixins=Je]="_mixins";let rt=Je+1;e[e._module=rt]="_module";let Ge=rt+1;e[e._namespace=Ge]="_namespace";let lt=Ge+1;e[e._of=lt]="_of";let bt=lt+1;e[e._opaque=bt]="_opaque";let wt=bt+1;e[e._out=wt]="_out";let St=wt+1;e[e._override=St]="_override";let Et=St+1;e[e._private=Et]="_private";let Lt=Et+1;e[e._protected=Lt]="_protected";let Yt=Lt+1;e[e._proto=Yt]="_proto";let qt=Yt+1;e[e._public=qt]="_public";let O=qt+1;e[e._readonly=O]="_readonly";let D=O+1;e[e._require=D]="_require";let g=D+1;e[e._satisfies=g]="_satisfies";let F=g+1;e[e._set=F]="_set";let te=F+1;e[e._static=te]="_static";let ue=te+1;e[e._symbol=ue]="_symbol";let Se=ue+1;e[e._type=Se]="_type";let me=Se+1;e[e._unique=me]="_unique";let Me=me+1;e[e._using=Me]="_using"})(si||(Fs.ContextualKeyword=si={}))});var ye=G(Bo=>{"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});var w;(function(e){e[e.PRECEDENCE_MASK=15]="PRECEDENCE_MASK";let n=16;e[e.IS_KEYWORD=n]="IS_KEYWORD";let o=32;e[e.IS_ASSIGN=o]="IS_ASSIGN";let s=64;e[e.IS_RIGHT_ASSOCIATIVE=s]="IS_RIGHT_ASSOCIATIVE";let r=128;e[e.IS_PREFIX=r]="IS_PREFIX";let u=256;e[e.IS_POSTFIX=u]="IS_POSTFIX";let v=512;e[e.IS_EXPRESSION_START=v]="IS_EXPRESSION_START";let R=512;e[e.num=R]="num";let A=1536;e[e.bigint=A]="bigint";let K=2560;e[e.decimal=K]="decimal";let X=3584;e[e.regexp=X]="regexp";let N=4608;e[e.string=N]="string";let $=5632;e[e.name=$]="name";let V=6144;e[e.eof=V]="eof";let ne=7680;e[e.bracketL=ne]="bracketL";let j=8192;e[e.bracketR=j]="bracketR";let ee=9728;e[e.braceL=ee]="braceL";let se=10752;e[e.braceBarL=se]="braceBarL";let Pe=11264;e[e.braceR=Pe]="braceR";let Te=12288;e[e.braceBarR=Te]="braceBarR";let pe=13824;e[e.parenL=pe]="parenL";let Je=14336;e[e.parenR=Je]="parenR";let rt=15360;e[e.comma=rt]="comma";let Ge=16384;e[e.semi=Ge]="semi";let lt=17408;e[e.colon=lt]="colon";let bt=18432;e[e.doubleColon=bt]="doubleColon";let wt=19456;e[e.dot=wt]="dot";let St=20480;e[e.question=St]="question";let Et=21504;e[e.questionDot=Et]="questionDot";let Lt=22528;e[e.arrow=Lt]="arrow";let Yt=23552;e[e.template=Yt]="template";let qt=24576;e[e.ellipsis=qt]="ellipsis";let O=25600;e[e.backQuote=O]="backQuote";let D=27136;e[e.dollarBraceL=D]="dollarBraceL";let g=27648;e[e.at=g]="at";let F=29184;e[e.hash=F]="hash";let te=29728;e[e.eq=te]="eq";let ue=30752;e[e.assign=ue]="assign";let Se=32640;e[e.preIncDec=Se]="preIncDec";let me=33664;e[e.postIncDec=me]="postIncDec";let Me=34432;e[e.bang=Me]="bang";let Ne=35456;e[e.tilde=Ne]="tilde";let qe=35841;e[e.pipeline=qe]="pipeline";let Ke=36866;e[e.nullishCoalescing=Ke]="nullishCoalescing";let We=37890;e[e.logicalOR=We]="logicalOR";let ve=38915;e[e.logicalAND=ve]="logicalAND";let Ue=39940;e[e.bitwiseOR=Ue]="bitwiseOR";let ze=40965;e[e.bitwiseXOR=ze]="bitwiseXOR";let Tt=41990;e[e.bitwiseAND=Tt]="bitwiseAND";let kt=43015;e[e.equality=kt]="equality";let Ot=44040;e[e.lessThan=Ot]="lessThan";let L=45064;e[e.greaterThan=L]="greaterThan";let E=46088;e[e.relationalOrEqual=E]="relationalOrEqual";let B=47113;e[e.bitShiftL=B]="bitShiftL";let J=48137;e[e.bitShiftR=J]="bitShiftR";let ie=49802;e[e.plus=ie]="plus";let ce=50826;e[e.minus=ce]="minus";let we=51723;e[e.modulo=we]="modulo";let nt=52235;e[e.star=nt]="star";let mt=53259;e[e.slash=mt]="slash";let Tn=54348;e[e.exponent=Tn]="exponent";let Qt=55296;e[e.jsxName=Qt]="jsxName";let Zt=56320;e[e.jsxText=Zt]="jsxText";let an=57344;e[e.jsxEmptyText=an]="jsxEmptyText";let Mt=58880;e[e.jsxTagStart=Mt]="jsxTagStart";let Ft=59392;e[e.jsxTagEnd=Ft]="jsxTagEnd";let It=60928;e[e.typeParameterStart=It]="typeParameterStart";let en=61440;e[e.nonNullAssertion=en]="nonNullAssertion";let ho=62480;e[e._break=ho]="_break";let Hn=63504;e[e._case=Hn]="_case";let f=64528;e[e._catch=f]="_catch";let I=65552;e[e._continue=I]="_continue";let b=66576;e[e._debugger=b]="_debugger";let q=67600;e[e._default=q]="_default";let Z=68624;e[e._do=Z]="_do";let z=69648;e[e._else=z]="_else";let he=70672;e[e._finally=he]="_finally";let Oe=71696;e[e._for=Oe]="_for";let de=73232;e[e._function=de]="_function";let Ye=73744;e[e._if=Ye]="_if";let et=74768;e[e._return=et]="_return";let tt=75792;e[e._switch=tt]="_switch";let ht=77456;e[e._throw=ht]="_throw";let yt=77840;e[e._try=yt]="_try";let At=78864;e[e._var=At]="_var";let Pt=79888;e[e._let=Pt]="_let";let jt=80912;e[e._const=jt]="_const";let ln=81936;e[e._while=ln]="_while";let On=82960;e[e._with=On]="_with";let vt=84496;e[e._new=vt]="_new";let Mn=85520;e[e._this=Mn]="_this";let Vn=86544;e[e._super=Vn]="_super";let fo=87568;e[e._class=fo]="_class";let Wn=88080;e[e._extends=Wn]="_extends";let Fn=89104;e[e._export=Fn]="_export";let tn=90640;e[e._import=tn]="_import";let gn=91664;e[e._yield=gn]="_yield";let Xn=92688;e[e._null=Xn]="_null";let Jn=93712;e[e._true=Jn]="_true";let Gn=94736;e[e._false=Gn]="_false";let Ls=95256;e[e._in=Ls]="_in";let qs=96280;e[e._instanceof=qs]="_instanceof";let Os=97936;e[e._typeof=Os]="_typeof";let Ms=98960;e[e._void=Ms]="_void";let ic=99984;e[e._delete=ic]="_delete";let lc=100880;e[e._async=lc]="_async";let cc=101904;e[e._get=cc]="_get";let pc=102928;e[e._set=pc]="_set";let uc=103952;e[e._declare=uc]="_declare";let dc=104976;e[e._readonly=dc]="_readonly";let hc=106e3;e[e._abstract=hc]="_abstract";let fc=107024;e[e._static=fc]="_static";let Tc=107536;e[e._public=Tc]="_public";let kc=108560;e[e._private=kc]="_private";let mc=109584;e[e._protected=mc]="_protected";let yc=110608;e[e._override=yc]="_override";let vc=112144;e[e._as=vc]="_as";let xc=113168;e[e._enum=xc]="_enum";let _c=114192;e[e._type=_c]="_type";let gc=115216;e[e._implements=gc]="_implements"})(w||(Bo.TokenType=w={}));function wc(e){switch(e){case w.num:return"num";case w.bigint:return"bigint";case w.decimal:return"decimal";case w.regexp:return"regexp";case w.string:return"string";case w.name:return"name";case w.eof:return"eof";case w.bracketL:return"[";case w.bracketR:return"]";case w.braceL:return"{";case w.braceBarL:return"{|";case w.braceR:return"}";case w.braceBarR:return"|}";case w.parenL:return"(";case w.parenR:return")";case w.comma:return",";case w.semi:return";";case w.colon:return":";case w.doubleColon:return"::";case w.dot:return".";case w.question:return"?";case w.questionDot:return"?.";case w.arrow:return"=>";case w.template:return"template";case w.ellipsis:return"...";case w.backQuote:return"`";case w.dollarBraceL:return"${";case w.at:return"@";case w.hash:return"#";case w.eq:return"=";case w.assign:return"_=";case w.preIncDec:return"++/--";case w.postIncDec:return"++/--";case w.bang:return"!";case w.tilde:return"~";case w.pipeline:return"|>";case w.nullishCoalescing:return"??";case w.logicalOR:return"||";case w.logicalAND:return"&&";case w.bitwiseOR:return"|";case w.bitwiseXOR:return"^";case w.bitwiseAND:return"&";case w.equality:return"==/!=";case w.lessThan:return"<";case w.greaterThan:return">";case w.relationalOrEqual:return"<=/>=";case w.bitShiftL:return"<<";case w.bitShiftR:return">>/>>>";case w.plus:return"+";case w.minus:return"-";case w.modulo:return"%";case w.star:return"*";case w.slash:return"/";case w.exponent:return"**";case w.jsxName:return"jsxName";case w.jsxText:return"jsxText";case w.jsxEmptyText:return"jsxEmptyText";case w.jsxTagStart:return"jsxTagStart";case w.jsxTagEnd:return"jsxTagEnd";case w.typeParameterStart:return"typeParameterStart";case w.nonNullAssertion:return"nonNullAssertion";case w._break:return"break";case w._case:return"case";case w._catch:return"catch";case w._continue:return"continue";case w._debugger:return"debugger";case w._default:return"default";case w._do:return"do";case w._else:return"else";case w._finally:return"finally";case w._for:return"for";case w._function:return"function";case w._if:return"if";case w._return:return"return";case w._switch:return"switch";case w._throw:return"throw";case w._try:return"try";case w._var:return"var";case w._let:return"let";case w._const:return"const";case w._while:return"while";case w._with:return"with";case w._new:return"new";case w._this:return"this";case w._super:return"super";case w._class:return"class";case w._extends:return"extends";case w._export:return"export";case w._import:return"import";case w._yield:return"yield";case w._null:return"null";case w._true:return"true";case w._false:return"false";case w._in:return"in";case w._instanceof:return"instanceof";case w._typeof:return"typeof";case w._void:return"void";case w._delete:return"delete";case w._async:return"async";case w._get:return"get";case w._set:return"set";case w._declare:return"declare";case w._readonly:return"readonly";case w._abstract:return"abstract";case w._static:return"static";case w._public:return"public";case w._private:return"private";case w._protected:return"protected";case w._override:return"override";case w._as:return"as";case w._enum:return"enum";case w._type:return"type";case w._implements:return"implements";default:return""}}Bo.formatTokenType=wc});var $o=G(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});var Ic=dt(),Cc=ye(),js=class{constructor(t,n,o){this.startTokenIndex=t,this.endTokenIndex=n,this.isFunctionScope=o}};To.Scope=js;var Ko=class{constructor(t,n,o,s,r,u,v,R,A,K,X,N,$){this.potentialArrowAt=t,this.noAnonFunctionType=n,this.inDisallowConditionalTypesContext=o,this.tokensLength=s,this.scopesLength=r,this.pos=u,this.type=v,this.contextualKeyword=R,this.start=A,this.end=K,this.isType=X,this.scopeDepth=N,this.error=$}};To.StateSnapshot=Ko;var Bs=class e{constructor(){e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this),e.prototype.__init4.call(this),e.prototype.__init5.call(this),e.prototype.__init6.call(this),e.prototype.__init7.call(this),e.prototype.__init8.call(this),e.prototype.__init9.call(this),e.prototype.__init10.call(this),e.prototype.__init11.call(this),e.prototype.__init12.call(this),e.prototype.__init13.call(this)}__init(){this.potentialArrowAt=-1}__init2(){this.noAnonFunctionType=!1}__init3(){this.inDisallowConditionalTypesContext=!1}__init4(){this.tokens=[]}__init5(){this.scopes=[]}__init6(){this.pos=0}__init7(){this.type=Cc.TokenType.eof}__init8(){this.contextualKeyword=Ic.ContextualKeyword.NONE}__init9(){this.start=0}__init10(){this.end=0}__init11(){this.isType=!1}__init12(){this.scopeDepth=0}__init13(){this.error=null}snapshot(){return new Ko(this.potentialArrowAt,this.noAnonFunctionType,this.inDisallowConditionalTypesContext,this.tokens.length,this.scopes.length,this.pos,this.type,this.contextualKeyword,this.start,this.end,this.isType,this.scopeDepth,this.error)}restoreFromSnapshot(t){this.potentialArrowAt=t.potentialArrowAt,this.noAnonFunctionType=t.noAnonFunctionType,this.inDisallowConditionalTypesContext=t.inDisallowConditionalTypesContext,this.tokens.length=t.tokensLength,this.scopes.length=t.scopesLength,this.pos=t.pos,this.type=t.type,this.contextualKeyword=t.contextualKeyword,this.start=t.start,this.end=t.end,this.isType=t.isType,this.scopeDepth=t.scopeDepth,this.error=t.error}};To.default=Bs});var Bt=G(Uo=>{"use strict";Object.defineProperty(Uo,"__esModule",{value:!0});var wn;(function(e){e[e.backSpace=8]="backSpace";let n=10;e[e.lineFeed=n]="lineFeed";let o=9;e[e.tab=o]="tab";let s=13;e[e.carriageReturn=s]="carriageReturn";let r=14;e[e.shiftOut=r]="shiftOut";let u=32;e[e.space=u]="space";let v=33;e[e.exclamationMark=v]="exclamationMark";let R=34;e[e.quotationMark=R]="quotationMark";let A=35;e[e.numberSign=A]="numberSign";let K=36;e[e.dollarSign=K]="dollarSign";let X=37;e[e.percentSign=X]="percentSign";let N=38;e[e.ampersand=N]="ampersand";let $=39;e[e.apostrophe=$]="apostrophe";let V=40;e[e.leftParenthesis=V]="leftParenthesis";let ne=41;e[e.rightParenthesis=ne]="rightParenthesis";let j=42;e[e.asterisk=j]="asterisk";let ee=43;e[e.plusSign=ee]="plusSign";let se=44;e[e.comma=se]="comma";let Pe=45;e[e.dash=Pe]="dash";let Te=46;e[e.dot=Te]="dot";let pe=47;e[e.slash=pe]="slash";let Je=48;e[e.digit0=Je]="digit0";let rt=49;e[e.digit1=rt]="digit1";let Ge=50;e[e.digit2=Ge]="digit2";let lt=51;e[e.digit3=lt]="digit3";let bt=52;e[e.digit4=bt]="digit4";let wt=53;e[e.digit5=wt]="digit5";let St=54;e[e.digit6=St]="digit6";let Et=55;e[e.digit7=Et]="digit7";let Lt=56;e[e.digit8=Lt]="digit8";let Yt=57;e[e.digit9=Yt]="digit9";let qt=58;e[e.colon=qt]="colon";let O=59;e[e.semicolon=O]="semicolon";let D=60;e[e.lessThan=D]="lessThan";let g=61;e[e.equalsTo=g]="equalsTo";let F=62;e[e.greaterThan=F]="greaterThan";let te=63;e[e.questionMark=te]="questionMark";let ue=64;e[e.atSign=ue]="atSign";let Se=65;e[e.uppercaseA=Se]="uppercaseA";let me=66;e[e.uppercaseB=me]="uppercaseB";let Me=67;e[e.uppercaseC=Me]="uppercaseC";let Ne=68;e[e.uppercaseD=Ne]="uppercaseD";let qe=69;e[e.uppercaseE=qe]="uppercaseE";let Ke=70;e[e.uppercaseF=Ke]="uppercaseF";let We=71;e[e.uppercaseG=We]="uppercaseG";let ve=72;e[e.uppercaseH=ve]="uppercaseH";let Ue=73;e[e.uppercaseI=Ue]="uppercaseI";let ze=74;e[e.uppercaseJ=ze]="uppercaseJ";let Tt=75;e[e.uppercaseK=Tt]="uppercaseK";let kt=76;e[e.uppercaseL=kt]="uppercaseL";let Ot=77;e[e.uppercaseM=Ot]="uppercaseM";let L=78;e[e.uppercaseN=L]="uppercaseN";let E=79;e[e.uppercaseO=E]="uppercaseO";let B=80;e[e.uppercaseP=B]="uppercaseP";let J=81;e[e.uppercaseQ=J]="uppercaseQ";let ie=82;e[e.uppercaseR=ie]="uppercaseR";let ce=83;e[e.uppercaseS=ce]="uppercaseS";let we=84;e[e.uppercaseT=we]="uppercaseT";let nt=85;e[e.uppercaseU=nt]="uppercaseU";let mt=86;e[e.uppercaseV=mt]="uppercaseV";let Tn=87;e[e.uppercaseW=Tn]="uppercaseW";let Qt=88;e[e.uppercaseX=Qt]="uppercaseX";let Zt=89;e[e.uppercaseY=Zt]="uppercaseY";let an=90;e[e.uppercaseZ=an]="uppercaseZ";let Mt=91;e[e.leftSquareBracket=Mt]="leftSquareBracket";let Ft=92;e[e.backslash=Ft]="backslash";let It=93;e[e.rightSquareBracket=It]="rightSquareBracket";let en=94;e[e.caret=en]="caret";let ho=95;e[e.underscore=ho]="underscore";let Hn=96;e[e.graveAccent=Hn]="graveAccent";let f=97;e[e.lowercaseA=f]="lowercaseA";let I=98;e[e.lowercaseB=I]="lowercaseB";let b=99;e[e.lowercaseC=b]="lowercaseC";let q=100;e[e.lowercaseD=q]="lowercaseD";let Z=101;e[e.lowercaseE=Z]="lowercaseE";let z=102;e[e.lowercaseF=z]="lowercaseF";let he=103;e[e.lowercaseG=he]="lowercaseG";let Oe=104;e[e.lowercaseH=Oe]="lowercaseH";let de=105;e[e.lowercaseI=de]="lowercaseI";let Ye=106;e[e.lowercaseJ=Ye]="lowercaseJ";let et=107;e[e.lowercaseK=et]="lowercaseK";let tt=108;e[e.lowercaseL=tt]="lowercaseL";let ht=109;e[e.lowercaseM=ht]="lowercaseM";let yt=110;e[e.lowercaseN=yt]="lowercaseN";let At=111;e[e.lowercaseO=At]="lowercaseO";let Pt=112;e[e.lowercaseP=Pt]="lowercaseP";let jt=113;e[e.lowercaseQ=jt]="lowercaseQ";let ln=114;e[e.lowercaseR=ln]="lowercaseR";let On=115;e[e.lowercaseS=On]="lowercaseS";let vt=116;e[e.lowercaseT=vt]="lowercaseT";let Mn=117;e[e.lowercaseU=Mn]="lowercaseU";let Vn=118;e[e.lowercaseV=Vn]="lowercaseV";let fo=119;e[e.lowercaseW=fo]="lowercaseW";let Wn=120;e[e.lowercaseX=Wn]="lowercaseX";let Fn=121;e[e.lowercaseY=Fn]="lowercaseY";let tn=122;e[e.lowercaseZ=tn]="lowercaseZ";let gn=123;e[e.leftCurlyBrace=gn]="leftCurlyBrace";let Xn=124;e[e.verticalBar=Xn]="verticalBar";let Jn=125;e[e.rightCurlyBrace=Jn]="rightCurlyBrace";let Gn=126;e[e.tilde=Gn]="tilde";let Ls=160;e[e.nonBreakingSpace=Ls]="nonBreakingSpace";let qs=5760;e[e.oghamSpaceMark=qs]="oghamSpaceMark";let Os=8232;e[e.lineSeparator=Os]="lineSeparator";let Ms=8233;e[e.paragraphSeparator=Ms]="paragraphSeparator"})(wn||(Uo.charCodes=wn={}));function bc(e){return e>=wn.digit0&&e<=wn.digit9||e>=wn.lowercaseA&&e<=wn.lowercaseF||e>=wn.uppercaseA&&e<=wn.uppercaseF}Uo.isDigit=bc});var Kt=G(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});function Sc(e){return e&&e.__esModule?e:{default:e}}var Ec=$o(),Ac=Sc(Ec),Pc=Bt();at.isJSXEnabled;at.isTypeScriptEnabled;at.isFlowEnabled;at.state;at.input;at.nextContextId;function Rc(){return at.nextContextId++}at.getNextContextId=Rc;function Nc(e){if("pos"in e){let t=ri(e.pos);e.message+=` (${t.line}:${t.column})`,e.loc=t}return e}at.augmentError=Nc;var Ho=class{constructor(t,n){this.line=t,this.column=n}};at.Loc=Ho;function ri(e){let t=1,n=1;for(let o=0;o{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});var In=pt(),jn=ye(),Vo=Bt(),$t=Kt();function Lc(e){return $t.state.contextualKeyword===e}Ut.isContextual=Lc;function qc(e){let t=In.lookaheadTypeAndKeyword.call(void 0);return t.type===jn.TokenType.name&&t.contextualKeyword===e}Ut.isLookaheadContextual=qc;function ai(e){return $t.state.contextualKeyword===e&&In.eat.call(void 0,jn.TokenType.name)}Ut.eatContextual=ai;function Oc(e){ai(e)||Wo()}Ut.expectContextual=Oc;function ii(){return In.match.call(void 0,jn.TokenType.eof)||In.match.call(void 0,jn.TokenType.braceR)||li()}Ut.canInsertSemicolon=ii;function li(){let e=$t.state.tokens[$t.state.tokens.length-1],t=e?e.end:0;for(let n=t;n<$t.state.start;n++){let o=$t.input.charCodeAt(n);if(o===Vo.charCodes.lineFeed||o===Vo.charCodes.carriageReturn||o===8232||o===8233)return!0}return!1}Ut.hasPrecedingLineBreak=li;function Mc(){let e=In.nextTokenStart.call(void 0);for(let t=$t.state.end;t{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});var Ks=Bt(),Bc=[9,11,12,Ks.charCodes.space,Ks.charCodes.nonBreakingSpace,Ks.charCodes.oghamSpaceMark,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279];Bn.WHITESPACE_CHARS=Bc;var Kc=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;Bn.skipWhiteSpace=Kc;var $c=new Uint8Array(65536);Bn.IS_WHITESPACE=$c;for(let e of Bn.WHITESPACE_CHARS)Bn.IS_WHITESPACE[e]=1});var zn=G(nn=>{"use strict";Object.defineProperty(nn,"__esModule",{value:!0});var pi=Bt(),Uc=$s();function Hc(e){if(e<48)return e===36;if(e<58)return!0;if(e<65)return!1;if(e<91)return!0;if(e<97)return e===95;if(e<123)return!0;if(e<128)return!1;throw new Error("Should not be called with non-ASCII char code.")}var Vc=new Uint8Array(65536);nn.IS_IDENTIFIER_CHAR=Vc;for(let e=0;e<128;e++)nn.IS_IDENTIFIER_CHAR[e]=Hc(e)?1:0;for(let e=128;e<65536;e++)nn.IS_IDENTIFIER_CHAR[e]=1;for(let e of Uc.WHITESPACE_CHARS)nn.IS_IDENTIFIER_CHAR[e]=0;nn.IS_IDENTIFIER_CHAR[8232]=0;nn.IS_IDENTIFIER_CHAR[8233]=0;var Wc=nn.IS_IDENTIFIER_CHAR.slice();nn.IS_IDENTIFIER_START=Wc;for(let e=pi.charCodes.digit0;e<=pi.charCodes.digit9;e++)nn.IS_IDENTIFIER_START[e]=0});var ui=G(Us=>{"use strict";Object.defineProperty(Us,"__esModule",{value:!0});var fe=dt(),xe=ye(),Xc=new Int32Array([-1,27,783,918,1755,2376,2862,3483,-1,3699,-1,4617,4752,4833,5130,5508,5940,-1,6480,6939,7749,8181,8451,8613,-1,8829,-1,-1,-1,54,243,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,432,-1,-1,-1,675,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,108,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,135,-1,-1,-1,-1,-1,-1,-1,-1,-1,162,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,216,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._abstract<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,270,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,324,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,351,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,378,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,405,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._accessor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._as<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,459,-1,-1,-1,-1,-1,594,-1,-1,-1,-1,-1,-1,486,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,513,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,540,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._assert<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,567,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._asserts<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,621,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,648,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._async<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,702,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,729,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,756,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._await<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,810,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,837,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,864,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._break<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,945,-1,-1,-1,-1,-1,-1,1107,-1,-1,-1,1242,-1,-1,1350,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,972,1026,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,999,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._case<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1053,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1080,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._catch<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1134,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1161,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1215,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._checks<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1269,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1296,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1323,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._class<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1377,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1404,1620,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1431,-1,-1,-1,-1,-1,-1,(xe.TokenType._const<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1458,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1485,-1,-1,-1,-1,-1,-1,-1,-1,1512,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1539,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1566,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1593,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._constructor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1647,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1674,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1701,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1728,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._continue<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1782,-1,-1,-1,-1,-1,-1,-1,-1,-1,2349,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1809,1971,-1,-1,2106,-1,-1,-1,-1,-1,2241,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1836,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1863,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1890,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1917,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1944,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._debugger<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1998,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2025,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2052,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2079,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._declare<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2133,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2160,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2187,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2214,-1,-1,-1,-1,-1,-1,(xe.TokenType._default<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2268,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2295,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2322,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._delete<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._do<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2403,-1,2484,-1,-1,-1,-1,-1,-1,-1,-1,-1,2565,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2430,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2457,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._else<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2511,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2538,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._enum<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2592,-1,-1,-1,2727,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2619,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2646,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2673,-1,-1,-1,-1,-1,-1,(xe.TokenType._export<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._exports<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2754,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2808,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2835,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._extends<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2889,-1,-1,-1,-1,-1,-1,-1,2997,-1,-1,-1,-1,-1,3159,-1,-1,3213,-1,-1,3294,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2916,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2943,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2970,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._false<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3024,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3051,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3078,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3105,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3132,-1,(xe.TokenType._finally<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3186,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._for<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3267,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._from<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3321,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3348,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3375,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3402,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3429,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3456,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._function<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3510,-1,-1,-1,-1,-1,-1,3564,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3537,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._get<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3591,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3618,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3645,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3672,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._global<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3726,-1,-1,-1,-1,-1,-1,3753,4077,-1,-1,-1,-1,4590,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._if<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3780,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3807,-1,-1,3996,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3834,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3861,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3888,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3915,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3942,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3969,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._implements<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4023,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4050,-1,-1,-1,-1,-1,-1,(xe.TokenType._import<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._in<<1)+1,-1,-1,-1,-1,-1,4104,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4185,4401,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4131,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4158,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._infer<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4212,-1,-1,-1,-1,-1,-1,-1,4239,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4293,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4320,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4347,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4374,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._instanceof<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4428,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4455,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4482,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4509,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4563,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._interface<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._is<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4644,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4671,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4698,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4725,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._keyof<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4779,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4806,-1,-1,-1,-1,-1,-1,(xe.TokenType._let<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4860,-1,-1,-1,-1,-1,4995,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4887,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4914,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4941,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4968,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._mixins<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5022,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5049,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5103,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._module<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5157,-1,-1,-1,5373,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5427,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5211,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5238,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5265,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5292,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5346,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._namespace<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5400,-1,-1,-1,(xe.TokenType._new<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5454,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5481,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._null<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5535,-1,-1,-1,-1,-1,-1,-1,-1,-1,5562,-1,-1,-1,-1,5697,5751,-1,-1,-1,-1,fe.ContextualKeyword._of<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5589,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5616,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5643,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5670,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._opaque<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5724,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._out<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5778,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5805,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5832,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5859,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5886,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5913,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._override<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5967,-1,-1,6345,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5994,-1,-1,-1,-1,-1,6129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6021,-1,-1,-1,-1,-1,6048,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6075,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6102,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._private<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6156,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6183,-1,-1,-1,-1,-1,-1,-1,-1,-1,6318,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6210,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6237,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6264,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._protected<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._proto<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6372,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6399,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6426,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6453,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._public<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6507,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6534,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6696,-1,-1,6831,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6561,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6588,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6615,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6642,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6669,-1,fe.ContextualKeyword._readonly<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6723,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6750,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6777,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6804,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._require<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6885,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6912,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._return<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6966,-1,-1,-1,7182,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7236,7371,-1,7479,-1,7614,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6993,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7020,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7047,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7074,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7128,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7155,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._satisfies<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7209,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._set<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7263,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7290,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7317,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7344,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._static<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7398,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7425,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7452,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._super<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7506,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7533,-1,-1,-1,-1,-1,-1,-1,-1,-1,7560,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7587,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._switch<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7641,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7668,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7695,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7722,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._symbol<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7776,-1,-1,-1,-1,-1,-1,-1,-1,-1,7938,-1,-1,-1,-1,-1,-1,8046,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7803,-1,-1,-1,-1,-1,-1,-1,-1,7857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7830,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._this<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7884,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7911,-1,-1,-1,(xe.TokenType._throw<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7965,-1,-1,-1,8019,-1,-1,-1,-1,-1,-1,7992,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._true<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._try<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8073,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._type<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8127,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8154,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._typeof<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8208,-1,-1,-1,-1,8343,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8235,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8262,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8289,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8316,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._unique<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8370,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8397,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8424,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,fe.ContextualKeyword._using<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8478,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8532,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8505,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._var<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8559,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8586,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._void<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8640,8748,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8667,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8694,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8721,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._while<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8775,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8802,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._with<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8856,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8883,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8910,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8937,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(xe.TokenType._yield<<1)+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);Us.READ_WORD_TREE=Xc});var Ti=G(Vs=>{"use strict";Object.defineProperty(Vs,"__esModule",{value:!0});var on=Kt(),bn=Bt(),di=zn(),Hs=pt(),hi=ui(),fi=ye();function Jc(){let e=0,t=0,n=on.state.pos;for(;nbn.charCodes.lowercaseZ));){let s=hi.READ_WORD_TREE[e+(t-bn.charCodes.lowercaseA)+1];if(s===-1)break;e=s,n++}let o=hi.READ_WORD_TREE[e];if(o>-1&&!di.IS_IDENTIFIER_CHAR[t]){on.state.pos=n,o&1?Hs.finishToken.call(void 0,o>>>1):Hs.finishToken.call(void 0,fi.TokenType.name,o>>>1);return}for(;n{"use strict";Object.defineProperty(Le,"__esModule",{value:!0});function Gc(e){return e&&e.__esModule?e:{default:e}}var c=Kt(),Yn=Cn(),m=Bt(),mi=zn(),Xs=$s(),zc=dt(),Yc=Ti(),Qc=Gc(Yc),U=ye(),Qe;(function(e){e[e.Access=0]="Access";let n=1;e[e.ExportAccess=n]="ExportAccess";let o=n+1;e[e.TopLevelDeclaration=o]="TopLevelDeclaration";let s=o+1;e[e.FunctionScopedDeclaration=s]="FunctionScopedDeclaration";let r=s+1;e[e.BlockScopedDeclaration=r]="BlockScopedDeclaration";let u=r+1;e[e.ObjectShorthandTopLevelDeclaration=u]="ObjectShorthandTopLevelDeclaration";let v=u+1;e[e.ObjectShorthandFunctionScopedDeclaration=v]="ObjectShorthandFunctionScopedDeclaration";let R=v+1;e[e.ObjectShorthandBlockScopedDeclaration=R]="ObjectShorthandBlockScopedDeclaration";let A=R+1;e[e.ObjectShorthand=A]="ObjectShorthand";let K=A+1;e[e.ImportDeclaration=K]="ImportDeclaration";let X=K+1;e[e.ObjectKey=X]="ObjectKey";let N=X+1;e[e.ImportAccess=N]="ImportAccess"})(Qe||(Le.IdentifierRole=Qe={}));var ki;(function(e){e[e.NoChildren=0]="NoChildren";let n=1;e[e.OneChild=n]="OneChild";let o=n+1;e[e.StaticChildren=o]="StaticChildren";let s=o+1;e[e.KeyAfterPropSpread=s]="KeyAfterPropSpread"})(ki||(Le.JSXRole=ki={}));function Zc(e){let t=e.identifierRole;return t===Qe.TopLevelDeclaration||t===Qe.FunctionScopedDeclaration||t===Qe.BlockScopedDeclaration||t===Qe.ObjectShorthandTopLevelDeclaration||t===Qe.ObjectShorthandFunctionScopedDeclaration||t===Qe.ObjectShorthandBlockScopedDeclaration}Le.isDeclaration=Zc;function ep(e){let t=e.identifierRole;return t===Qe.FunctionScopedDeclaration||t===Qe.BlockScopedDeclaration||t===Qe.ObjectShorthandFunctionScopedDeclaration||t===Qe.ObjectShorthandBlockScopedDeclaration}Le.isNonTopLevelDeclaration=ep;function tp(e){let t=e.identifierRole;return t===Qe.TopLevelDeclaration||t===Qe.ObjectShorthandTopLevelDeclaration||t===Qe.ImportDeclaration}Le.isTopLevelDeclaration=tp;function np(e){let t=e.identifierRole;return t===Qe.TopLevelDeclaration||t===Qe.BlockScopedDeclaration||t===Qe.ObjectShorthandTopLevelDeclaration||t===Qe.ObjectShorthandBlockScopedDeclaration}Le.isBlockScopedDeclaration=np;function op(e){let t=e.identifierRole;return t===Qe.FunctionScopedDeclaration||t===Qe.ObjectShorthandFunctionScopedDeclaration}Le.isFunctionScopedDeclaration=op;function sp(e){return e.identifierRole===Qe.ObjectShorthandTopLevelDeclaration||e.identifierRole===Qe.ObjectShorthandBlockScopedDeclaration||e.identifierRole===Qe.ObjectShorthandFunctionScopedDeclaration}Le.isObjectShorthandDeclaration=sp;var ko=class{constructor(){this.type=c.state.type,this.contextualKeyword=c.state.contextualKeyword,this.start=c.state.start,this.end=c.state.end,this.scopeDepth=c.state.scopeDepth,this.isType=c.state.isType,this.identifierRole=null,this.jsxRole=null,this.shadowsGlobal=!1,this.isAsyncOperation=!1,this.contextId=null,this.rhsEndIndex=null,this.isExpression=!1,this.numNullishCoalesceStarts=0,this.numNullishCoalesceEnds=0,this.isOptionalChainStart=!1,this.isOptionalChainEnd=!1,this.subscriptStartIndex=null,this.nullishStartIndex=null}};Le.Token=ko;function Jo(){c.state.tokens.push(new ko),_i()}Le.next=Jo;function rp(){c.state.tokens.push(new ko),c.state.start=c.state.pos,Ep()}Le.nextTemplateToken=rp;function ap(){c.state.type===U.TokenType.assign&&--c.state.pos,Cp()}Le.retokenizeSlashAsRegex=ap;function ip(e){for(let n=c.state.tokens.length-e;n=c.input.length){let e=c.state.tokens;e.length>=2&&e[e.length-1].start>=c.input.length&&e[e.length-2].start>=c.input.length&&Yn.unexpected.call(void 0,"Unexpectedly reached the end of input."),Fe(U.TokenType.eof);return}hp(c.input.charCodeAt(c.state.pos))}Le.nextToken=_i;function hp(e){mi.IS_IDENTIFIER_START[e]||e===m.charCodes.backslash||e===m.charCodes.atSign&&c.input.charCodeAt(c.state.pos+1)===m.charCodes.atSign?Qc.default.call(void 0):Ci(e)}function fp(){for(;c.input.charCodeAt(c.state.pos)!==m.charCodes.asterisk||c.input.charCodeAt(c.state.pos+1)!==m.charCodes.slash;)if(c.state.pos++,c.state.pos>c.input.length){Yn.unexpected.call(void 0,"Unterminated comment",c.state.pos-2);return}c.state.pos+=2}function gi(e){let t=c.input.charCodeAt(c.state.pos+=e);if(c.state.pos=m.charCodes.digit0&&e<=m.charCodes.digit9){bi(!0);return}e===m.charCodes.dot&&c.input.charCodeAt(c.state.pos+2)===m.charCodes.dot?(c.state.pos+=3,Fe(U.TokenType.ellipsis)):(++c.state.pos,Fe(U.TokenType.dot))}function kp(){c.input.charCodeAt(c.state.pos+1)===m.charCodes.equalsTo?De(U.TokenType.assign,2):De(U.TokenType.slash,1)}function mp(e){let t=e===m.charCodes.asterisk?U.TokenType.star:U.TokenType.modulo,n=1,o=c.input.charCodeAt(c.state.pos+1);e===m.charCodes.asterisk&&o===m.charCodes.asterisk&&(n++,o=c.input.charCodeAt(c.state.pos+2),t=U.TokenType.exponent),o===m.charCodes.equalsTo&&c.input.charCodeAt(c.state.pos+2)!==m.charCodes.greaterThan&&(n++,t=U.TokenType.assign),De(t,n)}function yp(e){let t=c.input.charCodeAt(c.state.pos+1);if(t===e){c.input.charCodeAt(c.state.pos+2)===m.charCodes.equalsTo?De(U.TokenType.assign,3):De(e===m.charCodes.verticalBar?U.TokenType.logicalOR:U.TokenType.logicalAND,2);return}if(e===m.charCodes.verticalBar){if(t===m.charCodes.greaterThan){De(U.TokenType.pipeline,2);return}else if(t===m.charCodes.rightCurlyBrace&&c.isFlowEnabled){De(U.TokenType.braceBarR,2);return}}if(t===m.charCodes.equalsTo){De(U.TokenType.assign,2);return}De(e===m.charCodes.verticalBar?U.TokenType.bitwiseOR:U.TokenType.bitwiseAND,1)}function vp(){c.input.charCodeAt(c.state.pos+1)===m.charCodes.equalsTo?De(U.TokenType.assign,2):De(U.TokenType.bitwiseXOR,1)}function xp(e){let t=c.input.charCodeAt(c.state.pos+1);if(t===e){De(U.TokenType.preIncDec,2);return}t===m.charCodes.equalsTo?De(U.TokenType.assign,2):e===m.charCodes.plusSign?De(U.TokenType.plus,1):De(U.TokenType.minus,1)}function _p(){let e=c.input.charCodeAt(c.state.pos+1);if(e===m.charCodes.lessThan){if(c.input.charCodeAt(c.state.pos+2)===m.charCodes.equalsTo){De(U.TokenType.assign,3);return}c.state.isType?De(U.TokenType.lessThan,1):De(U.TokenType.bitShiftL,2);return}e===m.charCodes.equalsTo?De(U.TokenType.relationalOrEqual,2):De(U.TokenType.lessThan,1)}function Ii(){if(c.state.isType){De(U.TokenType.greaterThan,1);return}let e=c.input.charCodeAt(c.state.pos+1);if(e===m.charCodes.greaterThan){let t=c.input.charCodeAt(c.state.pos+2)===m.charCodes.greaterThan?3:2;if(c.input.charCodeAt(c.state.pos+t)===m.charCodes.equalsTo){De(U.TokenType.assign,t+1);return}De(U.TokenType.bitShiftR,t);return}e===m.charCodes.equalsTo?De(U.TokenType.relationalOrEqual,2):De(U.TokenType.greaterThan,1)}function gp(){c.state.type===U.TokenType.greaterThan&&(c.state.pos-=1,Ii())}Le.rescan_gt=gp;function wp(e){let t=c.input.charCodeAt(c.state.pos+1);if(t===m.charCodes.equalsTo){De(U.TokenType.equality,c.input.charCodeAt(c.state.pos+2)===m.charCodes.equalsTo?3:2);return}if(e===m.charCodes.equalsTo&&t===m.charCodes.greaterThan){c.state.pos+=2,Fe(U.TokenType.arrow);return}De(e===m.charCodes.equalsTo?U.TokenType.eq:U.TokenType.bang,1)}function Ip(){let e=c.input.charCodeAt(c.state.pos+1),t=c.input.charCodeAt(c.state.pos+2);e===m.charCodes.questionMark&&!(c.isFlowEnabled&&c.state.isType)?t===m.charCodes.equalsTo?De(U.TokenType.assign,3):De(U.TokenType.nullishCoalescing,2):e===m.charCodes.dot&&!(t>=m.charCodes.digit0&&t<=m.charCodes.digit9)?(c.state.pos+=2,Fe(U.TokenType.questionDot)):(++c.state.pos,Fe(U.TokenType.question))}function Ci(e){switch(e){case m.charCodes.numberSign:++c.state.pos,Fe(U.TokenType.hash);return;case m.charCodes.dot:Tp();return;case m.charCodes.leftParenthesis:++c.state.pos,Fe(U.TokenType.parenL);return;case m.charCodes.rightParenthesis:++c.state.pos,Fe(U.TokenType.parenR);return;case m.charCodes.semicolon:++c.state.pos,Fe(U.TokenType.semi);return;case m.charCodes.comma:++c.state.pos,Fe(U.TokenType.comma);return;case m.charCodes.leftSquareBracket:++c.state.pos,Fe(U.TokenType.bracketL);return;case m.charCodes.rightSquareBracket:++c.state.pos,Fe(U.TokenType.bracketR);return;case m.charCodes.leftCurlyBrace:c.isFlowEnabled&&c.input.charCodeAt(c.state.pos+1)===m.charCodes.verticalBar?De(U.TokenType.braceBarL,2):(++c.state.pos,Fe(U.TokenType.braceL));return;case m.charCodes.rightCurlyBrace:++c.state.pos,Fe(U.TokenType.braceR);return;case m.charCodes.colon:c.input.charCodeAt(c.state.pos+1)===m.charCodes.colon?De(U.TokenType.doubleColon,2):(++c.state.pos,Fe(U.TokenType.colon));return;case m.charCodes.questionMark:Ip();return;case m.charCodes.atSign:++c.state.pos,Fe(U.TokenType.at);return;case m.charCodes.graveAccent:++c.state.pos,Fe(U.TokenType.backQuote);return;case m.charCodes.digit0:{let t=c.input.charCodeAt(c.state.pos+1);if(t===m.charCodes.lowercaseX||t===m.charCodes.uppercaseX||t===m.charCodes.lowercaseO||t===m.charCodes.uppercaseO||t===m.charCodes.lowercaseB||t===m.charCodes.uppercaseB){bp();return}}case m.charCodes.digit1:case m.charCodes.digit2:case m.charCodes.digit3:case m.charCodes.digit4:case m.charCodes.digit5:case m.charCodes.digit6:case m.charCodes.digit7:case m.charCodes.digit8:case m.charCodes.digit9:bi(!1);return;case m.charCodes.quotationMark:case m.charCodes.apostrophe:Sp(e);return;case m.charCodes.slash:kp();return;case m.charCodes.percentSign:case m.charCodes.asterisk:mp(e);return;case m.charCodes.verticalBar:case m.charCodes.ampersand:yp(e);return;case m.charCodes.caret:vp();return;case m.charCodes.plusSign:case m.charCodes.dash:xp(e);return;case m.charCodes.lessThan:_p();return;case m.charCodes.greaterThan:Ii();return;case m.charCodes.equalsTo:case m.charCodes.exclamationMark:wp(e);return;case m.charCodes.tilde:De(U.TokenType.tilde,1);return;default:break}Yn.unexpected.call(void 0,`Unexpected character '${String.fromCharCode(e)}'`,c.state.pos)}Le.getTokenFromCode=Ci;function De(e,t){c.state.pos+=t,Fe(e)}function Cp(){let e=c.state.pos,t=!1,n=!1;for(;;){if(c.state.pos>=c.input.length){Yn.unexpected.call(void 0,"Unterminated regular expression",e);return}let o=c.input.charCodeAt(c.state.pos);if(t)t=!1;else{if(o===m.charCodes.leftSquareBracket)n=!0;else if(o===m.charCodes.rightSquareBracket&&n)n=!1;else if(o===m.charCodes.slash&&!n)break;t=o===m.charCodes.backslash}++c.state.pos}++c.state.pos,Si(),Fe(U.TokenType.regexp)}function Ws(){for(;;){let e=c.input.charCodeAt(c.state.pos);if(e>=m.charCodes.digit0&&e<=m.charCodes.digit9||e===m.charCodes.underscore)c.state.pos++;else break}}function bp(){for(c.state.pos+=2;;){let t=c.input.charCodeAt(c.state.pos);if(t>=m.charCodes.digit0&&t<=m.charCodes.digit9||t>=m.charCodes.lowercaseA&&t<=m.charCodes.lowercaseF||t>=m.charCodes.uppercaseA&&t<=m.charCodes.uppercaseF||t===m.charCodes.underscore)c.state.pos++;else break}c.input.charCodeAt(c.state.pos)===m.charCodes.lowercaseN?(++c.state.pos,Fe(U.TokenType.bigint)):Fe(U.TokenType.num)}function bi(e){let t=!1,n=!1;e||Ws();let o=c.input.charCodeAt(c.state.pos);if(o===m.charCodes.dot&&(++c.state.pos,Ws(),o=c.input.charCodeAt(c.state.pos)),(o===m.charCodes.uppercaseE||o===m.charCodes.lowercaseE)&&(o=c.input.charCodeAt(++c.state.pos),(o===m.charCodes.plusSign||o===m.charCodes.dash)&&++c.state.pos,Ws(),o=c.input.charCodeAt(c.state.pos)),o===m.charCodes.lowercaseN?(++c.state.pos,t=!0):o===m.charCodes.lowercaseM&&(++c.state.pos,n=!0),t){Fe(U.TokenType.bigint);return}if(n){Fe(U.TokenType.decimal);return}Fe(U.TokenType.num)}function Sp(e){for(c.state.pos++;;){if(c.state.pos>=c.input.length){Yn.unexpected.call(void 0,"Unterminated string constant");return}let t=c.input.charCodeAt(c.state.pos);if(t===m.charCodes.backslash)c.state.pos++;else if(t===e)break;c.state.pos++}c.state.pos++,Fe(U.TokenType.string)}function Ep(){for(;;){if(c.state.pos>=c.input.length){Yn.unexpected.call(void 0,"Unterminated template");return}let e=c.input.charCodeAt(c.state.pos);if(e===m.charCodes.graveAccent||e===m.charCodes.dollarSign&&c.input.charCodeAt(c.state.pos+1)===m.charCodes.leftCurlyBrace){if(c.state.pos===c.state.start&&Js(U.TokenType.template))if(e===m.charCodes.dollarSign){c.state.pos+=2,Fe(U.TokenType.dollarBraceL);return}else{++c.state.pos,Fe(U.TokenType.backQuote);return}Fe(U.TokenType.template);return}e===m.charCodes.backslash&&c.state.pos++,c.state.pos++}}function Si(){for(;c.state.pos{"use strict";Object.defineProperty(Gs,"__esModule",{value:!0});var Ei=ye();function Ap(e,t=e.currentIndex()){let n=t+1;if(Go(e,n)){let o=e.identifierNameAtIndex(t);return{isType:!1,leftName:o,rightName:o,endIndex:n}}if(n++,Go(e,n))return{isType:!0,leftName:null,rightName:null,endIndex:n};if(n++,Go(e,n))return{isType:!1,leftName:e.identifierNameAtIndex(t),rightName:e.identifierNameAtIndex(t+2),endIndex:n};if(n++,Go(e,n))return{isType:!0,leftName:null,rightName:null,endIndex:n};throw new Error(`Unexpected import/export specifier at ${t}`)}Gs.default=Ap;function Go(e,t){let n=e.tokens[t];return n.type===Ei.TokenType.braceR||n.type===Ei.TokenType.comma}});var Ai=G(zs=>{"use strict";Object.defineProperty(zs,"__esModule",{value:!0});zs.default=new Map([["quot",'"'],["amp","&"],["apos","'"],["lt","<"],["gt",">"],["nbsp","\xA0"],["iexcl","\xA1"],["cent","\xA2"],["pound","\xA3"],["curren","\xA4"],["yen","\xA5"],["brvbar","\xA6"],["sect","\xA7"],["uml","\xA8"],["copy","\xA9"],["ordf","\xAA"],["laquo","\xAB"],["not","\xAC"],["shy","\xAD"],["reg","\xAE"],["macr","\xAF"],["deg","\xB0"],["plusmn","\xB1"],["sup2","\xB2"],["sup3","\xB3"],["acute","\xB4"],["micro","\xB5"],["para","\xB6"],["middot","\xB7"],["cedil","\xB8"],["sup1","\xB9"],["ordm","\xBA"],["raquo","\xBB"],["frac14","\xBC"],["frac12","\xBD"],["frac34","\xBE"],["iquest","\xBF"],["Agrave","\xC0"],["Aacute","\xC1"],["Acirc","\xC2"],["Atilde","\xC3"],["Auml","\xC4"],["Aring","\xC5"],["AElig","\xC6"],["Ccedil","\xC7"],["Egrave","\xC8"],["Eacute","\xC9"],["Ecirc","\xCA"],["Euml","\xCB"],["Igrave","\xCC"],["Iacute","\xCD"],["Icirc","\xCE"],["Iuml","\xCF"],["ETH","\xD0"],["Ntilde","\xD1"],["Ograve","\xD2"],["Oacute","\xD3"],["Ocirc","\xD4"],["Otilde","\xD5"],["Ouml","\xD6"],["times","\xD7"],["Oslash","\xD8"],["Ugrave","\xD9"],["Uacute","\xDA"],["Ucirc","\xDB"],["Uuml","\xDC"],["Yacute","\xDD"],["THORN","\xDE"],["szlig","\xDF"],["agrave","\xE0"],["aacute","\xE1"],["acirc","\xE2"],["atilde","\xE3"],["auml","\xE4"],["aring","\xE5"],["aelig","\xE6"],["ccedil","\xE7"],["egrave","\xE8"],["eacute","\xE9"],["ecirc","\xEA"],["euml","\xEB"],["igrave","\xEC"],["iacute","\xED"],["icirc","\xEE"],["iuml","\xEF"],["eth","\xF0"],["ntilde","\xF1"],["ograve","\xF2"],["oacute","\xF3"],["ocirc","\xF4"],["otilde","\xF5"],["ouml","\xF6"],["divide","\xF7"],["oslash","\xF8"],["ugrave","\xF9"],["uacute","\xFA"],["ucirc","\xFB"],["uuml","\xFC"],["yacute","\xFD"],["thorn","\xFE"],["yuml","\xFF"],["OElig","\u0152"],["oelig","\u0153"],["Scaron","\u0160"],["scaron","\u0161"],["Yuml","\u0178"],["fnof","\u0192"],["circ","\u02C6"],["tilde","\u02DC"],["Alpha","\u0391"],["Beta","\u0392"],["Gamma","\u0393"],["Delta","\u0394"],["Epsilon","\u0395"],["Zeta","\u0396"],["Eta","\u0397"],["Theta","\u0398"],["Iota","\u0399"],["Kappa","\u039A"],["Lambda","\u039B"],["Mu","\u039C"],["Nu","\u039D"],["Xi","\u039E"],["Omicron","\u039F"],["Pi","\u03A0"],["Rho","\u03A1"],["Sigma","\u03A3"],["Tau","\u03A4"],["Upsilon","\u03A5"],["Phi","\u03A6"],["Chi","\u03A7"],["Psi","\u03A8"],["Omega","\u03A9"],["alpha","\u03B1"],["beta","\u03B2"],["gamma","\u03B3"],["delta","\u03B4"],["epsilon","\u03B5"],["zeta","\u03B6"],["eta","\u03B7"],["theta","\u03B8"],["iota","\u03B9"],["kappa","\u03BA"],["lambda","\u03BB"],["mu","\u03BC"],["nu","\u03BD"],["xi","\u03BE"],["omicron","\u03BF"],["pi","\u03C0"],["rho","\u03C1"],["sigmaf","\u03C2"],["sigma","\u03C3"],["tau","\u03C4"],["upsilon","\u03C5"],["phi","\u03C6"],["chi","\u03C7"],["psi","\u03C8"],["omega","\u03C9"],["thetasym","\u03D1"],["upsih","\u03D2"],["piv","\u03D6"],["ensp","\u2002"],["emsp","\u2003"],["thinsp","\u2009"],["zwnj","\u200C"],["zwj","\u200D"],["lrm","\u200E"],["rlm","\u200F"],["ndash","\u2013"],["mdash","\u2014"],["lsquo","\u2018"],["rsquo","\u2019"],["sbquo","\u201A"],["ldquo","\u201C"],["rdquo","\u201D"],["bdquo","\u201E"],["dagger","\u2020"],["Dagger","\u2021"],["bull","\u2022"],["hellip","\u2026"],["permil","\u2030"],["prime","\u2032"],["Prime","\u2033"],["lsaquo","\u2039"],["rsaquo","\u203A"],["oline","\u203E"],["frasl","\u2044"],["euro","\u20AC"],["image","\u2111"],["weierp","\u2118"],["real","\u211C"],["trade","\u2122"],["alefsym","\u2135"],["larr","\u2190"],["uarr","\u2191"],["rarr","\u2192"],["darr","\u2193"],["harr","\u2194"],["crarr","\u21B5"],["lArr","\u21D0"],["uArr","\u21D1"],["rArr","\u21D2"],["dArr","\u21D3"],["hArr","\u21D4"],["forall","\u2200"],["part","\u2202"],["exist","\u2203"],["empty","\u2205"],["nabla","\u2207"],["isin","\u2208"],["notin","\u2209"],["ni","\u220B"],["prod","\u220F"],["sum","\u2211"],["minus","\u2212"],["lowast","\u2217"],["radic","\u221A"],["prop","\u221D"],["infin","\u221E"],["ang","\u2220"],["and","\u2227"],["or","\u2228"],["cap","\u2229"],["cup","\u222A"],["int","\u222B"],["there4","\u2234"],["sim","\u223C"],["cong","\u2245"],["asymp","\u2248"],["ne","\u2260"],["equiv","\u2261"],["le","\u2264"],["ge","\u2265"],["sub","\u2282"],["sup","\u2283"],["nsub","\u2284"],["sube","\u2286"],["supe","\u2287"],["oplus","\u2295"],["otimes","\u2297"],["perp","\u22A5"],["sdot","\u22C5"],["lceil","\u2308"],["rceil","\u2309"],["lfloor","\u230A"],["rfloor","\u230B"],["lang","\u2329"],["rang","\u232A"],["loz","\u25CA"],["spades","\u2660"],["clubs","\u2663"],["hearts","\u2665"],["diams","\u2666"]])});var Qs=G(Ys=>{"use strict";Object.defineProperty(Ys,"__esModule",{value:!0});function Pp(e){let[t,n]=Pi(e.jsxPragma||"React.createElement"),[o,s]=Pi(e.jsxFragmentPragma||"React.Fragment");return{base:t,suffix:n,fragmentBase:o,fragmentSuffix:s}}Ys.default=Pp;function Pi(e){let t=e.indexOf(".");return t===-1&&(t=e.length),[e.slice(0,t),e.slice(t)]}});var Wt=G(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});var Zs=class{getPrefixCode(){return""}getHoistedCode(){return""}getSuffixCode(){return""}};er.default=Zs});var or=G(Yo=>{"use strict";Object.defineProperty(Yo,"__esModule",{value:!0});function nr(e){return e&&e.__esModule?e:{default:e}}var Rp=Ai(),Np=nr(Rp),zo=pt(),be=ye(),cn=Bt(),Dp=Qs(),Lp=nr(Dp),qp=Wt(),Op=nr(qp),tr=class e extends Op.default{__init(){this.lastLineNumber=1}__init2(){this.lastIndex=0}__init3(){this.filenameVarName=null}__init4(){this.esmAutomaticImportNameResolutions={}}__init5(){this.cjsAutomaticModuleNameResolutions={}}constructor(t,n,o,s,r){super(),this.rootTransformer=t,this.tokens=n,this.importProcessor=o,this.nameManager=s,this.options=r,e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this),e.prototype.__init4.call(this),e.prototype.__init5.call(this),this.jsxPragmaInfo=Lp.default.call(void 0,r),this.isAutomaticRuntime=r.jsxRuntime==="automatic",this.jsxImportSource=r.jsxImportSource||"react"}process(){return this.tokens.matches1(be.TokenType.jsxTagStart)?(this.processJSXTag(),!0):!1}getPrefixCode(){let t="";if(this.filenameVarName&&(t+=`const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath||"")};`),this.isAutomaticRuntime)if(this.importProcessor)for(let[n,o]of Object.entries(this.cjsAutomaticModuleNameResolutions))t+=`var ${o} = require("${n}");`;else{let{createElement:n,...o}=this.esmAutomaticImportNameResolutions;n&&(t+=`import {createElement as ${n}} from "${this.jsxImportSource}";`);let s=Object.entries(o).map(([r,u])=>`${r} as ${u}`).join(", ");if(s){let r=this.jsxImportSource+(this.options.production?"/jsx-runtime":"/jsx-dev-runtime");t+=`import {${s}} from "${r}";`}}return t}processJSXTag(){let{jsxRole:t,start:n}=this.tokens.currentToken(),o=this.options.production?null:this.getElementLocationCode(n);this.isAutomaticRuntime&&t!==zo.JSXRole.KeyAfterPropSpread?this.transformTagToJSXFunc(o,t):this.transformTagToCreateElement(o)}getElementLocationCode(t){return`lineNumber: ${this.getLineNumberForIndex(t)}`}getLineNumberForIndex(t){let n=this.tokens.code;for(;this.lastIndex or > at the end of the tag.");s&&this.tokens.appendCode(`, ${s}`)}for(this.options.production||(s===null&&this.tokens.appendCode(", void 0"),this.tokens.appendCode(`, ${o}, ${this.getDevSource(t)}, this`)),this.tokens.removeInitialToken();!this.tokens.matches1(be.TokenType.jsxTagEnd);)this.tokens.removeToken();this.tokens.replaceToken(")")}transformTagToCreateElement(t){if(this.tokens.replaceToken(this.getCreateElementInvocationCode()),this.tokens.matches1(be.TokenType.jsxTagEnd))this.tokens.replaceToken(`${this.getFragmentCode()}, null`),this.processChildren(!0);else if(this.processTagIntro(),this.processPropsObjectWithDevInfo(t),!this.tokens.matches2(be.TokenType.slash,be.TokenType.jsxTagEnd))if(this.tokens.matches1(be.TokenType.jsxTagEnd))this.tokens.removeToken(),this.processChildren(!0);else throw new Error("Expected either /> or > at the end of the tag.");for(this.tokens.removeInitialToken();!this.tokens.matches1(be.TokenType.jsxTagEnd);)this.tokens.removeToken();this.tokens.replaceToken(")")}getJSXFuncInvocationCode(t){return this.options.production?t?this.claimAutoImportedFuncInvocation("jsxs","/jsx-runtime"):this.claimAutoImportedFuncInvocation("jsx","/jsx-runtime"):this.claimAutoImportedFuncInvocation("jsxDEV","/jsx-dev-runtime")}getCreateElementInvocationCode(){if(this.isAutomaticRuntime)return this.claimAutoImportedFuncInvocation("createElement","");{let{jsxPragmaInfo:t}=this;return`${this.importProcessor&&this.importProcessor.getIdentifierReplacement(t.base)||t.base}${t.suffix}(`}}getFragmentCode(){if(this.isAutomaticRuntime)return this.claimAutoImportedName("Fragment",this.options.production?"/jsx-runtime":"/jsx-dev-runtime");{let{jsxPragmaInfo:t}=this;return(this.importProcessor&&this.importProcessor.getIdentifierReplacement(t.fragmentBase)||t.fragmentBase)+t.fragmentSuffix}}claimAutoImportedFuncInvocation(t,n){let o=this.claimAutoImportedName(t,n);return this.importProcessor?`${o}.call(void 0, `:`${o}(`}claimAutoImportedName(t,n){if(this.importProcessor){let o=this.jsxImportSource+n;return this.cjsAutomaticModuleNameResolutions[o]||(this.cjsAutomaticModuleNameResolutions[o]=this.importProcessor.getFreeIdentifierForPath(o)),`${this.cjsAutomaticModuleNameResolutions[o]}.${t}`}else return this.esmAutomaticImportNameResolutions[t]||(this.esmAutomaticImportNameResolutions[t]=this.nameManager.claimFreeName(`_${t}`)),this.esmAutomaticImportNameResolutions[t]}processTagIntro(){let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType||!this.tokens.matches2AtIndex(t-1,be.TokenType.jsxName,be.TokenType.jsxName)&&!this.tokens.matches2AtIndex(t-1,be.TokenType.greaterThan,be.TokenType.jsxName)&&!this.tokens.matches1AtIndex(t,be.TokenType.braceL)&&!this.tokens.matches1AtIndex(t,be.TokenType.jsxTagEnd)&&!this.tokens.matches2AtIndex(t,be.TokenType.slash,be.TokenType.jsxTagEnd);)t++;if(t===this.tokens.currentIndex()+1){let n=this.tokens.identifierName();Ni(n)&&this.tokens.replaceToken(`'${n}'`)}for(;this.tokens.currentIndex()=cn.charCodes.lowercaseA&&t<=cn.charCodes.lowercaseZ}Yo.startsWithLowerCase=Ni;function Mp(e){let t="",n="",o=!1,s=!1;for(let r=0;r=cn.charCodes.digit0&&e<=cn.charCodes.digit9}function Bp(e){return e>=cn.charCodes.digit0&&e<=cn.charCodes.digit9||e>=cn.charCodes.lowercaseA&&e<=cn.charCodes.lowercaseF||e>=cn.charCodes.uppercaseA&&e<=cn.charCodes.uppercaseF}});var rr=G(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});function Kp(e){return e&&e.__esModule?e:{default:e}}var Qo=pt(),Qn=ye(),$p=or(),Up=Qs(),Hp=Kp(Up);function Vp(e,t){let n=Hp.default.call(void 0,t),o=new Set;for(let s=0;s{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});function Wp(e){return e&&e.__esModule?e:{default:e}}var Xp=pt(),Zo=dt(),re=ye(),Jp=mo(),Gp=Wp(Jp),zp=rr(),ar=class e{__init(){this.nonTypeIdentifiers=new Set}__init2(){this.importInfoByPath=new Map}__init3(){this.importsToReplace=new Map}__init4(){this.identifierReplacements=new Map}__init5(){this.exportBindingsByLocalName=new Map}constructor(t,n,o,s,r,u,v){this.nameManager=t,this.tokens=n,this.enableLegacyTypeScriptModuleInterop=o,this.options=s,this.isTypeScriptTransformEnabled=r,this.keepUnusedImports=u,this.helperManager=v,e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this),e.prototype.__init4.call(this),e.prototype.__init5.call(this)}preprocessTokens(){for(let t=0;t0||n.namedExports.length>0)continue;[...n.defaultNames,...n.wildcardNames,...n.namedImports.map(({localName:s})=>s)].every(s=>this.shouldAutomaticallyElideImportedName(s))&&this.importsToReplace.set(t,"")}}shouldAutomaticallyElideImportedName(t){return this.isTypeScriptTransformEnabled&&!this.keepUnusedImports&&!this.nonTypeIdentifiers.has(t)}generateImportReplacements(){for(let[t,n]of this.importInfoByPath.entries()){let{defaultNames:o,wildcardNames:s,namedImports:r,namedExports:u,exportStarNames:v,hasStarExport:R}=n;if(o.length===0&&s.length===0&&r.length===0&&u.length===0&&v.length===0&&!R){this.importsToReplace.set(t,`require('${t}');`);continue}let A=this.getFreeIdentifierForPath(t),K;this.enableLegacyTypeScriptModuleInterop?K=A:K=s.length>0?s[0]:this.getFreeIdentifierForPath(t);let X=`var ${A} = require('${t}');`;if(s.length>0)for(let N of s){let $=this.enableLegacyTypeScriptModuleInterop?A:`${this.helperManager.getHelperName("interopRequireWildcard")}(${A})`;X+=` var ${N} = ${$};`}else v.length>0&&K!==A?X+=` var ${K} = ${this.helperManager.getHelperName("interopRequireWildcard")}(${A});`:o.length>0&&K!==A&&(X+=` var ${K} = ${this.helperManager.getHelperName("interopRequireDefault")}(${A});`);for(let{importedName:N,localName:$}of u)X+=` ${this.helperManager.getHelperName("createNamedExportFrom")}(${A}, '${$}', '${N}');`;for(let N of v)X+=` exports.${N} = ${K};`;R&&(X+=` ${this.helperManager.getHelperName("createStarExport")}(${A});`),this.importsToReplace.set(t,X);for(let N of o)this.identifierReplacements.set(N,`${K}.default`);for(let{importedName:N,localName:$}of r)this.identifierReplacements.set($,`${A}.${N}`)}}getFreeIdentifierForPath(t){let n=t.split("/"),s=n[n.length-1].replace(/\W/g,"");return this.nameManager.claimFreeName(`_${s}`)}preprocessImportAtIndex(t){let n=[],o=[],s=[];if(t++,(this.tokens.matchesContextualAtIndex(t,Zo.ContextualKeyword._type)||this.tokens.matches1AtIndex(t,re.TokenType._typeof))&&!this.tokens.matches1AtIndex(t+1,re.TokenType.comma)&&!this.tokens.matchesContextualAtIndex(t+1,Zo.ContextualKeyword._from)||this.tokens.matches1AtIndex(t,re.TokenType.parenL))return;if(this.tokens.matches1AtIndex(t,re.TokenType.name)&&(n.push(this.tokens.identifierNameAtIndex(t)),t++,this.tokens.matches1AtIndex(t,re.TokenType.comma)&&t++),this.tokens.matches1AtIndex(t,re.TokenType.star)&&(t+=2,o.push(this.tokens.identifierNameAtIndex(t)),t++),this.tokens.matches1AtIndex(t,re.TokenType.braceL)){let v=this.getNamedImports(t+1);t=v.newIndex;for(let R of v.namedImports)R.importedName==="default"?n.push(R.localName):s.push(R)}if(this.tokens.matchesContextualAtIndex(t,Zo.ContextualKeyword._from)&&t++,!this.tokens.matches1AtIndex(t,re.TokenType.string))throw new Error("Expected string token at the end of import statement.");let r=this.tokens.stringValueAtIndex(t),u=this.getImportInfo(r);u.defaultNames.push(...n),u.wildcardNames.push(...o),u.namedImports.push(...s),n.length===0&&o.length===0&&s.length===0&&(u.hasBareImport=!0)}preprocessExportAtIndex(t){if(this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType._var)||this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType._let)||this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType._const))this.preprocessVarExportAtIndex(t);else if(this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType._function)||this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType._class)){let n=this.tokens.identifierNameAtIndex(t+2);this.addExportBinding(n,n)}else if(this.tokens.matches3AtIndex(t,re.TokenType._export,re.TokenType.name,re.TokenType._function)){let n=this.tokens.identifierNameAtIndex(t+3);this.addExportBinding(n,n)}else this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType.braceL)?this.preprocessNamedExportAtIndex(t):this.tokens.matches2AtIndex(t,re.TokenType._export,re.TokenType.star)&&this.preprocessExportStarAtIndex(t)}preprocessVarExportAtIndex(t){let n=0;for(let o=t+2;;o++)if(this.tokens.matches1AtIndex(o,re.TokenType.braceL)||this.tokens.matches1AtIndex(o,re.TokenType.dollarBraceL)||this.tokens.matches1AtIndex(o,re.TokenType.bracketL))n++;else if(this.tokens.matches1AtIndex(o,re.TokenType.braceR)||this.tokens.matches1AtIndex(o,re.TokenType.bracketR))n--;else{if(n===0&&!this.tokens.matches1AtIndex(o,re.TokenType.name))break;if(this.tokens.matches1AtIndex(1,re.TokenType.eq)){let s=this.tokens.currentToken().rhsEndIndex;if(s==null)throw new Error("Expected = token with an end index.");o=s-1}else{let s=this.tokens.tokens[o];if(Xp.isDeclaration.call(void 0,s)){let r=this.tokens.identifierNameAtIndex(o);this.identifierReplacements.set(r,`exports.${r}`)}}}}preprocessNamedExportAtIndex(t){t+=2;let{newIndex:n,namedImports:o}=this.getNamedImports(t);if(t=n,this.tokens.matchesContextualAtIndex(t,Zo.ContextualKeyword._from))t++;else{for(let{importedName:u,localName:v}of o)this.addExportBinding(u,v);return}if(!this.tokens.matches1AtIndex(t,re.TokenType.string))throw new Error("Expected string token at the end of import statement.");let s=this.tokens.stringValueAtIndex(t);this.getImportInfo(s).namedExports.push(...o)}preprocessExportStarAtIndex(t){let n=null;if(this.tokens.matches3AtIndex(t,re.TokenType._export,re.TokenType.star,re.TokenType._as)?(t+=3,n=this.tokens.identifierNameAtIndex(t),t+=2):t+=3,!this.tokens.matches1AtIndex(t,re.TokenType.string))throw new Error("Expected string token at the end of star export statement.");let o=this.tokens.stringValueAtIndex(t),s=this.getImportInfo(o);n!==null?s.exportStarNames.push(n):s.hasStarExport=!0}getNamedImports(t){let n=[];for(;;){if(this.tokens.matches1AtIndex(t,re.TokenType.braceR)){t++;break}let o=Gp.default.call(void 0,this.tokens,t);if(t=o.endIndex,o.isType||n.push({importedName:o.leftName,localName:o.rightName}),this.tokens.matches2AtIndex(t,re.TokenType.comma,re.TokenType.braceR)){t+=2;break}else if(this.tokens.matches1AtIndex(t,re.TokenType.braceR)){t++;break}else if(this.tokens.matches1AtIndex(t,re.TokenType.comma))t++;else throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[t])}`)}return{newIndex:t,namedImports:n}}getImportInfo(t){let n=this.importInfoByPath.get(t);if(n)return n;let o={defaultNames:[],wildcardNames:[],namedImports:[],namedExports:[],hasBareImport:!1,exportStarNames:[],hasStarExport:!1};return this.importInfoByPath.set(t,o),o}addExportBinding(t,n){this.exportBindingsByLocalName.has(t)||this.exportBindingsByLocalName.set(t,[]),this.exportBindingsByLocalName.get(t).push(n)}claimImportCode(t){let n=this.importsToReplace.get(t);return this.importsToReplace.set(t,""),n||""}getIdentifierReplacement(t){return this.identifierReplacements.get(t)||null}resolveExportBinding(t){let n=this.exportBindingsByLocalName.get(t);return!n||n.length===0?null:n.map(o=>`exports.${o}`).join(" = ")}getGlobalNames(){return new Set([...this.identifierReplacements.keys(),...this.exportBindingsByLocalName.keys()])}};ir.default=ar});var cr=G((lr,yo)=>{(function(e,t){if(typeof lr=="object"&&typeof yo<"u")t(yo),yo.exports=n(yo);else if(typeof define=="function"&&define.amd)define(["module"],function(o){t.apply(this,arguments),o.exports=n(o)});else{let o={exports:{}};t(o),e=typeof globalThis<"u"?globalThis:e||self,e.sourcemapCodec=n(o)}function n(o){return"default"in o.exports?o.exports.default:o.exports}})(lr,function(e){"use strict";var t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(O,D)=>{for(var g in D)t(O,g,{get:D[g],enumerable:!0})},u=(O,D,g,F)=>{if(D&&typeof D=="object"||typeof D=="function")for(let te of o(D))!s.call(O,te)&&te!==g&&t(O,te,{get:()=>D[te],enumerable:!(F=n(D,te))||F.enumerable});return O},v=O=>u(t({},"__esModule",{value:!0}),O),R={};r(R,{decode:()=>Et,decodeGeneratedRanges:()=>lt,decodeOriginalScopes:()=>Je,encode:()=>qt,encodeGeneratedRanges:()=>bt,encodeOriginalScopes:()=>rt}),e.exports=v(R);var A=44,K=59,X="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",N=new Uint8Array(64),$=new Uint8Array(128);for(let O=0;O>>=1,ue&&(g=-2147483648|-g),D+g}function ne(O,D,g){let F=D-g;F=F<0?-F<<1|1:F<<1;do{let te=F&31;F>>>=5,F>0&&(te|=32),O.write(N[te])}while(F>0);return D}function j(O,D){return O.pos>=D?!1:O.peek()!==A}var ee=1024*16,se=typeof TextDecoder<"u"?new TextDecoder:typeof Buffer<"u"?{decode(O){return Buffer.from(O.buffer,O.byteOffset,O.byteLength).toString()}}:{decode(O){let D="";for(let g=0;g0?D+se.decode(O.subarray(0,g)):D}},Te=class{constructor(O){this.pos=0,this.buffer=O}next(){return this.buffer.charCodeAt(this.pos++)}peek(){return this.buffer.charCodeAt(this.pos)}indexOf(O){let{buffer:D,pos:g}=this,F=D.indexOf(O,g);return F===-1?D.length:F}},pe=[];function Je(O){let{length:D}=O,g=new Te(O),F=[],te=[],ue=0;for(;g.pos0&&g.write(A),F[0]=ne(g,ue,F[0]),ne(g,Se,0),ne(g,Ne,0);let Ke=te.length===6?1:0;ne(g,Ke,0),te.length===6&&ne(g,te[5],0);for(let We of qe)ne(g,We,0);for(D++;Dme||ve===me&&Ue>=Me)break;D=Ge(O,D,g,F)}return g.write(A),F[0]=ne(g,me,F[0]),ne(g,Me,0),D}function lt(O){let{length:D}=O,g=new Te(O),F=[],te=[],ue=0,Se=0,me=0,Me=0,Ne=0,qe=0,Ke=0,We=0;do{let ve=g.indexOf(";"),Ue=0;for(;g.posJ;ce--){let we=Ke;Ke=V(g,Ke),We=V(g,Ke===we?We:0);let nt=V(g,0);ie.push([nt,Ke,We])}}else ie=[[J]];E.push(ie)}while(j(g,ve))}B.bindings=E,F.push(B),te.push(B)}ue++,g.pos=ve+1}while(g.pos0&&g.write(A),F[1]=ne(g,te[1],F[1]);let We=(te.length===6?1:0)|(qe?2:0)|(Ne?4:0);if(ne(g,We,0),te.length===6){let{4:ve,5:Ue}=te;ve!==F[2]&&(F[3]=0),F[2]=ne(g,ve,F[2]),F[3]=ne(g,Ue,F[3])}if(qe){let{0:ve,1:Ue,2:ze}=te.callsite;ve!==F[4]?(F[5]=0,F[6]=0):Ue!==F[5]&&(F[6]=0),F[4]=ne(g,ve,F[4]),F[5]=ne(g,Ue,F[5]),F[6]=ne(g,ze,F[6])}if(Ke)for(let ve of Ke){ve.length>1&&ne(g,-ve.length,0);let Ue=ve[0][0];ne(g,Ue,0);let ze=ue,Tt=Se;for(let kt=1;ktme||Ue===me&&ze>=Me)break;D=wt(O,D,g,F)}return F[0]0&&D.write(K),me.length===0)continue;let Me=0;for(let Ne=0;Ne0&&D.write(A),Me=ne(D,qe[0],Me),qe.length!==1&&(g=ne(D,qe[1],g),F=ne(D,qe[2],F),te=ne(D,qe[3],te),qe.length!==4&&(ue=ne(D,qe[4],ue)))}}return D.flush()}})});var qi=G((pr,ur)=>{(function(e,t){typeof pr=="object"&&typeof ur<"u"?ur.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self,e.resolveURI=t())})(pr,function(){"use strict";let e=/^[\w+.-]+:\/\//,t=/^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/,n=/^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i;function o(j){return e.test(j)}function s(j){return j.startsWith("//")}function r(j){return j.startsWith("/")}function u(j){return j.startsWith("file:")}function v(j){return/^[.?#]/.test(j)}function R(j){let ee=t.exec(j);return K(ee[1],ee[2]||"",ee[3],ee[4]||"",ee[5]||"/",ee[6]||"",ee[7]||"")}function A(j){let ee=n.exec(j),se=ee[2];return K("file:","",ee[1]||"","",r(se)?se:"/"+se,ee[3]||"",ee[4]||"")}function K(j,ee,se,Pe,Te,pe,Je){return{scheme:j,user:ee,host:se,port:Pe,path:Te,query:pe,hash:Je,type:7}}function X(j){if(s(j)){let se=R("http:"+j);return se.scheme="",se.type=6,se}if(r(j)){let se=R("http://foo.com"+j);return se.scheme="",se.host="",se.type=5,se}if(u(j))return A(j);if(o(j))return R(j);let ee=R("http://foo.com/"+j);return ee.scheme="",ee.host="",ee.type=j?j.startsWith("?")?3:j.startsWith("#")?2:4:1,ee}function N(j){if(j.endsWith("/.."))return j;let ee=j.lastIndexOf("/");return j.slice(0,ee+1)}function $(j,ee){V(ee,ee.type),j.path==="/"?j.path=ee.path:j.path=N(ee.path)+j.path}function V(j,ee){let se=ee<=4,Pe=j.path.split("/"),Te=1,pe=0,Je=!1;for(let Ge=1;GePe&&(Pe=Je)}V(se,Pe);let Te=se.query+se.hash;switch(Pe){case 2:case 3:return Te;case 4:{let pe=se.path.slice(1);return pe?v(ee||j)&&!v(pe)?"./"+pe+Te:pe+Te:Te||"."}case 5:return se.path+Te;default:return se.scheme+"//"+se.user+se.host+se.port+se.path+Te}}return ne})});var Oi=G((dr,vo)=>{(function(e,t){if(typeof dr=="object"&&typeof vo<"u")t(vo,qi(),cr()),vo.exports=n(vo);else if(typeof define=="function"&&define.amd)define(["module","@jridgewell/resolve-uri","@jridgewell/sourcemap-codec"],function(o){t.apply(this,arguments),o.exports=n(o)});else{let o={exports:{}};t(o,e.resolveURI,e.sourcemapCodec),e=typeof globalThis<"u"?globalThis:e||self,e.traceMapping=n(o)}function n(o){return"default"in o.exports?o.exports.default:o.exports}})(dr,function(e,t,n){"use strict";var o=Object.create,s=Object.defineProperty,r=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,v=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty,A=(f,I)=>function(){return I||(0,f[u(f)[0]])((I={exports:{}}).exports,I),I.exports},K=(f,I)=>{for(var b in I)s(f,b,{get:I[b],enumerable:!0})},X=(f,I,b,q)=>{if(I&&typeof I=="object"||typeof I=="function")for(let Z of u(I))!R.call(f,Z)&&Z!==b&&s(f,Z,{get:()=>I[Z],enumerable:!(q=r(I,Z))||q.enumerable});return f},N=(f,I,b)=>(b=f!=null?o(v(f)):{},X(I||!f||!f.__esModule?s(b,"default",{value:f,enumerable:!0}):b,f)),$=f=>X(s({},"__esModule",{value:!0}),f),V=A({"umd:@jridgewell/sourcemap-codec"(f,I){I.exports=n}}),ne=A({"umd:@jridgewell/resolve-uri"(f,I){I.exports=t}}),j={};K(j,{AnyMap:()=>Me,FlattenMap:()=>Me,GREATEST_LOWER_BOUND:()=>Tt,LEAST_UPPER_BOUND:()=>ze,TraceMap:()=>kt,allGeneratedPositionsFor:()=>ce,decodedMap:()=>Zt,decodedMappings:()=>E,eachMapping:()=>we,encodedMap:()=>an,encodedMappings:()=>L,generatedPositionFor:()=>ie,isIgnored:()=>Tn,originalPositionFor:()=>J,presortedDecodedMap:()=>Qt,sourceContentFor:()=>mt,traceSegment:()=>B}),e.exports=$(j);var ee=N(V()),se=N(ne());function Pe(f){if(!f)return"";let I=f.lastIndexOf("/");return f.slice(0,I+1)}function Te(f,I){let b=Pe(f),q=I?I+"/":"";return Z=>(0,se.default)(q+(Z||""),b)}var pe=0,Je=1,rt=2,Ge=3,lt=4,bt=1,wt=2;function St(f,I){let b=Et(f,0);if(b===f.length)return f;I||(f=f.slice());for(let q=b;q[]);for(let q=0;q>1),z=f[Z][pe]-I;if(z===0)return D=!0,Z;z<0?b=Z+1:q=Z-1}return D=!1,b-1}function F(f,I,b){for(let q=b+1;q=0&&f[q][pe]===I;b=q--);return b}function ue(){return{lastKey:-1,lastNeedle:-1,lastIndex:-1}}function Se(f,I,b,q){let{lastKey:Z,lastNeedle:z,lastIndex:he}=b,Oe=0,de=f.length-1;if(q===Z){if(I===z)return D=he!==-1&&f[he][pe]===I,he;I>=z?Oe=he===-1?0:he:de=he}return b.lastKey=q,b.lastNeedle=I,b.lastIndex=g(f,I,Oe,de)}function me(f){return typeof f=="string"?JSON.parse(f):f}var Me=function(f,I){let b=me(f);if(!("sections"in b))return new kt(b,I);let q=[],Z=[],z=[],he=[],Oe=[];Ne(b,I,q,Z,z,he,Oe,0,0,1/0,1/0);let de={version:3,file:b.file,names:he,sources:Z,sourcesContent:z,mappings:q,ignoreList:Oe};return Qt(de)};function Ne(f,I,b,q,Z,z,he,Oe,de,Ye,et){let{sections:tt}=f;for(let ht=0;htYe)return;let Vn=We(b,Mn),fo=vt===0?de:0,Wn=Pt[vt];for(let Fn=0;Fn=et)return;if(tn.length===1){Vn.push([gn]);continue}let Xn=yt+tn[Je],Jn=tn[rt],Gn=tn[Ge];Vn.push(tn.length===4?[gn,Xn,Jn,Gn]:[gn,Xn,Jn,Gn,At+tn[lt]])}}}function Ke(f,I){for(let b=0;b=q.length)return null;let Z=q[I],z=en(Z,f._decodedMemo,I,b,Tt);return z===-1?null:Z[z]}function J(f,I){let{line:b,column:q,bias:Z}=I;if(b--,b<0)throw new Error(ve);if(q<0)throw new Error(Ue);let z=E(f);if(b>=z.length)return Ft(null,null,null,null);let he=z[b],Oe=en(he,f._decodedMemo,b,q,Z||Tt);if(Oe===-1)return Ft(null,null,null,null);let de=he[Oe];if(de.length===1)return Ft(null,null,null,null);let{names:Ye,resolvedSources:et}=f;return Ft(et[de[Je]],de[rt]+1,de[Ge],de.length===5?Ye[de[lt]]:null)}function ie(f,I){let{source:b,line:q,column:Z,bias:z}=I;return Hn(f,b,q,Z,z||Tt,!1)}function ce(f,I){let{source:b,line:q,column:Z,bias:z}=I;return Hn(f,b,q,Z,z||ze,!0)}function we(f,I){let b=E(f),{names:q,resolvedSources:Z}=f;for(let z=0;z{(function(e,t){if(typeof hr=="object"&&typeof xo<"u")t(xo,cr(),Oi()),xo.exports=n(xo);else if(typeof define=="function"&&define.amd)define(["module","@jridgewell/sourcemap-codec","@jridgewell/trace-mapping"],function(o){t.apply(this,arguments),o.exports=n(o)});else{let o={exports:{}};t(o,e.sourcemapCodec,e.traceMapping),e=typeof globalThis<"u"?globalThis:e||self,e.genMapping=n(o)}function n(o){return"default"in o.exports?o.exports.default:o.exports}})(hr,function(e,t,n){"use strict";var o=Object.create,s=Object.defineProperty,r=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,v=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty,A=(L,E)=>function(){return E||(0,L[u(L)[0]])((E={exports:{}}).exports,E),E.exports},K=(L,E)=>{for(var B in E)s(L,B,{get:E[B],enumerable:!0})},X=(L,E,B,J)=>{if(E&&typeof E=="object"||typeof E=="function")for(let ie of u(E))!R.call(L,ie)&&ie!==B&&s(L,ie,{get:()=>E[ie],enumerable:!(J=r(E,ie))||J.enumerable});return L},N=(L,E,B)=>(B=L!=null?o(v(L)):{},X(E||!L||!L.__esModule?s(B,"default",{value:L,enumerable:!0}):B,L)),$=L=>X(s({},"__esModule",{value:!0}),L),V=A({"umd:@jridgewell/sourcemap-codec"(L,E){E.exports=t}}),ne=A({"umd:@jridgewell/trace-mapping"(L,E){E.exports=n}}),j={};K(j,{GenMapping:()=>Lt,addMapping:()=>O,addSegment:()=>qt,allMappings:()=>Me,fromMap:()=>me,maybeAddMapping:()=>g,maybeAddSegment:()=>D,setIgnore:()=>te,setSourceContent:()=>F,toDecodedMap:()=>ue,toEncodedMap:()=>Se}),e.exports=$(j);var ee=class{constructor(){this._indexes={__proto__:null},this.array=[]}};function se(L){return L}function Pe(L,E){return L._indexes[E]}function Te(L,E){let B=Pe(L,E);if(B!==void 0)return B;let{array:J,_indexes:ie}=L,ce=J.push(E);return ie[E]=ce-1}function pe(L,E){let B=Pe(L,E);if(B===void 0)return;let{array:J,_indexes:ie}=L;for(let ce=B+1;ceNe(!0,L,E,B,J,ie,ce,we,nt),g=(L,E)=>Ot(!0,L,E);function F(L,E,B){let{_sources:J,_sourcesContent:ie}=L,ce=Te(J,E);ie[ce]=B}function te(L,E,B=!0){let{_sources:J,_sourcesContent:ie,_ignoreList:ce}=L,we=Te(J,E);we===ie.length&&(ie[we]=null),B?Te(ce,we):pe(ce,we)}function ue(L){let{_mappings:E,_sources:B,_sourcesContent:J,_names:ie,_ignoreList:ce}=L;return Ue(E),{version:3,file:L.file||void 0,names:ie.array,sourceRoot:L.sourceRoot||void 0,sources:B.array,sourcesContent:J,mappings:E,ignoreList:ce.array}}function Se(L){let E=ue(L);return Object.assign({},E,{mappings:(0,Je.encode)(E.mappings)})}function me(L){let E=new rt.TraceMap(L),B=new Lt({file:E.file,sourceRoot:E.sourceRoot});return ze(B._names,E.names),ze(B._sources,E.sources),B._sourcesContent=E.sourcesContent||E.sources.map(()=>null),B._mappings=(0,rt.decodedMappings)(E),E.ignoreList&&ze(B._ignoreList,E.ignoreList),B}function Me(L){let E=[],{_mappings:B,_sources:J,_names:ie}=L;for(let ce=0;ce=0;B=J--){let ie=L[J];if(E>=ie[Ge])break}return B}function ve(L,E,B){for(let J=L.length;J>E;J--)L[J]=L[J-1];L[E]=B}function Ue(L){let{length:E}=L,B=E;for(let J=B-1;J>=0&&!(L[J].length>0);B=J,J--);B{"use strict";Object.defineProperty(fr,"__esModule",{value:!0});var _o=Mi(),Fi=Bt();function Yp({code:e,mappings:t},n,o,s,r){let u=Qp(s,r),v=new _o.GenMapping({file:o.compiledFilename}),R=0,A=t[0];for(;A===void 0&&R{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});var Zp={require:` + import {createRequire as CREATE_REQUIRE_NAME} from "module"; + const require = CREATE_REQUIRE_NAME(import.meta.url); + `,interopRequireWildcard:` + function interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + return newObj; + } + } + `,interopRequireDefault:` + function interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + `,createNamedExportFrom:` + function createNamedExportFrom(obj, localName, importedName) { + Object.defineProperty(exports, localName, {enumerable: true, configurable: true, get: () => obj[importedName]}); + } + `,createStarExport:` + function createStarExport(obj) { + Object.keys(obj) + .filter((key) => key !== "default" && key !== "__esModule") + .forEach((key) => { + if (exports.hasOwnProperty(key)) { + return; + } + Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); + }); + } + `,nullishCoalesce:` + function nullishCoalesce(lhs, rhsFn) { + if (lhs != null) { + return lhs; + } else { + return rhsFn(); + } + } + `,asyncNullishCoalesce:` + async function asyncNullishCoalesce(lhs, rhsFn) { + if (lhs != null) { + return lhs; + } else { + return await rhsFn(); + } + } + `,optionalChain:` + function optionalChain(ops) { + let lastAccessLHS = undefined; + let value = ops[0]; + let i = 1; + while (i < ops.length) { + const op = ops[i]; + const fn = ops[i + 1]; + i += 2; + if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { + return undefined; + } + if (op === 'access' || op === 'optionalAccess') { + lastAccessLHS = value; + value = fn(value); + } else if (op === 'call' || op === 'optionalCall') { + value = fn((...args) => value.call(lastAccessLHS, ...args)); + lastAccessLHS = undefined; + } + } + return value; + } + `,asyncOptionalChain:` + async function asyncOptionalChain(ops) { + let lastAccessLHS = undefined; + let value = ops[0]; + let i = 1; + while (i < ops.length) { + const op = ops[i]; + const fn = ops[i + 1]; + i += 2; + if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { + return undefined; + } + if (op === 'access' || op === 'optionalAccess') { + lastAccessLHS = value; + value = await fn(value); + } else if (op === 'call' || op === 'optionalCall') { + value = await fn((...args) => value.call(lastAccessLHS, ...args)); + lastAccessLHS = undefined; + } + } + return value; + } + `,optionalChainDelete:` + function optionalChainDelete(ops) { + const result = OPTIONAL_CHAIN_NAME(ops); + return result == null ? true : result; + } + `,asyncOptionalChainDelete:` + async function asyncOptionalChainDelete(ops) { + const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops); + return result == null ? true : result; + } + `},Tr=class e{__init(){this.helperNames={}}__init2(){this.createRequireName=null}constructor(t){this.nameManager=t,e.prototype.__init.call(this),e.prototype.__init2.call(this)}getHelperName(t){let n=this.helperNames[t];return n||(n=this.nameManager.claimFreeName(`_${t}`),this.helperNames[t]=n,n)}emitHelpers(){let t="";this.helperNames.optionalChainDelete&&this.getHelperName("optionalChain"),this.helperNames.asyncOptionalChainDelete&&this.getHelperName("asyncOptionalChain");for(let[n,o]of Object.entries(Zp)){let s=this.helperNames[n],r=o;n==="optionalChainDelete"?r=r.replace("OPTIONAL_CHAIN_NAME",this.helperNames.optionalChain):n==="asyncOptionalChainDelete"?r=r.replace("ASYNC_OPTIONAL_CHAIN_NAME",this.helperNames.asyncOptionalChain):n==="require"&&(this.createRequireName===null&&(this.createRequireName=this.nameManager.claimFreeName("_createRequire")),r=r.replace(/CREATE_REQUIRE_NAME/g,this.createRequireName)),s&&(t+=" ",t+=r.replace(n,s).replace(/\s+/g," ").trim())}return t}};kr.HelperManager=Tr});var Ui=G(ts=>{"use strict";Object.defineProperty(ts,"__esModule",{value:!0});var mr=pt(),es=ye();function eu(e,t,n){$i(e,n)&&tu(e,t,n)}ts.default=eu;function $i(e,t){for(let n of e.tokens)if(n.type===es.TokenType.name&&!n.isType&&mr.isNonTopLevelDeclaration.call(void 0,n)&&t.has(e.identifierNameForToken(n)))return!0;return!1}ts.hasShadowedGlobals=$i;function tu(e,t,n){let o=[],s=t.length-1;for(let r=e.tokens.length-1;;r--){for(;o.length>0&&o[o.length-1].startTokenIndex===r+1;)o.pop();for(;s>=0&&t[s].endTokenIndex===r+1;)o.push(t[s]),s--;if(r<0)break;let u=e.tokens[r],v=e.identifierNameForToken(u);if(o.length>1&&!u.isType&&u.type===es.TokenType.name&&n.has(v)){if(mr.isBlockScopedDeclaration.call(void 0,u))Ki(o[o.length-1],e,v);else if(mr.isFunctionScopedDeclaration.call(void 0,u)){let R=o.length-1;for(;R>0&&!o[R].isFunctionScope;)R--;if(R<0)throw new Error("Did not find parent function scope.");Ki(o[R],e,v)}}}if(o.length>0)throw new Error("Expected empty scope stack after processing file.")}function Ki(e,t,n){for(let o=e.startTokenIndex;o{"use strict";Object.defineProperty(yr,"__esModule",{value:!0});var nu=ye();function ou(e,t){let n=[];for(let o of t)o.type===nu.TokenType.name&&n.push(e.slice(o.start,o.end));return n}yr.default=ou});var Vi=G(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});function su(e){return e&&e.__esModule?e:{default:e}}var ru=Hi(),au=su(ru),vr=class e{__init(){this.usedNames=new Set}constructor(t,n){e.prototype.__init.call(this),this.usedNames=new Set(au.default.call(void 0,t,n))}claimFreeName(t){let n=this.findFreeName(t);return this.usedNames.add(n),n}findFreeName(t){if(!this.usedNames.has(t))return t;let n=2;for(;this.usedNames.has(t+String(n));)n++;return t+String(n)}};xr.default=vr});var ns=G(pn=>{"use strict";var iu=pn&&pn.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,s){o.__proto__=s}||function(o,s){for(var r in s)s.hasOwnProperty(r)&&(o[r]=s[r])},e(t,n)};return function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)}}();Object.defineProperty(pn,"__esModule",{value:!0});pn.DetailContext=pn.NoopContext=pn.VError=void 0;var Wi=function(e){iu(t,e);function t(n,o){var s=e.call(this,o)||this;return s.path=n,Object.setPrototypeOf(s,t.prototype),s}return t}(Error);pn.VError=Wi;var lu=function(){function e(){}return e.prototype.fail=function(t,n,o){return!1},e.prototype.unionResolver=function(){return this},e.prototype.createContext=function(){return this},e.prototype.resolveUnion=function(t){},e}();pn.NoopContext=lu;var Xi=function(){function e(){this._propNames=[""],this._messages=[null],this._score=0}return e.prototype.fail=function(t,n,o){return this._propNames.push(t),this._messages.push(n),this._score+=o,!1},e.prototype.unionResolver=function(){return new cu},e.prototype.resolveUnion=function(t){for(var n,o,s=t,r=null,u=0,v=s.contexts;u=r._score)&&(r=R)}r&&r._score>0&&((n=this._propNames).push.apply(n,r._propNames),(o=this._messages).push.apply(o,r._messages))},e.prototype.getError=function(t){for(var n=[],o=this._propNames.length-1;o>=0;o--){var s=this._propNames[o];t+=typeof s=="number"?"["+s+"]":s?"."+s:"";var r=this._messages[o];r&&n.push(t+" "+r)}return new Wi(t,n.join("; "))},e.prototype.getErrorDetail=function(t){for(var n=[],o=this._propNames.length-1;o>=0;o--){var s=this._propNames[o];t+=typeof s=="number"?"["+s+"]":s?"."+s:"";var r=this._messages[o];r&&n.push({path:t,message:r})}for(var u=null,o=n.length-1;o>=0;o--)u&&(n[o].nested=[u]),u=n[o];return u},e}();pn.DetailContext=Xi;var cu=function(){function e(){this.contexts=[]}return e.prototype.createContext=function(){var t=new Xi;return this.contexts.push(t),t},e}()});var Er=G(Y=>{"use strict";var Ht=Y&&Y.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,s){o.__proto__=s}||function(o,s){for(var r in s)s.hasOwnProperty(r)&&(o[r]=s[r])},e(t,n)};return function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)}}();Object.defineProperty(Y,"__esModule",{value:!0});Y.basicTypes=Y.BasicType=Y.TParamList=Y.TParam=Y.param=Y.TFunc=Y.func=Y.TProp=Y.TOptional=Y.opt=Y.TIface=Y.iface=Y.TEnumLiteral=Y.enumlit=Y.TEnumType=Y.enumtype=Y.TIntersection=Y.intersection=Y.TUnion=Y.union=Y.TTuple=Y.tuple=Y.TArray=Y.array=Y.TLiteral=Y.lit=Y.TName=Y.name=Y.TType=void 0;var zi=ns(),Rt=function(){function e(){}return e}();Y.TType=Rt;function Sn(e){return typeof e=="string"?Yi(e):e}function wr(e,t){var n=e[t];if(!n)throw new Error("Unknown type "+t);return n}function Yi(e){return new Ir(e)}Y.name=Yi;var Ir=function(e){Ht(t,e);function t(n){var o=e.call(this)||this;return o.name=n,o._failMsg="is not a "+n,o}return t.prototype.getChecker=function(n,o,s){var r=this,u=wr(n,this.name),v=u.getChecker(n,o,s);return u instanceof xt||u instanceof t?v:function(R,A){return v(R,A)?!0:A.fail(null,r._failMsg,0)}},t}(Rt);Y.TName=Ir;function pu(e){return new Cr(e)}Y.lit=pu;var Cr=function(e){Ht(t,e);function t(n){var o=e.call(this)||this;return o.value=n,o.name=JSON.stringify(n),o._failMsg="is not "+o.name,o}return t.prototype.getChecker=function(n,o){var s=this;return function(r,u){return r===s.value?!0:u.fail(null,s._failMsg,-1)}},t}(Rt);Y.TLiteral=Cr;function uu(e){return new Qi(Sn(e))}Y.array=uu;var Qi=function(e){Ht(t,e);function t(n){var o=e.call(this)||this;return o.ttype=n,o}return t.prototype.getChecker=function(n,o){var s=this.ttype.getChecker(n,o);return function(r,u){if(!Array.isArray(r))return u.fail(null,"is not an array",0);for(var v=0;v0&&s.push(r+" more"),o._failMsg="is none of "+s.join(", ")):o._failMsg="is none of "+r+" types",o}return t.prototype.getChecker=function(n,o){var s=this,r=this.ttypes.map(function(u){return u.getChecker(n,o)});return function(u,v){for(var R=v.unionResolver(),A=0;A{"use strict";var Cu=_e&&_e.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});function Eu(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var Au=Ar(),He=Eu(Au),Pu=He.union(He.lit("jsx"),He.lit("typescript"),He.lit("flow"),He.lit("imports"),He.lit("react-hot-loader"),He.lit("jest"));kn.Transform=Pu;var Ru=He.iface([],{compiledFilename:"string"});kn.SourceMapOptions=Ru;var Nu=He.iface([],{transforms:He.array("Transform"),disableESTransforms:He.opt("boolean"),jsxRuntime:He.opt(He.union(He.lit("classic"),He.lit("automatic"),He.lit("preserve"))),production:He.opt("boolean"),jsxImportSource:He.opt("string"),jsxPragma:He.opt("string"),jsxFragmentPragma:He.opt("string"),keepUnusedImports:He.opt("boolean"),preserveDynamicImport:He.opt("boolean"),injectCreateRequireForImportRequire:He.opt("boolean"),enableLegacyTypeScriptModuleInterop:He.opt("boolean"),enableLegacyBabel5ModuleInterop:He.opt("boolean"),sourceMapOptions:He.opt("SourceMapOptions"),filePath:He.opt("string")});kn.Options=Nu;var Du={Transform:kn.Transform,SourceMapOptions:kn.SourceMapOptions,Options:kn.Options};kn.default=Du});var c1=G(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});function Lu(e){return e&&e.__esModule?e:{default:e}}var qu=Ar(),Ou=l1(),Mu=Lu(Ou),{Options:Fu}=qu.createCheckers.call(void 0,Mu.default);function ju(e){Fu.strictCheck(e)}Pr.validateOptions=ju});var ss=G(un=>{"use strict";Object.defineProperty(un,"__esModule",{value:!0});var Bu=Co(),p1=eo(),_t=pt(),wo=dt(),Xt=ye(),ut=Kt(),Io=Kn(),Rr=Cn();function Ku(){_t.next.call(void 0),Io.parseMaybeAssign.call(void 0,!1)}un.parseSpread=Ku;function u1(e){_t.next.call(void 0),Dr(e)}un.parseRest=u1;function d1(e){Io.parseIdentifier.call(void 0),h1(e)}un.parseBindingIdentifier=d1;function $u(){Io.parseIdentifier.call(void 0),ut.state.tokens[ut.state.tokens.length-1].identifierRole=_t.IdentifierRole.ImportDeclaration}un.parseImportedIdentifier=$u;function h1(e){let t;ut.state.scopeDepth===0?t=_t.IdentifierRole.TopLevelDeclaration:e?t=_t.IdentifierRole.BlockScopedDeclaration:t=_t.IdentifierRole.FunctionScopedDeclaration,ut.state.tokens[ut.state.tokens.length-1].identifierRole=t}un.markPriorBindingIdentifier=h1;function Dr(e){switch(ut.state.type){case Xt.TokenType._this:{let t=_t.pushTypeContext.call(void 0,0);_t.next.call(void 0),_t.popTypeContext.call(void 0,t);return}case Xt.TokenType._yield:case Xt.TokenType.name:{ut.state.type=Xt.TokenType.name,d1(e);return}case Xt.TokenType.bracketL:{_t.next.call(void 0),f1(Xt.TokenType.bracketR,e,!0);return}case Xt.TokenType.braceL:Io.parseObj.call(void 0,!0,e);return;default:Rr.unexpected.call(void 0)}}un.parseBindingAtom=Dr;function f1(e,t,n=!1,o=!1,s=0){let r=!0,u=!1,v=ut.state.tokens.length;for(;!_t.eat.call(void 0,e)&&!ut.state.error;)if(r?r=!1:(Rr.expect.call(void 0,Xt.TokenType.comma),ut.state.tokens[ut.state.tokens.length-1].contextId=s,!u&&ut.state.tokens[v].isType&&(ut.state.tokens[ut.state.tokens.length-1].isType=!0,u=!0)),!(n&&_t.match.call(void 0,Xt.TokenType.comma))){if(_t.eat.call(void 0,e))break;if(_t.match.call(void 0,Xt.TokenType.ellipsis)){u1(t),T1(),_t.eat.call(void 0,Xt.TokenType.comma),Rr.expect.call(void 0,e);break}else Uu(o,t)}}un.parseBindingList=f1;function Uu(e,t){e&&p1.tsParseModifiers.call(void 0,[wo.ContextualKeyword._public,wo.ContextualKeyword._protected,wo.ContextualKeyword._private,wo.ContextualKeyword._readonly,wo.ContextualKeyword._override]),Nr(t),T1(),Nr(t,!0)}function T1(){ut.isFlowEnabled?Bu.flowParseAssignableListItemTypes.call(void 0):ut.isTypeScriptEnabled&&p1.tsParseAssignableListItemTypes.call(void 0)}function Nr(e,t=!1){if(t||Dr(e),!_t.eat.call(void 0,Xt.TokenType.eq))return;let n=ut.state.tokens.length-1;Io.parseMaybeAssign.call(void 0),ut.state.tokens[n].rhsEndIndex=ut.state.tokens.length}un.parseMaybeDefault=Nr});var eo=G(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});var i=pt(),W=dt(),a=ye(),d=Kt(),ke=Kn(),no=ss(),dn=Po(),S=Cn(),Hu=Hr();function qr(){return i.match.call(void 0,a.TokenType.name)}function Vu(){return i.match.call(void 0,a.TokenType.name)||!!(d.state.type&a.TokenType.IS_KEYWORD)||i.match.call(void 0,a.TokenType.string)||i.match.call(void 0,a.TokenType.num)||i.match.call(void 0,a.TokenType.bigint)||i.match.call(void 0,a.TokenType.decimal)}function x1(){let e=d.state.snapshot();return i.next.call(void 0),(i.match.call(void 0,a.TokenType.bracketL)||i.match.call(void 0,a.TokenType.braceL)||i.match.call(void 0,a.TokenType.star)||i.match.call(void 0,a.TokenType.ellipsis)||i.match.call(void 0,a.TokenType.hash)||Vu())&&!S.hasPrecedingLineBreak.call(void 0)?!0:(d.state.restoreFromSnapshot(e),!1)}function _1(e){for(;jr(e)!==null;);}Ee.tsParseModifiers=_1;function jr(e){if(!i.match.call(void 0,a.TokenType.name))return null;let t=d.state.contextualKeyword;if(e.indexOf(t)!==-1&&x1()){switch(t){case W.ContextualKeyword._readonly:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._readonly;break;case W.ContextualKeyword._abstract:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._abstract;break;case W.ContextualKeyword._static:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._static;break;case W.ContextualKeyword._public:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._public;break;case W.ContextualKeyword._private:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._private;break;case W.ContextualKeyword._protected:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._protected;break;case W.ContextualKeyword._override:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._override;break;case W.ContextualKeyword._declare:d.state.tokens[d.state.tokens.length-1].type=a.TokenType._declare;break;default:break}return t}return null}Ee.tsParseModifier=jr;function So(){for(ke.parseIdentifier.call(void 0);i.eat.call(void 0,a.TokenType.dot);)ke.parseIdentifier.call(void 0)}function Wu(){So(),!S.hasPrecedingLineBreak.call(void 0)&&i.match.call(void 0,a.TokenType.lessThan)&&so()}function Xu(){i.next.call(void 0),Ao()}function Ju(){i.next.call(void 0)}function Gu(){S.expect.call(void 0,a.TokenType._typeof),i.match.call(void 0,a.TokenType._import)?g1():So(),!S.hasPrecedingLineBreak.call(void 0)&&i.match.call(void 0,a.TokenType.lessThan)&&so()}function g1(){S.expect.call(void 0,a.TokenType._import),S.expect.call(void 0,a.TokenType.parenL),S.expect.call(void 0,a.TokenType.string),S.expect.call(void 0,a.TokenType.parenR),i.eat.call(void 0,a.TokenType.dot)&&So(),i.match.call(void 0,a.TokenType.lessThan)&&so()}function zu(){i.eat.call(void 0,a.TokenType._const);let e=i.eat.call(void 0,a.TokenType._in),t=S.eatContextual.call(void 0,W.ContextualKeyword._out);i.eat.call(void 0,a.TokenType._const),(e||t)&&!i.match.call(void 0,a.TokenType.name)?d.state.tokens[d.state.tokens.length-1].type=a.TokenType.name:ke.parseIdentifier.call(void 0),i.eat.call(void 0,a.TokenType._extends)&&Ze(),i.eat.call(void 0,a.TokenType.eq)&&Ze()}function oo(){i.match.call(void 0,a.TokenType.lessThan)&&as()}Ee.tsTryParseTypeParameters=oo;function as(){let e=i.pushTypeContext.call(void 0,0);for(i.match.call(void 0,a.TokenType.lessThan)||i.match.call(void 0,a.TokenType.typeParameterStart)?i.next.call(void 0):S.unexpected.call(void 0);!i.eat.call(void 0,a.TokenType.greaterThan)&&!d.state.error;)zu(),i.eat.call(void 0,a.TokenType.comma);i.popTypeContext.call(void 0,e)}function Br(e){let t=e===a.TokenType.arrow;oo(),S.expect.call(void 0,a.TokenType.parenL),d.state.scopeDepth++,Yu(!1),d.state.scopeDepth--,(t||i.match.call(void 0,e))&&bo(e)}function Yu(e){no.parseBindingList.call(void 0,a.TokenType.parenR,e)}function rs(){i.eat.call(void 0,a.TokenType.comma)||S.semicolon.call(void 0)}function k1(){Br(a.TokenType.colon),rs()}function Qu(){let e=d.state.snapshot();i.next.call(void 0);let t=i.eat.call(void 0,a.TokenType.name)&&i.match.call(void 0,a.TokenType.colon);return d.state.restoreFromSnapshot(e),t}function w1(){if(!(i.match.call(void 0,a.TokenType.bracketL)&&Qu()))return!1;let e=i.pushTypeContext.call(void 0,0);return S.expect.call(void 0,a.TokenType.bracketL),ke.parseIdentifier.call(void 0),Ao(),S.expect.call(void 0,a.TokenType.bracketR),Eo(),rs(),i.popTypeContext.call(void 0,e),!0}function m1(e){i.eat.call(void 0,a.TokenType.question),!e&&(i.match.call(void 0,a.TokenType.parenL)||i.match.call(void 0,a.TokenType.lessThan))?(Br(a.TokenType.colon),rs()):(Eo(),rs())}function Zu(){if(i.match.call(void 0,a.TokenType.parenL)||i.match.call(void 0,a.TokenType.lessThan)){k1();return}if(i.match.call(void 0,a.TokenType._new)){i.next.call(void 0),i.match.call(void 0,a.TokenType.parenL)||i.match.call(void 0,a.TokenType.lessThan)?k1():m1(!1);return}let e=!!jr([W.ContextualKeyword._readonly]);w1()||((S.isContextual.call(void 0,W.ContextualKeyword._get)||S.isContextual.call(void 0,W.ContextualKeyword._set))&&x1(),ke.parsePropertyName.call(void 0,-1),m1(e))}function ed(){I1()}function I1(){for(S.expect.call(void 0,a.TokenType.braceL);!i.eat.call(void 0,a.TokenType.braceR)&&!d.state.error;)Zu()}function td(){let e=d.state.snapshot(),t=nd();return d.state.restoreFromSnapshot(e),t}function nd(){return i.next.call(void 0),i.eat.call(void 0,a.TokenType.plus)||i.eat.call(void 0,a.TokenType.minus)?S.isContextual.call(void 0,W.ContextualKeyword._readonly):(S.isContextual.call(void 0,W.ContextualKeyword._readonly)&&i.next.call(void 0),!i.match.call(void 0,a.TokenType.bracketL)||(i.next.call(void 0),!qr())?!1:(i.next.call(void 0),i.match.call(void 0,a.TokenType._in)))}function od(){ke.parseIdentifier.call(void 0),S.expect.call(void 0,a.TokenType._in),Ze()}function sd(){S.expect.call(void 0,a.TokenType.braceL),i.match.call(void 0,a.TokenType.plus)||i.match.call(void 0,a.TokenType.minus)?(i.next.call(void 0),S.expectContextual.call(void 0,W.ContextualKeyword._readonly)):S.eatContextual.call(void 0,W.ContextualKeyword._readonly),S.expect.call(void 0,a.TokenType.bracketL),od(),S.eatContextual.call(void 0,W.ContextualKeyword._as)&&Ze(),S.expect.call(void 0,a.TokenType.bracketR),i.match.call(void 0,a.TokenType.plus)||i.match.call(void 0,a.TokenType.minus)?(i.next.call(void 0),S.expect.call(void 0,a.TokenType.question)):i.eat.call(void 0,a.TokenType.question),yd(),S.semicolon.call(void 0),S.expect.call(void 0,a.TokenType.braceR)}function rd(){for(S.expect.call(void 0,a.TokenType.bracketL);!i.eat.call(void 0,a.TokenType.bracketR)&&!d.state.error;)ad(),i.eat.call(void 0,a.TokenType.comma)}function ad(){i.eat.call(void 0,a.TokenType.ellipsis)?Ze():(Ze(),i.eat.call(void 0,a.TokenType.question)),i.eat.call(void 0,a.TokenType.colon)&&Ze()}function id(){S.expect.call(void 0,a.TokenType.parenL),Ze(),S.expect.call(void 0,a.TokenType.parenR)}function ld(){for(i.nextTemplateToken.call(void 0),i.nextTemplateToken.call(void 0);!i.match.call(void 0,a.TokenType.backQuote)&&!d.state.error;)S.expect.call(void 0,a.TokenType.dollarBraceL),Ze(),i.nextTemplateToken.call(void 0),i.nextTemplateToken.call(void 0);i.next.call(void 0)}var En;(function(e){e[e.TSFunctionType=0]="TSFunctionType";let n=1;e[e.TSConstructorType=n]="TSConstructorType";let o=n+1;e[e.TSAbstractConstructorType=o]="TSAbstractConstructorType"})(En||(En={}));function Lr(e){e===En.TSAbstractConstructorType&&S.expectContextual.call(void 0,W.ContextualKeyword._abstract),(e===En.TSConstructorType||e===En.TSAbstractConstructorType)&&S.expect.call(void 0,a.TokenType._new);let t=d.state.inDisallowConditionalTypesContext;d.state.inDisallowConditionalTypesContext=!1,Br(a.TokenType.arrow),d.state.inDisallowConditionalTypesContext=t}function cd(){switch(d.state.type){case a.TokenType.name:Wu();return;case a.TokenType._void:case a.TokenType._null:i.next.call(void 0);return;case a.TokenType.string:case a.TokenType.num:case a.TokenType.bigint:case a.TokenType.decimal:case a.TokenType._true:case a.TokenType._false:ke.parseLiteral.call(void 0);return;case a.TokenType.minus:i.next.call(void 0),ke.parseLiteral.call(void 0);return;case a.TokenType._this:{Ju(),S.isContextual.call(void 0,W.ContextualKeyword._is)&&!S.hasPrecedingLineBreak.call(void 0)&&Xu();return}case a.TokenType._typeof:Gu();return;case a.TokenType._import:g1();return;case a.TokenType.braceL:td()?sd():ed();return;case a.TokenType.bracketL:rd();return;case a.TokenType.parenL:id();return;case a.TokenType.backQuote:ld();return;default:if(d.state.type&a.TokenType.IS_KEYWORD){i.next.call(void 0),d.state.tokens[d.state.tokens.length-1].type=a.TokenType.name;return}break}S.unexpected.call(void 0)}function pd(){for(cd();!S.hasPrecedingLineBreak.call(void 0)&&i.eat.call(void 0,a.TokenType.bracketL);)i.eat.call(void 0,a.TokenType.bracketR)||(Ze(),S.expect.call(void 0,a.TokenType.bracketR))}function ud(){if(S.expectContextual.call(void 0,W.ContextualKeyword._infer),ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType._extends)){let e=d.state.snapshot();S.expect.call(void 0,a.TokenType._extends);let t=d.state.inDisallowConditionalTypesContext;d.state.inDisallowConditionalTypesContext=!0,Ze(),d.state.inDisallowConditionalTypesContext=t,(d.state.error||!d.state.inDisallowConditionalTypesContext&&i.match.call(void 0,a.TokenType.question))&&d.state.restoreFromSnapshot(e)}}function Or(){if(S.isContextual.call(void 0,W.ContextualKeyword._keyof)||S.isContextual.call(void 0,W.ContextualKeyword._unique)||S.isContextual.call(void 0,W.ContextualKeyword._readonly))i.next.call(void 0),Or();else if(S.isContextual.call(void 0,W.ContextualKeyword._infer))ud();else{let e=d.state.inDisallowConditionalTypesContext;d.state.inDisallowConditionalTypesContext=!1,pd(),d.state.inDisallowConditionalTypesContext=e}}function y1(){if(i.eat.call(void 0,a.TokenType.bitwiseAND),Or(),i.match.call(void 0,a.TokenType.bitwiseAND))for(;i.eat.call(void 0,a.TokenType.bitwiseAND);)Or()}function dd(){if(i.eat.call(void 0,a.TokenType.bitwiseOR),y1(),i.match.call(void 0,a.TokenType.bitwiseOR))for(;i.eat.call(void 0,a.TokenType.bitwiseOR);)y1()}function hd(){return i.match.call(void 0,a.TokenType.lessThan)?!0:i.match.call(void 0,a.TokenType.parenL)&&Td()}function fd(){if(i.match.call(void 0,a.TokenType.name)||i.match.call(void 0,a.TokenType._this))return i.next.call(void 0),!0;if(i.match.call(void 0,a.TokenType.braceL)||i.match.call(void 0,a.TokenType.bracketL)){let e=1;for(i.next.call(void 0);e>0&&!d.state.error;)i.match.call(void 0,a.TokenType.braceL)||i.match.call(void 0,a.TokenType.bracketL)?e++:(i.match.call(void 0,a.TokenType.braceR)||i.match.call(void 0,a.TokenType.bracketR))&&e--,i.next.call(void 0);return!0}return!1}function Td(){let e=d.state.snapshot(),t=kd();return d.state.restoreFromSnapshot(e),t}function kd(){return i.next.call(void 0),!!(i.match.call(void 0,a.TokenType.parenR)||i.match.call(void 0,a.TokenType.ellipsis)||fd()&&(i.match.call(void 0,a.TokenType.colon)||i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.question)||i.match.call(void 0,a.TokenType.eq)||i.match.call(void 0,a.TokenType.parenR)&&(i.next.call(void 0),i.match.call(void 0,a.TokenType.arrow))))}function bo(e){let t=i.pushTypeContext.call(void 0,0);S.expect.call(void 0,e),vd()||Ze(),i.popTypeContext.call(void 0,t)}function md(){i.match.call(void 0,a.TokenType.colon)&&bo(a.TokenType.colon)}function Eo(){i.match.call(void 0,a.TokenType.colon)&&Ao()}Ee.tsTryParseTypeAnnotation=Eo;function yd(){i.eat.call(void 0,a.TokenType.colon)&&Ze()}function vd(){let e=d.state.snapshot();return S.isContextual.call(void 0,W.ContextualKeyword._asserts)?(i.next.call(void 0),S.eatContextual.call(void 0,W.ContextualKeyword._is)?(Ze(),!0):qr()||i.match.call(void 0,a.TokenType._this)?(i.next.call(void 0),S.eatContextual.call(void 0,W.ContextualKeyword._is)&&Ze(),!0):(d.state.restoreFromSnapshot(e),!1)):qr()||i.match.call(void 0,a.TokenType._this)?(i.next.call(void 0),S.isContextual.call(void 0,W.ContextualKeyword._is)&&!S.hasPrecedingLineBreak.call(void 0)?(i.next.call(void 0),Ze(),!0):(d.state.restoreFromSnapshot(e),!1)):!1}function Ao(){let e=i.pushTypeContext.call(void 0,0);S.expect.call(void 0,a.TokenType.colon),Ze(),i.popTypeContext.call(void 0,e)}Ee.tsParseTypeAnnotation=Ao;function Ze(){if(Mr(),d.state.inDisallowConditionalTypesContext||S.hasPrecedingLineBreak.call(void 0)||!i.eat.call(void 0,a.TokenType._extends))return;let e=d.state.inDisallowConditionalTypesContext;d.state.inDisallowConditionalTypesContext=!0,Mr(),d.state.inDisallowConditionalTypesContext=e,S.expect.call(void 0,a.TokenType.question),Ze(),S.expect.call(void 0,a.TokenType.colon),Ze()}Ee.tsParseType=Ze;function xd(){return S.isContextual.call(void 0,W.ContextualKeyword._abstract)&&i.lookaheadType.call(void 0)===a.TokenType._new}function Mr(){if(hd()){Lr(En.TSFunctionType);return}if(i.match.call(void 0,a.TokenType._new)){Lr(En.TSConstructorType);return}else if(xd()){Lr(En.TSAbstractConstructorType);return}dd()}Ee.tsParseNonConditionalType=Mr;function _d(){let e=i.pushTypeContext.call(void 0,1);Ze(),S.expect.call(void 0,a.TokenType.greaterThan),i.popTypeContext.call(void 0,e),ke.parseMaybeUnary.call(void 0)}Ee.tsParseTypeAssertion=_d;function gd(){if(i.eat.call(void 0,a.TokenType.jsxTagStart)){d.state.tokens[d.state.tokens.length-1].type=a.TokenType.typeParameterStart;let e=i.pushTypeContext.call(void 0,1);for(;!i.match.call(void 0,a.TokenType.greaterThan)&&!d.state.error;)Ze(),i.eat.call(void 0,a.TokenType.comma);Hu.nextJSXTagToken.call(void 0),i.popTypeContext.call(void 0,e)}}Ee.tsTryParseJSXTypeArgument=gd;function C1(){for(;!i.match.call(void 0,a.TokenType.braceL)&&!d.state.error;)wd(),i.eat.call(void 0,a.TokenType.comma)}function wd(){So(),i.match.call(void 0,a.TokenType.lessThan)&&so()}function Id(){no.parseBindingIdentifier.call(void 0,!1),oo(),i.eat.call(void 0,a.TokenType._extends)&&C1(),I1()}function Cd(){no.parseBindingIdentifier.call(void 0,!1),oo(),S.expect.call(void 0,a.TokenType.eq),Ze(),S.semicolon.call(void 0)}function bd(){if(i.match.call(void 0,a.TokenType.string)?ke.parseLiteral.call(void 0):ke.parseIdentifier.call(void 0),i.eat.call(void 0,a.TokenType.eq)){let e=d.state.tokens.length-1;ke.parseMaybeAssign.call(void 0),d.state.tokens[e].rhsEndIndex=d.state.tokens.length}}function Kr(){for(no.parseBindingIdentifier.call(void 0,!1),S.expect.call(void 0,a.TokenType.braceL);!i.eat.call(void 0,a.TokenType.braceR)&&!d.state.error;)bd(),i.eat.call(void 0,a.TokenType.comma)}function $r(){S.expect.call(void 0,a.TokenType.braceL),dn.parseBlockBody.call(void 0,a.TokenType.braceR)}function Fr(){no.parseBindingIdentifier.call(void 0,!1),i.eat.call(void 0,a.TokenType.dot)?Fr():$r()}function b1(){S.isContextual.call(void 0,W.ContextualKeyword._global)?ke.parseIdentifier.call(void 0):i.match.call(void 0,a.TokenType.string)?ke.parseExprAtom.call(void 0):S.unexpected.call(void 0),i.match.call(void 0,a.TokenType.braceL)?$r():S.semicolon.call(void 0)}function S1(){no.parseImportedIdentifier.call(void 0),S.expect.call(void 0,a.TokenType.eq),Ed(),S.semicolon.call(void 0)}Ee.tsParseImportEqualsDeclaration=S1;function Sd(){return S.isContextual.call(void 0,W.ContextualKeyword._require)&&i.lookaheadType.call(void 0)===a.TokenType.parenL}function Ed(){Sd()?Ad():So()}function Ad(){S.expectContextual.call(void 0,W.ContextualKeyword._require),S.expect.call(void 0,a.TokenType.parenL),i.match.call(void 0,a.TokenType.string)||S.unexpected.call(void 0),ke.parseLiteral.call(void 0),S.expect.call(void 0,a.TokenType.parenR)}function Pd(){if(S.isLineTerminator.call(void 0))return!1;switch(d.state.type){case a.TokenType._function:{let e=i.pushTypeContext.call(void 0,1);i.next.call(void 0);let t=d.state.start;return dn.parseFunction.call(void 0,t,!0),i.popTypeContext.call(void 0,e),!0}case a.TokenType._class:{let e=i.pushTypeContext.call(void 0,1);return dn.parseClass.call(void 0,!0,!1),i.popTypeContext.call(void 0,e),!0}case a.TokenType._const:if(i.match.call(void 0,a.TokenType._const)&&S.isLookaheadContextual.call(void 0,W.ContextualKeyword._enum)){let e=i.pushTypeContext.call(void 0,1);return S.expect.call(void 0,a.TokenType._const),S.expectContextual.call(void 0,W.ContextualKeyword._enum),d.state.tokens[d.state.tokens.length-1].type=a.TokenType._enum,Kr(),i.popTypeContext.call(void 0,e),!0}case a.TokenType._var:case a.TokenType._let:{let e=i.pushTypeContext.call(void 0,1);return dn.parseVarStatement.call(void 0,d.state.type!==a.TokenType._var),i.popTypeContext.call(void 0,e),!0}case a.TokenType.name:{let e=i.pushTypeContext.call(void 0,1),t=d.state.contextualKeyword,n=!1;return t===W.ContextualKeyword._global?(b1(),n=!0):n=is(t,!0),i.popTypeContext.call(void 0,e),n}default:return!1}}function v1(){return is(d.state.contextualKeyword,!0)}function Rd(e){switch(e){case W.ContextualKeyword._declare:{let t=d.state.tokens.length-1;if(Pd())return d.state.tokens[t].type=a.TokenType._declare,!0;break}case W.ContextualKeyword._global:if(i.match.call(void 0,a.TokenType.braceL))return $r(),!0;break;default:return is(e,!1)}return!1}function is(e,t){switch(e){case W.ContextualKeyword._abstract:if(to(t)&&i.match.call(void 0,a.TokenType._class))return d.state.tokens[d.state.tokens.length-1].type=a.TokenType._abstract,dn.parseClass.call(void 0,!0,!1),!0;break;case W.ContextualKeyword._enum:if(to(t)&&i.match.call(void 0,a.TokenType.name))return d.state.tokens[d.state.tokens.length-1].type=a.TokenType._enum,Kr(),!0;break;case W.ContextualKeyword._interface:if(to(t)&&i.match.call(void 0,a.TokenType.name)){let n=i.pushTypeContext.call(void 0,t?2:1);return Id(),i.popTypeContext.call(void 0,n),!0}break;case W.ContextualKeyword._module:if(to(t)){if(i.match.call(void 0,a.TokenType.string)){let n=i.pushTypeContext.call(void 0,t?2:1);return b1(),i.popTypeContext.call(void 0,n),!0}else if(i.match.call(void 0,a.TokenType.name)){let n=i.pushTypeContext.call(void 0,t?2:1);return Fr(),i.popTypeContext.call(void 0,n),!0}}break;case W.ContextualKeyword._namespace:if(to(t)&&i.match.call(void 0,a.TokenType.name)){let n=i.pushTypeContext.call(void 0,t?2:1);return Fr(),i.popTypeContext.call(void 0,n),!0}break;case W.ContextualKeyword._type:if(to(t)&&i.match.call(void 0,a.TokenType.name)){let n=i.pushTypeContext.call(void 0,t?2:1);return Cd(),i.popTypeContext.call(void 0,n),!0}break;default:break}return!1}function to(e){return e?(i.next.call(void 0),!0):!S.isLineTerminator.call(void 0)}function Nd(){let e=d.state.snapshot();return as(),dn.parseFunctionParams.call(void 0),md(),S.expect.call(void 0,a.TokenType.arrow),d.state.error?(d.state.restoreFromSnapshot(e),!1):(ke.parseFunctionBody.call(void 0,!0),!0)}function Ur(){d.state.type===a.TokenType.bitShiftL&&(d.state.pos-=1,i.finishToken.call(void 0,a.TokenType.lessThan)),so()}function so(){let e=i.pushTypeContext.call(void 0,0);for(S.expect.call(void 0,a.TokenType.lessThan);!i.match.call(void 0,a.TokenType.greaterThan)&&!d.state.error;)Ze(),i.eat.call(void 0,a.TokenType.comma);e?(S.expect.call(void 0,a.TokenType.greaterThan),i.popTypeContext.call(void 0,e)):(i.popTypeContext.call(void 0,e),i.rescan_gt.call(void 0),S.expect.call(void 0,a.TokenType.greaterThan),d.state.tokens[d.state.tokens.length-1].isType=!0)}function Dd(){if(i.match.call(void 0,a.TokenType.name))switch(d.state.contextualKeyword){case W.ContextualKeyword._abstract:case W.ContextualKeyword._declare:case W.ContextualKeyword._enum:case W.ContextualKeyword._interface:case W.ContextualKeyword._module:case W.ContextualKeyword._namespace:case W.ContextualKeyword._type:return!0;default:break}return!1}Ee.tsIsDeclarationStart=Dd;function Ld(e,t){if(i.match.call(void 0,a.TokenType.colon)&&bo(a.TokenType.colon),!i.match.call(void 0,a.TokenType.braceL)&&S.isLineTerminator.call(void 0)){let n=d.state.tokens.length-1;for(;n>=0&&(d.state.tokens[n].start>=e||d.state.tokens[n].type===a.TokenType._default||d.state.tokens[n].type===a.TokenType._export);)d.state.tokens[n].isType=!0,n--;return}ke.parseFunctionBody.call(void 0,!1,t)}Ee.tsParseFunctionBodyAndFinish=Ld;function qd(e,t,n){if(!S.hasPrecedingLineBreak.call(void 0)&&i.eat.call(void 0,a.TokenType.bang)){d.state.tokens[d.state.tokens.length-1].type=a.TokenType.nonNullAssertion;return}if(i.match.call(void 0,a.TokenType.lessThan)||i.match.call(void 0,a.TokenType.bitShiftL)){let o=d.state.snapshot();if(!t&&ke.atPossibleAsync.call(void 0)&&Nd())return;if(Ur(),!t&&i.eat.call(void 0,a.TokenType.parenL)?(d.state.tokens[d.state.tokens.length-1].subscriptStartIndex=e,ke.parseCallExpressionArguments.call(void 0)):i.match.call(void 0,a.TokenType.backQuote)?ke.parseTemplate.call(void 0):(d.state.type===a.TokenType.greaterThan||d.state.type!==a.TokenType.parenL&&d.state.type&a.TokenType.IS_EXPRESSION_START&&!S.hasPrecedingLineBreak.call(void 0))&&S.unexpected.call(void 0),d.state.error)d.state.restoreFromSnapshot(o);else return}else!t&&i.match.call(void 0,a.TokenType.questionDot)&&i.lookaheadType.call(void 0)===a.TokenType.lessThan&&(i.next.call(void 0),d.state.tokens[e].isOptionalChainStart=!0,d.state.tokens[d.state.tokens.length-1].subscriptStartIndex=e,so(),S.expect.call(void 0,a.TokenType.parenL),ke.parseCallExpressionArguments.call(void 0));ke.baseParseSubscript.call(void 0,e,t,n)}Ee.tsParseSubscript=qd;function Od(){if(i.eat.call(void 0,a.TokenType._import))return S.isContextual.call(void 0,W.ContextualKeyword._type)&&i.lookaheadType.call(void 0)!==a.TokenType.eq&&S.expectContextual.call(void 0,W.ContextualKeyword._type),S1(),!0;if(i.eat.call(void 0,a.TokenType.eq))return ke.parseExpression.call(void 0),S.semicolon.call(void 0),!0;if(S.eatContextual.call(void 0,W.ContextualKeyword._as))return S.expectContextual.call(void 0,W.ContextualKeyword._namespace),ke.parseIdentifier.call(void 0),S.semicolon.call(void 0),!0;if(S.isContextual.call(void 0,W.ContextualKeyword._type)){let e=i.lookaheadType.call(void 0);(e===a.TokenType.braceL||e===a.TokenType.star)&&i.next.call(void 0)}return!1}Ee.tsTryParseExport=Od;function Md(){if(ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.braceR)){d.state.tokens[d.state.tokens.length-1].identifierRole=i.IdentifierRole.ImportDeclaration;return}if(ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.braceR)){d.state.tokens[d.state.tokens.length-1].identifierRole=i.IdentifierRole.ImportDeclaration,d.state.tokens[d.state.tokens.length-2].isType=!0,d.state.tokens[d.state.tokens.length-1].isType=!0;return}if(ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.braceR)){d.state.tokens[d.state.tokens.length-3].identifierRole=i.IdentifierRole.ImportAccess,d.state.tokens[d.state.tokens.length-1].identifierRole=i.IdentifierRole.ImportDeclaration;return}ke.parseIdentifier.call(void 0),d.state.tokens[d.state.tokens.length-3].identifierRole=i.IdentifierRole.ImportAccess,d.state.tokens[d.state.tokens.length-1].identifierRole=i.IdentifierRole.ImportDeclaration,d.state.tokens[d.state.tokens.length-4].isType=!0,d.state.tokens[d.state.tokens.length-3].isType=!0,d.state.tokens[d.state.tokens.length-2].isType=!0,d.state.tokens[d.state.tokens.length-1].isType=!0}Ee.tsParseImportSpecifier=Md;function Fd(){if(ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.braceR)){d.state.tokens[d.state.tokens.length-1].identifierRole=i.IdentifierRole.ExportAccess;return}if(ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.braceR)){d.state.tokens[d.state.tokens.length-1].identifierRole=i.IdentifierRole.ExportAccess,d.state.tokens[d.state.tokens.length-2].isType=!0,d.state.tokens[d.state.tokens.length-1].isType=!0;return}if(ke.parseIdentifier.call(void 0),i.match.call(void 0,a.TokenType.comma)||i.match.call(void 0,a.TokenType.braceR)){d.state.tokens[d.state.tokens.length-3].identifierRole=i.IdentifierRole.ExportAccess;return}ke.parseIdentifier.call(void 0),d.state.tokens[d.state.tokens.length-3].identifierRole=i.IdentifierRole.ExportAccess,d.state.tokens[d.state.tokens.length-4].isType=!0,d.state.tokens[d.state.tokens.length-3].isType=!0,d.state.tokens[d.state.tokens.length-2].isType=!0,d.state.tokens[d.state.tokens.length-1].isType=!0}Ee.tsParseExportSpecifier=Fd;function jd(){if(S.isContextual.call(void 0,W.ContextualKeyword._abstract)&&i.lookaheadType.call(void 0)===a.TokenType._class)return d.state.type=a.TokenType._abstract,i.next.call(void 0),dn.parseClass.call(void 0,!0,!0),!0;if(S.isContextual.call(void 0,W.ContextualKeyword._interface)){let e=i.pushTypeContext.call(void 0,2);return is(W.ContextualKeyword._interface,!0),i.popTypeContext.call(void 0,e),!0}return!1}Ee.tsTryParseExportDefaultExpression=jd;function Bd(){if(d.state.type===a.TokenType._const){let e=i.lookaheadTypeAndKeyword.call(void 0);if(e.type===a.TokenType.name&&e.contextualKeyword===W.ContextualKeyword._enum)return S.expect.call(void 0,a.TokenType._const),S.expectContextual.call(void 0,W.ContextualKeyword._enum),d.state.tokens[d.state.tokens.length-1].type=a.TokenType._enum,Kr(),!0}return!1}Ee.tsTryParseStatementContent=Bd;function Kd(e){let t=d.state.tokens.length;_1([W.ContextualKeyword._abstract,W.ContextualKeyword._readonly,W.ContextualKeyword._declare,W.ContextualKeyword._static,W.ContextualKeyword._override]);let n=d.state.tokens.length;if(w1()){let s=e?t-1:t;for(let r=s;r{"use strict";Object.defineProperty(cs,"__esModule",{value:!0});var ge=pt(),Re=ye(),oe=Kt(),ls=Kn(),An=Cn(),ot=Bt(),P1=zn(),Zd=eo();function eh(){let e=!1,t=!1;for(;;){if(oe.state.pos>=oe.input.length){An.unexpected.call(void 0,"Unterminated JSX contents");return}let n=oe.input.charCodeAt(oe.state.pos);if(n===ot.charCodes.lessThan||n===ot.charCodes.leftCurlyBrace){if(oe.state.pos===oe.state.start){if(n===ot.charCodes.lessThan){oe.state.pos++,ge.finishToken.call(void 0,Re.TokenType.jsxTagStart);return}ge.getTokenFromCode.call(void 0,n);return}e&&!t?ge.finishToken.call(void 0,Re.TokenType.jsxEmptyText):ge.finishToken.call(void 0,Re.TokenType.jsxText);return}n===ot.charCodes.lineFeed?e=!0:n!==ot.charCodes.space&&n!==ot.charCodes.carriageReturn&&n!==ot.charCodes.tab&&(t=!0),oe.state.pos++}}function th(e){for(oe.state.pos++;;){if(oe.state.pos>=oe.input.length){An.unexpected.call(void 0,"Unterminated string constant");return}if(oe.input.charCodeAt(oe.state.pos)===e){oe.state.pos++;break}oe.state.pos++}ge.finishToken.call(void 0,Re.TokenType.string)}function nh(){let e;do{if(oe.state.pos>oe.input.length){An.unexpected.call(void 0,"Unexpectedly reached the end of input.");return}e=oe.input.charCodeAt(++oe.state.pos)}while(P1.IS_IDENTIFIER_CHAR[e]||e===ot.charCodes.dash);ge.finishToken.call(void 0,Re.TokenType.jsxName)}function Vr(){Jt()}function R1(e){if(Vr(),!ge.eat.call(void 0,Re.TokenType.colon)){oe.state.tokens[oe.state.tokens.length-1].identifierRole=e;return}Vr()}function N1(){let e=oe.state.tokens.length;R1(ge.IdentifierRole.Access);let t=!1;for(;ge.match.call(void 0,Re.TokenType.dot);)t=!0,Jt(),Vr();if(!t){let n=oe.state.tokens[e],o=oe.input.charCodeAt(n.start);o>=ot.charCodes.lowercaseA&&o<=ot.charCodes.lowercaseZ&&(n.identifierRole=null)}}function oh(){switch(oe.state.type){case Re.TokenType.braceL:ge.next.call(void 0),ls.parseExpression.call(void 0),Jt();return;case Re.TokenType.jsxTagStart:L1(),Jt();return;case Re.TokenType.string:Jt();return;default:An.unexpected.call(void 0,"JSX value should be either an expression or a quoted JSX text")}}function sh(){An.expect.call(void 0,Re.TokenType.ellipsis),ls.parseExpression.call(void 0)}function rh(e){if(ge.match.call(void 0,Re.TokenType.jsxTagEnd))return!1;N1(),oe.isTypeScriptEnabled&&Zd.tsTryParseJSXTypeArgument.call(void 0);let t=!1;for(;!ge.match.call(void 0,Re.TokenType.slash)&&!ge.match.call(void 0,Re.TokenType.jsxTagEnd)&&!oe.state.error;){if(ge.eat.call(void 0,Re.TokenType.braceL)){t=!0,An.expect.call(void 0,Re.TokenType.ellipsis),ls.parseMaybeAssign.call(void 0),Jt();continue}t&&oe.state.end-oe.state.start===3&&oe.input.charCodeAt(oe.state.start)===ot.charCodes.lowercaseK&&oe.input.charCodeAt(oe.state.start+1)===ot.charCodes.lowercaseE&&oe.input.charCodeAt(oe.state.start+2)===ot.charCodes.lowercaseY&&(oe.state.tokens[e].jsxRole=ge.JSXRole.KeyAfterPropSpread),R1(ge.IdentifierRole.ObjectKey),ge.match.call(void 0,Re.TokenType.eq)&&(Jt(),oh())}let n=ge.match.call(void 0,Re.TokenType.slash);return n&&Jt(),n}function ah(){ge.match.call(void 0,Re.TokenType.jsxTagEnd)||N1()}function D1(){let e=oe.state.tokens.length-1;oe.state.tokens[e].jsxRole=ge.JSXRole.NoChildren;let t=0;if(!rh(e))for(ro();;)switch(oe.state.type){case Re.TokenType.jsxTagStart:if(Jt(),ge.match.call(void 0,Re.TokenType.slash)){Jt(),ah(),oe.state.tokens[e].jsxRole!==ge.JSXRole.KeyAfterPropSpread&&(t===1?oe.state.tokens[e].jsxRole=ge.JSXRole.OneChild:t>1&&(oe.state.tokens[e].jsxRole=ge.JSXRole.StaticChildren));return}t++,D1(),ro();break;case Re.TokenType.jsxText:t++,ro();break;case Re.TokenType.jsxEmptyText:ro();break;case Re.TokenType.braceL:ge.next.call(void 0),ge.match.call(void 0,Re.TokenType.ellipsis)?(sh(),ro(),t+=2):(ge.match.call(void 0,Re.TokenType.braceR)||(t++,ls.parseExpression.call(void 0)),ro());break;default:An.unexpected.call(void 0);return}}function L1(){Jt(),D1()}cs.jsxParseElement=L1;function Jt(){oe.state.tokens.push(new ge.Token),ge.skipSpace.call(void 0),oe.state.start=oe.state.pos;let e=oe.input.charCodeAt(oe.state.pos);if(P1.IS_IDENTIFIER_START[e])nh();else if(e===ot.charCodes.quotationMark||e===ot.charCodes.apostrophe)th(e);else switch(++oe.state.pos,e){case ot.charCodes.greaterThan:ge.finishToken.call(void 0,Re.TokenType.jsxTagEnd);break;case ot.charCodes.lessThan:ge.finishToken.call(void 0,Re.TokenType.jsxTagStart);break;case ot.charCodes.slash:ge.finishToken.call(void 0,Re.TokenType.slash);break;case ot.charCodes.equalsTo:ge.finishToken.call(void 0,Re.TokenType.eq);break;case ot.charCodes.leftCurlyBrace:ge.finishToken.call(void 0,Re.TokenType.braceL);break;case ot.charCodes.dot:ge.finishToken.call(void 0,Re.TokenType.dot);break;case ot.charCodes.colon:ge.finishToken.call(void 0,Re.TokenType.colon);break;default:An.unexpected.call(void 0)}}cs.nextJSXTagToken=Jt;function ro(){oe.state.tokens.push(new ge.Token),oe.state.start=oe.state.pos,eh()}});var O1=G(us=>{"use strict";Object.defineProperty(us,"__esModule",{value:!0});var ps=pt(),ao=ye(),q1=Kt(),ih=Kn(),lh=Co(),ch=eo();function ph(e){if(ps.match.call(void 0,ao.TokenType.question)){let t=ps.lookaheadType.call(void 0);if(t===ao.TokenType.colon||t===ao.TokenType.comma||t===ao.TokenType.parenR)return}ih.baseParseConditional.call(void 0,e)}us.typedParseConditional=ph;function uh(){ps.eatTypeToken.call(void 0,ao.TokenType.question),ps.match.call(void 0,ao.TokenType.colon)&&(q1.isTypeScriptEnabled?ch.tsParseTypeAnnotation.call(void 0):q1.isFlowEnabled&&lh.flowParseTypeAnnotation.call(void 0))}us.typedParseParenItem=uh});var Kn=G(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});var vn=Co(),dh=Hr(),M1=O1(),Rn=eo(),C=pt(),mn=dt(),F1=$o(),y=ye(),j1=Bt(),hh=zn(),x=Kt(),Pn=ss(),sn=Po(),Ie=Cn(),fs=class{constructor(t){this.stop=t}};Xe.StopState=fs;function Ro(e=!1){if(Gt(e),C.match.call(void 0,y.TokenType.comma))for(;C.eat.call(void 0,y.TokenType.comma);)Gt(e)}Xe.parseExpression=Ro;function Gt(e=!1,t=!1){return x.isTypeScriptEnabled?Rn.tsParseMaybeAssign.call(void 0,e,t):x.isFlowEnabled?vn.flowParseMaybeAssign.call(void 0,e,t):B1(e,t)}Xe.parseMaybeAssign=Gt;function B1(e,t){if(C.match.call(void 0,y.TokenType._yield))return Ph(),!1;(C.match.call(void 0,y.TokenType.parenL)||C.match.call(void 0,y.TokenType.name)||C.match.call(void 0,y.TokenType._yield))&&(x.state.potentialArrowAt=x.state.start);let n=fh(e);return t&&zr(),x.state.type&y.TokenType.IS_ASSIGN?(C.next.call(void 0),Gt(e),!1):n}Xe.baseParseMaybeAssign=B1;function fh(e){return kh(e)?!0:(Th(e),!1)}function Th(e){x.isTypeScriptEnabled||x.isFlowEnabled?M1.typedParseConditional.call(void 0,e):K1(e)}function K1(e){C.eat.call(void 0,y.TokenType.question)&&(Gt(),Ie.expect.call(void 0,y.TokenType.colon),Gt(e))}Xe.baseParseConditional=K1;function kh(e){let t=x.state.tokens.length;return Do()?!0:(ds(t,-1,e),!1)}function ds(e,t,n){if(x.isTypeScriptEnabled&&(y.TokenType._in&y.TokenType.PRECEDENCE_MASK)>t&&!Ie.hasPrecedingLineBreak.call(void 0)&&(Ie.eatContextual.call(void 0,mn.ContextualKeyword._as)||Ie.eatContextual.call(void 0,mn.ContextualKeyword._satisfies))){let s=C.pushTypeContext.call(void 0,1);Rn.tsParseType.call(void 0),C.popTypeContext.call(void 0,s),C.rescan_gt.call(void 0),ds(e,t,n);return}let o=x.state.type&y.TokenType.PRECEDENCE_MASK;if(o>0&&(!n||!C.match.call(void 0,y.TokenType._in))&&o>t){let s=x.state.type;C.next.call(void 0),s===y.TokenType.nullishCoalescing&&(x.state.tokens[x.state.tokens.length-1].nullishStartIndex=e);let r=x.state.tokens.length;Do(),ds(r,s&y.TokenType.IS_RIGHT_ASSOCIATIVE?o-1:o,n),s===y.TokenType.nullishCoalescing&&(x.state.tokens[e].numNullishCoalesceStarts++,x.state.tokens[x.state.tokens.length-1].numNullishCoalesceEnds++),ds(e,t,n)}}function Do(){if(x.isTypeScriptEnabled&&!x.isJSXEnabled&&C.eat.call(void 0,y.TokenType.lessThan))return Rn.tsParseTypeAssertion.call(void 0),!1;if(Ie.isContextual.call(void 0,mn.ContextualKeyword._module)&&C.lookaheadCharCode.call(void 0)===j1.charCodes.leftCurlyBrace&&!Ie.hasFollowingLineBreak.call(void 0))return Rh(),!1;if(x.state.type&y.TokenType.IS_PREFIX)return C.next.call(void 0),Do(),!1;if($1())return!0;for(;x.state.type&y.TokenType.IS_POSTFIX&&!Ie.canInsertSemicolon.call(void 0);)x.state.type===y.TokenType.preIncDec&&(x.state.type=y.TokenType.postIncDec),C.next.call(void 0);return!1}Xe.parseMaybeUnary=Do;function $1(){let e=x.state.tokens.length;return ms()?!0:(Jr(e),x.state.tokens.length>e&&x.state.tokens[e].isOptionalChainStart&&(x.state.tokens[x.state.tokens.length-1].isOptionalChainEnd=!0),!1)}Xe.parseExprSubscripts=$1;function Jr(e,t=!1){x.isFlowEnabled?vn.flowParseSubscripts.call(void 0,e,t):U1(e,t)}function U1(e,t=!1){let n=new fs(!1);do mh(e,t,n);while(!n.stop&&!x.state.error)}Xe.baseParseSubscripts=U1;function mh(e,t,n){x.isTypeScriptEnabled?Rn.tsParseSubscript.call(void 0,e,t,n):x.isFlowEnabled?vn.flowParseSubscript.call(void 0,e,t,n):H1(e,t,n)}function H1(e,t,n){if(!t&&C.eat.call(void 0,y.TokenType.doubleColon))Gr(),n.stop=!0,Jr(e,t);else if(C.match.call(void 0,y.TokenType.questionDot)){if(x.state.tokens[e].isOptionalChainStart=!0,t&&C.lookaheadType.call(void 0)===y.TokenType.parenL){n.stop=!0;return}C.next.call(void 0),x.state.tokens[x.state.tokens.length-1].subscriptStartIndex=e,C.eat.call(void 0,y.TokenType.bracketL)?(Ro(),Ie.expect.call(void 0,y.TokenType.bracketR)):C.eat.call(void 0,y.TokenType.parenL)?hs():Ts()}else if(C.eat.call(void 0,y.TokenType.dot))x.state.tokens[x.state.tokens.length-1].subscriptStartIndex=e,Ts();else if(C.eat.call(void 0,y.TokenType.bracketL))x.state.tokens[x.state.tokens.length-1].subscriptStartIndex=e,Ro(),Ie.expect.call(void 0,y.TokenType.bracketR);else if(!t&&C.match.call(void 0,y.TokenType.parenL))if(V1()){let o=x.state.snapshot(),s=x.state.tokens.length;C.next.call(void 0),x.state.tokens[x.state.tokens.length-1].subscriptStartIndex=e;let r=x.getNextContextId.call(void 0);x.state.tokens[x.state.tokens.length-1].contextId=r,hs(),x.state.tokens[x.state.tokens.length-1].contextId=r,yh()&&(x.state.restoreFromSnapshot(o),n.stop=!0,x.state.scopeDepth++,sn.parseFunctionParams.call(void 0),vh(s))}else{C.next.call(void 0),x.state.tokens[x.state.tokens.length-1].subscriptStartIndex=e;let o=x.getNextContextId.call(void 0);x.state.tokens[x.state.tokens.length-1].contextId=o,hs(),x.state.tokens[x.state.tokens.length-1].contextId=o}else C.match.call(void 0,y.TokenType.backQuote)?Yr():n.stop=!0}Xe.baseParseSubscript=H1;function V1(){return x.state.tokens[x.state.tokens.length-1].contextualKeyword===mn.ContextualKeyword._async&&!Ie.canInsertSemicolon.call(void 0)}Xe.atPossibleAsync=V1;function hs(){let e=!0;for(;!C.eat.call(void 0,y.TokenType.parenR)&&!x.state.error;){if(e)e=!1;else if(Ie.expect.call(void 0,y.TokenType.comma),C.eat.call(void 0,y.TokenType.parenR))break;Y1(!1)}}Xe.parseCallExpressionArguments=hs;function yh(){return C.match.call(void 0,y.TokenType.colon)||C.match.call(void 0,y.TokenType.arrow)}function vh(e){x.isTypeScriptEnabled?Rn.tsStartParseAsyncArrowFromCallExpression.call(void 0):x.isFlowEnabled&&vn.flowStartParseAsyncArrowFromCallExpression.call(void 0),Ie.expect.call(void 0,y.TokenType.arrow),No(e)}function Gr(){let e=x.state.tokens.length;ms(),Jr(e,!0)}function ms(){if(C.eat.call(void 0,y.TokenType.modulo))return yn(),!1;if(C.match.call(void 0,y.TokenType.jsxText)||C.match.call(void 0,y.TokenType.jsxEmptyText))return W1(),!1;if(C.match.call(void 0,y.TokenType.lessThan)&&x.isJSXEnabled)return x.state.type=y.TokenType.jsxTagStart,dh.jsxParseElement.call(void 0),C.next.call(void 0),!1;let e=x.state.potentialArrowAt===x.state.start;switch(x.state.type){case y.TokenType.slash:case y.TokenType.assign:C.retokenizeSlashAsRegex.call(void 0);case y.TokenType._super:case y.TokenType._this:case y.TokenType.regexp:case y.TokenType.num:case y.TokenType.bigint:case y.TokenType.decimal:case y.TokenType.string:case y.TokenType._null:case y.TokenType._true:case y.TokenType._false:return C.next.call(void 0),!1;case y.TokenType._import:return C.next.call(void 0),C.match.call(void 0,y.TokenType.dot)&&(x.state.tokens[x.state.tokens.length-1].type=y.TokenType.name,C.next.call(void 0),yn()),!1;case y.TokenType.name:{let t=x.state.tokens.length,n=x.state.start,o=x.state.contextualKeyword;return yn(),o===mn.ContextualKeyword._await?(Ah(),!1):o===mn.ContextualKeyword._async&&C.match.call(void 0,y.TokenType._function)&&!Ie.canInsertSemicolon.call(void 0)?(C.next.call(void 0),sn.parseFunction.call(void 0,n,!1),!1):e&&o===mn.ContextualKeyword._async&&!Ie.canInsertSemicolon.call(void 0)&&C.match.call(void 0,y.TokenType.name)?(x.state.scopeDepth++,Pn.parseBindingIdentifier.call(void 0,!1),Ie.expect.call(void 0,y.TokenType.arrow),No(t),!0):C.match.call(void 0,y.TokenType._do)&&!Ie.canInsertSemicolon.call(void 0)?(C.next.call(void 0),sn.parseBlock.call(void 0),!1):e&&!Ie.canInsertSemicolon.call(void 0)&&C.match.call(void 0,y.TokenType.arrow)?(x.state.scopeDepth++,Pn.markPriorBindingIdentifier.call(void 0,!1),Ie.expect.call(void 0,y.TokenType.arrow),No(t),!0):(x.state.tokens[x.state.tokens.length-1].identifierRole=C.IdentifierRole.Access,!1)}case y.TokenType._do:return C.next.call(void 0),sn.parseBlock.call(void 0),!1;case y.TokenType.parenL:return X1(e);case y.TokenType.bracketL:return C.next.call(void 0),z1(y.TokenType.bracketR,!0),!1;case y.TokenType.braceL:return J1(!1,!1),!1;case y.TokenType._function:return xh(),!1;case y.TokenType.at:sn.parseDecorators.call(void 0);case y.TokenType._class:return sn.parseClass.call(void 0,!1),!1;case y.TokenType._new:return wh(),!1;case y.TokenType.backQuote:return Yr(),!1;case y.TokenType.doubleColon:return C.next.call(void 0),Gr(),!1;case y.TokenType.hash:{let t=C.lookaheadCharCode.call(void 0);return hh.IS_IDENTIFIER_START[t]||t===j1.charCodes.backslash?Ts():C.next.call(void 0),!1}default:return Ie.unexpected.call(void 0),!1}}Xe.parseExprAtom=ms;function Ts(){C.eat.call(void 0,y.TokenType.hash),yn()}function xh(){let e=x.state.start;yn(),C.eat.call(void 0,y.TokenType.dot)&&yn(),sn.parseFunction.call(void 0,e,!1)}function W1(){C.next.call(void 0)}Xe.parseLiteral=W1;function _h(){Ie.expect.call(void 0,y.TokenType.parenL),Ro(),Ie.expect.call(void 0,y.TokenType.parenR)}Xe.parseParenExpression=_h;function X1(e){let t=x.state.snapshot(),n=x.state.tokens.length;Ie.expect.call(void 0,y.TokenType.parenL);let o=!0;for(;!C.match.call(void 0,y.TokenType.parenR)&&!x.state.error;){if(o)o=!1;else if(Ie.expect.call(void 0,y.TokenType.comma),C.match.call(void 0,y.TokenType.parenR))break;if(C.match.call(void 0,y.TokenType.ellipsis)){Pn.parseRest.call(void 0,!1),zr();break}else Gt(!1,!0)}return Ie.expect.call(void 0,y.TokenType.parenR),e&&gh()&&Wr()?(x.state.restoreFromSnapshot(t),x.state.scopeDepth++,sn.parseFunctionParams.call(void 0),Wr(),No(n),x.state.error?(x.state.restoreFromSnapshot(t),X1(!1),!1):!0):!1}function gh(){return C.match.call(void 0,y.TokenType.colon)||!Ie.canInsertSemicolon.call(void 0)}function Wr(){return x.isTypeScriptEnabled?Rn.tsParseArrow.call(void 0):x.isFlowEnabled?vn.flowParseArrow.call(void 0):C.eat.call(void 0,y.TokenType.arrow)}Xe.parseArrow=Wr;function zr(){(x.isTypeScriptEnabled||x.isFlowEnabled)&&M1.typedParseParenItem.call(void 0)}function wh(){if(Ie.expect.call(void 0,y.TokenType._new),C.eat.call(void 0,y.TokenType.dot)){yn();return}Ih(),x.isFlowEnabled&&vn.flowStartParseNewArguments.call(void 0),C.eat.call(void 0,y.TokenType.parenL)&&z1(y.TokenType.parenR)}function Ih(){Gr(),C.eat.call(void 0,y.TokenType.questionDot)}function Yr(){for(C.nextTemplateToken.call(void 0),C.nextTemplateToken.call(void 0);!C.match.call(void 0,y.TokenType.backQuote)&&!x.state.error;)Ie.expect.call(void 0,y.TokenType.dollarBraceL),Ro(),C.nextTemplateToken.call(void 0),C.nextTemplateToken.call(void 0);C.next.call(void 0)}Xe.parseTemplate=Yr;function J1(e,t){let n=x.getNextContextId.call(void 0),o=!0;for(C.next.call(void 0),x.state.tokens[x.state.tokens.length-1].contextId=n;!C.eat.call(void 0,y.TokenType.braceR)&&!x.state.error;){if(o)o=!1;else if(Ie.expect.call(void 0,y.TokenType.comma),C.eat.call(void 0,y.TokenType.braceR))break;let s=!1;if(C.match.call(void 0,y.TokenType.ellipsis)){let r=x.state.tokens.length;if(Pn.parseSpread.call(void 0),e&&(x.state.tokens.length===r+2&&Pn.markPriorBindingIdentifier.call(void 0,t),C.eat.call(void 0,y.TokenType.braceR)))break;continue}e||(s=C.eat.call(void 0,y.TokenType.star)),!e&&Ie.isContextual.call(void 0,mn.ContextualKeyword._async)?(s&&Ie.unexpected.call(void 0),yn(),C.match.call(void 0,y.TokenType.colon)||C.match.call(void 0,y.TokenType.parenL)||C.match.call(void 0,y.TokenType.braceR)||C.match.call(void 0,y.TokenType.eq)||C.match.call(void 0,y.TokenType.comma)||(C.match.call(void 0,y.TokenType.star)&&(C.next.call(void 0),s=!0),ks(n))):ks(n),Eh(e,t,n)}x.state.tokens[x.state.tokens.length-1].contextId=n}Xe.parseObj=J1;function Ch(e){return!e&&(C.match.call(void 0,y.TokenType.string)||C.match.call(void 0,y.TokenType.num)||C.match.call(void 0,y.TokenType.bracketL)||C.match.call(void 0,y.TokenType.name)||!!(x.state.type&y.TokenType.IS_KEYWORD))}function bh(e,t){let n=x.state.start;return C.match.call(void 0,y.TokenType.parenL)?(e&&Ie.unexpected.call(void 0),Xr(n,!1),!0):Ch(e)?(ks(t),Xr(n,!1),!0):!1}function Sh(e,t){if(C.eat.call(void 0,y.TokenType.colon)){e?Pn.parseMaybeDefault.call(void 0,t):Gt(!1);return}let n;e?x.state.scopeDepth===0?n=C.IdentifierRole.ObjectShorthandTopLevelDeclaration:t?n=C.IdentifierRole.ObjectShorthandBlockScopedDeclaration:n=C.IdentifierRole.ObjectShorthandFunctionScopedDeclaration:n=C.IdentifierRole.ObjectShorthand,x.state.tokens[x.state.tokens.length-1].identifierRole=n,Pn.parseMaybeDefault.call(void 0,t,!0)}function Eh(e,t,n){x.isTypeScriptEnabled?Rn.tsStartParseObjPropValue.call(void 0):x.isFlowEnabled&&vn.flowStartParseObjPropValue.call(void 0),bh(e,n)||Sh(e,t)}function ks(e){x.isFlowEnabled&&vn.flowParseVariance.call(void 0),C.eat.call(void 0,y.TokenType.bracketL)?(x.state.tokens[x.state.tokens.length-1].contextId=e,Gt(),Ie.expect.call(void 0,y.TokenType.bracketR),x.state.tokens[x.state.tokens.length-1].contextId=e):(C.match.call(void 0,y.TokenType.num)||C.match.call(void 0,y.TokenType.string)||C.match.call(void 0,y.TokenType.bigint)||C.match.call(void 0,y.TokenType.decimal)?ms():Ts(),x.state.tokens[x.state.tokens.length-1].identifierRole=C.IdentifierRole.ObjectKey,x.state.tokens[x.state.tokens.length-1].contextId=e)}Xe.parsePropertyName=ks;function Xr(e,t){let n=x.getNextContextId.call(void 0);x.state.scopeDepth++;let o=x.state.tokens.length,s=t;sn.parseFunctionParams.call(void 0,s,n),G1(e,n);let r=x.state.tokens.length;x.state.scopes.push(new F1.Scope(o,r,!0)),x.state.scopeDepth--}Xe.parseMethod=Xr;function No(e){Qr(!0);let t=x.state.tokens.length;x.state.scopes.push(new F1.Scope(e,t,!0)),x.state.scopeDepth--}Xe.parseArrowExpression=No;function G1(e,t=0){x.isTypeScriptEnabled?Rn.tsParseFunctionBodyAndFinish.call(void 0,e,t):x.isFlowEnabled?vn.flowParseFunctionBodyAndFinish.call(void 0,t):Qr(!1,t)}Xe.parseFunctionBodyAndFinish=G1;function Qr(e,t=0){e&&!C.match.call(void 0,y.TokenType.braceL)?Gt():sn.parseBlock.call(void 0,!0,t)}Xe.parseFunctionBody=Qr;function z1(e,t=!1){let n=!0;for(;!C.eat.call(void 0,e)&&!x.state.error;){if(n)n=!1;else if(Ie.expect.call(void 0,y.TokenType.comma),C.eat.call(void 0,e))break;Y1(t)}}function Y1(e){e&&C.match.call(void 0,y.TokenType.comma)||(C.match.call(void 0,y.TokenType.ellipsis)?(Pn.parseSpread.call(void 0),zr()):C.match.call(void 0,y.TokenType.question)?C.next.call(void 0):Gt(!1,!0))}function yn(){C.next.call(void 0),x.state.tokens[x.state.tokens.length-1].type=y.TokenType.name}Xe.parseIdentifier=yn;function Ah(){Do()}function Ph(){C.next.call(void 0),!C.match.call(void 0,y.TokenType.semi)&&!Ie.canInsertSemicolon.call(void 0)&&(C.eat.call(void 0,y.TokenType.star),Gt())}function Rh(){Ie.expectContextual.call(void 0,mn.ContextualKeyword._module),Ie.expect.call(void 0,y.TokenType.braceL),sn.parseBlockBody.call(void 0,y.TokenType.braceR)}});var Co=G(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});var p=pt(),ae=dt(),l=ye(),Q=Kt(),je=Kn(),Nn=Po(),P=Cn();function Nh(e){return(e.type===l.TokenType.name||!!(e.type&l.TokenType.IS_KEYWORD))&&e.contextualKeyword!==ae.ContextualKeyword._from}function hn(e){let t=p.pushTypeContext.call(void 0,0);P.expect.call(void 0,e||l.TokenType.colon),Nt(),p.popTypeContext.call(void 0,t)}function Q1(){P.expect.call(void 0,l.TokenType.modulo),P.expectContextual.call(void 0,ae.ContextualKeyword._checks),p.eat.call(void 0,l.TokenType.parenL)&&(je.parseExpression.call(void 0),P.expect.call(void 0,l.TokenType.parenR))}function ta(){let e=p.pushTypeContext.call(void 0,0);P.expect.call(void 0,l.TokenType.colon),p.match.call(void 0,l.TokenType.modulo)?Q1():(Nt(),p.match.call(void 0,l.TokenType.modulo)&&Q1()),p.popTypeContext.call(void 0,e)}function Dh(){p.next.call(void 0),na(!0)}function Lh(){p.next.call(void 0),je.parseIdentifier.call(void 0),p.match.call(void 0,l.TokenType.lessThan)&&fn(),P.expect.call(void 0,l.TokenType.parenL),ea(),P.expect.call(void 0,l.TokenType.parenR),ta(),P.semicolon.call(void 0)}function Zr(){p.match.call(void 0,l.TokenType._class)?Dh():p.match.call(void 0,l.TokenType._function)?Lh():p.match.call(void 0,l.TokenType._var)?qh():P.eatContextual.call(void 0,ae.ContextualKeyword._module)?p.eat.call(void 0,l.TokenType.dot)?Fh():Oh():P.isContextual.call(void 0,ae.ContextualKeyword._type)?jh():P.isContextual.call(void 0,ae.ContextualKeyword._opaque)?Bh():P.isContextual.call(void 0,ae.ContextualKeyword._interface)?Kh():p.match.call(void 0,l.TokenType._export)?Mh():P.unexpected.call(void 0)}function qh(){p.next.call(void 0),sl(),P.semicolon.call(void 0)}function Oh(){for(p.match.call(void 0,l.TokenType.string)?je.parseExprAtom.call(void 0):je.parseIdentifier.call(void 0),P.expect.call(void 0,l.TokenType.braceL);!p.match.call(void 0,l.TokenType.braceR)&&!Q.state.error;)p.match.call(void 0,l.TokenType._import)?(p.next.call(void 0),Nn.parseImport.call(void 0)):P.unexpected.call(void 0);P.expect.call(void 0,l.TokenType.braceR)}function Mh(){P.expect.call(void 0,l.TokenType._export),p.eat.call(void 0,l.TokenType._default)?p.match.call(void 0,l.TokenType._function)||p.match.call(void 0,l.TokenType._class)?Zr():(Nt(),P.semicolon.call(void 0)):p.match.call(void 0,l.TokenType._var)||p.match.call(void 0,l.TokenType._function)||p.match.call(void 0,l.TokenType._class)||P.isContextual.call(void 0,ae.ContextualKeyword._opaque)?Zr():p.match.call(void 0,l.TokenType.star)||p.match.call(void 0,l.TokenType.braceL)||P.isContextual.call(void 0,ae.ContextualKeyword._interface)||P.isContextual.call(void 0,ae.ContextualKeyword._type)||P.isContextual.call(void 0,ae.ContextualKeyword._opaque)?Nn.parseExport.call(void 0):P.unexpected.call(void 0)}function Fh(){P.expectContextual.call(void 0,ae.ContextualKeyword._exports),io(),P.semicolon.call(void 0)}function jh(){p.next.call(void 0),sa()}function Bh(){p.next.call(void 0),ra(!0)}function Kh(){p.next.call(void 0),na()}function na(e=!1){if(_s(),p.match.call(void 0,l.TokenType.lessThan)&&fn(),p.eat.call(void 0,l.TokenType._extends))do ys();while(!e&&p.eat.call(void 0,l.TokenType.comma));if(P.isContextual.call(void 0,ae.ContextualKeyword._mixins)){p.next.call(void 0);do ys();while(p.eat.call(void 0,l.TokenType.comma))}if(P.isContextual.call(void 0,ae.ContextualKeyword._implements)){p.next.call(void 0);do ys();while(p.eat.call(void 0,l.TokenType.comma))}vs(e,!1,e)}function ys(){tl(!1),p.match.call(void 0,l.TokenType.lessThan)&&$n()}function oa(){na()}function _s(){je.parseIdentifier.call(void 0)}function sa(){_s(),p.match.call(void 0,l.TokenType.lessThan)&&fn(),hn(l.TokenType.eq),P.semicolon.call(void 0)}function ra(e){P.expectContextual.call(void 0,ae.ContextualKeyword._type),_s(),p.match.call(void 0,l.TokenType.lessThan)&&fn(),p.match.call(void 0,l.TokenType.colon)&&hn(l.TokenType.colon),e||hn(l.TokenType.eq),P.semicolon.call(void 0)}function $h(){la(),sl(),p.eat.call(void 0,l.TokenType.eq)&&Nt()}function fn(){let e=p.pushTypeContext.call(void 0,0);p.match.call(void 0,l.TokenType.lessThan)||p.match.call(void 0,l.TokenType.typeParameterStart)?p.next.call(void 0):P.unexpected.call(void 0);do $h(),p.match.call(void 0,l.TokenType.greaterThan)||P.expect.call(void 0,l.TokenType.comma);while(!p.match.call(void 0,l.TokenType.greaterThan)&&!Q.state.error);P.expect.call(void 0,l.TokenType.greaterThan),p.popTypeContext.call(void 0,e)}Ve.flowParseTypeParameterDeclaration=fn;function $n(){let e=p.pushTypeContext.call(void 0,0);for(P.expect.call(void 0,l.TokenType.lessThan);!p.match.call(void 0,l.TokenType.greaterThan)&&!Q.state.error;)Nt(),p.match.call(void 0,l.TokenType.greaterThan)||P.expect.call(void 0,l.TokenType.comma);P.expect.call(void 0,l.TokenType.greaterThan),p.popTypeContext.call(void 0,e)}function Uh(){if(P.expectContextual.call(void 0,ae.ContextualKeyword._interface),p.eat.call(void 0,l.TokenType._extends))do ys();while(p.eat.call(void 0,l.TokenType.comma));vs(!1,!1,!1)}function aa(){p.match.call(void 0,l.TokenType.num)||p.match.call(void 0,l.TokenType.string)?je.parseExprAtom.call(void 0):je.parseIdentifier.call(void 0)}function Hh(){p.lookaheadType.call(void 0)===l.TokenType.colon?(aa(),hn()):Nt(),P.expect.call(void 0,l.TokenType.bracketR),hn()}function Vh(){aa(),P.expect.call(void 0,l.TokenType.bracketR),P.expect.call(void 0,l.TokenType.bracketR),p.match.call(void 0,l.TokenType.lessThan)||p.match.call(void 0,l.TokenType.parenL)?ia():(p.eat.call(void 0,l.TokenType.question),hn())}function ia(){for(p.match.call(void 0,l.TokenType.lessThan)&&fn(),P.expect.call(void 0,l.TokenType.parenL);!p.match.call(void 0,l.TokenType.parenR)&&!p.match.call(void 0,l.TokenType.ellipsis)&&!Q.state.error;)xs(),p.match.call(void 0,l.TokenType.parenR)||P.expect.call(void 0,l.TokenType.comma);p.eat.call(void 0,l.TokenType.ellipsis)&&xs(),P.expect.call(void 0,l.TokenType.parenR),hn()}function Wh(){ia()}function vs(e,t,n){let o;for(t&&p.match.call(void 0,l.TokenType.braceBarL)?(P.expect.call(void 0,l.TokenType.braceBarL),o=l.TokenType.braceBarR):(P.expect.call(void 0,l.TokenType.braceL),o=l.TokenType.braceR);!p.match.call(void 0,o)&&!Q.state.error;){if(n&&P.isContextual.call(void 0,ae.ContextualKeyword._proto)){let s=p.lookaheadType.call(void 0);s!==l.TokenType.colon&&s!==l.TokenType.question&&(p.next.call(void 0),e=!1)}if(e&&P.isContextual.call(void 0,ae.ContextualKeyword._static)){let s=p.lookaheadType.call(void 0);s!==l.TokenType.colon&&s!==l.TokenType.question&&p.next.call(void 0)}if(la(),p.eat.call(void 0,l.TokenType.bracketL))p.eat.call(void 0,l.TokenType.bracketL)?Vh():Hh();else if(p.match.call(void 0,l.TokenType.parenL)||p.match.call(void 0,l.TokenType.lessThan))Wh();else{if(P.isContextual.call(void 0,ae.ContextualKeyword._get)||P.isContextual.call(void 0,ae.ContextualKeyword._set)){let s=p.lookaheadType.call(void 0);(s===l.TokenType.name||s===l.TokenType.string||s===l.TokenType.num)&&p.next.call(void 0)}Xh()}Jh()}P.expect.call(void 0,o)}function Xh(){if(p.match.call(void 0,l.TokenType.ellipsis)){if(P.expect.call(void 0,l.TokenType.ellipsis),p.eat.call(void 0,l.TokenType.comma)||p.eat.call(void 0,l.TokenType.semi),p.match.call(void 0,l.TokenType.braceR))return;Nt()}else aa(),p.match.call(void 0,l.TokenType.lessThan)||p.match.call(void 0,l.TokenType.parenL)?ia():(p.eat.call(void 0,l.TokenType.question),hn())}function Jh(){!p.eat.call(void 0,l.TokenType.semi)&&!p.eat.call(void 0,l.TokenType.comma)&&!p.match.call(void 0,l.TokenType.braceR)&&!p.match.call(void 0,l.TokenType.braceBarR)&&P.unexpected.call(void 0)}function tl(e){for(e||je.parseIdentifier.call(void 0);p.eat.call(void 0,l.TokenType.dot);)je.parseIdentifier.call(void 0)}function Gh(){tl(!0),p.match.call(void 0,l.TokenType.lessThan)&&$n()}function zh(){P.expect.call(void 0,l.TokenType._typeof),nl()}function Yh(){for(P.expect.call(void 0,l.TokenType.bracketL);Q.state.pos{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});var Sf=fa(),gt=Co(),it=eo(),_=pt(),le=dt(),Dn=$o(),k=ye(),al=Bt(),h=Kt(),Ae=Kn(),Ln=ss(),M=Cn();function Ef(){if(da(k.TokenType.eof),h.state.scopes.push(new Dn.Scope(0,h.state.tokens.length,!0)),h.state.scopeDepth!==0)throw new Error(`Invalid scope depth at end of file: ${h.state.scopeDepth}`);return new Sf.File(h.state.tokens,h.state.scopes)}ct.parseTopLevel=Ef;function rn(e){h.isFlowEnabled&>.flowTryParseStatement.call(void 0)||(_.match.call(void 0,k.TokenType.at)&&ua(),Af(e))}ct.parseStatement=rn;function Af(e){if(h.isTypeScriptEnabled&&it.tsTryParseStatementContent.call(void 0))return;let t=h.state.type;switch(t){case k.TokenType._break:case k.TokenType._continue:Rf();return;case k.TokenType._debugger:Nf();return;case k.TokenType._do:Df();return;case k.TokenType._for:Lf();return;case k.TokenType._function:if(_.lookaheadType.call(void 0)===k.TokenType.dot)break;e||M.unexpected.call(void 0),Mf();return;case k.TokenType._class:e||M.unexpected.call(void 0),ws(!0);return;case k.TokenType._if:Ff();return;case k.TokenType._return:jf();return;case k.TokenType._switch:Bf();return;case k.TokenType._throw:Kf();return;case k.TokenType._try:Uf();return;case k.TokenType._let:case k.TokenType._const:e||M.unexpected.call(void 0);case k.TokenType._var:gs(t!==k.TokenType._var);return;case k.TokenType._while:Hf();return;case k.TokenType.braceL:co();return;case k.TokenType.semi:Vf();return;case k.TokenType._export:case k.TokenType._import:{let s=_.lookaheadType.call(void 0);if(s===k.TokenType.parenL||s===k.TokenType.dot)break;_.next.call(void 0),t===k.TokenType._import?vl():kl();return}case k.TokenType.name:if(h.state.contextualKeyword===le.ContextualKeyword._async){let s=h.state.start,r=h.state.snapshot();if(_.next.call(void 0),_.match.call(void 0,k.TokenType._function)&&!M.canInsertSemicolon.call(void 0)){M.expect.call(void 0,k.TokenType._function),Oo(s,!0);return}else h.state.restoreFromSnapshot(r)}else if(h.state.contextualKeyword===le.ContextualKeyword._using&&!M.hasFollowingLineBreak.call(void 0)&&_.lookaheadType.call(void 0)===k.TokenType.name){gs(!0);return}else if(cl()){M.expectContextual.call(void 0,le.ContextualKeyword._await),gs(!0);return}default:break}let n=h.state.tokens.length;Ae.parseExpression.call(void 0);let o=null;if(h.state.tokens.length===n+1){let s=h.state.tokens[h.state.tokens.length-1];s.type===k.TokenType.name&&(o=s.contextualKeyword)}if(o==null){M.semicolon.call(void 0);return}_.eat.call(void 0,k.TokenType.colon)?Wf():Xf(o)}function cl(){if(!M.isContextual.call(void 0,le.ContextualKeyword._await))return!1;let e=h.state.snapshot();return _.next.call(void 0),!M.isContextual.call(void 0,le.ContextualKeyword._using)||M.hasPrecedingLineBreak.call(void 0)||(_.next.call(void 0),!_.match.call(void 0,k.TokenType.name)||M.hasPrecedingLineBreak.call(void 0))?(h.state.restoreFromSnapshot(e),!1):(h.state.restoreFromSnapshot(e),!0)}function ua(){for(;_.match.call(void 0,k.TokenType.at);)pl()}ct.parseDecorators=ua;function pl(){if(_.next.call(void 0),_.eat.call(void 0,k.TokenType.parenL))Ae.parseExpression.call(void 0),M.expect.call(void 0,k.TokenType.parenR);else{for(Ae.parseIdentifier.call(void 0);_.eat.call(void 0,k.TokenType.dot);)Ae.parseIdentifier.call(void 0);Pf()}}function Pf(){h.isTypeScriptEnabled?it.tsParseMaybeDecoratorArguments.call(void 0):ul()}function ul(){_.eat.call(void 0,k.TokenType.parenL)&&Ae.parseCallExpressionArguments.call(void 0)}ct.baseParseMaybeDecoratorArguments=ul;function Rf(){_.next.call(void 0),M.isLineTerminator.call(void 0)||(Ae.parseIdentifier.call(void 0),M.semicolon.call(void 0))}function Nf(){_.next.call(void 0),M.semicolon.call(void 0)}function Df(){_.next.call(void 0),rn(!1),M.expect.call(void 0,k.TokenType._while),Ae.parseParenExpression.call(void 0),_.eat.call(void 0,k.TokenType.semi)}function Lf(){h.state.scopeDepth++;let e=h.state.tokens.length;Of();let t=h.state.tokens.length;h.state.scopes.push(new Dn.Scope(e,t,!1)),h.state.scopeDepth--}function qf(){return!(!M.isContextual.call(void 0,le.ContextualKeyword._using)||M.isLookaheadContextual.call(void 0,le.ContextualKeyword._of))}function Of(){_.next.call(void 0);let e=!1;if(M.isContextual.call(void 0,le.ContextualKeyword._await)&&(e=!0,_.next.call(void 0)),M.expect.call(void 0,k.TokenType.parenL),_.match.call(void 0,k.TokenType.semi)){e&&M.unexpected.call(void 0),ca();return}let t=cl();if(t||_.match.call(void 0,k.TokenType._var)||_.match.call(void 0,k.TokenType._let)||_.match.call(void 0,k.TokenType._const)||qf()){if(t&&M.expectContextual.call(void 0,le.ContextualKeyword._await),_.next.call(void 0),dl(!0,h.state.type!==k.TokenType._var),_.match.call(void 0,k.TokenType._in)||M.isContextual.call(void 0,le.ContextualKeyword._of)){il(e);return}ca();return}if(Ae.parseExpression.call(void 0,!0),_.match.call(void 0,k.TokenType._in)||M.isContextual.call(void 0,le.ContextualKeyword._of)){il(e);return}e&&M.unexpected.call(void 0),ca()}function Mf(){let e=h.state.start;_.next.call(void 0),Oo(e,!0)}function Ff(){_.next.call(void 0),Ae.parseParenExpression.call(void 0),rn(!1),_.eat.call(void 0,k.TokenType._else)&&rn(!1)}function jf(){_.next.call(void 0),M.isLineTerminator.call(void 0)||(Ae.parseExpression.call(void 0),M.semicolon.call(void 0))}function Bf(){_.next.call(void 0),Ae.parseParenExpression.call(void 0),h.state.scopeDepth++;let e=h.state.tokens.length;for(M.expect.call(void 0,k.TokenType.braceL);!_.match.call(void 0,k.TokenType.braceR)&&!h.state.error;)if(_.match.call(void 0,k.TokenType._case)||_.match.call(void 0,k.TokenType._default)){let n=_.match.call(void 0,k.TokenType._case);_.next.call(void 0),n&&Ae.parseExpression.call(void 0),M.expect.call(void 0,k.TokenType.colon)}else rn(!0);_.next.call(void 0);let t=h.state.tokens.length;h.state.scopes.push(new Dn.Scope(e,t,!1)),h.state.scopeDepth--}function Kf(){_.next.call(void 0),Ae.parseExpression.call(void 0),M.semicolon.call(void 0)}function $f(){Ln.parseBindingAtom.call(void 0,!0),h.isTypeScriptEnabled&&it.tsTryParseTypeAnnotation.call(void 0)}function Uf(){if(_.next.call(void 0),co(),_.match.call(void 0,k.TokenType._catch)){_.next.call(void 0);let e=null;if(_.match.call(void 0,k.TokenType.parenL)&&(h.state.scopeDepth++,e=h.state.tokens.length,M.expect.call(void 0,k.TokenType.parenL),$f(),M.expect.call(void 0,k.TokenType.parenR)),co(),e!=null){let t=h.state.tokens.length;h.state.scopes.push(new Dn.Scope(e,t,!1)),h.state.scopeDepth--}}_.eat.call(void 0,k.TokenType._finally)&&co()}function gs(e){_.next.call(void 0),dl(!1,e),M.semicolon.call(void 0)}ct.parseVarStatement=gs;function Hf(){_.next.call(void 0),Ae.parseParenExpression.call(void 0),rn(!1)}function Vf(){_.next.call(void 0)}function Wf(){rn(!0)}function Xf(e){h.isTypeScriptEnabled?it.tsParseIdentifierStatement.call(void 0,e):h.isFlowEnabled?gt.flowParseIdentifierStatement.call(void 0,e):M.semicolon.call(void 0)}function co(e=!1,t=0){let n=h.state.tokens.length;h.state.scopeDepth++,M.expect.call(void 0,k.TokenType.braceL),t&&(h.state.tokens[h.state.tokens.length-1].contextId=t),da(k.TokenType.braceR),t&&(h.state.tokens[h.state.tokens.length-1].contextId=t);let o=h.state.tokens.length;h.state.scopes.push(new Dn.Scope(n,o,e)),h.state.scopeDepth--}ct.parseBlock=co;function da(e){for(;!_.eat.call(void 0,e)&&!h.state.error;)rn(!0)}ct.parseBlockBody=da;function ca(){M.expect.call(void 0,k.TokenType.semi),_.match.call(void 0,k.TokenType.semi)||Ae.parseExpression.call(void 0),M.expect.call(void 0,k.TokenType.semi),_.match.call(void 0,k.TokenType.parenR)||Ae.parseExpression.call(void 0),M.expect.call(void 0,k.TokenType.parenR),rn(!1)}function il(e){e?M.eatContextual.call(void 0,le.ContextualKeyword._of):_.next.call(void 0),Ae.parseExpression.call(void 0),M.expect.call(void 0,k.TokenType.parenR),rn(!1)}function dl(e,t){for(;;){if(Jf(t),_.eat.call(void 0,k.TokenType.eq)){let n=h.state.tokens.length-1;Ae.parseMaybeAssign.call(void 0,e),h.state.tokens[n].rhsEndIndex=h.state.tokens.length}if(!_.eat.call(void 0,k.TokenType.comma))break}}function Jf(e){Ln.parseBindingAtom.call(void 0,e),h.isTypeScriptEnabled?it.tsAfterParseVarHead.call(void 0):h.isFlowEnabled&>.flowAfterParseVarHead.call(void 0)}function Oo(e,t,n=!1){_.match.call(void 0,k.TokenType.star)&&_.next.call(void 0),t&&!n&&!_.match.call(void 0,k.TokenType.name)&&!_.match.call(void 0,k.TokenType._yield)&&M.unexpected.call(void 0);let o=null;_.match.call(void 0,k.TokenType.name)&&(t||(o=h.state.tokens.length,h.state.scopeDepth++),Ln.parseBindingIdentifier.call(void 0,!1));let s=h.state.tokens.length;h.state.scopeDepth++,hl(),Ae.parseFunctionBodyAndFinish.call(void 0,e);let r=h.state.tokens.length;h.state.scopes.push(new Dn.Scope(s,r,!0)),h.state.scopeDepth--,o!==null&&(h.state.scopes.push(new Dn.Scope(o,r,!0)),h.state.scopeDepth--)}ct.parseFunction=Oo;function hl(e=!1,t=0){h.isTypeScriptEnabled?it.tsStartParseFunctionParams.call(void 0):h.isFlowEnabled&>.flowStartParseFunctionParams.call(void 0),M.expect.call(void 0,k.TokenType.parenL),t&&(h.state.tokens[h.state.tokens.length-1].contextId=t),Ln.parseBindingList.call(void 0,k.TokenType.parenR,!1,!1,e,t),t&&(h.state.tokens[h.state.tokens.length-1].contextId=t)}ct.parseFunctionParams=hl;function ws(e,t=!1){let n=h.getNextContextId.call(void 0);_.next.call(void 0),h.state.tokens[h.state.tokens.length-1].contextId=n,h.state.tokens[h.state.tokens.length-1].isExpression=!e;let o=null;e||(o=h.state.tokens.length,h.state.scopeDepth++),Qf(e,t),Zf();let s=h.state.tokens.length;if(Gf(n),!h.state.error&&(h.state.tokens[s].contextId=n,h.state.tokens[h.state.tokens.length-1].contextId=n,o!==null)){let r=h.state.tokens.length;h.state.scopes.push(new Dn.Scope(o,r,!1)),h.state.scopeDepth--}}ct.parseClass=ws;function fl(){return _.match.call(void 0,k.TokenType.eq)||_.match.call(void 0,k.TokenType.semi)||_.match.call(void 0,k.TokenType.braceR)||_.match.call(void 0,k.TokenType.bang)||_.match.call(void 0,k.TokenType.colon)}function Tl(){return _.match.call(void 0,k.TokenType.parenL)||_.match.call(void 0,k.TokenType.lessThan)}function Gf(e){for(M.expect.call(void 0,k.TokenType.braceL);!_.eat.call(void 0,k.TokenType.braceR)&&!h.state.error;){if(_.eat.call(void 0,k.TokenType.semi))continue;if(_.match.call(void 0,k.TokenType.at)){pl();continue}let t=h.state.start;zf(t,e)}}function zf(e,t){h.isTypeScriptEnabled&&it.tsParseModifiers.call(void 0,[le.ContextualKeyword._declare,le.ContextualKeyword._public,le.ContextualKeyword._protected,le.ContextualKeyword._private,le.ContextualKeyword._override]);let n=!1;if(_.match.call(void 0,k.TokenType.name)&&h.state.contextualKeyword===le.ContextualKeyword._static){if(Ae.parseIdentifier.call(void 0),Tl()){Lo(e,!1);return}else if(fl()){qo();return}if(h.state.tokens[h.state.tokens.length-1].type=k.TokenType._static,n=!0,_.match.call(void 0,k.TokenType.braceL)){h.state.tokens[h.state.tokens.length-1].contextId=t,co();return}}Yf(e,n,t)}function Yf(e,t,n){if(h.isTypeScriptEnabled&&it.tsTryParseClassMemberWithIsStatic.call(void 0,t))return;if(_.eat.call(void 0,k.TokenType.star)){lo(n),Lo(e,!1);return}lo(n);let o=!1,s=h.state.tokens[h.state.tokens.length-1];s.contextualKeyword===le.ContextualKeyword._constructor&&(o=!0),pa(),Tl()?Lo(e,o):fl()?qo():s.contextualKeyword===le.ContextualKeyword._async&&!M.isLineTerminator.call(void 0)?(h.state.tokens[h.state.tokens.length-1].type=k.TokenType._async,_.match.call(void 0,k.TokenType.star)&&_.next.call(void 0),lo(n),pa(),Lo(e,!1)):(s.contextualKeyword===le.ContextualKeyword._get||s.contextualKeyword===le.ContextualKeyword._set)&&!(M.isLineTerminator.call(void 0)&&_.match.call(void 0,k.TokenType.star))?(s.contextualKeyword===le.ContextualKeyword._get?h.state.tokens[h.state.tokens.length-1].type=k.TokenType._get:h.state.tokens[h.state.tokens.length-1].type=k.TokenType._set,lo(n),Lo(e,!1)):s.contextualKeyword===le.ContextualKeyword._accessor&&!M.isLineTerminator.call(void 0)?(lo(n),qo()):M.isLineTerminator.call(void 0)?qo():M.unexpected.call(void 0)}function Lo(e,t){h.isTypeScriptEnabled?it.tsTryParseTypeParameters.call(void 0):h.isFlowEnabled&&_.match.call(void 0,k.TokenType.lessThan)&>.flowParseTypeParameterDeclaration.call(void 0),Ae.parseMethod.call(void 0,e,t)}function lo(e){Ae.parsePropertyName.call(void 0,e)}ct.parseClassPropertyName=lo;function pa(){if(h.isTypeScriptEnabled){let e=_.pushTypeContext.call(void 0,0);_.eat.call(void 0,k.TokenType.question),_.popTypeContext.call(void 0,e)}}ct.parsePostMemberNameModifiers=pa;function qo(){if(h.isTypeScriptEnabled?(_.eatTypeToken.call(void 0,k.TokenType.bang),it.tsTryParseTypeAnnotation.call(void 0)):h.isFlowEnabled&&_.match.call(void 0,k.TokenType.colon)&>.flowParseTypeAnnotation.call(void 0),_.match.call(void 0,k.TokenType.eq)){let e=h.state.tokens.length;_.next.call(void 0),Ae.parseMaybeAssign.call(void 0),h.state.tokens[e].rhsEndIndex=h.state.tokens.length}M.semicolon.call(void 0)}ct.parseClassProperty=qo;function Qf(e,t=!1){h.isTypeScriptEnabled&&(!e||t)&&M.isContextual.call(void 0,le.ContextualKeyword._implements)||(_.match.call(void 0,k.TokenType.name)&&Ln.parseBindingIdentifier.call(void 0,!0),h.isTypeScriptEnabled?it.tsTryParseTypeParameters.call(void 0):h.isFlowEnabled&&_.match.call(void 0,k.TokenType.lessThan)&>.flowParseTypeParameterDeclaration.call(void 0))}function Zf(){let e=!1;_.eat.call(void 0,k.TokenType._extends)?(Ae.parseExprSubscripts.call(void 0),e=!0):e=!1,h.isTypeScriptEnabled?it.tsAfterParseClassSuper.call(void 0,e):h.isFlowEnabled&>.flowAfterParseClassSuper.call(void 0,e)}function kl(){let e=h.state.tokens.length-1;h.isTypeScriptEnabled&&it.tsTryParseExport.call(void 0)||(oT()?sT():nT()?(Ae.parseIdentifier.call(void 0),_.match.call(void 0,k.TokenType.comma)&&_.lookaheadType.call(void 0)===k.TokenType.star?(M.expect.call(void 0,k.TokenType.comma),M.expect.call(void 0,k.TokenType.star),M.expectContextual.call(void 0,le.ContextualKeyword._as),Ae.parseIdentifier.call(void 0)):ml(),Mo()):_.eat.call(void 0,k.TokenType._default)?eT():aT()?tT():(ha(),Mo()),h.state.tokens[e].rhsEndIndex=h.state.tokens.length)}ct.parseExport=kl;function eT(){if(h.isTypeScriptEnabled&&it.tsTryParseExportDefaultExpression.call(void 0)||h.isFlowEnabled&>.flowTryParseExportDefaultExpression.call(void 0))return;let e=h.state.start;_.eat.call(void 0,k.TokenType._function)?Oo(e,!0,!0):M.isContextual.call(void 0,le.ContextualKeyword._async)&&_.lookaheadType.call(void 0)===k.TokenType._function?(M.eatContextual.call(void 0,le.ContextualKeyword._async),_.eat.call(void 0,k.TokenType._function),Oo(e,!0,!0)):_.match.call(void 0,k.TokenType._class)?ws(!0,!0):_.match.call(void 0,k.TokenType.at)?(ua(),ws(!0,!0)):(Ae.parseMaybeAssign.call(void 0),M.semicolon.call(void 0))}function tT(){h.isTypeScriptEnabled?it.tsParseExportDeclaration.call(void 0):h.isFlowEnabled?gt.flowParseExportDeclaration.call(void 0):rn(!0)}function nT(){if(h.isTypeScriptEnabled&&it.tsIsDeclarationStart.call(void 0))return!1;if(h.isFlowEnabled&>.flowShouldDisallowExportDefaultSpecifier.call(void 0))return!1;if(_.match.call(void 0,k.TokenType.name))return h.state.contextualKeyword!==le.ContextualKeyword._async;if(!_.match.call(void 0,k.TokenType._default))return!1;let e=_.nextTokenStart.call(void 0),t=_.lookaheadTypeAndKeyword.call(void 0),n=t.type===k.TokenType.name&&t.contextualKeyword===le.ContextualKeyword._from;if(t.type===k.TokenType.comma)return!0;if(n){let o=h.input.charCodeAt(_.nextTokenStartSince.call(void 0,e+4));return o===al.charCodes.quotationMark||o===al.charCodes.apostrophe}return!1}function ml(){_.eat.call(void 0,k.TokenType.comma)&&ha()}function Mo(){M.eatContextual.call(void 0,le.ContextualKeyword._from)&&(Ae.parseExprAtom.call(void 0),xl()),M.semicolon.call(void 0)}ct.parseExportFrom=Mo;function oT(){return h.isFlowEnabled?gt.flowShouldParseExportStar.call(void 0):_.match.call(void 0,k.TokenType.star)}function sT(){h.isFlowEnabled?gt.flowParseExportStar.call(void 0):yl()}function yl(){M.expect.call(void 0,k.TokenType.star),M.isContextual.call(void 0,le.ContextualKeyword._as)?rT():Mo()}ct.baseParseExportStar=yl;function rT(){_.next.call(void 0),h.state.tokens[h.state.tokens.length-1].type=k.TokenType._as,Ae.parseIdentifier.call(void 0),ml(),Mo()}function aT(){return h.isTypeScriptEnabled&&it.tsIsDeclarationStart.call(void 0)||h.isFlowEnabled&>.flowShouldParseExportDeclaration.call(void 0)||h.state.type===k.TokenType._var||h.state.type===k.TokenType._const||h.state.type===k.TokenType._let||h.state.type===k.TokenType._function||h.state.type===k.TokenType._class||M.isContextual.call(void 0,le.ContextualKeyword._async)||_.match.call(void 0,k.TokenType.at)}function ha(){let e=!0;for(M.expect.call(void 0,k.TokenType.braceL);!_.eat.call(void 0,k.TokenType.braceR)&&!h.state.error;){if(e)e=!1;else if(M.expect.call(void 0,k.TokenType.comma),_.eat.call(void 0,k.TokenType.braceR))break;iT()}}ct.parseExportSpecifiers=ha;function iT(){if(h.isTypeScriptEnabled){it.tsParseExportSpecifier.call(void 0);return}Ae.parseIdentifier.call(void 0),h.state.tokens[h.state.tokens.length-1].identifierRole=_.IdentifierRole.ExportAccess,M.eatContextual.call(void 0,le.ContextualKeyword._as)&&Ae.parseIdentifier.call(void 0)}function lT(){let e=h.state.snapshot();return M.expectContextual.call(void 0,le.ContextualKeyword._module),M.eatContextual.call(void 0,le.ContextualKeyword._from)?M.isContextual.call(void 0,le.ContextualKeyword._from)?(h.state.restoreFromSnapshot(e),!0):(h.state.restoreFromSnapshot(e),!1):_.match.call(void 0,k.TokenType.comma)?(h.state.restoreFromSnapshot(e),!1):(h.state.restoreFromSnapshot(e),!0)}function cT(){M.isContextual.call(void 0,le.ContextualKeyword._module)&&lT()&&_.next.call(void 0)}function vl(){if(h.isTypeScriptEnabled&&_.match.call(void 0,k.TokenType.name)&&_.lookaheadType.call(void 0)===k.TokenType.eq){it.tsParseImportEqualsDeclaration.call(void 0);return}if(h.isTypeScriptEnabled&&M.isContextual.call(void 0,le.ContextualKeyword._type)){let e=_.lookaheadTypeAndKeyword.call(void 0);if(e.type===k.TokenType.name&&e.contextualKeyword!==le.ContextualKeyword._from){if(M.expectContextual.call(void 0,le.ContextualKeyword._type),_.lookaheadType.call(void 0)===k.TokenType.eq){it.tsParseImportEqualsDeclaration.call(void 0);return}}else(e.type===k.TokenType.star||e.type===k.TokenType.braceL)&&M.expectContextual.call(void 0,le.ContextualKeyword._type)}_.match.call(void 0,k.TokenType.string)||(cT(),uT(),M.expectContextual.call(void 0,le.ContextualKeyword._from)),Ae.parseExprAtom.call(void 0),xl(),M.semicolon.call(void 0)}ct.parseImport=vl;function pT(){return _.match.call(void 0,k.TokenType.name)}function ll(){Ln.parseImportedIdentifier.call(void 0)}function uT(){h.isFlowEnabled&>.flowStartParseImportSpecifiers.call(void 0);let e=!0;if(!(pT()&&(ll(),!_.eat.call(void 0,k.TokenType.comma)))){if(_.match.call(void 0,k.TokenType.star)){_.next.call(void 0),M.expectContextual.call(void 0,le.ContextualKeyword._as),ll();return}for(M.expect.call(void 0,k.TokenType.braceL);!_.eat.call(void 0,k.TokenType.braceR)&&!h.state.error;){if(e)e=!1;else if(_.eat.call(void 0,k.TokenType.colon)&&M.unexpected.call(void 0,"ES2015 named imports do not destructure. Use another statement for destructuring after the import."),M.expect.call(void 0,k.TokenType.comma),_.eat.call(void 0,k.TokenType.braceR))break;dT()}}}function dT(){if(h.isTypeScriptEnabled){it.tsParseImportSpecifier.call(void 0);return}if(h.isFlowEnabled){gt.flowParseImportSpecifier.call(void 0);return}Ln.parseImportedIdentifier.call(void 0),M.isContextual.call(void 0,le.ContextualKeyword._as)&&(h.state.tokens[h.state.tokens.length-1].identifierRole=_.IdentifierRole.ImportAccess,_.next.call(void 0),Ln.parseImportedIdentifier.call(void 0))}function xl(){(_.match.call(void 0,k.TokenType._with)||M.isContextual.call(void 0,le.ContextualKeyword._assert)&&!M.hasPrecedingLineBreak.call(void 0))&&(_.next.call(void 0),Ae.parseObj.call(void 0,!1,!1))}});var wl=G(ka=>{"use strict";Object.defineProperty(ka,"__esModule",{value:!0});var _l=pt(),gl=Bt(),Ta=Kt(),hT=Po();function fT(){return Ta.state.pos===0&&Ta.input.charCodeAt(0)===gl.charCodes.numberSign&&Ta.input.charCodeAt(1)===gl.charCodes.exclamationMark&&_l.skipLineComment.call(void 0,2),_l.nextToken.call(void 0),hT.parseTopLevel.call(void 0)}ka.parseFile=fT});var fa=G(Cs=>{"use strict";Object.defineProperty(Cs,"__esModule",{value:!0});var Is=Kt(),TT=wl(),ma=class{constructor(t,n){this.tokens=t,this.scopes=n}};Cs.File=ma;function kT(e,t,n,o){if(o&&n)throw new Error("Cannot combine flow and typescript plugins.");Is.initParser.call(void 0,e,t,n,o);let s=TT.parseFile.call(void 0);if(Is.state.error)throw Is.augmentError.call(void 0,Is.state.error);return s}Cs.parse=kT});var Il=G(ya=>{"use strict";Object.defineProperty(ya,"__esModule",{value:!0});var mT=dt();function yT(e){let t=e.currentIndex(),n=0,o=e.currentToken();do{let s=e.tokens[t];if(s.isOptionalChainStart&&n++,s.isOptionalChainEnd&&n--,n+=s.numNullishCoalesceStarts,n-=s.numNullishCoalesceEnds,s.contextualKeyword===mT.ContextualKeyword._await&&s.identifierRole==null&&s.scopeDepth===o.scopeDepth)return!0;t+=1}while(n>0&&t{"use strict";Object.defineProperty(xa,"__esModule",{value:!0});function vT(e){return e&&e.__esModule?e:{default:e}}var bs=ye(),xT=Il(),_T=vT(xT),va=class e{__init(){this.resultCode=""}__init2(){this.resultMappings=new Array(this.tokens.length)}__init3(){this.tokenIndex=0}constructor(t,n,o,s,r){this.code=t,this.tokens=n,this.isFlowEnabled=o,this.disableESTransforms=s,this.helperManager=r,e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this)}snapshot(){return{resultCode:this.resultCode,tokenIndex:this.tokenIndex}}restoreToSnapshot(t){this.resultCode=t.resultCode,this.tokenIndex=t.tokenIndex}dangerouslyGetAndRemoveCodeSinceSnapshot(t){let n=this.resultCode.slice(t.resultCode.length);return this.resultCode=t.resultCode,n}reset(){this.resultCode="",this.resultMappings=new Array(this.tokens.length),this.tokenIndex=0}matchesContextualAtIndex(t,n){return this.matches1AtIndex(t,bs.TokenType.name)&&this.tokens[t].contextualKeyword===n}identifierNameAtIndex(t){return this.identifierNameForToken(this.tokens[t])}identifierNameAtRelativeIndex(t){return this.identifierNameForToken(this.tokenAtRelativeIndex(t))}identifierName(){return this.identifierNameForToken(this.currentToken())}identifierNameForToken(t){return this.code.slice(t.start,t.end)}rawCodeForToken(t){return this.code.slice(t.start,t.end)}stringValueAtIndex(t){return this.stringValueForToken(this.tokens[t])}stringValue(){return this.stringValueForToken(this.currentToken())}stringValueForToken(t){return this.code.slice(t.start+1,t.end-1)}matches1AtIndex(t,n){return this.tokens[t].type===n}matches2AtIndex(t,n,o){return this.tokens[t].type===n&&this.tokens[t+1].type===o}matches3AtIndex(t,n,o,s){return this.tokens[t].type===n&&this.tokens[t+1].type===o&&this.tokens[t+2].type===s}matches1(t){return this.tokens[this.tokenIndex].type===t}matches2(t,n){return this.tokens[this.tokenIndex].type===t&&this.tokens[this.tokenIndex+1].type===n}matches3(t,n,o){return this.tokens[this.tokenIndex].type===t&&this.tokens[this.tokenIndex+1].type===n&&this.tokens[this.tokenIndex+2].type===o}matches4(t,n,o,s){return this.tokens[this.tokenIndex].type===t&&this.tokens[this.tokenIndex+1].type===n&&this.tokens[this.tokenIndex+2].type===o&&this.tokens[this.tokenIndex+3].type===s}matches5(t,n,o,s,r){return this.tokens[this.tokenIndex].type===t&&this.tokens[this.tokenIndex+1].type===n&&this.tokens[this.tokenIndex+2].type===o&&this.tokens[this.tokenIndex+3].type===s&&this.tokens[this.tokenIndex+4].type===r}matchesContextual(t){return this.matchesContextualAtIndex(this.tokenIndex,t)}matchesContextIdAndLabel(t,n){return this.matches1(t)&&this.currentToken().contextId===n}previousWhitespaceAndComments(){let t=this.code.slice(this.tokenIndex>0?this.tokens[this.tokenIndex-1].end:0,this.tokenIndex0&&this.tokenAtRelativeIndex(-1).type===bs.TokenType._delete?t.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChainDelete"):this.resultCode+=this.helperManager.getHelperName("optionalChainDelete"):t.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChain"):this.resultCode+=this.helperManager.getHelperName("optionalChain"),this.resultCode+="([")}}appendTokenSuffix(){let t=this.currentToken();if(t.isOptionalChainEnd&&!this.disableESTransforms&&(this.resultCode+="])"),t.numNullishCoalesceEnds&&!this.disableESTransforms)for(let n=0;n{"use strict";Object.defineProperty(ga,"__esModule",{value:!0});var bl=dt(),Ce=ye();function gT(e,t,n,o){let s=t.snapshot(),r=wT(t),u=[],v=[],R=[],A=null,K=[],X=[],N=t.currentToken().contextId;if(N==null)throw new Error("Expected non-null class context ID on class open-brace.");for(t.nextToken();!t.matchesContextIdAndLabel(Ce.TokenType.braceR,N);)if(t.matchesContextual(bl.ContextualKeyword._constructor)&&!t.currentToken().isType)({constructorInitializerStatements:u,constructorInsertPos:A}=Sl(t));else if(t.matches1(Ce.TokenType.semi))o||X.push({start:t.currentIndex(),end:t.currentIndex()+1}),t.nextToken();else if(t.currentToken().isType)t.nextToken();else{let $=t.currentIndex(),V=!1,ne=!1,j=!1;for(;Ss(t.currentToken());)t.matches1(Ce.TokenType._static)&&(V=!0),t.matches1(Ce.TokenType.hash)&&(ne=!0),(t.matches1(Ce.TokenType._declare)||t.matches1(Ce.TokenType._abstract))&&(j=!0),t.nextToken();if(V&&t.matches1(Ce.TokenType.braceL)){_a(t,N);continue}if(ne){_a(t,N);continue}if(t.matchesContextual(bl.ContextualKeyword._constructor)&&!t.currentToken().isType){({constructorInitializerStatements:u,constructorInsertPos:A}=Sl(t));continue}let ee=t.currentIndex();if(IT(t),t.matches1(Ce.TokenType.lessThan)||t.matches1(Ce.TokenType.parenL)){_a(t,N);continue}for(;t.currentToken().isType;)t.nextToken();if(t.matches1(Ce.TokenType.eq)){let se=t.currentIndex(),Pe=t.currentToken().rhsEndIndex;if(Pe==null)throw new Error("Expected rhsEndIndex on class field assignment.");for(t.nextToken();t.currentIndex(){"use strict";Object.defineProperty(wa,"__esModule",{value:!0});var Al=ye();function CT(e){if(e.removeInitialToken(),e.removeToken(),e.removeToken(),e.removeToken(),e.matches1(Al.TokenType.parenL))e.removeToken(),e.removeToken(),e.removeToken();else for(;e.matches1(Al.TokenType.dot);)e.removeToken(),e.removeToken()}wa.default=CT});var Ca=G(Es=>{"use strict";Object.defineProperty(Es,"__esModule",{value:!0});var bT=pt(),ST=ye(),ET={typeDeclarations:new Set,valueDeclarations:new Set};Es.EMPTY_DECLARATION_INFO=ET;function AT(e){let t=new Set,n=new Set;for(let o=0;o{"use strict";Object.defineProperty(ba,"__esModule",{value:!0});var PT=dt(),Pl=ye();function RT(e){let t=e.currentIndex();for(;!e.matches1AtIndex(t,Pl.TokenType.braceR);)t++;return e.matchesContextualAtIndex(t+1,PT.ContextualKeyword._from)&&e.matches1AtIndex(t+2,Pl.TokenType.string)}ba.default=RT});var Aa=G(Ea=>{"use strict";Object.defineProperty(Ea,"__esModule",{value:!0});var NT=dt(),As=ye();function DT(e){(e.matches2(As.TokenType._with,As.TokenType.braceL)||e.matches2(As.TokenType.name,As.TokenType.braceL)&&e.matchesContextual(NT.ContextualKeyword._assert))&&(e.removeToken(),e.removeToken(),e.removeBalancedCode(),e.removeToken())}Ea.removeMaybeImportAttributes=DT});var Ra=G(Pa=>{"use strict";Object.defineProperty(Pa,"__esModule",{value:!0});var Rl=ye();function LT(e,t,n,o){if(!e||t)return!1;let s=n.currentToken();if(s.rhsEndIndex==null)throw new Error("Expected non-null rhsEndIndex on export token.");let r=s.rhsEndIndex-n.currentIndex();if(r!==3&&!(r===4&&n.matches1AtIndex(s.rhsEndIndex-1,Rl.TokenType.semi)))return!1;let u=n.tokenAtRelativeIndex(2);if(u.type!==Rl.TokenType.name)return!1;let v=n.identifierNameForToken(u);return o.typeDeclarations.has(v)&&!o.valueDeclarations.has(v)}Pa.default=LT});var Dl=G(Da=>{"use strict";Object.defineProperty(Da,"__esModule",{value:!0});function po(e){return e&&e.__esModule?e:{default:e}}var Ps=pt(),Un=dt(),T=ye(),qT=Ia(),OT=po(qT),Nl=Ca(),MT=po(Nl),FT=mo(),jT=po(FT),BT=Sa(),KT=po(BT),Rs=Aa(),$T=Ra(),UT=po($T),HT=Wt(),VT=po(HT),Na=class e extends VT.default{__init(){this.hadExport=!1}__init2(){this.hadNamedExport=!1}__init3(){this.hadDefaultExport=!1}constructor(t,n,o,s,r,u,v,R,A,K,X,N){super(),this.rootTransformer=t,this.tokens=n,this.importProcessor=o,this.nameManager=s,this.helperManager=r,this.reactHotLoaderTransformer=u,this.enableLegacyBabel5ModuleInterop=v,this.enableLegacyTypeScriptModuleInterop=R,this.isTypeScriptTransformEnabled=A,this.isFlowTransformEnabled=K,this.preserveDynamicImport=X,this.keepUnusedImports=N,e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this),this.declarationInfo=A?MT.default.call(void 0,n):Nl.EMPTY_DECLARATION_INFO}getPrefixCode(){let t="";return this.hadExport&&(t+='Object.defineProperty(exports, "__esModule", {value: true});'),t}getSuffixCode(){return this.enableLegacyBabel5ModuleInterop&&this.hadDefaultExport&&!this.hadNamedExport?` +module.exports = exports.default; +`:""}process(){return this.tokens.matches3(T.TokenType._import,T.TokenType.name,T.TokenType.eq)?this.processImportEquals():this.tokens.matches1(T.TokenType._import)?(this.processImport(),!0):this.tokens.matches2(T.TokenType._export,T.TokenType.eq)?(this.tokens.replaceToken("module.exports"),!0):this.tokens.matches1(T.TokenType._export)&&!this.tokens.currentToken().isType?(this.hadExport=!0,this.processExport()):this.tokens.matches2(T.TokenType.name,T.TokenType.postIncDec)&&this.processPostIncDec()?!0:this.tokens.matches1(T.TokenType.name)||this.tokens.matches1(T.TokenType.jsxName)?this.processIdentifier():this.tokens.matches1(T.TokenType.eq)?this.processAssignment():this.tokens.matches1(T.TokenType.assign)?this.processComplexAssignment():this.tokens.matches1(T.TokenType.preIncDec)?this.processPreIncDec():!1}processImportEquals(){let t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.importProcessor.shouldAutomaticallyElideImportedName(t)?OT.default.call(void 0,this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(T.TokenType._import,T.TokenType.parenL)){if(this.preserveDynamicImport){this.tokens.copyToken();return}let n=this.enableLegacyTypeScriptModuleInterop?"":`${this.helperManager.getHelperName("interopRequireWildcard")}(`;this.tokens.replaceToken(`Promise.resolve().then(() => ${n}require`);let o=this.tokens.currentToken().contextId;if(o==null)throw new Error("Expected context ID on dynamic import invocation.");for(this.tokens.copyToken();!this.tokens.matchesContextIdAndLabel(T.TokenType.parenR,o);)this.rootTransformer.processToken();this.tokens.replaceToken(n?")))":"))");return}if(this.removeImportAndDetectIfShouldElide())this.tokens.removeToken();else{let n=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(n)),this.tokens.appendCode(this.importProcessor.claimImportCode(n))}Rs.removeMaybeImportAttributes.call(void 0,this.tokens),this.tokens.matches1(T.TokenType.semi)&&this.tokens.removeToken()}removeImportAndDetectIfShouldElide(){if(this.tokens.removeInitialToken(),this.tokens.matchesContextual(Un.ContextualKeyword._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,T.TokenType.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,Un.ContextualKeyword._from))return this.removeRemainingImport(),!0;if(this.tokens.matches1(T.TokenType.name)||this.tokens.matches1(T.TokenType.star))return this.removeRemainingImport(),!1;if(this.tokens.matches1(T.TokenType.string))return!1;let t=!1,n=!1;for(;!this.tokens.matches1(T.TokenType.string);)(!t&&this.tokens.matches1(T.TokenType.braceL)||this.tokens.matches1(T.TokenType.comma))&&(this.tokens.removeToken(),this.tokens.matches1(T.TokenType.braceR)||(n=!0),(this.tokens.matches2(T.TokenType.name,T.TokenType.comma)||this.tokens.matches2(T.TokenType.name,T.TokenType.braceR)||this.tokens.matches4(T.TokenType.name,T.TokenType.name,T.TokenType.name,T.TokenType.comma)||this.tokens.matches4(T.TokenType.name,T.TokenType.name,T.TokenType.name,T.TokenType.braceR))&&(t=!0)),this.tokens.removeToken();return this.keepUnusedImports?!1:this.isTypeScriptTransformEnabled?!t:this.isFlowTransformEnabled?n&&!t:!1}removeRemainingImport(){for(;!this.tokens.matches1(T.TokenType.string);)this.tokens.removeToken()}processIdentifier(){let t=this.tokens.currentToken();if(t.shadowsGlobal)return!1;if(t.identifierRole===Ps.IdentifierRole.ObjectShorthand)return this.processObjectShorthand();if(t.identifierRole!==Ps.IdentifierRole.Access)return!1;let n=this.importProcessor.getIdentifierReplacement(this.tokens.identifierNameForToken(t));if(!n)return!1;let o=this.tokens.currentIndex()+1;for(;o=2&&this.tokens.matches1AtIndex(t-2,T.TokenType.dot)||t>=2&&[T.TokenType._var,T.TokenType._let,T.TokenType._const].includes(this.tokens.tokens[t-2].type))return!1;let o=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(n));return o?(this.tokens.copyToken(),this.tokens.appendCode(` ${o} =`),!0):!1}processComplexAssignment(){let t=this.tokens.currentIndex(),n=this.tokens.tokens[t-1];if(n.type!==T.TokenType.name||n.shadowsGlobal||t>=2&&this.tokens.matches1AtIndex(t-2,T.TokenType.dot))return!1;let o=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(n));return o?(this.tokens.appendCode(` = ${o}`),this.tokens.copyToken(),!0):!1}processPreIncDec(){let t=this.tokens.currentIndex(),n=this.tokens.tokens[t+1];if(n.type!==T.TokenType.name||n.shadowsGlobal||t+2=1&&this.tokens.matches1AtIndex(t-1,T.TokenType.dot))return!1;let s=this.tokens.identifierNameForToken(n),r=this.importProcessor.resolveExportBinding(s);if(!r)return!1;let u=this.tokens.rawCodeForToken(o),v=this.importProcessor.getIdentifierReplacement(s)||s;if(u==="++")this.tokens.replaceToken(`(${v} = ${r} = ${v} + 1, ${v} - 1)`);else if(u==="--")this.tokens.replaceToken(`(${v} = ${r} = ${v} - 1, ${v} + 1)`);else throw new Error(`Unexpected operator: ${u}`);return this.tokens.removeToken(),!0}processExportDefault(){let t=!0;if(this.tokens.matches4(T.TokenType._export,T.TokenType._default,T.TokenType._function,T.TokenType.name)||this.tokens.matches5(T.TokenType._export,T.TokenType._default,T.TokenType.name,T.TokenType._function,T.TokenType.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,Un.ContextualKeyword._async)){this.tokens.removeInitialToken(),this.tokens.removeToken();let n=this.processNamedFunction();this.tokens.appendCode(` exports.default = ${n};`)}else if(this.tokens.matches4(T.TokenType._export,T.TokenType._default,T.TokenType._class,T.TokenType.name)||this.tokens.matches5(T.TokenType._export,T.TokenType._default,T.TokenType._abstract,T.TokenType._class,T.TokenType.name)||this.tokens.matches3(T.TokenType._export,T.TokenType._default,T.TokenType.at)){this.tokens.removeInitialToken(),this.tokens.removeToken(),this.copyDecorators(),this.tokens.matches1(T.TokenType._abstract)&&this.tokens.removeToken();let n=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.default = ${n};`)}else if(UT.default.call(void 0,this.isTypeScriptTransformEnabled,this.keepUnusedImports,this.tokens,this.declarationInfo))t=!1,this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken();else if(this.reactHotLoaderTransformer){let n=this.nameManager.claimFreeName("_default");this.tokens.replaceToken(`let ${n}; exports.`),this.tokens.copyToken(),this.tokens.appendCode(` = ${n} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(n)}else this.tokens.replaceToken("exports."),this.tokens.copyToken(),this.tokens.appendCode(" =");t&&(this.hadDefaultExport=!0)}copyDecorators(){for(;this.tokens.matches1(T.TokenType.at);)if(this.tokens.copyToken(),this.tokens.matches1(T.TokenType.parenL))this.tokens.copyExpectedToken(T.TokenType.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(T.TokenType.parenR);else{for(this.tokens.copyExpectedToken(T.TokenType.name);this.tokens.matches1(T.TokenType.dot);)this.tokens.copyExpectedToken(T.TokenType.dot),this.tokens.copyExpectedToken(T.TokenType.name);this.tokens.matches1(T.TokenType.parenL)&&(this.tokens.copyExpectedToken(T.TokenType.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(T.TokenType.parenR))}}processExportVar(){this.isSimpleExportVar()?this.processSimpleExportVar():this.processComplexExportVar()}isSimpleExportVar(){let t=this.tokens.currentIndex();if(t++,t++,!this.tokens.matches1AtIndex(t,T.TokenType.name))return!1;for(t++;t{"use strict";Object.defineProperty(Oa,"__esModule",{value:!0});function uo(e){return e&&e.__esModule?e:{default:e}}var xn=dt(),H=ye(),WT=Ia(),XT=uo(WT),ql=Ca(),JT=uo(ql),GT=mo(),Ll=uo(GT),zT=rr(),YT=Sa(),QT=uo(YT),La=Aa(),ZT=Ra(),ek=uo(ZT),tk=Wt(),nk=uo(tk),qa=class extends nk.default{constructor(t,n,o,s,r,u,v,R){super(),this.tokens=t,this.nameManager=n,this.helperManager=o,this.reactHotLoaderTransformer=s,this.isTypeScriptTransformEnabled=r,this.isFlowTransformEnabled=u,this.keepUnusedImports=v,this.nonTypeIdentifiers=r&&!v?zT.getNonTypeIdentifiers.call(void 0,t,R):new Set,this.declarationInfo=r&&!v?JT.default.call(void 0,t):ql.EMPTY_DECLARATION_INFO,this.injectCreateRequireForImportRequire=!!R.injectCreateRequireForImportRequire}process(){if(this.tokens.matches3(H.TokenType._import,H.TokenType.name,H.TokenType.eq))return this.processImportEquals();if(this.tokens.matches4(H.TokenType._import,H.TokenType.name,H.TokenType.name,H.TokenType.eq)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,xn.ContextualKeyword._type)){this.tokens.removeInitialToken();for(let t=0;t<7;t++)this.tokens.removeToken();return!0}if(this.tokens.matches2(H.TokenType._export,H.TokenType.eq))return this.tokens.replaceToken("module.exports"),!0;if(this.tokens.matches5(H.TokenType._export,H.TokenType._import,H.TokenType.name,H.TokenType.name,H.TokenType.eq)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,xn.ContextualKeyword._type)){this.tokens.removeInitialToken();for(let t=0;t<8;t++)this.tokens.removeToken();return!0}if(this.tokens.matches1(H.TokenType._import))return this.processImport();if(this.tokens.matches2(H.TokenType._export,H.TokenType._default))return this.processExportDefault();if(this.tokens.matches2(H.TokenType._export,H.TokenType.braceL))return this.processNamedExports();if(this.tokens.matches2(H.TokenType._export,H.TokenType.name)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,xn.ContextualKeyword._type)){if(this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.matches1(H.TokenType.braceL)){for(;!this.tokens.matches1(H.TokenType.braceR);)this.tokens.removeToken();this.tokens.removeToken()}else this.tokens.removeToken(),this.tokens.matches1(H.TokenType._as)&&(this.tokens.removeToken(),this.tokens.removeToken());return this.tokens.matchesContextual(xn.ContextualKeyword._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,H.TokenType.string)&&(this.tokens.removeToken(),this.tokens.removeToken(),La.removeMaybeImportAttributes.call(void 0,this.tokens)),!0}return!1}processImportEquals(){let t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.shouldAutomaticallyElideImportedName(t)?XT.default.call(void 0,this.tokens):this.injectCreateRequireForImportRequire?(this.tokens.replaceToken("const"),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.replaceToken(this.helperManager.getHelperName("require"))):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(H.TokenType._import,H.TokenType.parenL))return!1;let t=this.tokens.snapshot();if(this.removeImportTypeBindings()){for(this.tokens.restoreToSnapshot(t);!this.tokens.matches1(H.TokenType.string);)this.tokens.removeToken();this.tokens.removeToken(),La.removeMaybeImportAttributes.call(void 0,this.tokens),this.tokens.matches1(H.TokenType.semi)&&this.tokens.removeToken()}return!0}removeImportTypeBindings(){if(this.tokens.copyExpectedToken(H.TokenType._import),this.tokens.matchesContextual(xn.ContextualKeyword._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,H.TokenType.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,xn.ContextualKeyword._from))return!0;if(this.tokens.matches1(H.TokenType.string))return this.tokens.copyToken(),!1;this.tokens.matchesContextual(xn.ContextualKeyword._module)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+2,xn.ContextualKeyword._from)&&this.tokens.copyToken();let t=!1,n=!1,o=!1;if(this.tokens.matches1(H.TokenType.name)&&(this.shouldAutomaticallyElideImportedName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(H.TokenType.comma)&&this.tokens.removeToken()):(t=!0,this.tokens.copyToken(),this.tokens.matches1(H.TokenType.comma)&&(o=!0,this.tokens.removeToken()))),this.tokens.matches1(H.TokenType.star))this.shouldAutomaticallyElideImportedName(this.tokens.identifierNameAtRelativeIndex(2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken()):(o&&this.tokens.appendCode(","),t=!0,this.tokens.copyExpectedToken(H.TokenType.star),this.tokens.copyExpectedToken(H.TokenType.name),this.tokens.copyExpectedToken(H.TokenType.name));else if(this.tokens.matches1(H.TokenType.braceL)){for(o&&this.tokens.appendCode(","),this.tokens.copyToken();!this.tokens.matches1(H.TokenType.braceR);){n=!0;let s=Ll.default.call(void 0,this.tokens);if(s.isType||this.shouldAutomaticallyElideImportedName(s.rightName)){for(;this.tokens.currentIndex(){"use strict";Object.defineProperty(Fa,"__esModule",{value:!0});function ok(e){return e&&e.__esModule?e:{default:e}}var Ml=dt(),Vt=ye(),sk=Wt(),rk=ok(sk),Ma=class extends rk.default{constructor(t,n,o){super(),this.rootTransformer=t,this.tokens=n,this.isImportsTransformEnabled=o}process(){return this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange()?!0:this.tokens.matches1(Vt.TokenType._enum)?(this.processEnum(),!0):this.tokens.matches2(Vt.TokenType._export,Vt.TokenType._enum)?(this.processNamedExportEnum(),!0):this.tokens.matches3(Vt.TokenType._export,Vt.TokenType._default,Vt.TokenType._enum)?(this.processDefaultExportEnum(),!0):!1}processNamedExportEnum(){if(this.isImportsTransformEnabled){this.tokens.removeInitialToken();let t=this.tokens.identifierNameAtRelativeIndex(1);this.processEnum(),this.tokens.appendCode(` exports.${t} = ${t};`)}else this.tokens.copyToken(),this.processEnum()}processDefaultExportEnum(){this.tokens.removeInitialToken(),this.tokens.removeToken();let t=this.tokens.identifierNameAtRelativeIndex(1);this.processEnum(),this.isImportsTransformEnabled?this.tokens.appendCode(` exports.default = ${t};`):this.tokens.appendCode(` export default ${t};`)}processEnum(){this.tokens.replaceToken("const"),this.tokens.copyExpectedToken(Vt.TokenType.name);let t=!1;this.tokens.matchesContextual(Ml.ContextualKeyword._of)&&(this.tokens.removeToken(),t=this.tokens.matchesContextual(Ml.ContextualKeyword._symbol),this.tokens.removeToken());let n=this.tokens.matches3(Vt.TokenType.braceL,Vt.TokenType.name,Vt.TokenType.eq);this.tokens.appendCode(' = require("flow-enums-runtime")');let o=!t&&!n;for(this.tokens.replaceTokenTrimmingLeftWhitespace(o?".Mirrored([":"({");!this.tokens.matches1(Vt.TokenType.braceR);){if(this.tokens.matches1(Vt.TokenType.ellipsis)){this.tokens.removeToken();break}this.processEnumElement(t,n),this.tokens.matches1(Vt.TokenType.comma)&&this.tokens.copyToken()}this.tokens.replaceToken(o?"]);":"});")}processEnumElement(t,n){if(t){let o=this.tokens.identifierName();this.tokens.copyToken(),this.tokens.appendCode(`: Symbol("${o}")`)}else n?(this.tokens.copyToken(),this.tokens.replaceTokenTrimmingLeftWhitespace(":"),this.tokens.copyToken()):this.tokens.replaceToken(`"${this.tokens.identifierName()}"`)}};Fa.default=Ma});var jl=G(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});function ak(e){return e&&e.__esModule?e:{default:e}}function ik(e){let t,n=e[0],o=1;for(;on.call(t,...u)),t=void 0)}return n}var _n=ye(),lk=Wt(),ck=ak(lk),Ns="jest",pk=["mock","unmock","enableAutomock","disableAutomock"],ja=class e extends ck.default{__init(){this.hoistedFunctionNames=[]}constructor(t,n,o,s){super(),this.rootTransformer=t,this.tokens=n,this.nameManager=o,this.importProcessor=s,e.prototype.__init.call(this)}process(){return this.tokens.currentToken().scopeDepth===0&&this.tokens.matches4(_n.TokenType.name,_n.TokenType.dot,_n.TokenType.name,_n.TokenType.parenL)&&this.tokens.identifierName()===Ns?ik([this,"access",t=>t.importProcessor,"optionalAccess",t=>t.getGlobalNames,"call",t=>t(),"optionalAccess",t=>t.has,"call",t=>t(Ns)])?!1:this.extractHoistedCalls():!1}getHoistedCode(){return this.hoistedFunctionNames.length>0?this.hoistedFunctionNames.map(t=>`${t}();`).join(""):""}extractHoistedCalls(){this.tokens.removeToken();let t=!1;for(;this.tokens.matches3(_n.TokenType.dot,_n.TokenType.name,_n.TokenType.parenL);){let n=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);if(pk.includes(n)){let s=this.nameManager.claimFreeName("__jestHoist");this.hoistedFunctionNames.push(s),this.tokens.replaceToken(`function ${s}(){${Ns}.`),this.tokens.copyToken(),this.tokens.copyToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(_n.TokenType.parenR),this.tokens.appendCode(";}"),t=!1}else t?this.tokens.copyToken():this.tokens.replaceToken(`${Ns}.`),this.tokens.copyToken(),this.tokens.copyToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(_n.TokenType.parenR),t=!0}return!0}};Ba.default=ja});var Bl=G($a=>{"use strict";Object.defineProperty($a,"__esModule",{value:!0});function uk(e){return e&&e.__esModule?e:{default:e}}var dk=ye(),hk=Wt(),fk=uk(hk),Ka=class extends fk.default{constructor(t){super(),this.tokens=t}process(){if(this.tokens.matches1(dk.TokenType.num)){let t=this.tokens.currentTokenCode();if(t.includes("_"))return this.tokens.replaceToken(t.replace(/_/g,"")),!0}return!1}};$a.default=Ka});var $l=G(Ha=>{"use strict";Object.defineProperty(Ha,"__esModule",{value:!0});function Tk(e){return e&&e.__esModule?e:{default:e}}var Kl=ye(),kk=Wt(),mk=Tk(kk),Ua=class extends mk.default{constructor(t,n){super(),this.tokens=t,this.nameManager=n}process(){return this.tokens.matches2(Kl.TokenType._catch,Kl.TokenType.braceL)?(this.tokens.copyToken(),this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`),!0):!1}};Ha.default=Ua});var Ul=G(Wa=>{"use strict";Object.defineProperty(Wa,"__esModule",{value:!0});function yk(e){return e&&e.__esModule?e:{default:e}}var Ct=ye(),vk=Wt(),xk=yk(vk),Va=class extends xk.default{constructor(t,n){super(),this.tokens=t,this.nameManager=n}process(){if(this.tokens.matches1(Ct.TokenType.nullishCoalescing)){let o=this.tokens.currentToken();return this.tokens.tokens[o.nullishStartIndex].isAsyncOperation?this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("):this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("),!0}if(this.tokens.matches1(Ct.TokenType._delete)&&this.tokens.tokenAtRelativeIndex(1).isOptionalChainStart)return this.tokens.removeInitialToken(),!0;let n=this.tokens.currentToken().subscriptStartIndex;if(n!=null&&this.tokens.tokens[n].isOptionalChainStart&&this.tokens.tokenAtRelativeIndex(-1).type!==Ct.TokenType._super){let o=this.nameManager.claimFreeName("_"),s;if(n>0&&this.tokens.matches1AtIndex(n-1,Ct.TokenType._delete)&&this.isLastSubscriptInChain()?s=`${o} => delete ${o}`:s=`${o} => ${o}`,this.tokens.tokens[n].isAsyncOperation&&(s=`async ${s}`),this.tokens.matches2(Ct.TokenType.questionDot,Ct.TokenType.parenL)||this.tokens.matches2(Ct.TokenType.questionDot,Ct.TokenType.lessThan))this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${s}`);else if(this.tokens.matches2(Ct.TokenType.questionDot,Ct.TokenType.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${s}`);else if(this.tokens.matches1(Ct.TokenType.questionDot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${s}.`);else if(this.tokens.matches1(Ct.TokenType.dot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${s}.`);else if(this.tokens.matches1(Ct.TokenType.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${s}[`);else if(this.tokens.matches1(Ct.TokenType.parenL))this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${s}(`);else throw new Error("Unexpected subscript operator in optional chain.");return!0}return!1}isLastSubscriptInChain(){let t=0;for(let n=this.tokens.currentIndex()+1;;n++){if(n>=this.tokens.tokens.length)throw new Error("Reached the end of the code while finding the end of the access chain.");if(this.tokens.tokens[n].isOptionalChainStart?t++:this.tokens.tokens[n].isOptionalChainEnd&&t--,t<0)return!0;if(t===0&&this.tokens.tokens[n].subscriptStartIndex!=null)return!1}}justSkippedSuper(){let t=0,n=this.tokens.currentIndex()-1;for(;;){if(n<0)throw new Error("Reached the start of the code while finding the start of the access chain.");if(this.tokens.tokens[n].isOptionalChainStart?t--:this.tokens.tokens[n].isOptionalChainEnd&&t++,t<0)return!1;if(t===0&&this.tokens.tokens[n].subscriptStartIndex!=null)return this.tokens.tokens[n-1].type===Ct.TokenType._super;n--}}};Wa.default=Va});var Vl=G(Ja=>{"use strict";Object.defineProperty(Ja,"__esModule",{value:!0});function _k(e){return e&&e.__esModule?e:{default:e}}var Hl=pt(),ft=ye(),gk=Wt(),wk=_k(gk),Xa=class extends wk.default{constructor(t,n,o,s){super(),this.rootTransformer=t,this.tokens=n,this.importProcessor=o,this.options=s}process(){let t=this.tokens.currentIndex();if(this.tokens.identifierName()==="createReactClass"){let n=this.importProcessor&&this.importProcessor.getIdentifierReplacement("createReactClass");return n?this.tokens.replaceToken(`(0, ${n})`):this.tokens.copyToken(),this.tryProcessCreateClassCall(t),!0}if(this.tokens.matches3(ft.TokenType.name,ft.TokenType.dot,ft.TokenType.name)&&this.tokens.identifierName()==="React"&&this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2)==="createClass"){let n=this.importProcessor&&this.importProcessor.getIdentifierReplacement("React")||"React";return n?(this.tokens.replaceToken(n),this.tokens.copyToken(),this.tokens.copyToken()):(this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken()),this.tryProcessCreateClassCall(t),!0}return!1}tryProcessCreateClassCall(t){let n=this.findDisplayName(t);n&&this.classNeedsDisplayName()&&(this.tokens.copyExpectedToken(ft.TokenType.parenL),this.tokens.copyExpectedToken(ft.TokenType.braceL),this.tokens.appendCode(`displayName: '${n}',`),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(ft.TokenType.braceR),this.tokens.copyExpectedToken(ft.TokenType.parenR))}findDisplayName(t){return t<2?null:this.tokens.matches2AtIndex(t-2,ft.TokenType.name,ft.TokenType.eq)?this.tokens.identifierNameAtIndex(t-2):t>=2&&this.tokens.tokens[t-2].identifierRole===Hl.IdentifierRole.ObjectKey?this.tokens.identifierNameAtIndex(t-2):this.tokens.matches2AtIndex(t-2,ft.TokenType._export,ft.TokenType._default)?this.getDisplayNameFromFilename():null}getDisplayNameFromFilename(){let n=(this.options.filePath||"unknown").split("/"),o=n[n.length-1],s=o.lastIndexOf("."),r=s===-1?o:o.slice(0,s);return r==="index"&&n[n.length-2]?n[n.length-2]:r}classNeedsDisplayName(){let t=this.tokens.currentIndex();if(!this.tokens.matches2(ft.TokenType.parenL,ft.TokenType.braceL))return!1;let n=t+1,o=this.tokens.tokens[n].contextId;if(o==null)throw new Error("Expected non-null context ID on object open-brace.");for(;t{"use strict";Object.defineProperty(za,"__esModule",{value:!0});function Ik(e){return e&&e.__esModule?e:{default:e}}var Wl=pt(),Ck=Wt(),bk=Ik(Ck),Ga=class e extends bk.default{__init(){this.extractedDefaultExportName=null}constructor(t,n){super(),this.tokens=t,this.filePath=n,e.prototype.__init.call(this)}setExtractedDefaultExportName(t){this.extractedDefaultExportName=t}getPrefixCode(){return` + (function () { + var enterModule = require('react-hot-loader').enterModule; + enterModule && enterModule(module); + })();`.replace(/\s+/g," ").trim()}getSuffixCode(){let t=new Set;for(let o of this.tokens.tokens)!o.isType&&Wl.isTopLevelDeclaration.call(void 0,o)&&o.identifierRole!==Wl.IdentifierRole.ImportDeclaration&&t.add(this.tokens.identifierNameForToken(o));let n=Array.from(t).map(o=>({variableName:o,uniqueLocalName:o}));return this.extractedDefaultExportName&&n.push({variableName:this.extractedDefaultExportName,uniqueLocalName:"default"}),` +;(function () { + var reactHotLoader = require('react-hot-loader').default; + var leaveModule = require('react-hot-loader').leaveModule; + if (!reactHotLoader) { + return; + } +${n.map(({variableName:o,uniqueLocalName:s})=>` reactHotLoader.register(${o}, "${s}", ${JSON.stringify(this.filePath||"")});`).join(` +`)} + leaveModule(module); +})();`}process(){return!1}};za.default=Ga});var Gl=G(Ya=>{"use strict";Object.defineProperty(Ya,"__esModule",{value:!0});var Jl=zn(),Sk=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await","false","null","true"]);function Ek(e){if(e.length===0||!Jl.IS_IDENTIFIER_START[e.charCodeAt(0)])return!1;for(let t=1;t{"use strict";Object.defineProperty(Za,"__esModule",{value:!0});function Yl(e){return e&&e.__esModule?e:{default:e}}var Be=ye(),Ak=Gl(),zl=Yl(Ak),Pk=Wt(),Rk=Yl(Pk),Qa=class extends Rk.default{constructor(t,n,o){super(),this.rootTransformer=t,this.tokens=n,this.isImportsTransformEnabled=o}process(){return this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange()?!0:this.tokens.matches1(Be.TokenType._public)||this.tokens.matches1(Be.TokenType._protected)||this.tokens.matches1(Be.TokenType._private)||this.tokens.matches1(Be.TokenType._abstract)||this.tokens.matches1(Be.TokenType._readonly)||this.tokens.matches1(Be.TokenType._override)||this.tokens.matches1(Be.TokenType.nonNullAssertion)?(this.tokens.removeInitialToken(),!0):this.tokens.matches1(Be.TokenType._enum)||this.tokens.matches2(Be.TokenType._const,Be.TokenType._enum)?(this.processEnum(),!0):this.tokens.matches2(Be.TokenType._export,Be.TokenType._enum)||this.tokens.matches3(Be.TokenType._export,Be.TokenType._const,Be.TokenType._enum)?(this.processEnum(!0),!0):!1}processEnum(t=!1){for(this.tokens.removeInitialToken();this.tokens.matches1(Be.TokenType._const)||this.tokens.matches1(Be.TokenType._enum);)this.tokens.removeToken();let n=this.tokens.identifierName();this.tokens.removeToken(),t&&!this.isImportsTransformEnabled&&this.tokens.appendCode("export "),this.tokens.appendCode(`var ${n}; (function (${n})`),this.tokens.copyExpectedToken(Be.TokenType.braceL),this.processEnumBody(n),this.tokens.copyExpectedToken(Be.TokenType.braceR),t&&this.isImportsTransformEnabled?this.tokens.appendCode(`)(${n} || (exports.${n} = ${n} = {}));`):this.tokens.appendCode(`)(${n} || (${n} = {}));`)}processEnumBody(t){let n=null;for(;!this.tokens.matches1(Be.TokenType.braceR);){let{nameStringCode:o,variableName:s}=this.extractEnumKeyInfo(this.tokens.currentToken());this.tokens.removeInitialToken(),this.tokens.matches3(Be.TokenType.eq,Be.TokenType.string,Be.TokenType.comma)||this.tokens.matches3(Be.TokenType.eq,Be.TokenType.string,Be.TokenType.braceR)?this.processStringLiteralEnumMember(t,o,s):this.tokens.matches1(Be.TokenType.eq)?this.processExplicitValueEnumMember(t,o,s):this.processImplicitValueEnumMember(t,o,s,n),this.tokens.matches1(Be.TokenType.comma)&&this.tokens.removeToken(),s!=null?n=s:n=`${t}[${o}]`}}extractEnumKeyInfo(t){if(t.type===Be.TokenType.name){let n=this.tokens.identifierNameForToken(t);return{nameStringCode:`"${n}"`,variableName:zl.default.call(void 0,n)?n:null}}else if(t.type===Be.TokenType.string){let n=this.tokens.stringValueForToken(t);return{nameStringCode:this.tokens.code.slice(t.start,t.end),variableName:zl.default.call(void 0,n)?n:null}}else throw new Error("Expected name or string at beginning of enum element.")}processStringLiteralEnumMember(t,n,o){o!=null?(this.tokens.appendCode(`const ${o}`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(`; ${t}[${n}] = ${o};`)):(this.tokens.appendCode(`${t}[${n}]`),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.appendCode(";"))}processExplicitValueEnumMember(t,n,o){let s=this.tokens.currentToken().rhsEndIndex;if(s==null)throw new Error("Expected rhsEndIndex on enum assign.");if(o!=null){for(this.tokens.appendCode(`const ${o}`),this.tokens.copyToken();this.tokens.currentIndex(){"use strict";Object.defineProperty(ti,"__esModule",{value:!0});function zt(e){return e&&e.__esModule?e:{default:e}}var Nk=dt(),st=ye(),Dk=El(),Lk=zt(Dk),qk=Dl(),Ok=zt(qk),Mk=Ol(),Fk=zt(Mk),jk=Fl(),Bk=zt(jk),Kk=jl(),$k=zt(Kk),Uk=or(),Hk=zt(Uk),Vk=Bl(),Wk=zt(Vk),Xk=$l(),Jk=zt(Xk),Gk=Ul(),zk=zt(Gk),Yk=Vl(),Qk=zt(Yk),Zk=Xl(),em=zt(Zk),tm=Ql(),nm=zt(tm),ei=class e{__init(){this.transformers=[]}__init2(){this.generatedVariables=[]}constructor(t,n,o,s){e.prototype.__init.call(this),e.prototype.__init2.call(this),this.nameManager=t.nameManager,this.helperManager=t.helperManager;let{tokenProcessor:r,importProcessor:u}=t;this.tokens=r,this.isImportsTransformEnabled=n.includes("imports"),this.isReactHotLoaderTransformEnabled=n.includes("react-hot-loader"),this.disableESTransforms=!!s.disableESTransforms,s.disableESTransforms||(this.transformers.push(new zk.default(r,this.nameManager)),this.transformers.push(new Wk.default(r)),this.transformers.push(new Jk.default(r,this.nameManager))),n.includes("jsx")&&(s.jsxRuntime!=="preserve"&&this.transformers.push(new Hk.default(this,r,u,this.nameManager,s)),this.transformers.push(new Qk.default(this,r,u,s)));let v=null;if(n.includes("react-hot-loader")){if(!s.filePath)throw new Error("filePath is required when using the react-hot-loader transform.");v=new em.default(r,s.filePath),this.transformers.push(v)}if(n.includes("imports")){if(u===null)throw new Error("Expected non-null importProcessor with imports transform enabled.");this.transformers.push(new Ok.default(this,r,u,this.nameManager,this.helperManager,v,o,!!s.enableLegacyTypeScriptModuleInterop,n.includes("typescript"),n.includes("flow"),!!s.preserveDynamicImport,!!s.keepUnusedImports))}else this.transformers.push(new Fk.default(r,this.nameManager,this.helperManager,v,n.includes("typescript"),n.includes("flow"),!!s.keepUnusedImports,s));n.includes("flow")&&this.transformers.push(new Bk.default(this,r,n.includes("imports"))),n.includes("typescript")&&this.transformers.push(new nm.default(this,r,n.includes("imports"))),n.includes("jest")&&this.transformers.push(new $k.default(this,r,this.nameManager,u))}transform(){this.tokens.reset(),this.processBalancedCode();let n=this.isImportsTransformEnabled?'"use strict";':"";for(let u of this.transformers)n+=u.getPrefixCode();n+=this.helperManager.emitHelpers(),n+=this.generatedVariables.map(u=>` var ${u};`).join("");for(let u of this.transformers)n+=u.getHoistedCode();let o="";for(let u of this.transformers)o+=u.getSuffixCode();let s=this.tokens.finish(),{code:r}=s;if(r.startsWith("#!")){let u=r.indexOf(` +`);return u===-1&&(u=r.length,r+=` +`),{code:r.slice(0,u+1)+n+r.slice(u+1)+o,mappings:this.shiftMappings(s.mappings,n.length)}}else return{code:n+r+o,mappings:this.shiftMappings(s.mappings,n.length)}}processBalancedCode(){let t=0,n=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(st.TokenType.braceL)||this.tokens.matches1(st.TokenType.dollarBraceL))t++;else if(this.tokens.matches1(st.TokenType.braceR)){if(t===0)return;t--}if(this.tokens.matches1(st.TokenType.parenL))n++;else if(this.tokens.matches1(st.TokenType.parenR)){if(n===0)return;n--}this.processToken()}}processToken(){if(this.tokens.matches1(st.TokenType._class)){this.processClass();return}for(let t of this.transformers)if(t.process())return;this.tokens.copyToken()}processNamedClass(){if(!this.tokens.matches2(st.TokenType._class,st.TokenType.name))throw new Error("Expected identifier for exported class name.");let t=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),t}processClass(){let t=Lk.default.call(void 0,this,this.tokens,this.nameManager,this.disableESTransforms),n=(t.headerInfo.isExpression||!t.headerInfo.className)&&t.staticInitializerNames.length+t.instanceInitializerNames.length>0,o=t.headerInfo.className;n&&(o=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(o),this.tokens.appendCode(` (${o} =`));let r=this.tokens.currentToken().contextId;if(r==null)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(st.TokenType._class);!this.tokens.matchesContextIdAndLabel(st.TokenType.braceL,r);)this.processToken();this.processClassBody(t,o);let u=t.staticInitializerNames.map(v=>`${o}.${v}()`);n?this.tokens.appendCode(`, ${u.map(v=>`${v}, `).join("")}${o})`):t.staticInitializerNames.length>0&&this.tokens.appendCode(` ${u.map(v=>`${v};`).join(" ")}`)}processClassBody(t,n){let{headerInfo:o,constructorInsertPos:s,constructorInitializerStatements:r,fields:u,instanceInitializerNames:v,rangesToRemove:R}=t,A=0,K=0,X=this.tokens.currentToken().contextId;if(X==null)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(st.TokenType.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");let N=r.length+v.length>0;if(s===null&&N){let $=this.makeConstructorInitCode(r,v,n);if(o.hasSuperclass){let V=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${V}) { super(...${V}); ${$}; }`)}else this.tokens.appendCode(`constructor() { ${$}; }`)}for(;!this.tokens.matchesContextIdAndLabel(st.TokenType.braceR,X);)if(A=R[K].start){for(this.tokens.currentIndex()`${o}.prototype.${s}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(st.TokenType.parenR,st.TokenType.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,st.TokenType.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(Nk.ContextualKeyword._async)&&!this.tokens.matches1(st.TokenType._async))return!1;let t=this.tokens.tokenAtRelativeIndex(1);if(t.type!==st.TokenType.lessThan||!t.isType)return!1;let n=this.tokens.currentIndex()+1;for(;this.tokens.tokens[n].isType;)n++;if(this.tokens.matches1AtIndex(n,st.TokenType.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex(){"use strict";Fo.__esModule=!0;Fo.LinesAndColumns=void 0;var Ds=` +`,ec="\r",tc=function(){function e(t){this.string=t;for(var n=[0],o=0;othis.string.length)return null;for(var n=0,o=this.offsets;o[n+1]<=t;)n++;var s=t-o[n];return{line:n,column:s}},e.prototype.indexForLocation=function(t){var n=t.line,o=t.column;return n<0||n>=this.offsets.length||o<0||o>this.lengthOfLine(n)?null:this.offsets[n]+o},e.prototype.lengthOfLine=function(t){var n=this.offsets[t],o=t===this.offsets.length-1?this.string.length:this.offsets[t+1];return o-n},e}();Fo.LinesAndColumns=tc;Fo.default=tc});var oc=G(ni=>{"use strict";Object.defineProperty(ni,"__esModule",{value:!0});function om(e){return e&&e.__esModule?e:{default:e}}var sm=nc(),rm=om(sm),am=ye();function im(e,t){if(t.length===0)return"";let n=Object.keys(t[0]).filter(N=>N!=="type"&&N!=="value"&&N!=="start"&&N!=="end"&&N!=="loc"),o=Object.keys(t[0].type).filter(N=>N!=="label"&&N!=="keyword"),s=["Location","Label","Raw",...n,...o],r=new rm.default(e),u=[s,...t.map(R)],v=s.map(()=>0);for(let N of u)for(let $=0;$N.map(($,V)=>$.padEnd(v[V])).join(" ")).join(` +`);function R(N){let $=e.slice(N.start,N.end);return[K(N.start,N.end),am.formatTokenType.call(void 0,N.type),lm(String($),14),...n.map(V=>A(N[V],V)),...o.map(V=>A(N.type[V],V))]}function A(N,$){return N===!0?$:N===!1||N===null?"":String(N)}function K(N,$){return`${X(N)}-${X($)}`}function X(N){let $=r.locationForIndex(N);return $?`${$.line+1}:${$.column+1}`:"Unknown"}}ni.default=im;function lm(e,t){return e.length>t?`${e.slice(0,t-3)}...`:e}});var sc=G(oi=>{"use strict";Object.defineProperty(oi,"__esModule",{value:!0});function cm(e){return e&&e.__esModule?e:{default:e}}var Dt=ye(),pm=mo(),um=cm(pm);function dm(e){let t=new Set;for(let n=0;n{Object.defineProperty(jo,"__esModule",{value:!0});function qn(e){return e&&e.__esModule?e:{default:e}}var Tm=Li(),km=qn(Tm),mm=ji(),ym=qn(mm),vm=Bi(),xm=Ui(),rc=qn(xm),_m=Vi(),gm=qn(_m),wm=c1(),Im=fa(),Cm=Cl(),bm=qn(Cm),Sm=Zl(),Em=qn(Sm),Am=oc(),Pm=qn(Am),Rm=sc(),Nm=qn(Rm);function Dm(){return"3.35.1"}jo.getVersion=Dm;function Lm(e,t){wm.validateOptions.call(void 0,t);try{let n=ac(e,t),s=new Em.default(n,t.transforms,!!t.enableLegacyBabel5ModuleInterop,t).transform(),r={code:s.code};if(t.sourceMapOptions){if(!t.filePath)throw new Error("filePath must be specified when generating a source map.");r={...r,sourceMap:ym.default.call(void 0,s,t.filePath,t.sourceMapOptions,e,n.tokenProcessor.tokens)}}return r}catch(n){throw t.filePath&&(n.message=`Error transforming ${t.filePath}: ${n.message}`),n}}jo.transform=Lm;function qm(e,t){let n=ac(e,t).tokenProcessor.tokens;return Pm.default.call(void 0,e,n)}jo.getFormattedTokens=qm;function ac(e,t){let n=t.transforms.includes("jsx"),o=t.transforms.includes("typescript"),s=t.transforms.includes("flow"),r=t.disableESTransforms===!0,u=Im.parse.call(void 0,e,n,o,s),v=u.tokens,R=u.scopes,A=new gm.default(e,v),K=new vm.HelperManager(A),X=new bm.default(e,v,s,r,K),N=!!t.enableLegacyTypeScriptModuleInterop,$=null;return t.transforms.includes("imports")?($=new km.default(A,X,N,t,t.transforms.includes("typescript"),!!t.keepUnusedImports,K),$.preprocessTokens(),rc.default.call(void 0,X,R,$.getGlobalNames()),t.transforms.includes("typescript")&&!t.keepUnusedImports&&$.pruneTypeOnlyImports()):t.transforms.includes("typescript")&&!t.keepUnusedImports&&rc.default.call(void 0,X,R,Nm.default.call(void 0,X)),{tokenProcessor:X,scopes:R,nameManager:A,importProcessor:$,helperManager:K}}});return Om();})(); diff --git a/Tests/CodexBarTests/UserProviderPluginTests.swift b/Tests/CodexBarTests/UserProviderPluginTests.swift new file mode 100644 index 0000000000..b4ddf3d7ad --- /dev/null +++ b/Tests/CodexBarTests/UserProviderPluginTests.swift @@ -0,0 +1,379 @@ +#if canImport(JavaScriptCore) +import Foundation +import Testing +@testable import CodexBar +@testable import CodexBarCLI +@testable import CodexBarCore +@testable import CodexBarWidget + +@Suite(.serialized) +struct UserProviderPluginTests { + @Test + func `JavaScript plugin discovers approves fetches and produces a generic snapshot`() async throws { + let fixture = try Fixture() + defer { fixture.remove() } + let pluginURL = try fixture.write( + name: "acme.js", + source: Self.javaScriptPlugin(origin: "https://api.acme.test")) + let transport = RecordingTransport(responseJSON: #"{"used":42}"#) + let loader = fixture.loader(transport: transport) + + let results = UserProviderPluginRegistry.refresh(loader: loader) + let plugin = try #require(results.first?.plugin) + #expect(plugin.fileURL.resolvingSymlinksInPath() == pluginURL.resolvingSymlinksInPath()) + #expect(plugin.manifest.id.rawValue == "acme-meter") + #expect(plugin.manifest.icon.monogram == "AM") + #expect(plugin.manifest.icon.tint == "#336699") + + let binding = try plugin.approvalBinding(settings: [:]) + await #expect(throws: UserProviderPluginError.self) { + try await plugin.fetchUsage( + settings: [:], + secrets: ["TOKEN": "fixture-secret"], + approvalStore: fixture.approvals) + } + #expect(transport.requestCount == 0) + + try fixture.approvals.record(binding) + let snapshot = try await plugin.fetchUsage( + settings: [:], + secrets: ["TOKEN": "fixture-secret"], + approvalStore: fixture.approvals) + #expect(snapshot.primary?.usedPercent == 42) + #expect(snapshot.details.first?.rows.first?.value == "42%") + #expect(snapshot.identity?.providerID?.rawValue == "acme-meter") + #expect(transport.requestCount == 1) + #expect(transport.lastRequest?.value(forHTTPHeaderField: "Authorization") == "Bearer fixture-secret") + #expect(transport.lastRequest?.value(forHTTPHeaderField: "Accept-Encoding") == "identity") + } + + @Test + func `user plugin broker owns identity encoding and rejects compressed responses`() async throws { + let fixture = try Fixture() + defer { fixture.remove() } + let source = """ + defineProvider({ + id: "encoded-meter", + name: "Encoded Meter", + endpoints: ["https://encoded.example"], + settings: [], + async fetchUsage(ctx) { + const response = await ctx.http.getJSON("https://encoded.example/usage", { + headers: { "Accept-Encoding": "gzip" }, + }); + return { primary: { usedPercent: response.json.used } }; + }, + }); + """ + let transport = RecordingTransport( + responseJSON: #"{"used":42}"#, + responseHeaders: ["Content-Type": "application/json", "Content-Encoding": "gzip"]) + let plugin = try fixture.loader(transport: transport) + .load(fileURL: fixture.write(name: "encoded.js", source: source)) + try fixture.approvals.record(plugin.approvalBinding(settings: [:])) + + do { + _ = try await plugin.fetchUsage( + settings: [:], + secrets: [:], + approvalStore: fixture.approvals) + Issue.record("Expected compressed response rejection") + } catch { + #expect(error.localizedDescription.contains("compressed responses are not allowed")) + } + #expect(transport.lastRequest?.value(forHTTPHeaderField: "Accept-Encoding") == "identity") + } + + @Test + func `TypeScript plugin transpiles once and reuses the SHA keyed cache`() throws { + let fixture = try Fixture() + defer { fixture.remove() } + let source = """ + const percentage: number = 37; + defineProvider({ + id: "typed-meter", + name: "Typed Meter", + endpoints: ["https://typed.example"], + settings: [], + async fetchUsage(ctx: unknown) { + return { primary: { usedPercent: percentage } }; + }, + }); + """ + let url = try fixture.write(name: "typed.ts", source: source) + let loader = fixture.loader(transport: RecordingTransport(responseJSON: "{}")) + + let first = try loader.load(fileURL: url) + let second = try loader.load(fileURL: url) + + #expect(first.transpileCacheHit == false) + #expect(second.transpileCacheHit == true) + #expect(first.transpiledCacheURL == second.transpiledCacheURL) + #expect(first.transpiledCacheURL?.lastPathComponent.contains(first.sourceHash) == true) + #expect(first.manifest.id.rawValue == "typed-meter") + } + + @Test + func `collisions invalid manifests and oversized sources report per file errors`() throws { + let fixture = try Fixture() + defer { fixture.remove() } + _ = try fixture.write(name: "collision.js", source: Self.javaScriptPlugin(id: "codex")) + _ = try fixture.write(name: "invalid.js", source: "defineProvider({id: 'Bad ID'});") + let oversized = fixture.providers.appendingPathComponent("oversized.js") + try Data(repeating: UInt8(ascii: "x"), count: UserProviderPlugin.maximumSourceBytes + 1) + .write(to: oversized) + + let results = fixture.loader(transport: RecordingTransport(responseJSON: "{}")).discover() + let errors = Dictionary(uniqueKeysWithValues: results.map { ($0.fileURL.lastPathComponent, $0.error ?? "") }) + #expect(errors["collision.js"]?.contains("collides") == true) + #expect(errors["invalid.js"]?.contains("Invalid provider plugin manifest") == true) + #expect(errors["oversized.js"]?.contains("1 MiB") == true) + } + + @Test + func `undeclared cookie capability fails without invoking its resolver`() async throws { + let fixture = try Fixture() + defer { fixture.remove() } + let source = """ + defineProvider({ + id: "cookie-probe", + name: "Cookie Probe", + endpoints: ["https://cookie.example"], + settings: [], + async fetchUsage(ctx) { + await ctx.browser.cookieHeader("cookie.example"); + return { primary: { usedPercent: 1 } }; + }, + }); + """ + let plugin = try fixture.loader(transport: RecordingTransport(responseJSON: "{}")) + .load(fileURL: fixture.write(name: "cookie.js", source: source)) + let binding = try plugin.approvalBinding(settings: [:]) + try fixture.approvals.record(binding) + let access = ResolverAccess() + + await #expect(throws: ProviderPluginError.self) { + try await plugin.fetchUsage( + settings: [:], + secrets: [:], + approvalStore: fixture.approvals, + cookieResolver: { provider, domain in + await access.record(provider: provider, domain: domain) + return "session=fixture" + }) + } + #expect(await access.calls == 0) + } + + @Test + func `delete removes source cache approval secrets config and history`() throws { + let fixture = try Fixture() + defer { fixture.remove() } + let plugin = try fixture.loader(transport: RecordingTransport(responseJSON: "{}")) + .load(fileURL: fixture.write(name: "delete-me.ts", source: Self.typeScriptPlugin())) + let binding = try plugin.approvalBinding(settings: [:]) + try fixture.approvals.record(binding) + var config = CodexBarConfig(providers: [ + ProviderConfig( + id: plugin.manifest.id, + enabled: true, + pluginSettings: ["REGION": "west"], + pluginSecrets: ["TOKEN": "fixture-secret"]), + ]) + try FileManager.default.createDirectory(at: fixture.history, withIntermediateDirectories: true) + let historyURL = fixture.history.appendingPathComponent("delete-me.json") + try Data("history".utf8).write(to: historyURL) + let staleCacheURL = fixture.cache.appendingPathComponent( + "delete-me-oldhash-sucrase-\(UserProviderPluginLoader.sucraseVersion).js") + try Data("stale".utf8).write(to: staleCacheURL) + + try UserProviderPluginManager.delete( + plugin, + approvalStore: fixture.approvals, + config: &config, + historyDirectory: fixture.history) + + #expect(!FileManager.default.fileExists(atPath: plugin.fileURL.path)) + #expect(plugin.transpiledCacheURL.map { !FileManager.default.fileExists(atPath: $0.path) } == true) + #expect(!FileManager.default.fileExists(atPath: staleCacheURL.path)) + #expect(!fixture.approvals.isApproved(binding)) + #expect(config.providers.isEmpty) + #expect(!FileManager.default.fileExists(atPath: historyURL.path)) + } + + @Test + func `origin change invalidates approval before the next transport call`() async throws { + let fixture = try Fixture() + defer { fixture.remove() } + let url = try fixture.write( + name: "changing.js", + source: Self.javaScriptPlugin(origin: "https://one.example")) + let transport = RecordingTransport(responseJSON: #"{"used":9}"#) + let loader = fixture.loader(transport: transport) + let first = try loader.load(fileURL: url) + try fixture.approvals.record(first.approvalBinding(settings: [:])) + _ = try await first.fetchUsage( + settings: [:], + secrets: ["TOKEN": "fixture-secret"], + approvalStore: fixture.approvals) + #expect(transport.requestCount == 1) + + try Data(Self.javaScriptPlugin(origin: "https://two.example").utf8).write(to: url, options: .atomic) + let changed = try loader.load(fileURL: url) + await #expect(throws: UserProviderPluginError.self) { + try await changed.fetchUsage( + settings: [:], + secrets: ["TOKEN": "fixture-secret"], + approvalStore: fixture.approvals) + } + #expect(transport.requestCount == 1) + } + + @Test + func `unknown instance IDs stay inert in menu history CLI and widget surfaces`() throws { + let unknown = try #require(ProviderInstanceID(rawValue: "unknown-local-plugin")) + + #expect(UserProviderPluginRegistry.plugin(for: unknown) == nil) + #expect(SettingsPane(persistenceToken: "provider:\(unknown.rawValue)") == nil) + #expect(ProviderSelection(argument: unknown.rawValue) == nil) + #expect(ProviderChoice(rawValue: unknown.rawValue) == nil) + + let history = PlanUtilizationHistoryStore( + directoryURL: FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)) + #expect(history.load()[unknown] == nil) + } + + @Test + func `settings endpoints normalize IPv6 loopback and require typed approval`() throws { + let fixture = try Fixture() + defer { fixture.remove() } + let source = """ + defineProvider({ + id: "local-meter", + name: "Local Meter", + endpoints: [{ setting: "BASE_URL", policy: "https-or-loopback-http" }], + settings: [{ key: "BASE_URL", title: "Base URL", type: "plain" }], + fetchUsage() { return { primary: { usedPercent: 1 } }; }, + }); + """ + let plugin = try fixture.loader(transport: RecordingTransport(responseJSON: "{}")) + .load(fileURL: fixture.write(name: "local.js", source: source)) + + let binding = try plugin.approvalBinding(settings: ["BASE_URL": "http://[::1]:8080/path"]) + + #expect(binding.origins == ["http://[::1]:8080"]) + #expect(binding.typedConfirmationOrigins == binding.origins) + } + + private static func javaScriptPlugin( + id: String = "acme-meter", + origin: String = "https://api.acme.test") -> String + { + """ + defineProvider({ + id: "\(id)", + name: "Acme Meter", + icon: { monogram: "AM", tint: "#336699" }, + endpoints: ["\(origin)"], + auth: { type: "bearer", secret: "TOKEN" }, + settings: [{ key: "TOKEN", title: "API token", type: "secure" }], + async fetchUsage(ctx) { + const response = await ctx.http.getJSON("\(origin)/usage"); + const used = response.json.used; + return { + primary: { usedPercent: used }, + identity: { loginMethod: "plugin" }, + details: [{ title: "Usage", rows: [{ label: "Used", value: `${used}%` }] }], + }; + }, + }); + """ + } + + private static func typeScriptPlugin() -> String { + """ + const used: number = 12; + defineProvider({ + id: "delete-me", + name: "Delete Me", + endpoints: ["https://delete.example"], + settings: [], + fetchUsage() { return { primary: { usedPercent: used } }; }, + }); + """ + } +} + +private final class RecordingTransport: ProviderHTTPTransport, @unchecked Sendable { + private let lock = NSLock() + private let responseJSON: String + private let responseHeaders: [String: String] + private var requests: [URLRequest] = [] + + init(responseJSON: String, responseHeaders: [String: String] = ["Content-Type": "application/json"]) { + self.responseJSON = responseJSON + self.responseHeaders = responseHeaders + } + + var requestCount: Int { + self.lock.withLock { self.requests.count } + } + + var lastRequest: URLRequest? { + self.lock.withLock { self.requests.last } + } + + func data(for request: URLRequest) async throws -> (Data, URLResponse) { + self.lock.withLock { self.requests.append(request) } + let response = try HTTPURLResponse( + url: #require(request.url), + statusCode: 200, + httpVersion: nil, + headerFields: self.responseHeaders)! + return (Data(self.responseJSON.utf8), response) + } +} + +private actor ResolverAccess { + private(set) var calls = 0 + + func record(provider _: UsageProvider, domain _: String) { + self.calls += 1 + } +} + +private struct Fixture { + let root: URL + let providers: URL + let cache: URL + let history: URL + let approvals: ProviderPluginApprovalStore + + init() throws { + self.root = FileManager.default.temporaryDirectory + .appendingPathComponent("UserProviderPluginTests-\(UUID().uuidString)", isDirectory: true) + self.providers = self.root.appendingPathComponent("providers", isDirectory: true) + self.cache = self.root.appendingPathComponent("cache", isDirectory: true) + self.history = self.root.appendingPathComponent("history", isDirectory: true) + self.approvals = ProviderPluginApprovalStore(fileURL: self.root.appendingPathComponent("approvals.json")) + try FileManager.default.createDirectory(at: self.providers, withIntermediateDirectories: true) + } + + func write(name: String, source: String) throws -> URL { + let url = self.providers.appendingPathComponent(name) + try Data(source.utf8).write(to: url, options: .atomic) + return url + } + + func loader(transport: any ProviderHTTPTransport) -> UserProviderPluginLoader { + UserProviderPluginLoader( + providersDirectory: self.providers, + cacheDirectory: self.cache, + transport: transport) + } + + func remove() { + try? FileManager.default.removeItem(at: self.root) + } +} +#endif diff --git a/docs/THIRD_PARTY_LICENSES.md b/docs/THIRD_PARTY_LICENSES.md new file mode 100644 index 0000000000..057d24e89c --- /dev/null +++ b/docs/THIRD_PARTY_LICENSES.md @@ -0,0 +1,30 @@ +--- +summary: "Licenses and provenance for third-party source resources bundled with CodexBar." +read_when: + - Auditing bundled third-party resources and their licenses +--- + +# Third-party licenses + +## Sucrase 3.35.1 + +CodexBar bundles a minified browser build of [Sucrase 3.35.1](https://github.com/alangpierce/sucrase) for local +TypeScript provider plugins. The checked-in resource has SHA-256 +`4d997e15b72cbc9ccf6e743c30c6eb48bf4533f6709852367b40766be5eba70b` and carries its version/license banner. + +MIT License + +Copyright (c) 2012-present various contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/docs/custom-provider-design.md b/docs/custom-provider-design.md index 535745464c..c3a2a89d96 100644 --- a/docs/custom-provider-design.md +++ b/docs/custom-provider-design.md @@ -11,7 +11,10 @@ read_when: Status: accepted design boundary. This document defines a bounded MVP; it does not authorize runtime networking or implement the feature. -Implementation status: slice 1, the `ProviderInstanceID` runtime identity seam, has landed. +Implementation status: the `ProviderInstanceID` runtime identity seam has landed. By owner decision, the local +JavaScript/TypeScript plugin path now supersedes this document's declarative dot-path MVP. The network, secret, +approval, redirect, response-bound, and runtime-identity requirements in the threat-model table remain binding for +plugins. Issue: [#1735](https://github.com/steipete/CodexBar/issues/1735) diff --git a/docs/plugin-prototype.md b/docs/plugin-prototype.md index 72546c37e7..b9b5baa17d 100644 --- a/docs/plugin-prototype.md +++ b/docs/plugin-prototype.md @@ -8,6 +8,9 @@ read_when: # JavaScript provider-plugin prototype +This document describes the bundled first-party conversion prototype. User-installed files use the production path in +[`plugins.md`](plugins.md); they do not depend on `CODEXBAR_JS_PROVIDERS`. + This prototype proves that an existing first-party `UsageProvider` can define its manifest, HTTP requests, response parsing, and generic `UsageSnapshot` projection in one bundled JavaScript file. It is deliberately not a user-plugin system: IDs remain compile-time `UsageProvider` cases, scripts ship inside CodexBar, and the normal Swift path remains @@ -168,11 +171,12 @@ runtime needs a public interrupt API or a killable helper-process boundary befor ## Current limitations -The runtime is macOS-only and compiled out when JavaScriptCore is unavailable. It supports bundled first-party IDs and -the generic snapshot and declarative details only: no runtime identities, user-installed files, install UI, -TypeScript/Sucrase, provider-specific Swift payloads, OAuth/refresh broker, local files or databases, subprocesses, +The bundled-conversion flag is macOS-only and compiled out when JavaScriptCore is unavailable. It supports bundled +first-party IDs and the generic snapshot and declarative details only: no provider-specific Swift payloads, +OAuth/refresh broker, local files or databases, subprocesses, arbitrary/form POST bodies, PTY, WebView, binary/protobuf responses, private-network HTTP, or unvalidated dynamic -origins. Browser cookies are restricted to bundled manifests and declared domains. See +origins. The separate user-plugin path adds local `.js`/`.ts` discovery, approval, and settings without changing these +first-party flag semantics. Browser cookies remain restricted to declared domains. See [`plugin-conversion-matrix.md`](plugin-conversion-matrix.md) for the provider-by-provider impact. ## Future work diff --git a/docs/plugins.md b/docs/plugins.md new file mode 100644 index 0000000000..17cadfdcdc --- /dev/null +++ b/docs/plugins.md @@ -0,0 +1,181 @@ +--- +summary: "Authoring, installing, approving, and operating local JavaScript and TypeScript provider plugins." +read_when: + - Writing a CodexBar provider plugin + - Installing or reviewing a local provider plugin + - Debugging plugin approval, TypeScript, settings, or network behavior +--- + +# Local provider plugins + +CodexBar can load one local JavaScript or TypeScript file as a provider. Put a `.js` or `.ts` file in +`~/.config/codexbar/providers/`, or choose **Settings → Plugins → Install…**. Each file declares its complete authority +and settings schema in a manifest, fetches through CodexBar's sandboxed host API, and returns a generic usage snapshot. + +Plugins are local files only. CodexBar has no plugin catalog, does not download plugin code or assets, and does not +resolve imports. A plugin cannot use Node, browser globals, subprocesses, local files, databases, OAuth, WebViews, or +arbitrary native APIs. The maximum source size is 1 MiB. + +## Minimal plugin + +```js +defineProvider({ + id: "acme-usage", + name: "Acme Usage", + icon: { monogram: "AC", tint: "#336699" }, + endpoints: ["https://api.example.com"], + auth: { type: "bearer", secret: "API_KEY" }, + settings: [ + { key: "API_KEY", title: "API key", subtitle: "Create one in Acme settings.", type: "secure" }, + ], + async fetchUsage(ctx) { + const response = await ctx.http.getJSON("https://api.example.com/v1/usage"); + return { + primary: { + usedPercent: response.json.used_percent, + resetsAt: response.json.resets_at, + windowMinutes: 300, + }, + details: [{ + title: "Usage", + rows: [{ label: "Requests", value: String(response.json.requests) }], + }], + }; + }, +}); +``` + +## Manifest reference + +`defineProvider` must be called exactly once with an object containing: + +- `id`: 1–64 lowercase ASCII letters, digits, or hyphens. It must not match a built-in provider or another installed + plugin. +- `name`: trimmed display name, 1–80 UTF-8 bytes. +- `icon` (optional): `{monogram, tint}`. `monogram` is 1–3 characters; `tint` is `#RRGGBB`. The fallback is the first + letter of `name` with a neutral tint. File/SVG icons are not supported. +- `endpoints`: 1–16 declared network origins. A fixed endpoint is a normalized HTTPS origin such as + `https://api.example.com` (no path, query, fragment, or user info). A settings-derived endpoint is + `{setting: "BASE_URL", policy: "https"}` or `{setting: "BASE_URL", policy: "https-or-loopback-http"}`. Its setting + must be declared as `plain`. HTTP is allowed only for unauthenticated loopback targets. +- `auth` (optional): one of the forms below. The named secret must be a declared `secure` setting. +- `settings`: up to 32 setting definitions. Keys contain 1–64 ASCII letters, digits, or underscores and start with a + letter. Each entry has `key`, `title`, optional `subtitle`, and `type: "plain" | "secure"` (default `secure`). +- `capabilities` (optional): currently only `"browser-cookies"`. +- `cookieDomains`: required with `browser-cookies`; a non-empty list of normalized DNS host names. +- `fetchUsage(ctx)`: function returning a snapshot object or a promise for one. + +Authentication forms: + +```js +auth: { type: "bearer", secret: "API_KEY" } +auth: { type: "x-api-key", secret: "API_KEY" } +auth: { type: "header", header: "X-Custom-Key", secret: "API_KEY" } +auth: { type: "authorization-scheme", scheme: "Token", secret: "API_KEY" } +``` + +The host owns the authentication header; plugin request options cannot override it. Authenticated origins must be +HTTPS. Secure settings can be overridden for CLI use with +`CODEXBAR_PLUGIN__`, uppercased with non-alphanumeric characters replaced by underscores. For +example, `acme-usage` and `API_KEY` use `CODEXBAR_PLUGIN_ACME_USAGE_API_KEY`. + +## `ctx` API + +`ctx` exists only during `fetchUsage`. JavaScriptCore provides ECMAScript built-ins but no browser or Node environment; +`fetch`, `XMLHttpRequest`, timers, `require`, `process`, and filesystem APIs are unavailable. + +- `await ctx.http.getJSON(url, opts?)` performs GET and returns `{status, headers, json}`. +- `await ctx.http.get(url, opts?)` performs GET and returns `{status, headers, bodyText}`. +- `await ctx.http.postJSON(url, {body, headers?})` performs JSON POST. `body` must be JSON-serializable. +- `opts.headers` accepts string values. Plugins cannot replace their declared auth header. +- `ctx.settings.get(key)` reads a declared `plain` setting. +- `ctx.settings.getSecret(key)` reads a declared `secure` setting. Missing values return `null`; kind mismatches and + undeclared keys throw. +- `await ctx.browser.cookieHeader(domain)` returns a cookie header only with the `browser-cookies` capability and for a + declared domain. The app imports from Chrome only. Cookie values are secret-equivalent and redacted. +- `ctx.html.metaContent(html, name)` returns the first matching quoted meta value or `null`. +- `ctx.html.matchFirst(html, regexSource, flags?)` returns the first capture/full match or `null`. +- `ctx.log(...values)` writes to the instance-scoped plugin log. Known secrets and cookie values are redacted. +- `ctx.cache.get(key)` and `ctx.cache.set(key, value, ttlSeconds)` provide a per-runtime memory cache. TTL is capped at + 24 hours. +- `ctx.date.iso(text)`, `unixSeconds(number)`, and `unixMillis(number)` create JavaScript dates. +- `ctx.date.nextDailyReset(timeZoneIdentifier, hour)` returns the next wall-clock reset in an IANA time zone. +- `ctx.jwt.decode(token)` decodes (but does not authenticate) a JWT JSON payload. +- `ctx.pct(used, limit)` returns a finite percentage clamped to 0–100; non-positive limits map to 100. + +User-plugin requests run in an ephemeral session with no ambient cookies, credential store, or URL cache. Redirects are +rejected, the timeout is 15 seconds, `Accept-Encoding: identity` is sent, compressed and non-2xx responses fail, and +response bytes are capped at 1 MiB. Request URLs must match a declared, approved origin. + +## Snapshot result + +Return at least one rate window, cost object, or detail section: + +```js +return { + primary: { usedPercent: 25, resetsAt: new Date(), windowMinutes: 300 }, + secondary: { usedPercent: 40, resetsAt: "2026-08-10T00:00:00Z", windowMinutes: 10080 }, + tertiary: { usedPercent: 5 }, + extraWindows: [{ id: "daily", title: "Daily", window: { usedPercent: 12 } }], + cost: { used: 8.5, limit: 20, currency: "USD", period: "This month", balance: 11.5 }, + identity: { email: "user@example.com", organization: "Acme", loginMethod: "API key", accountID: "123" }, + subscriptionRenewsAt: "2026-09-01T00:00:00Z", + details: [{ + title: "Usage summary", + rows: [{ label: "Requests", value: "1,240", secondaryValue: "Last 30 days" }], + chart: { + kind: "bars", // bars | line + title: "Daily spend", + unit: "USD", + points: [{ label: "2026-08-01", value: 4.25 }], + }, + }], +}; +``` + +Percentages must be finite and are clamped to 0–100. Window minutes are positive integers. Cost requires finite `used` +and a three-letter uppercase currency. Dates are JavaScript `Date` values or ISO-8601 strings. Snapshot identity is +always scoped to the manifest's instance ID. Details allow at most 8 sections, 24 rows per section, 120 chart points, +and 120 characters per detail string. Wrong types and limit violations fail the whole fetch instead of truncating it. + +## TypeScript + +TypeScript files are transpiled with the bundled Sucrase 3.35.1 build using its `typescript` transform. Use ordinary +type syntax but no module imports, JSX, decorators, or runtime TypeScript features that require module resolution. +Transpiled output is cached in `~/Library/Caches/CodexBar/plugins/` under a filename containing the SHA-256 of the source +and the Sucrase version. An unchanged file is a cache hit; any source or compiler-version change produces a new key. +Transpile failures appear as that plugin's Settings error. + +## Install, approve, run, and delete + +1. Open **Settings → Plugins** and choose **Install…**, or copy one `.js`/`.ts` file into the providers directory. +2. CodexBar validates the source and manifest without network, file, cookie, or secret capabilities. +3. The approval sheet lists exact normalized origins, auth mode, capabilities, secure setting names, and cookie domains. +4. For loopback, IP-literal, or `.local` origins, type every normalized origin exactly before approval. +5. Enter manifest settings and enable the plugin. Its refresh result appears in its generic menu card. + +Approval records live outside plugin files under `~/Library/Application Support/CodexBar/plugin-approvals.json`. A +change to instance ID, normalized origins, auth mode/header, secure setting names, capabilities, or cookie domains +invalidates approval before the next request. There is no bulk approval or import path. + +`codexbar plugins list` shows locally discovered plugins. `codexbar plugins fetch ` displays the same approval +fields and can approve only from an interactive terminal; redirected/headless input fails closed. Browser-cookie plugins +are app-only and fail closed in the CLI. + +Delete from Settings with **Delete…**. CodexBar removes the plugin file, matching TypeScript cache output, approval, +per-instance settings and secrets, and per-instance usage history. Invalid plugin files are listed with their validation +error and can also be deleted. + +## Security and limitations + +Treat a plugin like code you run locally, even though its host capabilities are narrow. Read the manifest and source, +verify every origin, and avoid installing files from untrusted repositories. Approval grants the listed origin network +authority; DNS changes after approval are outside CodexBar's threat model. Secrets are never placed in URLs or logged, +redirects cannot forward authentication, and undeclared settings/cookies/origins fail closed. + +Plugins support the macOS app and macOS CLI only. They are excluded from widgets and all built-in-provider-only +surfaces (status feeds, token accounts, OAuth, browser automation, storage probes, local cost scanners, and provider +specific payloads). Rendering is limited to generic snapshots and declarative details. There are no remote catalogs, +downloaded plugins/assets, custom SVGs, imports, arbitrary local I/O, or compatibility fallback from an unknown ID to a +built-in provider. +