UNPKG

@rohitkvs/revrag-web-sdk

Version:

Industry-standard React SDK for Revrag chat functionality with simple script integration. Zero setup required - just include a script tag!

1,517 lines 74.3 kB
var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); import require$$0, { useState, useRef, useEffect } from "react"; class RevragSDK { constructor(config) { __publicField(this, "config"); __publicField(this, "isInitialized", false); this.config = { baseUrl: "https://api.revrag.com", debug: false, ...config }; } /** * Initialize the SDK */ async init() { if (this.config.debug) { console.log("Initializing Revrag SDK...", this.config); } try { await this.validateApiKey(); this.isInitialized = true; if (this.config.debug) { console.log("Revrag SDK initialized successfully"); } } catch (error) { throw new Error(`Failed to initialize Revrag SDK: ${error}`); } } /** * Send a message and get response */ async sendMessage(content) { if (!this.isInitialized) { throw new Error("SDK not initialized. Call init() first."); } try { if (this.config.debug) { console.log("Sending message:", content); } const response = await this.makeApiCall("/chat", { method: "POST", body: JSON.stringify({ message: content }) }); return { success: true, data: response }; } catch (error) { if (this.config.debug) { console.error("Error sending message:", error); } return { success: false, error: error instanceof Error ? error.message : "Unknown error" }; } } /** * Get chat history */ async getChatHistory() { if (!this.isInitialized) { throw new Error("SDK not initialized. Call init() first."); } return [ { id: "1", content: "Hello, how can I help you?", timestamp: /* @__PURE__ */ new Date(), type: "assistant" }, { id: "2", content: "I need help with my project", timestamp: /* @__PURE__ */ new Date(), type: "user" } ]; } /** * Clear chat history */ async clearHistory() { if (!this.isInitialized) { throw new Error("SDK not initialized. Call init() first."); } try { await this.makeApiCall("/chat/clear", { method: "DELETE" }); return { success: true }; } catch (error) { return { success: false, error: error instanceof Error ? error.message : "Unknown error" }; } } /** * Get SDK status */ getStatus() { return { initialized: this.isInitialized, config: { baseUrl: this.config.baseUrl, debug: this.config.debug, hasApiKey: !!this.config.apiKey } }; } async validateApiKey() { if (!this.config.apiKey) { throw new Error("API key is required"); } await new Promise((resolve) => setTimeout(resolve, 500)); if (this.config.apiKey === "invalid") { throw new Error("Invalid API key"); } } async makeApiCall(endpoint, options) { const url = `${this.config.baseUrl}${endpoint}`; const response = await fetch(url, { ...options, headers: { "Content-Type": "application/json", "Authorization": `Bearer ${this.config.apiKey}`, ...options.headers } }); if (!response.ok) { throw new Error(`API call failed: ${response.statusText}`); } return response.json(); } } function createRevragSDK(config) { return new RevragSDK(config); } const RevragErrorCode = { INVALID_API_KEY: "INVALID_API_KEY", NETWORK_ERROR: "NETWORK_ERROR", TIMEOUT_ERROR: "TIMEOUT_ERROR", RATE_LIMIT_ERROR: "RATE_LIMIT_ERROR", VALIDATION_ERROR: "VALIDATION_ERROR", SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE", UNKNOWN_ERROR: "UNKNOWN_ERROR" }; class RevragError extends Error { constructor(code, message, details, requestId) { super(message); __publicField(this, "code"); __publicField(this, "details"); __publicField(this, "timestamp"); __publicField(this, "requestId"); this.name = "RevragError"; this.code = code; this.details = details; this.timestamp = /* @__PURE__ */ new Date(); this.requestId = requestId; const ErrorConstructor = Error; if (ErrorConstructor.captureStackTrace) { ErrorConstructor.captureStackTrace(this, RevragError); } } /** * Convert error to JSON for serialization */ toJSON() { return { code: this.code, message: this.message, details: this.details, stack: this.stack }; } /** * Check if error is of specific type */ is(code) { return this.code === code; } /** * Create error from unknown error */ static fromError(error, code = RevragErrorCode.UNKNOWN_ERROR) { if (error instanceof RevragError) { return error; } if (error instanceof Error) { return new RevragError(code, error.message, { originalError: error.message }); } return new RevragError(code, String(error)); } /** * Factory methods for common error types */ static invalidApiKey(message = "Invalid API key provided") { return new RevragError(RevragErrorCode.INVALID_API_KEY, message); } static networkError(message = "Network request failed", details) { return new RevragError(RevragErrorCode.NETWORK_ERROR, message, details); } static timeoutError(message = "Request timed out", timeout) { return new RevragError(RevragErrorCode.TIMEOUT_ERROR, message, { timeout }); } static rateLimitError(message = "Rate limit exceeded", retryAfter) { return new RevragError(RevragErrorCode.RATE_LIMIT_ERROR, message, { retryAfter }); } static validationError(message, field) { return new RevragError(RevragErrorCode.VALIDATION_ERROR, message, { field }); } static serviceUnavailable(message = "Service temporarily unavailable") { return new RevragError(RevragErrorCode.SERVICE_UNAVAILABLE, message); } } class RevragEventEmitter { constructor(maxListeners = 100) { __publicField(this, "regularListeners", /* @__PURE__ */ new Map()); __publicField(this, "onceListeners", /* @__PURE__ */ new Map()); __publicField(this, "maxListeners"); this.maxListeners = maxListeners; } on(event, listener) { this.addListener(event, listener, false); } off(event, listener) { this.removeListener(event, listener); } emit(event, ...args) { const listeners = this.regularListeners.get(event); if (listeners && listeners.size > 0) { listeners.forEach((listener) => { try { listener(...args); } catch (error) { setTimeout(() => { this.emit("error", error); }, 0); } }); } const onceListeners = this.onceListeners.get(event); if (onceListeners && onceListeners.size > 0) { const listenersArray = Array.from(onceListeners); onceListeners.clear(); listenersArray.forEach((listener) => { try { listener(...args); } catch (error) { setTimeout(() => { this.emit("error", error); }, 0); } }); } } once(event, listener) { this.addListener(event, listener, true); } /** * Remove all listeners for an event or all events */ removeAllListeners(event) { if (event) { this.regularListeners.delete(event); this.onceListeners.delete(event); } else { this.regularListeners.clear(); this.onceListeners.clear(); } } /** * Get listener count for an event */ listenerCount(event) { var _a, _b; const regularCount = ((_a = this.regularListeners.get(event)) == null ? void 0 : _a.size) || 0; const onceCount = ((_b = this.onceListeners.get(event)) == null ? void 0 : _b.size) || 0; return regularCount + onceCount; } /** * Get all event names that have listeners */ eventNames() { const regularEvents = Array.from(this.regularListeners.keys()); const onceEvents = Array.from(this.onceListeners.keys()); return [.../* @__PURE__ */ new Set([...regularEvents, ...onceEvents])]; } /** * Get listeners for an event */ listeners(event) { const regularListeners = Array.from(this.regularListeners.get(event) || []); const onceListeners = Array.from(this.onceListeners.get(event) || []); return [...regularListeners, ...onceListeners]; } /** * Set maximum number of listeners per event */ setMaxListeners(maxListeners) { this.maxListeners = maxListeners; return this; } /** * Get maximum number of listeners per event */ getMaxListeners() { return this.maxListeners; } /** * Private method to add listener with once support */ addListener(event, listener, once) { const targetMap = once ? this.onceListeners : this.regularListeners; if (!targetMap.has(event)) { targetMap.set(event, /* @__PURE__ */ new Set()); } const eventListeners = targetMap.get(event); if (eventListeners.size >= this.maxListeners) { console.warn( `Warning: Possible EventEmitter memory leak detected. ${eventListeners.size + 1} listeners added for event "${event}". Use setMaxListeners() to increase limit.` ); } eventListeners.add(listener); } /** * Private method to remove listener */ removeListener(event, listener) { const regularListeners = this.regularListeners.get(event); if (regularListeners) { regularListeners.delete(listener); if (regularListeners.size === 0) { this.regularListeners.delete(event); } } const onceListeners = this.onceListeners.get(event); if (onceListeners) { onceListeners.delete(listener); if (onceListeners.size === 0) { this.onceListeners.delete(event); } } } } class PluginManager { constructor() { __publicField(this, "plugins", /* @__PURE__ */ new Map()); __publicField(this, "sdk", null); } /** * Set SDK reference for plugin initialization */ setSdk(sdk) { this.sdk = sdk; } /** * Register a plugin */ async registerPlugin(plugin) { this.validatePlugin(plugin); if (this.plugins.has(plugin.name)) { throw new RevragError( "PLUGIN_ALREADY_EXISTS", `Plugin "${plugin.name}" is already registered` ); } try { if (plugin.initialize && this.sdk) { await plugin.initialize(this.sdk); } this.plugins.set(plugin.name, plugin); if (this.sdk) { this.sdk.emit("plugin:registered", plugin); } } catch (error) { throw new RevragError( "PLUGIN_INITIALIZATION_FAILED", `Failed to initialize plugin "${plugin.name}": ${error instanceof Error ? error.message : String(error)}` ); } } /** * Unregister a plugin */ async unregisterPlugin(name) { const plugin = this.plugins.get(name); if (!plugin) { throw new RevragError( "PLUGIN_NOT_FOUND", `Plugin "${name}" is not registered` ); } try { if (plugin.destroy) { await plugin.destroy(); } this.plugins.delete(name); if (this.sdk) { this.sdk.emit("plugin:unregistered", name); } } catch (error) { throw new RevragError( "PLUGIN_DESTRUCTION_FAILED", `Failed to destroy plugin "${name}": ${error instanceof Error ? error.message : String(error)}` ); } } /** * Get a plugin by name */ getPlugin(name) { return this.plugins.get(name); } /** * List all registered plugins */ listPlugins() { return Array.from(this.plugins.values()); } /** * Validate plugin structure */ validatePlugin(plugin) { if (!plugin.name || typeof plugin.name !== "string") { throw new RevragError("INVALID_PLUGIN", "Plugin must have a valid name"); } if (!plugin.version || typeof plugin.version !== "string") { throw new RevragError("INVALID_PLUGIN", "Plugin must have a valid version"); } } } class RevragApiService { constructor(config) { __publicField(this, "baseUrl"); __publicField(this, "defaultHeaders"); __publicField(this, "timeout"); __publicField(this, "retryAttempts"); __publicField(this, "requestInterceptors", []); __publicField(this, "responseInterceptors", []); var _a, _b; this.baseUrl = config.baseUrl || "https://api.revrag.com"; this.timeout = config.timeout || 3e4; this.retryAttempts = config.retryAttempts || 3; this.defaultHeaders = { "Content-Type": "application/json", "Authorization": `Bearer ${config.apiKey}`, "User-Agent": "Revrag-SDK/1.0.0" }; if ((_a = config.interceptors) == null ? void 0 : _a.request) { this.requestInterceptors.push(...config.interceptors.request); } if ((_b = config.interceptors) == null ? void 0 : _b.response) { this.responseInterceptors.push(...config.interceptors.response); } } /** * Generic request method with full configuration */ async request(endpoint, options = {}) { const url = this.buildUrl(endpoint); const requestId = this.generateRequestId(); try { const config = await this.applyRequestInterceptors({ ...options, headers: { ...this.defaultHeaders, ...options.headers }, timeout: options.timeout || this.timeout, retries: options.retries || this.retryAttempts, metadata: { ...options.metadata, requestId, timestamp: /* @__PURE__ */ new Date() } }); const response = await this.executeWithRetry(url, config); return await this.applyResponseInterceptors(response); } catch (error) { const revragError = RevragError.fromError(error); return { success: false, error: revragError.toJSON(), metadata: { timestamp: /* @__PURE__ */ new Date(), requestId } }; } } /** * GET request */ async get(endpoint, config) { return this.request(endpoint, { ...config, method: "GET" }); } /** * POST request */ async post(endpoint, data, config) { return this.request(endpoint, { ...config, method: "POST", body: data ? JSON.stringify(data) : void 0 }); } /** * PUT request */ async put(endpoint, data, config) { return this.request(endpoint, { ...config, method: "PUT", body: data ? JSON.stringify(data) : void 0 }); } /** * DELETE request */ async delete(endpoint, config) { return this.request(endpoint, { ...config, method: "DELETE" }); } /** * Add request interceptor */ addRequestInterceptor(interceptor) { this.requestInterceptors.push(interceptor); } /** * Add response interceptor */ addResponseInterceptor(interceptor) { this.responseInterceptors.push(interceptor); } /** * Remove request interceptor */ removeRequestInterceptor(interceptor) { const index = this.requestInterceptors.indexOf(interceptor); if (index > -1) { this.requestInterceptors.splice(index, 1); } } /** * Remove response interceptor */ removeResponseInterceptor(interceptor) { const index = this.responseInterceptors.indexOf(interceptor); if (index > -1) { this.responseInterceptors.splice(index, 1); } } /** * Update configuration */ updateConfig(config) { if (config.baseUrl) { this.baseUrl = config.baseUrl; } if (config.timeout !== void 0) { this.timeout = config.timeout; } if (config.retryAttempts !== void 0) { this.retryAttempts = config.retryAttempts; } if (config.apiKey) { this.defaultHeaders["Authorization"] = `Bearer ${config.apiKey}`; } } /** * Private: Build full URL */ buildUrl(endpoint) { if (endpoint.startsWith("http")) { return endpoint; } return `${this.baseUrl.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`; } /** * Private: Generate unique request ID */ generateRequestId() { return `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; } /** * Private: Apply request interceptors */ async applyRequestInterceptors(config) { let result = config; for (const interceptor of this.requestInterceptors) { result = await interceptor(result); } return result; } /** * Private: Apply response interceptors */ async applyResponseInterceptors(response) { let result = response; for (const interceptor of this.responseInterceptors) { result = await interceptor(result); } return result; } /** * Private: Execute request with retry logic */ async executeWithRetry(url, config) { const maxRetries = config.retries || 0; let lastError = null; for (let attempt = 0; attempt <= maxRetries; attempt++) { try { if (attempt > 0) { const delay = Math.min(1e3 * Math.pow(2, attempt - 1), 1e4); await this.delay(delay); } const response = await this.executeRequest(url, config); return response; } catch (error) { lastError = error instanceof Error ? error : new Error(String(error)); if (this.shouldNotRetry(lastError) || attempt === maxRetries) { throw lastError; } } } throw lastError; } /** * Private: Execute single HTTP request */ async executeRequest(url, config) { var _a; const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), config.timeout || this.timeout); try { const response = await fetch(url, { ...config, signal: controller.signal }); clearTimeout(timeoutId); if (!response.ok) { throw await this.createHttpError(response); } const data = await response.json(); return { success: true, data, metadata: { timestamp: /* @__PURE__ */ new Date(), requestId: (_a = config.metadata) == null ? void 0 : _a.requestId } }; } catch (error) { clearTimeout(timeoutId); if (error instanceof Error && error.name === "AbortError") { throw RevragError.timeoutError("Request timed out", config.timeout || this.timeout); } throw error; } } /** * Private: Create HTTP error from response */ async createHttpError(response) { let errorData; try { errorData = await response.json(); } catch { errorData = await response.text(); } const statusCode = response.status; const statusText = response.statusText; switch (statusCode) { case 401: return RevragError.invalidApiKey(`Authentication failed: ${statusText}`); case 429: { const retryAfter = response.headers.get("Retry-After"); return RevragError.rateLimitError( `Rate limit exceeded: ${statusText}`, retryAfter ? parseInt(retryAfter, 10) : void 0 ); } case 503: return RevragError.serviceUnavailable(`Service unavailable: ${statusText}`); default: return RevragError.networkError( `HTTP ${statusCode}: ${statusText}`, { statusCode, statusText, data: errorData } ); } } /** * Private: Check if error should not be retried */ shouldNotRetry(error) { if (error instanceof RevragError) { return error.code === RevragErrorCode.INVALID_API_KEY || error.code === RevragErrorCode.VALIDATION_ERROR; } return false; } /** * Private: Delay helper for retry backoff */ delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } } var jsxRuntime = { exports: {} }; var reactJsxRuntime_production_min = {}; /** * @license React * react-jsx-runtime.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var hasRequiredReactJsxRuntime_production_min; function requireReactJsxRuntime_production_min() { if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min; hasRequiredReactJsxRuntime_production_min = 1; var f = require$$0, k = Symbol.for("react.element"), l = Symbol.for("react.fragment"), m = Object.prototype.hasOwnProperty, n = f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p = { key: true, ref: true, __self: true, __source: true }; function q(c, a, g) { var b, d = {}, e = null, h = null; void 0 !== g && (e = "" + g); void 0 !== a.key && (e = "" + a.key); void 0 !== a.ref && (h = a.ref); for (b in a) m.call(a, b) && !p.hasOwnProperty(b) && (d[b] = a[b]); if (c && c.defaultProps) for (b in a = c.defaultProps, a) void 0 === d[b] && (d[b] = a[b]); return { $$typeof: k, type: c, key: e, ref: h, props: d, _owner: n.current }; } reactJsxRuntime_production_min.Fragment = l; reactJsxRuntime_production_min.jsx = q; reactJsxRuntime_production_min.jsxs = q; return reactJsxRuntime_production_min; } var reactJsxRuntime_development = {}; /** * @license React * react-jsx-runtime.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var hasRequiredReactJsxRuntime_development; function requireReactJsxRuntime_development() { if (hasRequiredReactJsxRuntime_development) return reactJsxRuntime_development; hasRequiredReactJsxRuntime_development = 1; if (process.env.NODE_ENV !== "production") { (function() { var React = require$$0; var REACT_ELEMENT_TYPE = Symbol.for("react.element"); var REACT_PORTAL_TYPE = Symbol.for("react.portal"); var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); var REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"); var REACT_PROFILER_TYPE = Symbol.for("react.profiler"); var REACT_PROVIDER_TYPE = Symbol.for("react.provider"); var REACT_CONTEXT_TYPE = Symbol.for("react.context"); var REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"); var REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"); var REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"); var REACT_MEMO_TYPE = Symbol.for("react.memo"); var REACT_LAZY_TYPE = Symbol.for("react.lazy"); var REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"); var MAYBE_ITERATOR_SYMBOL = Symbol.iterator; var FAUX_ITERATOR_SYMBOL = "@@iterator"; function getIteratorFn(maybeIterable) { if (maybeIterable === null || typeof maybeIterable !== "object") { return null; } var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; if (typeof maybeIterator === "function") { return maybeIterator; } return null; } var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; function error(format) { { { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } printWarning("error", format, args); } } } function printWarning(level, format, args) { { var ReactDebugCurrentFrame2 = ReactSharedInternals.ReactDebugCurrentFrame; var stack = ReactDebugCurrentFrame2.getStackAddendum(); if (stack !== "") { format += "%s"; args = args.concat([stack]); } var argsWithFormat = args.map(function(item) { return String(item); }); argsWithFormat.unshift("Warning: " + format); Function.prototype.apply.call(console[level], console, argsWithFormat); } } var enableScopeAPI = false; var enableCacheElement = false; var enableTransitionTracing = false; var enableLegacyHidden = false; var enableDebugTracing = false; var REACT_MODULE_REFERENCE; { REACT_MODULE_REFERENCE = Symbol.for("react.module.reference"); } function isValidElementType(type) { if (typeof type === "string" || typeof type === "function") { return true; } if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) { return true; } if (typeof type === "object" && type !== null) { if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object // types supported by any Flight configuration anywhere since // we don't know which Flight build this will end up being used // with. type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== void 0) { return true; } } return false; } function getWrappedName(outerType, innerType, wrapperName) { var displayName = outerType.displayName; if (displayName) { return displayName; } var functionName = innerType.displayName || innerType.name || ""; return functionName !== "" ? wrapperName + "(" + functionName + ")" : wrapperName; } function getContextName(type) { return type.displayName || "Context"; } function getComponentNameFromType(type) { if (type == null) { return null; } { if (typeof type.tag === "number") { error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."); } } if (typeof type === "function") { return type.displayName || type.name || null; } if (typeof type === "string") { return type; } switch (type) { case REACT_FRAGMENT_TYPE: return "Fragment"; case REACT_PORTAL_TYPE: return "Portal"; case REACT_PROFILER_TYPE: return "Profiler"; case REACT_STRICT_MODE_TYPE: return "StrictMode"; case REACT_SUSPENSE_TYPE: return "Suspense"; case REACT_SUSPENSE_LIST_TYPE: return "SuspenseList"; } if (typeof type === "object") { switch (type.$$typeof) { case REACT_CONTEXT_TYPE: var context = type; return getContextName(context) + ".Consumer"; case REACT_PROVIDER_TYPE: var provider = type; return getContextName(provider._context) + ".Provider"; case REACT_FORWARD_REF_TYPE: return getWrappedName(type, type.render, "ForwardRef"); case REACT_MEMO_TYPE: var outerName = type.displayName || null; if (outerName !== null) { return outerName; } return getComponentNameFromType(type.type) || "Memo"; case REACT_LAZY_TYPE: { var lazyComponent = type; var payload = lazyComponent._payload; var init = lazyComponent._init; try { return getComponentNameFromType(init(payload)); } catch (x) { return null; } } } } return null; } var assign = Object.assign; var disabledDepth = 0; var prevLog; var prevInfo; var prevWarn; var prevError; var prevGroup; var prevGroupCollapsed; var prevGroupEnd; function disabledLog() { } disabledLog.__reactDisabledLog = true; function disableLogs() { { if (disabledDepth === 0) { prevLog = console.log; prevInfo = console.info; prevWarn = console.warn; prevError = console.error; prevGroup = console.group; prevGroupCollapsed = console.groupCollapsed; prevGroupEnd = console.groupEnd; var props = { configurable: true, enumerable: true, value: disabledLog, writable: true }; Object.defineProperties(console, { info: props, log: props, warn: props, error: props, group: props, groupCollapsed: props, groupEnd: props }); } disabledDepth++; } } function reenableLogs() { { disabledDepth--; if (disabledDepth === 0) { var props = { configurable: true, enumerable: true, writable: true }; Object.defineProperties(console, { log: assign({}, props, { value: prevLog }), info: assign({}, props, { value: prevInfo }), warn: assign({}, props, { value: prevWarn }), error: assign({}, props, { value: prevError }), group: assign({}, props, { value: prevGroup }), groupCollapsed: assign({}, props, { value: prevGroupCollapsed }), groupEnd: assign({}, props, { value: prevGroupEnd }) }); } if (disabledDepth < 0) { error("disabledDepth fell below zero. This is a bug in React. Please file an issue."); } } } var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; var prefix; function describeBuiltInComponentFrame(name, source, ownerFn) { { if (prefix === void 0) { try { throw Error(); } catch (x) { var match = x.stack.trim().match(/\n( *(at )?)/); prefix = match && match[1] || ""; } } return "\n" + prefix + name; } } var reentry = false; var componentFrameCache; { var PossiblyWeakMap = typeof WeakMap === "function" ? WeakMap : Map; componentFrameCache = new PossiblyWeakMap(); } function describeNativeComponentFrame(fn, construct) { if (!fn || reentry) { return ""; } { var frame = componentFrameCache.get(fn); if (frame !== void 0) { return frame; } } var control; reentry = true; var previousPrepareStackTrace = Error.prepareStackTrace; Error.prepareStackTrace = void 0; var previousDispatcher; { previousDispatcher = ReactCurrentDispatcher.current; ReactCurrentDispatcher.current = null; disableLogs(); } try { if (construct) { var Fake = function() { throw Error(); }; Object.defineProperty(Fake.prototype, "props", { set: function() { throw Error(); } }); if (typeof Reflect === "object" && Reflect.construct) { try { Reflect.construct(Fake, []); } catch (x) { control = x; } Reflect.construct(fn, [], Fake); } else { try { Fake.call(); } catch (x) { control = x; } fn.call(Fake.prototype); } } else { try { throw Error(); } catch (x) { control = x; } fn(); } } catch (sample) { if (sample && control && typeof sample.stack === "string") { var sampleLines = sample.stack.split("\n"); var controlLines = control.stack.split("\n"); var s = sampleLines.length - 1; var c = controlLines.length - 1; while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { c--; } for (; s >= 1 && c >= 0; s--, c--) { if (sampleLines[s] !== controlLines[c]) { if (s !== 1 || c !== 1) { do { s--; c--; if (c < 0 || sampleLines[s] !== controlLines[c]) { var _frame = "\n" + sampleLines[s].replace(" at new ", " at "); if (fn.displayName && _frame.includes("<anonymous>")) { _frame = _frame.replace("<anonymous>", fn.displayName); } { if (typeof fn === "function") { componentFrameCache.set(fn, _frame); } } return _frame; } } while (s >= 1 && c >= 0); } break; } } } } finally { reentry = false; { ReactCurrentDispatcher.current = previousDispatcher; reenableLogs(); } Error.prepareStackTrace = previousPrepareStackTrace; } var name = fn ? fn.displayName || fn.name : ""; var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ""; { if (typeof fn === "function") { componentFrameCache.set(fn, syntheticFrame); } } return syntheticFrame; } function describeFunctionComponentFrame(fn, source, ownerFn) { { return describeNativeComponentFrame(fn, false); } } function shouldConstruct(Component) { var prototype = Component.prototype; return !!(prototype && prototype.isReactComponent); } function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { if (type == null) { return ""; } if (typeof type === "function") { { return describeNativeComponentFrame(type, shouldConstruct(type)); } } if (typeof type === "string") { return describeBuiltInComponentFrame(type); } switch (type) { case REACT_SUSPENSE_TYPE: return describeBuiltInComponentFrame("Suspense"); case REACT_SUSPENSE_LIST_TYPE: return describeBuiltInComponentFrame("SuspenseList"); } if (typeof type === "object") { switch (type.$$typeof) { case REACT_FORWARD_REF_TYPE: return describeFunctionComponentFrame(type.render); case REACT_MEMO_TYPE: return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); case REACT_LAZY_TYPE: { var lazyComponent = type; var payload = lazyComponent._payload; var init = lazyComponent._init; try { return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); } catch (x) { } } } } return ""; } var hasOwnProperty = Object.prototype.hasOwnProperty; var loggedTypeFailures = {}; var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; function setCurrentlyValidatingElement(element) { { if (element) { var owner = element._owner; var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); ReactDebugCurrentFrame.setExtraStackFrame(stack); } else { ReactDebugCurrentFrame.setExtraStackFrame(null); } } } function checkPropTypes(typeSpecs, values, location, componentName, element) { { var has = Function.call.bind(hasOwnProperty); for (var typeSpecName in typeSpecs) { if (has(typeSpecs, typeSpecName)) { var error$1 = void 0; try { if (typeof typeSpecs[typeSpecName] !== "function") { var err = Error((componentName || "React class") + ": " + location + " type `" + typeSpecName + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + typeof typeSpecs[typeSpecName] + "`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`."); err.name = "Invariant Violation"; throw err; } error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"); } catch (ex) { error$1 = ex; } if (error$1 && !(error$1 instanceof Error)) { setCurrentlyValidatingElement(element); error("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).", componentName || "React class", location, typeSpecName, typeof error$1); setCurrentlyValidatingElement(null); } if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { loggedTypeFailures[error$1.message] = true; setCurrentlyValidatingElement(element); error("Failed %s type: %s", location, error$1.message); setCurrentlyValidatingElement(null); } } } } } var isArrayImpl = Array.isArray; function isArray(a) { return isArrayImpl(a); } function typeName(value) { { var hasToStringTag = typeof Symbol === "function" && Symbol.toStringTag; var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; return type; } } function willCoercionThrow(value) { { try { testStringCoercion(value); return false; } catch (e) { return true; } } } function testStringCoercion(value) { return "" + value; } function checkKeyStringCoercion(value) { { if (willCoercionThrow(value)) { error("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.", typeName(value)); return testStringCoercion(value); } } } var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; var RESERVED_PROPS = { key: true, ref: true, __self: true, __source: true }; var specialPropKeyWarningShown; var specialPropRefWarningShown; function hasValidRef(config) { { if (hasOwnProperty.call(config, "ref")) { var getter = Object.getOwnPropertyDescriptor(config, "ref").get; if (getter && getter.isReactWarning) { return false; } } } return config.ref !== void 0; } function hasValidKey(config) { { if (hasOwnProperty.call(config, "key")) { var getter = Object.getOwnPropertyDescriptor(config, "key").get; if (getter && getter.isReactWarning) { return false; } } } return config.key !== void 0; } function warnIfStringRefCannotBeAutoConverted(config, self) { { if (typeof config.ref === "string" && ReactCurrentOwner.current && self) ; } } function defineKeyPropWarningGetter(props, displayName) { { var warnAboutAccessingKey = function() { if (!specialPropKeyWarningShown) { specialPropKeyWarningShown = true; error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", displayName); } }; warnAboutAccessingKey.isReactWarning = true; Object.defineProperty(props, "key", { get: warnAboutAccessingKey, configurable: true }); } } function defineRefPropWarningGetter(props, displayName) { { var warnAboutAccessingRef = function() { if (!specialPropRefWarningShown) { specialPropRefWarningShown = true; error("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", displayName); } }; warnAboutAccessingRef.isReactWarning = true; Object.defineProperty(props, "ref", { get: warnAboutAccessingRef, configurable: true }); } } var ReactElement = function(type, key, ref, self, source, owner, props) { var element = { // This tag allows us to uniquely identify this as a React Element $$typeof: REACT_ELEMENT_TYPE, // Built-in properties that belong on the element type, key, ref, props, // Record the component responsible for creating this element. _owner: owner }; { element._store = {}; Object.defineProperty(element._store, "validated", { configurable: false, enumerable: false, writable: true, value: false }); Object.defineProperty(element, "_self", { configurable: false, enumerable: false, writable: false, value: self }); Object.defineProperty(element, "_source", { configurable: false, enumerable: false, writable: false, value: source }); if (Object.freeze) { Object.freeze(element.props); Object.freeze(element); } } return element; }; function jsxDEV(type, config, maybeKey, source, self) { { var propName; var props = {}; var key = null; var ref = null; if (maybeKey !== void 0) { { checkKeyStringCoercion(maybeKey); } key = "" + maybeKey; } if (hasValidKey(config)) { { checkKeyStringCoercion(config.key); } key = "" + config.key; } if (hasValidRef(config)) { ref = config.ref; warnIfStringRefCannotBeAutoConverted(config, self); } for (propName in config) { if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { props[propName] = config[propName]; } } if (type && type.defaultProps) { var defaultProps = type.defaultProps; for (propName in defaultProps) { if (props[propName] === void 0) { props[propName] = defaultProps[propName]; } } } if (key || ref) { var displayName = typeof type === "function" ? type.displayName || type.name || "Unknown" : type; if (key) { defineKeyPropWarningGetter(props, displayName); } if (ref) { defineRefPropWarningGetter(props, displayName); } } return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); } } var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; function setCurrentlyValidatingElement$1(element) { { if (element) { var owner = element._owner; var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); ReactDebugCurrentFrame$1.setExtraStackFrame(stack); } else { ReactDebugCurrentFrame$1.setExtraStackFrame(null); } } } var propTypesMisspellWarningShown; { propTypesMisspellWarningShown = false; } function isValidElement(object) { { return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } } function getDeclarationErrorAddendum() { { if (ReactCurrentOwner$1.current) { var name = getComponentNameFromType(ReactCurrentOwner$1.current.type); if (name) { return "\n\nCheck the render method of `" + name + "`."; } } return ""; } } function getSourceInfoErrorAddendum(source) { { return ""; } } var ownerHasKeyUseWarning = {}; function getCurrentComponentErrorInfo(parentType) { { var info = getDeclarationErrorAddendum(); if (!info) { var parentName = typeof parentType === "string" ? parentType : parentType.displayName || parentType.name; if (parentName) { info = "\n\nCheck the top-level render call using <" + parentName + ">."; } } return info; } } function validateExplicitKey(element, parentType) { { if (!element._store || element._store.validated || element.key != null) { return; } element._store.validated = true; var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { return; } ownerHasKeyUseWarning[currentComponentErrorInfo] = true; var childOwner = ""; if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) { childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + "."; } setCurrentlyValidatingElement$1(element); error('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); setCurrentlyValidatingElement$1(null); } } function validateChildKeys(node, parentType) { { if (typeof node !== "object") { return; } if (isArray(node)) { for (var i = 0; i < node.length; i++) { var child = node[i]; if (isValidElement(child)) { validateExplicitKey(child, parentType); } } } else if (isValidElement(node)) { if (node._store) { node._store.validated = true; } } else if (node) { var iteratorFn = getIteratorFn(node); if (typeof iteratorFn === "function") { if (iteratorFn !== node.entries) { var iterator = iteratorFn.call(node); var step; while (!(step = iterator.next()).done) { if (isValidElement(step.value)) { validateExplicitKey(step.value, parentType); } } } } } } } function validatePropTypes(element) { { var type = element.type; if (type === null || type === void 0 || typeof type === "string") { return; } var propTypes; if (typeof type === "function") { propTypes = type.propTypes; } else if (typeof type === "object" && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. // Inner props are checked in the reconciler. type.$$typeof === REACT_MEMO_TYPE)) { propTypes = type.propTypes; } else { return; } if (propTypes) { var name = getComponentNameFromType(type); checkPropTypes(propTy