1 line
32 KiB
Plaintext
1 line
32 KiB
Plaintext
{"version":3,"file":"index.node.cjs.js","sources":["../src/api/error.ts","../src/context.ts","../src/serializer.ts","../src/api/service.ts","../src/config.ts","../index.node.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { HttpsError, FunctionsErrorCode } from '@firebase/functions-types';\nimport { Serializer } from '../serializer';\nimport { HttpResponseBody } from './service';\n\n/**\n * Standard error codes for different ways a request can fail, as defined by:\n * https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\n *\n * This map is used primarily to convert from a backend error code string to\n * a client SDK error code string, and make sure it's in the supported set.\n */\nconst errorCodeMap: { [name: string]: FunctionsErrorCode } = {\n OK: 'ok',\n CANCELLED: 'cancelled',\n UNKNOWN: 'unknown',\n INVALID_ARGUMENT: 'invalid-argument',\n DEADLINE_EXCEEDED: 'deadline-exceeded',\n NOT_FOUND: 'not-found',\n ALREADY_EXISTS: 'already-exists',\n PERMISSION_DENIED: 'permission-denied',\n UNAUTHENTICATED: 'unauthenticated',\n RESOURCE_EXHAUSTED: 'resource-exhausted',\n FAILED_PRECONDITION: 'failed-precondition',\n ABORTED: 'aborted',\n OUT_OF_RANGE: 'out-of-range',\n UNIMPLEMENTED: 'unimplemented',\n INTERNAL: 'internal',\n UNAVAILABLE: 'unavailable',\n DATA_LOSS: 'data-loss'\n};\n\n/**\n * An explicit error that can be thrown from a handler to send an error to the\n * client that called the function.\n */\nexport class HttpsErrorImpl extends Error implements HttpsError {\n /**\n * A standard error code that will be returned to the client. This also\n * determines the HTTP status code of the response, as defined in code.proto.\n */\n readonly code: FunctionsErrorCode;\n\n /**\n * Extra data to be converted to JSON and included in the error response.\n */\n readonly details?: unknown;\n\n constructor(code: FunctionsErrorCode, message?: string, details?: unknown) {\n super(message);\n\n // This is a workaround for a bug in TypeScript when extending Error:\n // tslint:disable-next-line\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, HttpsErrorImpl.prototype);\n\n this.code = code;\n this.details = details;\n }\n}\n\n/**\n * Takes an HTTP status code and returns the corresponding ErrorCode.\n * This is the standard HTTP status code -> error mapping defined in:\n * https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\n *\n * @param status An HTTP status code.\n * @return The corresponding ErrorCode, or ErrorCode.UNKNOWN if none.\n */\nfunction codeForHTTPStatus(status: number): FunctionsErrorCode {\n // Make sure any successful status is OK.\n if (status >= 200 && status < 300) {\n return 'ok';\n }\n switch (status) {\n case 0:\n // This can happen if the server returns 500.\n return 'internal';\n case 400:\n return 'invalid-argument';\n case 401:\n return 'unauthenticated';\n case 403:\n return 'permission-denied';\n case 404:\n return 'not-found';\n case 409:\n return 'aborted';\n case 429:\n return 'resource-exhausted';\n case 499:\n return 'cancelled';\n case 500:\n return 'internal';\n case 501:\n return 'unimplemented';\n case 503:\n return 'unavailable';\n case 504:\n return 'deadline-exceeded';\n default: // ignore\n }\n return 'unknown';\n}\n\n/**\n * Takes an HTTP response and returns the corresponding Error, if any.\n */\nexport function _errorForResponse(\n status: number,\n bodyJSON: HttpResponseBody | null,\n serializer: Serializer\n): Error | null {\n let code = codeForHTTPStatus(status);\n\n // Start with reasonable defaults from the status code.\n let description: string = code;\n\n let details: unknown = undefined;\n\n // Then look through the body for explicit details.\n try {\n const errorJSON = bodyJSON && bodyJSON.error;\n if (errorJSON) {\n const status = errorJSON.status;\n if (typeof status === 'string') {\n if (!errorCodeMap[status]) {\n // They must've included an unknown error code in the body.\n return new HttpsErrorImpl('internal', 'internal');\n }\n code = errorCodeMap[status];\n\n // TODO(klimt): Add better default descriptions for error enums.\n // The default description needs to be updated for the new code.\n description = status;\n }\n\n const message = errorJSON.message;\n if (typeof message === 'string') {\n description = message;\n }\n\n details = errorJSON.details;\n if (details !== undefined) {\n details = serializer.decode(details as {} | null);\n }\n }\n } catch (e) {\n // If we couldn't parse explicit error data, that's fine.\n }\n\n if (code === 'ok') {\n // Technically, there's an edge case where a developer could explicitly\n // return an error code of OK, and we will treat it as success, but that\n // seems reasonable.\n return null;\n }\n\n return new HttpsErrorImpl(code, description, details);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { _FirebaseApp } from '@firebase/app-types/private';\nimport {\n FirebaseMessaging,\n FirebaseMessagingName\n} from '@firebase/messaging-types';\nimport {\n FirebaseAuthInternal,\n FirebaseAuthInternalName\n} from '@firebase/auth-interop-types';\nimport { Provider } from '@firebase/component';\n\n/**\n * The metadata that should be supplied with function calls.\n */\nexport interface Context {\n authToken?: string;\n instanceIdToken?: string;\n}\n\n/**\n * Helper class to get metadata that should be included with a function call.\n */\nexport class ContextProvider {\n private auth: FirebaseAuthInternal | null = null;\n private messaging: FirebaseMessaging | null = null;\n constructor(\n authProvider: Provider<FirebaseAuthInternalName>,\n messagingProvider: Provider<FirebaseMessagingName>\n ) {\n this.auth = authProvider.getImmediate({ optional: true });\n this.messaging = messagingProvider.getImmediate({\n optional: true\n });\n\n if (!this.auth) {\n authProvider.get().then(\n auth => (this.auth = auth),\n () => {\n /* get() never rejects */\n }\n );\n }\n\n if (!this.messaging) {\n messagingProvider.get().then(\n messaging => (this.messaging = messaging),\n () => {\n /* get() never rejects */\n }\n );\n }\n }\n\n async getAuthToken(): Promise<string | undefined> {\n if (!this.auth) {\n return undefined;\n }\n\n try {\n const token = await this.auth.getToken();\n if (!token) {\n return undefined;\n }\n return token.accessToken;\n } catch (e) {\n // If there's any error when trying to get the auth token, leave it off.\n return undefined;\n }\n }\n\n async getInstanceIdToken(): Promise<string | undefined> {\n if (\n !this.messaging ||\n !('Notification' in self) ||\n Notification.permission !== 'granted'\n ) {\n return undefined;\n }\n\n try {\n return this.messaging.getToken();\n } catch (e) {\n // We don't warn on this, because it usually means messaging isn't set up.\n // console.warn('Failed to retrieve instance id token.', e);\n\n // If there's any error when trying to get the token, leave it off.\n return undefined;\n }\n }\n\n async getContext(): Promise<Context> {\n const authToken = await this.getAuthToken();\n const instanceIdToken = await this.getInstanceIdToken();\n return { authToken, instanceIdToken };\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst LONG_TYPE = 'type.googleapis.com/google.protobuf.Int64Value';\nconst UNSIGNED_LONG_TYPE = 'type.googleapis.com/google.protobuf.UInt64Value';\n\nfunction mapValues(\n // { [k: string]: unknown } is no longer a wildcard assignment target after typescript 3.5\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n o: { [key: string]: any },\n f: (arg0: unknown) => unknown\n): object {\n const result: { [key: string]: unknown } = {};\n for (const key in o) {\n if (o.hasOwnProperty(key)) {\n result[key] = f(o[key]);\n }\n }\n return result;\n}\n\nexport class Serializer {\n // Takes data and encodes it in a JSON-friendly way, such that types such as\n // Date are preserved.\n encode(data: unknown): unknown {\n if (data == null) {\n return null;\n }\n if (data instanceof Number) {\n data = data.valueOf();\n }\n if (typeof data === 'number' && isFinite(data)) {\n // Any number in JS is safe to put directly in JSON and parse as a double\n // without any loss of precision.\n return data;\n }\n if (data === true || data === false) {\n return data;\n }\n if (Object.prototype.toString.call(data) === '[object String]') {\n return data;\n }\n if (Array.isArray(data)) {\n return data.map(x => this.encode(x));\n }\n if (typeof data === 'function' || typeof data === 'object') {\n return mapValues(data as object, x => this.encode(x));\n }\n // If we got this far, the data is not encodable.\n throw new Error('Data cannot be encoded in JSON: ' + data);\n }\n\n // Takes data that's been encoded in a JSON-friendly form and returns a form\n // with richer datatypes, such as Dates, etc.\n decode(json: unknown): unknown {\n if (json == null) {\n return json;\n }\n if ((json as { [key: string]: unknown })['@type']) {\n switch ((json as { [key: string]: unknown })['@type']) {\n case LONG_TYPE:\n // Fall through and handle this the same as unsigned.\n case UNSIGNED_LONG_TYPE: {\n // Technically, this could work return a valid number for malformed\n // data if there was a number followed by garbage. But it's just not\n // worth all the extra code to detect that case.\n const value = Number((json as { [key: string]: unknown })['value']);\n if (isNaN(value)) {\n throw new Error('Data cannot be decoded from JSON: ' + json);\n }\n return value;\n }\n default: {\n throw new Error('Data cannot be decoded from JSON: ' + json);\n }\n }\n }\n if (Array.isArray(json)) {\n return json.map(x => this.decode(x));\n }\n if (typeof json === 'function' || typeof json === 'object') {\n return mapValues(json as object, x => this.decode(x as {} | null));\n }\n // Anything else is safe to return.\n return json;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp } from '@firebase/app-types';\nimport { FirebaseService } from '@firebase/app-types/private';\nimport {\n FirebaseFunctions,\n HttpsCallable,\n HttpsCallableResult,\n HttpsCallableOptions\n} from '@firebase/functions-types';\nimport { _errorForResponse, HttpsErrorImpl } from './error';\nimport { ContextProvider } from '../context';\nimport { Serializer } from '../serializer';\nimport { Provider } from '@firebase/component';\nimport { FirebaseAuthInternalName } from '@firebase/auth-interop-types';\nimport { FirebaseMessagingName } from '@firebase/messaging-types';\n\n/**\n * The response to an http request.\n */\ninterface HttpResponse {\n status: number;\n json: HttpResponseBody | null;\n}\n/**\n * Describes the shape of the HttpResponse body.\n * It makes functions that would otherwise take {} able to access the\n * possible elements in the body more easily\n */\nexport interface HttpResponseBody {\n data?: unknown;\n result?: unknown;\n error?: {\n message?: unknown;\n status?: unknown;\n details?: unknown;\n };\n}\n\n/**\n * Returns a Promise that will be rejected after the given duration.\n * The error will be of type HttpsErrorImpl.\n *\n * @param millis Number of milliseconds to wait before rejecting.\n */\nfunction failAfter(millis: number): Promise<never> {\n return new Promise((_, reject) => {\n setTimeout(() => {\n reject(new HttpsErrorImpl('deadline-exceeded', 'deadline-exceeded'));\n }, millis);\n });\n}\n\n/**\n * The main class for the Firebase Functions SDK.\n */\nexport class Service implements FirebaseFunctions, FirebaseService {\n private readonly contextProvider: ContextProvider;\n private readonly serializer = new Serializer();\n private emulatorOrigin: string | null = null;\n private cancelAllRequests: Promise<void>;\n private deleteService!: Function;\n\n /**\n * Creates a new Functions service for the given app and (optional) region.\n * @param app_ The FirebaseApp to use.\n * @param region_ The region to call functions in.\n */\n constructor(\n private app_: FirebaseApp,\n authProvider: Provider<FirebaseAuthInternalName>,\n messagingProvider: Provider<FirebaseMessagingName>,\n private region_: string = 'us-central1'\n ) {\n this.contextProvider = new ContextProvider(authProvider, messagingProvider);\n // Cancels all ongoing requests when resolved.\n this.cancelAllRequests = new Promise(resolve => {\n this.deleteService = () => {\n return resolve();\n };\n });\n }\n\n get app(): FirebaseApp {\n return this.app_;\n }\n\n INTERNAL = {\n delete: (): Promise<void> => {\n return this.deleteService();\n }\n };\n\n /**\n * Returns the URL for a callable with the given name.\n * @param name The name of the callable.\n */\n _url(name: string): string {\n const projectId = this.app_.options.projectId;\n const region = this.region_;\n if (this.emulatorOrigin !== null) {\n const origin = this.emulatorOrigin;\n return `${origin}/${projectId}/${region}/${name}`;\n }\n return `https://${region}-${projectId}.cloudfunctions.net/${name}`;\n }\n\n /**\n * Changes this instance to point to a Cloud Functions emulator running\n * locally. See https://firebase.google.com/docs/functions/local-emulator\n *\n * @param origin The origin of the local emulator, such as\n * \"http://localhost:5005\".\n */\n useFunctionsEmulator(origin: string): void {\n this.emulatorOrigin = origin;\n }\n\n /**\n * Returns a reference to the callable https trigger with the given name.\n * @param name The name of the trigger.\n */\n httpsCallable(name: string, options?: HttpsCallableOptions): HttpsCallable {\n return data => {\n return this.call(name, data, options || {});\n };\n }\n\n /**\n * Does an HTTP POST and returns the completed response.\n * @param url The url to post to.\n * @param body The JSON body of the post.\n * @param headers The HTTP headers to include in the request.\n * @return A Promise that will succeed when the request finishes.\n */\n private async postJSON(\n url: string,\n body: {},\n headers: Headers\n ): Promise<HttpResponse> {\n headers.append('Content-Type', 'application/json');\n\n let response: Response;\n try {\n response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(body),\n headers\n });\n } catch (e) {\n // This could be an unhandled error on the backend, or it could be a\n // network error. There's no way to know, since an unhandled error on the\n // backend will fail to set the proper CORS header, and thus will be\n // treated as a network error by fetch.\n return {\n status: 0,\n json: null\n };\n }\n let json: {} | null = null;\n try {\n json = await response.json();\n } catch (e) {\n // If we fail to parse JSON, it will fail the same as an empty body.\n }\n return {\n status: response.status,\n json\n };\n }\n\n /**\n * Calls a callable function asynchronously and returns the result.\n * @param name The name of the callable trigger.\n * @param data The data to pass as params to the function.s\n */\n private async call(\n name: string,\n data: unknown,\n options: HttpsCallableOptions\n ): Promise<HttpsCallableResult> {\n const url = this._url(name);\n\n // Encode any special types, such as dates, in the input data.\n data = this.serializer.encode(data);\n const body = { data };\n\n // Add a header for the authToken.\n const headers = new Headers();\n const context = await this.contextProvider.getContext();\n if (context.authToken) {\n headers.append('Authorization', 'Bearer ' + context.authToken);\n }\n if (context.instanceIdToken) {\n headers.append('Firebase-Instance-ID-Token', context.instanceIdToken);\n }\n\n // Default timeout to 70s, but let the options override it.\n const timeout = options.timeout || 70000;\n\n const response = await Promise.race([\n this.postJSON(url, body, headers),\n failAfter(timeout),\n this.cancelAllRequests\n ]);\n\n // If service was deleted, interrupted response throws an error.\n if (!response) {\n throw new HttpsErrorImpl(\n 'cancelled',\n 'Firebase Functions instance was deleted.'\n );\n }\n\n // Check for an error status, regardless of http status.\n const error = _errorForResponse(\n response.status,\n response.json,\n this.serializer\n );\n if (error) {\n throw error;\n }\n\n if (!response.json) {\n throw new HttpsErrorImpl(\n 'internal',\n 'Response is not valid JSON object.'\n );\n }\n\n let responseData = response.json.data;\n // TODO(klimt): For right now, allow \"result\" instead of \"data\", for\n // backwards compatibility.\n if (typeof responseData === 'undefined') {\n responseData = response.json.result;\n }\n if (typeof responseData === 'undefined') {\n // Consider the response malformed.\n throw new HttpsErrorImpl('internal', 'Response is missing data field.');\n }\n\n // Decode any special types, such as dates, in the returned data.\n const decodedData = this.serializer.decode(responseData as {} | null);\n\n return { data: decodedData };\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Service } from './api/service';\nimport {\n Component,\n ComponentType,\n ComponentContainer\n} from '@firebase/component';\nimport { _FirebaseNamespace } from '@firebase/app-types/private';\n\n/**\n * Type constant for Firebase Functions.\n */\nconst FUNCTIONS_TYPE = 'functions';\n\nfunction factory(container: ComponentContainer, region?: string): Service {\n // Dependencies\n const app = container.getProvider('app').getImmediate();\n const authProvider = container.getProvider('auth-internal');\n const messagingProvider = container.getProvider('messaging');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new Service(app, authProvider, messagingProvider, region);\n}\n\nexport function registerFunctions(instance: _FirebaseNamespace): void {\n const namespaceExports = {\n // no-inline\n Functions: Service\n };\n instance.INTERNAL.registerComponent(\n new Component(FUNCTIONS_TYPE, factory, ComponentType.PUBLIC)\n .setServiceProps(namespaceExports)\n .setMultipleInstances(true)\n );\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport firebase from '@firebase/app';\nimport { _FirebaseNamespace } from '@firebase/app-types/private';\nimport { registerFunctions } from './src/config';\nimport 'isomorphic-fetch';\n\nimport { name, version } from './package.json';\n\nregisterFunctions(firebase as _FirebaseNamespace);\nfirebase.registerVersion(name, version, 'node');\n"],"names":["__extends","Component"],"mappings":";;;;;;;;;AAAA;;;;;;;;;;;;;;;;AAqBA;;;;;;;AAOA,IAAM,YAAY,GAA2C;IAC3D,EAAE,EAAE,IAAI;IACR,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF;;;;AAIA;IAAoCA,wCAAK;IAYvC,wBAAY,IAAwB,EAAE,OAAgB,EAAE,OAAiB;QAAzE,YACE,kBAAM,OAAO,CAAC,SASf;;;;QAJC,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QAEtD,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;KACxB;IACH,qBAAC;AAAD,CAvBA,CAAoC,KAAK,GAuBxC;AAED;;;;;;;;AAQA,SAAS,iBAAiB,CAAC,MAAc;;IAEvC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE;QACjC,OAAO,IAAI,CAAC;KACb;IACD,QAAQ,MAAM;QACZ,KAAK,CAAC;;YAEJ,OAAO,UAAU,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,kBAAkB,CAAC;QAC5B,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,mBAAmB,CAAC;QAC7B,KAAK,GAAG;YACN,OAAO,WAAW,CAAC;QACrB,KAAK,GAAG;YACN,OAAO,SAAS,CAAC;QACnB,KAAK,GAAG;YACN,OAAO,oBAAoB,CAAC;QAC9B,KAAK,GAAG;YACN,OAAO,WAAW,CAAC;QACrB,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,eAAe,CAAC;QACzB,KAAK,GAAG;YACN,OAAO,aAAa,CAAC;QACvB,KAAK,GAAG;YACN,OAAO,mBAAmB,CAAC;KAE9B;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;SAGgB,iBAAiB,CAC/B,MAAc,EACd,QAAiC,EACjC,UAAsB;IAEtB,IAAI,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;;IAGrC,IAAI,WAAW,GAAW,IAAI,CAAC;IAE/B,IAAI,OAAO,GAAY,SAAS,CAAC;;IAGjC,IAAI;QACF,IAAM,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC;QAC7C,IAAI,SAAS,EAAE;YACb,IAAM,QAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAI,OAAO,QAAM,KAAK,QAAQ,EAAE;gBAC9B,IAAI,CAAC,YAAY,CAAC,QAAM,CAAC,EAAE;;oBAEzB,OAAO,IAAI,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBACnD;gBACD,IAAI,GAAG,YAAY,CAAC,QAAM,CAAC,CAAC;;;gBAI5B,WAAW,GAAG,QAAM,CAAC;aACtB;YAED,IAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAClC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,WAAW,GAAG,OAAO,CAAC;aACvB;YAED,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC5B,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAoB,CAAC,CAAC;aACnD;SACF;KACF;IAAC,OAAO,CAAC,EAAE;;KAEX;IAED,IAAI,IAAI,KAAK,IAAI,EAAE;;;;QAIjB,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACxD;;AC5IA;;;AAGA;IAGE,yBACE,YAAgD,EAChD,iBAAkD;QAFpD,iBA0BC;QA5BO,SAAI,GAAgC,IAAI,CAAC;QACzC,cAAS,GAA6B,IAAI,CAAC;QAKjD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC;YAC9C,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CACrB,UAAA,IAAI,IAAI,QAAC,KAAI,CAAC,IAAI,GAAG,IAAI,IAAC,EAC1B;;aAEC,CACF,CAAC;SACH;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAC1B,UAAA,SAAS,IAAI,QAAC,KAAI,CAAC,SAAS,GAAG,SAAS,IAAC,EACzC;;aAEC,CACF,CAAC;SACH;KACF;IAEK,sCAAY,GAAlB;;;;;;wBACE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;4BACd,sBAAO,SAAS,EAAC;yBAClB;;;;wBAGe,qBAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAA;;wBAAlC,KAAK,GAAG,SAA0B;wBACxC,IAAI,CAAC,KAAK,EAAE;4BACV,sBAAO,SAAS,EAAC;yBAClB;wBACD,sBAAO,KAAK,CAAC,WAAW,EAAC;;;;wBAGzB,sBAAO,SAAS,EAAC;;;;;KAEpB;IAEK,4CAAkB,GAAxB;;;gBACE,IACE,CAAC,IAAI,CAAC,SAAS;oBACf,EAAE,cAAc,IAAI,IAAI,CAAC;oBACzB,YAAY,CAAC,UAAU,KAAK,SAAS,EACrC;oBACA,sBAAO,SAAS,EAAC;iBAClB;gBAED,IAAI;oBACF,sBAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAC;iBAClC;gBAAC,OAAO,CAAC,EAAE;;;;oBAKV,sBAAO,SAAS,EAAC;iBAClB;;;;KACF;IAEK,oCAAU,GAAhB;;;;;4BACoB,qBAAM,IAAI,CAAC,YAAY,EAAE,EAAA;;wBAArC,SAAS,GAAG,SAAyB;wBACnB,qBAAM,IAAI,CAAC,kBAAkB,EAAE,EAAA;;wBAAjD,eAAe,GAAG,SAA+B;wBACvD,sBAAO,EAAE,SAAS,WAAA,EAAE,eAAe,iBAAA,EAAE,EAAC;;;;KACvC;IACH,sBAAC;AAAD,CAAC;;AC/GD;;;;;;;;;;;;;;;;AAiBA,IAAM,SAAS,GAAG,gDAAgD,CAAC;AACnE,IAAM,kBAAkB,GAAG,iDAAiD,CAAC;AAE7E,SAAS,SAAS;AAChB;AACA;AACA,CAAyB,EACzB,CAA6B;IAE7B,IAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,KAAK,IAAM,GAAG,IAAI,CAAC,EAAE;QACnB,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACzB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;IAAA;KAiEC;;;IA9DC,2BAAM,GAAN,UAAO,IAAa;QAApB,iBA0BC;QAzBC,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,IAAI,YAAY,MAAM,EAAE;YAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;;;YAG9C,OAAO,IAAI,CAAC;SACb;QACD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;YACnC,OAAO,IAAI,CAAC;SACb;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB,EAAE;YAC9D,OAAO,IAAI,CAAC;SACb;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;SACtC;QACD,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1D,OAAO,SAAS,CAAC,IAAc,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;SACvD;;QAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,CAAC,CAAC;KAC5D;;;IAID,2BAAM,GAAN,UAAO,IAAa;QAApB,iBA+BC;QA9BC,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,IAAK,IAAmC,CAAC,OAAO,CAAC,EAAE;YACjD,QAAS,IAAmC,CAAC,OAAO,CAAC;gBACnD,KAAK,SAAS,CAAC;;gBAEf,KAAK,kBAAkB,EAAE;;;;oBAIvB,IAAM,KAAK,GAAG,MAAM,CAAE,IAAmC,CAAC,OAAO,CAAC,CAAC,CAAC;oBACpE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;qBAC9D;oBACD,OAAO,KAAK,CAAC;iBACd;gBACD,SAAS;oBACP,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;iBAC9D;aACF;SACF;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;SACtC;QACD,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1D,OAAO,SAAS,CAAC,IAAc,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,MAAM,CAAC,CAAc,CAAC,GAAA,CAAC,CAAC;SACpE;;QAED,OAAO,IAAI,CAAC;KACb;IACH,iBAAC;AAAD,CAAC;;ACpGD;;;;;;;;;;;;;;;;AAsDA;;;;;;AAMA,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,IAAI,OAAO,CAAC,UAAC,CAAC,EAAE,MAAM;QAC3B,UAAU,CAAC;YACT,MAAM,CAAC,IAAI,cAAc,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC;SACtE,EAAE,MAAM,CAAC,CAAC;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;AAGA;;;;;;IAYE,iBACU,IAAiB,EACzB,YAAgD,EAChD,iBAAkD,EAC1C,OAA+B;QAJzC,iBAaC;QATS,wBAAA,EAAA,uBAA+B;QAH/B,SAAI,GAAJ,IAAI,CAAa;QAGjB,YAAO,GAAP,OAAO,CAAwB;QAdxB,eAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACvC,mBAAc,GAAkB,IAAI,CAAC;QA4B7C,aAAQ,GAAG;YACT,MAAM,EAAE;gBACN,OAAO,KAAI,CAAC,aAAa,EAAE,CAAC;aAC7B;SACF,CAAC;QAjBA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;;QAE5E,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAC,UAAA,OAAO;YAC1C,KAAI,CAAC,aAAa,GAAG;gBACnB,OAAO,OAAO,EAAE,CAAC;aAClB,CAAC;SACH,CAAC,CAAC;KACJ;IAED,sBAAI,wBAAG;aAAP;YACE,OAAO,IAAI,CAAC,IAAI,CAAC;SAClB;;;OAAA;;;;;IAYD,sBAAI,GAAJ,UAAK,IAAY;QACf,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9C,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;YAChC,IAAM,QAAM,GAAG,IAAI,CAAC,cAAc,CAAC;YACnC,OAAU,QAAM,SAAI,SAAS,SAAI,MAAM,SAAI,IAAM,CAAC;SACnD;QACD,OAAO,aAAW,MAAM,SAAI,SAAS,4BAAuB,IAAM,CAAC;KACpE;;;;;;;;IASD,sCAAoB,GAApB,UAAqB,MAAc;QACjC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;KAC9B;;;;;IAMD,+BAAa,GAAb,UAAc,IAAY,EAAE,OAA8B;QAA1D,iBAIC;QAHC,OAAO,UAAA,IAAI;YACT,OAAO,KAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;SAC7C,CAAC;KACH;;;;;;;;IASa,0BAAQ,GAAtB,UACE,GAAW,EACX,IAAQ,EACR,OAAgB;;;;;;wBAEhB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;;;;wBAItC,qBAAM,KAAK,CAAC,GAAG,EAAE;gCAC1B,MAAM,EAAE,MAAM;gCACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gCAC1B,OAAO,SAAA;6BACR,CAAC,EAAA;;wBAJF,QAAQ,GAAG,SAIT,CAAC;;;;;;;;wBAMH,sBAAO;gCACL,MAAM,EAAE,CAAC;gCACT,IAAI,EAAE,IAAI;6BACX,EAAC;;wBAEA,IAAI,GAAc,IAAI,CAAC;;;;wBAElB,qBAAM,QAAQ,CAAC,IAAI,EAAE,EAAA;;wBAA5B,IAAI,GAAG,SAAqB,CAAC;;;;;4BAI/B,sBAAO;4BACL,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,IAAI,MAAA;yBACL,EAAC;;;;KACH;;;;;;IAOa,sBAAI,GAAlB,UACE,IAAY,EACZ,IAAa,EACb,OAA6B;;;;;;wBAEvB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;wBAG5B,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC9B,IAAI,GAAG,EAAE,IAAI,MAAA,EAAE,CAAC;wBAGhB,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;wBACd,qBAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAA;;wBAAjD,OAAO,GAAG,SAAuC;wBACvD,IAAI,OAAO,CAAC,SAAS,EAAE;4BACrB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;yBAChE;wBACD,IAAI,OAAO,CAAC,eAAe,EAAE;4BAC3B,OAAO,CAAC,MAAM,CAAC,4BAA4B,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;yBACvE;wBAGK,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;wBAExB,qBAAM,OAAO,CAAC,IAAI,CAAC;gCAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;gCACjC,SAAS,CAAC,OAAO,CAAC;gCAClB,IAAI,CAAC,iBAAiB;6BACvB,CAAC,EAAA;;wBAJI,QAAQ,GAAG,SAIf;;wBAGF,IAAI,CAAC,QAAQ,EAAE;4BACb,MAAM,IAAI,cAAc,CACtB,WAAW,EACX,0CAA0C,CAC3C,CAAC;yBACH;wBAGK,KAAK,GAAG,iBAAiB,CAC7B,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,IAAI,EACb,IAAI,CAAC,UAAU,CAChB,CAAC;wBACF,IAAI,KAAK,EAAE;4BACT,MAAM,KAAK,CAAC;yBACb;wBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;4BAClB,MAAM,IAAI,cAAc,CACtB,UAAU,EACV,oCAAoC,CACrC,CAAC;yBACH;wBAEG,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;wBAGtC,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;4BACvC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;yBACrC;wBACD,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;;4BAEvC,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,iCAAiC,CAAC,CAAC;yBACzE;wBAGK,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAyB,CAAC,CAAC;wBAEtE,sBAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAC;;;;KAC9B;IACH,cAAC;AAAD,CAAC;;ACtQD;;;;;;;;;;;;;;;;AAyBA;;;AAGA,IAAM,cAAc,GAAG,WAAW,CAAC;AAEnC,SAAS,OAAO,CAAC,SAA6B,EAAE,MAAe;;IAE7D,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC;IACxD,IAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC5D,IAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;;IAG7D,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;SAEe,iBAAiB,CAAC,QAA4B;IAC5D,IAAM,gBAAgB,GAAG;;QAEvB,SAAS,EAAE,OAAO;KACnB,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CACjC,IAAIC,mBAAS,CAAC,cAAc,EAAE,OAAO,wBAAuB;SACzD,eAAe,CAAC,gBAAgB,CAAC;SACjC,oBAAoB,CAAC,IAAI,CAAC,CAC9B,CAAC;AACJ;;;;;AClDA;;;;;;;;;;;;;;;;AAuBA,iBAAiB,CAAC,QAA8B,CAAC,CAAC;AAClD,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC"} |